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上删除所有角色并添加一个角色,然后删除添加的角色并恢复以前的角色