Discord bot 有时不会向用户添加角色

Posted

技术标签:

【中文标题】Discord bot 有时不会向用户添加角色【英文标题】:Discord bot sometimes doesn't add the role to user 【发布时间】:2021-06-10 13:35:24 【问题描述】:

我在使用 Discord.js V12.5.1 向用户添加角色时遇到问题。下面的代码在 80% 的情况下都能正常工作,但有时它只是没有添加角色。

查看审计日志,显示bot给用户添加了角色,但用户看不到私聊,如果我查看用户的角色,角色丢失了。

我做错了吗?

AddRoleUser: (guid, msg, userId, roleName, reason) => 
        let role = msg.guild.roles.cache.find(r => r.name == roleName);
        let member = msg.guild.members.cache.get(userId);

        if (role && member && !member.roles.cache.has(role.id)) 
            try 
                member.roles.add(role, reason).catch((error) => logger.error(`UUID: $guid, Error: $error.message, StackTrace: $error.stack`));
                msg.react(reactions.RoleAdd);
                logger.info(`UUID: $guid, Role $roleName added to member: $member.displayName`);
             catch (error) 
                logger.error(`UUID: $guid, Could not add role, Member: $member.displayName, Role: $roleName, Error: $error.message, StackTrace: $error.stack`);
            
         else 
            logger.warn(`UUID: $guid, Could not add role, Member: $member.displayName, Role: $roleName`);
        
    ,

【问题讨论】:

【参考方案1】:

member.roles.add 返回一个承诺,但即使该承诺没有实现,您也会做出反应并记录结果。

您可以添加一个then() 方法,并且只在其中记录和反应,您甚至可以检查返回的成员现在是否具有角色:

try 
  member.roles
    .add(role, reason)
    .then((updatedMember) => 
      // you can check if the member has the role now
      msg.react(reactions.RoleAdd);
      logger.info(`UUID: $guid, Role $roleName added to member: $updatedMember.displayName`);
    )
    .catch((error) => logger.error(`UUID: $guid, Error: $error.message, StackTrace: $error.stack`));

// do you need try-catch? will this ever throw?
 catch (error) 
  logger.error(`UUID: $guid, Could not add role, Member: $member.displayName, Role: $roleName, Error: $error.message, StackTrace: $error.stack`);

【讨论】:

以上是关于Discord bot 有时不会向用户添加角色的主要内容,如果未能解决你的问题,请参考以下文章

角色反应 Discord Bot

如何向 discord.js bot v12 添加验证

如何在discord bot上删除所有角色并添加一个角色,然后删除添加的角色并恢复以前的角色

Discord Bot- 使用 YAGPDB bot 的反应投票

无法添加角色,Discord.js

Python Discord Bot - 在不同的服务器中获取用户角色