检查消息发件人是否具有特定角色

Check if the message sender has a specific role

我是 Discord 机器人编码的新手,我想创建一个命令,机器人仅在消息发件人具有特定角色时才回复。

根据 discord.js documentation 我必须使用 GuildMemberRoleManager.cache。遗憾的是,它不起作用。

整个命令如下所示:

client.on('messageCreate', (message) => {
  if (
    message.content.toLowerCase() === prefix + 'test' &&
    GuildMemberRoleManager.cache.has(AdminRole)
  )
    message.reply('test');
});

定义变量,使您新手容易理解

const guild = message.guild.id;
const role = guild.roles.cache.get("role id");
const cmduser = message.author;
const member = await guild.members.fetch(cmduser.id);

并使 if 语句像

if(member.roles.cache.has(role.id)) {
      return message.channel.send("test")
    }

如果你想让机器人检查用户是否有管理员权限,那么

message.member.hasPermission('ADMINISTRATOR')

检查 Discord Perm Flags

上的所有 perm 标志

所以根据你的代码它将是

const guild = message.guild.id;
const role = guild.roles.cache.get("role id");
const cmduser = message.author;
const member = await guild.members.fetch(cmduser.id);

client.on("messageCreate",(message) => {
    if(message.content.toLowerCase() === prefix + "test" && member.roles.cache.has(role.id))
        message.reply("test")
})

你应该得到作者的角色。只有成员有角色,所以你需要让作者成为成员使用 message.member. message.member returns a GuildMember and GuildMembers have a roles 属性 that returns a GuildMemberRoleManager (你在原来的 post).

cache property is a collection of the roles of this member, so you can use its has()检查用户是否具有管理员角色的方法:

client.on('messageCreate', (message) => {
  let adminRole = 'ADMIN_ROLE';
  let isAdmin = message.member.roles.cache.has(adminRole);

  if (message.content.toLowerCase() === prefix + 'test' && isAdmin)
    message.reply('test');
});