MessageReaction添加不能添加角色 [英] messageReactionAdd can't add roles

查看:31
本文介绍了MessageReaction添加不能添加角色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为一台服务器制作一个私有的不和谐机器人。我见过一些机器人,比如SweperBot和其他一些机器人,它们使用反应收集器来分配角色。它们中的大多数都不是discord.js,所以我编写了自己的代码。

我已经设置了messageReactionAdd事件,并且整个代码块都工作正常,我已经测试了每一行。特别是每一次都有一行出错。

exports.run = (bot, reaction, user) => {
  const rmsg = reaction.message;
  if (rmsg.channel === rmsg.guild.channels.find('name', 'rules') && rmsg.id === '457681660708651010' && reaction.emoji.name === '👌') {
    const member = rmsg.guild.fetchMember(user)
    const MemberRole = rmsg.guild.roles.find('name', 'Mythical Member');
    member.addRole(MemberRole).catch(console.error);
  }
};
最后一行member.addRole(MemberRole).catch(console.error);是错误行,每次添加反应时都会发送TypeError: member.addRole is not a function

其他一切都可以工作,就像我在此之前进行的测试一样。

我已经尝试测试此member变量的不同方法,因为我知道user不是GuildMember对象。

我正在尝试使用const member = rmsg.guild.fetchMember(user)将其转换为一个对象,它确实起作用了,返回GuildMember对象,但当放入addRole行时,它出错。我以同样的方式在许多其他命令中使用了addRole,但也许事件根本不能使用它?我只是错过了一些明显的东西吗?我已经检查了文档很多次,请求了这么多不一致的服务器,但都没有用。

推荐答案

guild.fetchMember()不返回GuildMember。相反,它回报的是承诺。您需要等待该承诺的响应(它将是GuildMember),然后指定角色。
有几种方法可以做到这一点:
使用.then()

const MemberRole = rmsg.guild.roles.find('name', 'Mythical Member');
rmsg.guild.fetchMember(user).then(member => {
    member.addRole(MemberRole).catch(console.error);
})

或将整个方法切换为异步:

exports.run = async (bot, reaction, user) => {

然后等待您收到fetchMember的回复:

const member = await rmsg.guild.fetchMember(user);

这篇关于MessageReaction添加不能添加角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆