[DC機器人] 投票系統

那今天要做的是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開投票......

附錄

Discord.js 官方 Embed 文件

按讚

發佈留言

%d 位部落客按了讚: