那今天要做的是discord的投票系統,參考了比較主流的pollbot。
先看一下成果:輸入poll指令後,如果有參數就以參數作為投票題目,沒有就提醒用戶輸入參數。
實作起來很簡單,主要是展示一下在當前框架下的寫法。
下面是是非題的code。
cmds/poll.js
module.exports={
name: 'poll',
description: '',
aliases: ['poll'],
async execute(msg, args, cmd, client, Discord){
const Embed = new Discord.MessageEmbed()
.setColor('#5B00AE')
.setTitle('投票時間!')
if(cmd === 'poll'){
if(!args[0]){
msg.channel.send(Embed.setDescription('請輸入作為題目的參數!'));
}else{
msg.channel.send(Embed.setDescription(args)).then(message => {
message.react("👍");
message.react("👎");
});
}
}
}
}
透過 discord 的 message embed 可以讓訊息達成引用的效果,而反應(react)要在訊息發送後才能添加。
再來先看到如何實現多選投票。
cmds/multipoll.js
const letter = ['1️⃣','2️⃣','3️⃣','4️⃣','5️⃣','6️⃣','7️⃣','8️⃣','9️⃣','🔟'];
module.exports={
name: 'multipoll',
description: '',
aliases: ['multipoll'],
cooldown: 0,
async execute(msg, args, cmd, client, Discord){
const Embed = new Discord.MessageEmbed()
.setColor('#5B00AE')
.setTitle('投票時間!');
if(cmd == 'multipoll'){
if(!args[0]) msg.channel.send(Embed.setDescription('請輸入作為題目的參數!'));
else if(!args[1]) msg.channel.send(Embed.setDescription('請輸入題目的選項!'));
else if(args.length > 11) msg.channel.send(Embed.setDescription('目前只支持10個選項!'));
else{
Embed.setDescription(args[0]);
let count;
for(count=1; count<args.length; count++) Embed.addFields({name: letter[count-1], value: args[count]});
msg.channel.send(Embed).then(message => {
for(i=0; i<count-1; i++) message.react(letter[i]);
});
}
}
}
}
恩,對,其實兩個本來是寫在一起的。
multipoll 的 code 其實跟剛才那個差不多,但因為會給用戶輸入選項,而且選項只有10個,所以要做邊緣測試。(Emoji的數字只到10......) 程式碼裡那串條件判斷就是邊緣測試,我覺得應該還可以再優化。
就是這樣,我們完成了最基本的投票機器人,但說實話,這並沒有什麼意義,因為我根本沒怎麼在DC開投票......