如何命令我的机器人锁定当前频道?

时间:2020-09-09 16:00:09

标签: javascript node.js discord discord.js

我希望我的机器人在使用命令时能够锁定频道。这是我当前的代码:

if (command === 'lock') {
 guild.members.cache.find.permissions.remove('SEND_MESSAGES');
}

但是,它不起作用,我不确定如何修复它。

2 个答案:

答案 0 :(得分:1)

.updateOverwrite()方法将更新现有的权限设置,如果不存在则创建一个权限设置。这是您的用法:

.updateOverwrite(userOrRole, options, [reason])

Role:RoleResolveable(角色对象)或SnowflakeUser:UserResolveble(用户对象)或Snowflake Reason:字符串(可选)

如何使用此示例:

// First find the role we want to overwrite permissions for
const role = message.guild.roles.cache.find(r => r.name === "@everyone");

message.channel.updateOverwrite(role, { SEND_MESSAGES: false }, `Overwrite permissions`)
.then(() => console.log("Permissions overwritten."))
.catch(error => {
    console.log("Oh no! Something went wrong! " + error.message);
});

如果要覆盖所有通道,只需映射行会中的所有通道并使用channel.updateOverwrite()。您要使用updateOverwrite,因为overwritePermissions将替换所有当前权限,并将其替换为您要添加或更新的权限。

答案 1 :(得分:0)

首先,您需要message.channel来获取发送命令的通道。然后,您可以使用channel.updateOverwrite()

// fun fact, the @everyone role shares the same id as the guild
message.channel.updateOverwrite(message.guild.id, {
   SEND_MESSAGES: false // cannot send messages
}, 'Channel Lockdown')
  .then(console.log)
  .catch(consol.error); // handle any errors

updateOverwrite()函数接受三个参数。首先,可以解析UserRole(通常是ID或对象)。在这种情况下,我使用了message.guild.id,它是@everyone角色的ID。

然后,覆盖选项。您可以使用任何Permission Flag(例如ADD_REACTIONSVIEW_CHANNEL),然后使用false表示拒绝,使用null表示取消设置,然后使用true允许。

最后,您可以提供一个原因,该原因将出现在审核日志中!


如果您想锁定每个频道,则可以执行类似的操作:

// iterate a function over every channel in the guild
message.guild.channels.cache.forEach((channel) => {
  message.channel.updateOverwrite(message.guild.id, {
    SEND_MESSAGES: false
  }, 'Channel Lockdown')
   .then(console.log)
   .catch(consol.error);
});

这与v11.x相同,只是将updateOverwrite()替换为overwritePermissions()