【问题标题】:Discord reaction roles issue不和谐反应角色问题
【发布时间】:2021-04-19 02:12:06
【问题描述】:

我目前正在编写一个不和谐的机器人反应角色命令。

一切都很顺利,但我有一个问题。

当我启动机器人并运行命令来创建嵌入时,一切正常。问题是当我对消息做出反应时,它并没有给我角色。这是我的代码:

module.exports = {
    name: "reactionrole",
    description: "Sets up a reaction role message!",
    async execute(message, args, Discord, client) {
        const channel = "751217304733351976";
        const yellowTeamRole = message.guild.roles.cache.find((role) => role.name === "ROBLOX");
        const blueTeamRole = message.guild.roles.cache.find((role) => role.name === "Minecraft");
        const redTeamRole = message.guild.roles.cache.find((role) => role.name === "MinecraftBedrock");

        const yellowTeamEmoji = "798904223755927562";
        const blueTeamEmoji = "798904030553440257";
        const redTeamEmoji = "798904121544540181";

        let embed = new Discord.MessageEmbed()
            .setColor("#e42643")
            .setTitle("Choose the games you play!")
            .setDescription("Choosing a game will ping you when others want to play with you!\n\n" + `ROBLOX\n` + `Minecraft\n` + "Minecraft Bedrock");

        let messageEmbed = await message.channel.send(embed);
        messageEmbed.react(yellowTeamEmoji);
        messageEmbed.react(blueTeamEmoji);
        messageEmbed.react(redTeamEmoji);

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

            if (reaction.message.channel.id == channel) {
                if (reaction.emoji.name === yellowTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.add(yellowTeamRole);
                }
                if (reaction.emoji.name === blueTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.add(blueTeamRole);
                }
                if (reaction.emoji.name === redTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.add(redTeamRole);
                } else {
                    return;
                }
            }
        });

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

            if (reaction.message.channel.id == channel) {
                if (reaction.emoji.name === yellowTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(yellowTeamRole);
                }
                if (reaction.emoji.name === blueTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(blueTeamRole);
                }
                if (reaction.emoji.name === redTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(redTeamRole);
                } else {
                    return;
                }
            }
        });
    },
};

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    它是否给出 0 退出错误?

    还要检查 Bot 的角色是否在角色列表中的红色、蓝色和黄色角色之上

    【讨论】:

    • 它没有。并且bot角色是服务器中最高的。
    • 角色名称分别为 ROBLOX、Minecraft、Minecraft Bedrock、In the discord server。
    【解决方案2】:

    您可以在两个地方使用 discord.js 抓取表情符号:客户端和公会。 client.emojis 是客户可以访问的每个表情符号的集合,guild.emojis 是特定公会的表情符号的集合。

    const yellowTeamEmoji = client.emojis.get("798904223755927562")
    

    您可能还知道如何使用 find 来获取其他属性的内容 - 所以在这里,我可以通过其名称获取 yellowTeamEmoji

    const yellowTeamEmoji = client.emojis.find(emoji => emoji.name === "yellowTeamEmoji");
    

    一切顺利,弗洛里安。

    【讨论】:

      【解决方案3】:

      所以你需要做的是:

          const reactionEmoji = client.emojis.cache.get("emojiID");
          const reactionEmoji2 = client.emojis.cache.get("emojiID");
          const reactionEmoji3 = client.emojis.cache.get("emojiID");
      
          const yellowTeamEmoji = "reactionEmoji1";
          const blueTeamEmoji = "reactionEmoji2";
          const redTeamEmoji = "reactionEmoji3";
      

      如何获取表情符号的 id ?最简单的方法是在测试频道中发送您要设置的表情符号,如果您右键单击表情符号,底部会显示“打开链接”。如果您在浏览器中打开该链接,它将显示如下内容:“https://cdn.discordapp.com/emojis/791979565056000000.png?v=1” 您需要复制最后的数字并粘贴在“emojiID”部分中

      示例:

      const reactionEmoji = client.emojis.cache.get("791979565056000000");
      

      【讨论】:

        【解决方案4】:

        使用 unicode 代替 ID。只需在频道中发布表情符号,将其复制并粘贴到您的代码中即可。

        const yellowTeamEmoji = "?";
        

        【讨论】:

          猜你喜欢
          • 2021-05-22
          • 2021-10-27
          • 1970-01-01
          • 2021-11-25
          • 2021-01-05
          • 2020-10-03
          • 1970-01-01
          • 2021-01-17
          • 2020-07-17
          相关资源
          最近更新 更多