我希望我的机器人在使用命令时能够锁定频道。这是我当前的代码:
if (command === 'lock') {
guild.members.cache.find.permissions.remove('SEND_MESSAGES');
}
但是,它不起作用,我不确定如何修复它。
答案 0 :(得分:1)
.updateOverwrite()
方法将更新现有的权限设置,如果不存在则创建一个权限设置。这是您的用法:
.updateOverwrite(userOrRole, options, [reason])
Role
:RoleResolveable(角色对象)或Snowflake,User
:UserResolveble(用户对象)或SnowflakeReason
:字符串(可选)
如何使用此示例:
// 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()
函数接受三个参数。首先,可以解析User
或Role
(通常是ID或对象)。在这种情况下,我使用了message.guild.id
,它是@everyone角色的ID。
然后,覆盖选项。您可以使用任何Permission Flag(例如ADD_REACTIONS
和VIEW_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()