【问题标题】:Discord.js. Reaction Roles不和谐.js。反应角色
【发布时间】:2021-10-27 14:45:44
【问题描述】:

我正在尝试编写一个机器人脚本,当人们点击表情符号时,它会赋予他们一个角色。

我的问题是人们在点击表情符号时没有获得角色。当我输入第一个命令t!role 时,带有表情符号的消息已正确发送。但是,做出反应的人将不会收到该角色。我尝试了评论中建议的所有内容。不幸的是,似乎没有任何效果。

const bot = new Discord.Client( { 
    intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MEMBERS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
    Intents.FLAGS.DIRECT_MESSAGE_REACTIONS,
],
partials: ["MESSAGE", "CHANNEL", "REACTION"]
});


    else if(parts[0].toLowerCase() == "t!role") {
        let sendMessage = await message.channel.send('React with ????to get the role')
        sendMessage.react('????')


bot.on('messageReactionAdd', async (reaction, user, channel) => {
    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 === '8786607442820137464') {
        if(reaction.emoji.id === '8789972642138767364') {
            reaction.message.guild.members.cache.get(user.id).roles.add('8779841244749004804')
        }
    }
})

【问题讨论】:

  • 机器人只能赋予低于自己的角色,即使它们具有管理员权限。确保角色低于机器人的角色。如果由于某种原因分配角色失败,请使用 .catch((error) => console.log(error.message)); 记录任何错误。
  • 我试过了,但它不起作用,它没有给我任何错误

标签: discord discord.js


【解决方案1】:

几个月前,Discord 在其开发人员门户中添加了一些新功能,大多数文档和教程都跳过了这些功能,但它们必须处于活动状态才能拥有功能性反应角色功能。

打开这些的过程是进入你的机器人的应用程序页面,进入应用程序下的机器人页面并激活Presence IntentServer Members Intent。希望在此之后,您的反应角色应该开始发挥作用。

【讨论】:

  • 我启用了它,但它仍然不起作用:/
【解决方案2】:

在您的客户端初始化中启用部分功能。 Discord.js 现在要求您添加您实际使用的部分和意图标志。 messageReactionAdd 事件也需要一些部分:REACTIONMESSAGECHANNEL

例如,这就是你应该如何使用partials

const bot = new Client({
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MEMBERS,
        Intents.FLAGS.GUILD_MESSAGES,
        Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
        Intents.FLAGS.DIRECT_MESSAGE_REACTIONS,
    ],
    partials: ["MESSAGE", "CHANNEL", "REACTION"]
});

我在您的帖子中使用了完全相同的代码,只更改了我这边的几个 id,并且它按预期工作。正如我之前的评论:

机器人只能赋予低于自己的角色,即使它们具有管理员权限。确保角色低于机器人的角色。如果由于某种原因分配角色失败,请使用 .catch((error) => console.log(error.message)); 记录任何错误。

bot.on('messageReactionAdd', async (reaction, user, channel) => {
    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 === '8786607442820137464') {
        if(reaction.emoji.id === '8789972642138767364') {
            reaction.message.guild.members.cache.get(user.id).roles.add('8779841244749004804')
        }
    }
});

【讨论】:

  • 我试过了,但现在我收到一条错误消息:ReferenceError: Intents is not defined at Object. (C:\.User\Discord.Bot\index.js) at Module._compile (node:internal/modules/cjs/loader:1101:14) 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) 在 Module.load (node:internal /modules/cjs/loader:981:32) 在 Function.Module._load (node:internal/modules/cjs/loader:822:12) 在 Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79 :12) 在节点:internal/main/run_main_module:17:47
  • 这意味着你从未初始化过Intents。代码中的某个位置const { Intents } = require("discord.js")@IneedHelp
  • 我也试过了,但它就是不工作。 Bot 像往常一样刚刚开始。带有表情符号的消息正在发送,但我没有得到这个角色。我在机器人角色下面也有角色,但它只是不工作并且知道为什么并且没有错误消息。
  • @IneedHelp 你的机器人有Manage Roles 权限吗?
  • 当我添加机器人时,我给了它管理员权限。但我给了他一个额外的角色,拥有管理角色权限。
猜你喜欢
  • 2021-11-25
  • 2021-04-19
  • 2021-02-16
  • 2020-11-25
  • 1970-01-01
  • 2020-12-25
  • 2021-05-22
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多