[DC機器人] 選擇身分組

選擇身分組的功能應該是所有伺服器中,最喜歡的一個功能。

他能夠讓伺服器管理員不用再一個一個給用戶添加身分組。

首先還是先看一下效果:

按下狗狗之後就如願獲得身分組(可見暱稱變成黃色)

cmds/reactionrole.js
module.exports = {
    name: 'reactionrole',
    discription: '依反應設定用戶組',
    cooldown: 0,
    aliases: ['reactionrole'],
    async execute(msg, args, cmd, client, Discord){
        const channel = '文字頻道ID'
        const dog = msg.guild.roles.cache.find(role => role.name === "Dogge");
        const cat = msg.guild.roles.cache.find(role => role.name === "Kitty");
        
        const dogEmoji ='🐶';
        const catEmoji = '🐱';

        let embed= new Discord.MessageEmbed()
            .setColor('#e42643')
            .setTitle('你是什麼動物?')
            .setDescription('點擊下方反應以新增用戶組\n\n'
                + `${dogEmoji} 是狗子\n`
                + `${catEmoji} 是貓咪`);
        let messageEmbed = await msg.channel.send(embed);
        messageEmbed.react(dogEmoji);
        messageEmbed.react(catEmoji);

        client.on('messageReactionAdd', async(reaction, user)=>{
            if(user.bot) return;
            if(!reaction.message.guild) return;

            if(reaction.message.channel.id == channel){
                if(reaction.emoji.name === dogEmoji){
                    await reaction.message.guild.members.cache.get(user.id).roles.add(dog);
                }
                if(reaction.emoji.name === catEmoji){
                    await reaction.message.guild.members.cache.get(user.id).roles.add(cat);
                }
            }else return;
        });

        client.on('messageReactionRemove', async(reaction, user)=>{
            if(user.bot) return;
            if(!reaction.message.guild) return;

            if(reaction.message.channel.id == channel){
                if(reaction.emoji.name === dogEmoji){
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(dog);
                }
                if(reaction.emoji.name === catEmoji){
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(cat);
                }
            }else return;
        });
    }
}

首先,先把一些比較麻煩的東西存成常數,方便之後呼叫。

再來,建立一條 embed message 並添加貼圖(react)上去。

最後,監聽用戶對貼圖的動作,如果點擊狗狗貼圖,就獲得狗狗身分組;如果點擊貓咪貼圖,就獲得貓咪身分組。

同理,在監聽器裡設置更多判斷句就可以新增更多可選身分組。

後記

這個功能真的很重要,除了添加身分組,在我以前的伺服器還可以透過點擊反應,安排用戶到特定語音房組隊玩遊戲。

雖說那個伺服器已然式微,但我仍然記得當年全盛時期300人在線的時代na。

按讚

發佈留言

%d 位部落客按了讚: