【问题标题】:How can I command my bot to lock the current channel? [closed]如何命令我的机器人锁定当前频道? [关闭]
【发布时间】:2020-12-28 02:32:39
【问题描述】:

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

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

但是,它不起作用,我不知道如何修复它。

【问题讨论】:

  • 小sn-p代码是一个好的开始,但如果您为遇到的问题提供更多上下文和相关代码会更有帮助。

标签: javascript node.js discord discord.js


【解决方案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 将替换所有当前权限并将其替换为您要添加或更新的权限。

【讨论】:

    【解决方案2】:

    首先,你需要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()

    【讨论】:

    • 哦,太好了,不知道那个!
    • 是的,这是一个非常有用的技巧?
    • if(command === "lock") { 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); }); ======================================== ===== if(command === "lock") { message.channel.updateOverwrite(message.guild.id, { SEND_MESSAGES: false // cannot send messages }, 'Channel Lockdown') .then(console.log) .catch(consol.error); }
    • 我尝试了这两个脚本都没有错误但没有任何效果
    • 你使用的是什么版本的discord.js
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2022-01-20
    • 2021-12-13
    • 2020-05-10
    • 2016-08-27
    • 1970-01-01
    • 2021-08-13
    • 2020-01-16
    相关资源
    最近更新 更多