【问题标题】:How to get Reaction Roles working in discord.js?如何让反应角色在 discord.js 中工作?
【发布时间】:2022-01-06 05:09:30
【问题描述】:

我正在尝试使此功能正常工作,但我一直遇到我的反应角色的问题。可能是我只是使用了错误的功能/方法吗?非常感谢您的帮助。

我是 discord bot dev 的新手,可能会在这里问一个非常愚蠢的问题,但非常感谢您的帮助!

这是我的代码示例!

require('dotenv').config();

const { Client, Intents, GuildMember, ReactionEmoji } = require('discord.js');
const client = new Client( 
  {
  partials: ['MESSAGE' , 'REACTON'],
  intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES],
});
const PREFIX = '$';

client.on('ready', () => {
  console.log(`${client.user.tag} has logged in.`);
});

client.on('messageCreate', async (message) => {
  if (message.author.bot) return;
  //console.log(`[${message.author.tag}]: ${message.content}`);
  /* if (message.content === 'hello') {
            message.reply('https://media.giphy.com/media/KtnNLZVycYLdutzEm9/giphy.gif');
            //message.channel.send('https://media.giphy.com/media/KtnNLZVycYLdutzEm9/giphy.gif');
        }*/

  if (message.content.startsWith(PREFIX)) {
    const [CMD_NAME, ...args] = message.content
      .trim()
      .substring(PREFIX.length)
      .split(/\s+/);
//KICK AND BAN 
    if (CMD_NAME === 'kick') {
      if (!message.member.permissions.has('KICK_MEMBERS'))
        return message.reply('You do not have permissions to use that command');
      if (args.length === 0)
        return message.reply('Please provide the ID of the offender.');
      const member = message.guild.members.cache.get(args[0]);
      if (member) {
        member
          .kick()
          .then((member) => message.channel.send(`${member} was kicked.`))
          .catch((err) =>
            message.channel.send('I do not have permissions :( ')
          );
      } else {
        message.channel.send('That Member was not found');
      }
    } else if (CMD_NAME === 'ban') {
      if (!message.member.permissions.has('BAN_MEMBERS'))
        return message.reply('You do not have permissions to use that command');
      if (args.length === 0)
        return message.reply('Please provide the ID of the offender.');
      message.guild.members.ban(args[0]);

      try {
        const user = await message.guild.members.ban(args[0]);
        message.channel.send('User was banned successfully.');
        console.log(user);
      } catch (err) {
        console.log(err);
        message.channel.send('An error occured. Either I do not have permission or the user was not found.')
      }
    }
  }
});

//Reactions Roles
client.on('messageReactionAdd', (reaction, user) => {
  console.log('Whats Gud');
  const { name } = reaction.emoji;
  const member = reaction.message.guild.members.cache.get(user.id);
  if (reaction.message.id === '928504577475616819') {
    switch (name) {
      case '????':
        member.roles.add('928503338683748352');
        break;
      case '????':
        member.roles.add('928503897251782698');
        break;
      case '????':
        member.roles.add('928503941430407168');
        break;
      case '????️':
        member.roles.add('928503384561053847');
        break;
    }
  }
});

client.login(process.env.DISCORDJS_BOT_TOKEN);

谢谢

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    我认为问题在于 messageReactionAdd 仅适用于缓存消息,根据:Why messageReactionAdd do nothing discord.js

    不检查邮件ID,而是检查邮件内容

    client.on('messageReactionAdd', (reaction, user) => {
      console.log('Whats Gud');
      const { name } = reaction.emoji;
      const member = reaction.message.guild.members.cache.get(user.id);
      if (reaction.message.content === 'your-message-content') {
        switch (name) {
          case '?':
            member.roles.add('928503338683748352');
            break;
          case '?':
            member.roles.add('928503897251782698');
            break;
          case '?':
            member.roles.add('928503941430407168');
            break;
          case '?️':
            member.roles.add('928503384561053847');
            break;
    }
      }
    });
    如果这不起作用,请附上您在运行代码时收到的错误消息,以便我们检查哪里出错了

    【讨论】:

      【解决方案2】:

      您的代码中似乎没有启用MESSAGE_REACTION_ADD intent。您似乎也没有缓存您需要的消息。

      要解决此问题,您首先需要启用意图,使您的意图声明行看起来像

      intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_REACTION_ADD],
      

      并缓存你应该添加的消息

      const channel = client.channels.cache.get(CHANNEL_ID)
      channel.messages.cache.get(MESSAGE_ID)
      

      到你准备好的活动。

      最后你应该有类似的东西

      const client = new Client(
      {
          partials: ['MESSAGE' , 'REACTON'],
          intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES],
      });
      

      和

      client.on('ready', () =>{
          console.log(`${client.user.tag} has logged in.`);
          const channel = client.channels.cache.get(CHANNEL_ID)
          channel.messages.cache.get(MESSAGE_ID)
      })
      

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 2021-02-07
        • 1970-01-01
        • 2021-09-11
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 2021-01-07
        相关资源
        最近更新 更多