Discordjs - 获取后 lastMessageId 始终为空事件
Posted
技术标签:
【中文标题】Discordjs - 获取后 lastMessageId 始终为空事件【英文标题】:Discordjs - lastMessageId always null event after fetching 【发布时间】:2021-09-26 10:27:43 【问题描述】:简介:
我在创建 discord BOT 方面还很陌生,我目前正在尝试像票务机器人一样制作。 为此,我需要检查添加反应的用户是否允许这样做。
代码:
由于这个原因,当用户使用命令时,我已经(成功地)检查了这个(isAllow 是一个自定义函数,在参数中传递成员对象时起作用):
if (Common.isAllow(message.member)) /* code ... */
但我还想检查对消息做出反应的用户的角色,以便在允许用户这样做的情况下创建一个新频道。
问题是当我获取用户对象时,lastMessageId 为空,所以我无法获取成员对象并检查其角色。
检查反应的代码是这个:
client.on("messageReactionAdd", async (reaction, user) =>
// When a reaction is received, check if the structure is partial
if (reaction.partial)
// If the message this reaction belongs to was removed, the fetching might result in an API error which should be handled
try
await reaction.fetch();
catch (error)
console.error('Something went wrong when fetching the message: ', error);
// Return as `reaction.message.author` may be undefined/null
return;
switch (reaction.message.channel.id)
// Check if the message has been sent into the lawyer contact channel
case Config.CHANNELS.LAWYER_CONTACT:
case Config.CHANNELS.CONFIG:
checkForLawyerChannelReaction(reaction, user);
break;
default:
break;
);
如果在良好通道(LAWYER_CONTACT)或配置通道(CONFIG)中做出反应,它将调用此函数,即尝试检查权限的函数:
function checkForLawyerChannelReaction(reaction, user)
console.log('checkForLawyerChanelReaction');
console.log(user);
if (Common.isAllow( /* member object */ ) /* code ... */
我对 console.log(user) 的响应是: Result
我已经尝试过像这样获取用户数据,但它并没有改变任何事情:
console.log(await client.users.fetch('123456789123456789'));
(当然是换了ID)
请注意,BOT 昨天(再次)以管理员权限加入,并且用户从昨天开始发送消息。
有人对此有解决方案或我可能还没有信息吗?
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:您可以通过将user
作为参数传递给Guild.member(user)
方法来获取GuildMember
对象。
const guildMember = reaction.message.guild.member(user);
【讨论】:
我看起来像个傻瓜。就这么简单……谢谢xD 还不知道什么是真正的“公会”,我去找找。 @Naxe Guild 基本上是一个不和谐的服务器,一个包含其成员、频道、角色、服务器表情符号、服务器名称等的对象。 哦,好的,我明白了,谢谢,其实没那么难。以上是关于Discordjs - 获取后 lastMessageId 始终为空事件的主要内容,如果未能解决你的问题,请参考以下文章