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 始终为空事件的主要内容,如果未能解决你的问题,请参考以下文章

如果有使用 discordjs 的用户,请获取有关我的用户

如何获取特定频道 discordjs 的最后一条消息

无法通过 Discordjs v13 获取所有公会成员

接收 DiscordJS Promise 对象而不是获取用户昵称的解析

DiscordJS 音乐机器人在开始播放歌曲后立即断开连接

FFMpeg Discordjs Music Bot 在随机时间后随机停止播放音乐