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