Discord bot的覆盖权限,以使所有文本/语音通道中的角色静音

时间:2020-10-10 23:01:58

标签: javascript node.js discord discord.js

我试图制造一个不和谐的机器人。当我键入?mute @role时,我希望我的机器人创建一个“静音”角色,并在服务器中的每个通道中删除该角色的account.checking += Number(z); SEND_MESSAGES权限。我在将角色添加到人员的位置上使用它,但是到目前为止,我还无法设置权限。我正在使用discord.js v12。我的代码如下。忍受我,因为我没有使用javascript的经验,而且我之前都没有在StackOverflow中发布问题。

SPEAK

2 个答案:

答案 0 :(得分:1)

您几乎正确。尝试使用此方法创建您的角色并覆盖权限。最好将两者都放在try...catch块中,以便在发生错误时将其处理。

try {
 role = await message.guild.roles.create({
  data: {
   name: 'Muted',
   color: '#514f48',
   permissions: [],
  },
 });
 message.guild.channels.cache.forEach(async (channel, id) => {
  await channel.updateOverwrite(role, {
      SEND_MESSAGES: false,
      SPEAK: false,
      ADD_REACTIONS: false,
      SEND_TTS_MESSAGES: false,
      ATTACH_FILES: false 
  })
 });
} catch (e) {
 console.log(e.stack);
}

完成后,您可以在代码中忽略此部分

message.guild.channels.cache.forEach((channel) => {...}

答案 1 :(得分:0)

您的问题在以下几行之内:

message.guild.channels.cache.forEach((channel) => {
 channel.updateOverwrite(channel.guild.roles.roleMute, {
  SEND_MESSAGES: false,
  SPEAK: false,
 });
});

您正在尝试访问roleMute变量,就好像它是GuildRoleManager对象的属性(不是)一样。由于您刚刚将roleMute定义为单数变量:

const roleMute = message.guild.roles.cache.find(
 (role) => role.name === 'Muted'
);

您要做的就是提供该变量作为参数。

message.guild.channels.cache.forEach((channel) => {
 channel.updateOverwrite(roleMute, {
  SEND_MESSAGES: false,
  SPEAK: false,
 });
});