Discord.js 创建频道权限覆盖

Discord.js 创建频道权限覆盖,discord.js,Discord.js,我正在创建一个bot命令,这样当您键入时!设置它设置整个服务器(创建频道和角色等)。我已经将其设置为创建角色和频道,但有些频道只有特定角色才能输入,而其他角色只能读取频道。我不知道如何为某些角色设置权限覆盖 我已经看过Discord.js文档了,但没有多大帮助。我收到一个错误,提供的参数既不是用户也不是角色,但我不知道如何获取角色ID message.guild.createRole({ 名称:'管理员', 颜色:“#2494ad”, 权限:[‘管理员’、‘查看审核日志’、‘管理协会’、‘管理频

我正在创建一个bot命令,这样当您键入
时!设置
它设置整个服务器(创建频道和角色等)。我已经将其设置为创建角色和频道,但有些频道只有特定角色才能输入,而其他角色只能读取频道。我不知道如何为某些角色设置权限覆盖

我已经看过Discord.js文档了,但没有多大帮助。我收到一个错误,
提供的参数既不是用户也不是角色,但我不知道如何获取角色ID

message.guild.createRole({
名称:'管理员',
颜色:“#2494ad”,
权限:[‘管理员’、‘查看审核日志’、‘管理协会’、‘管理频道’、‘发送TTS信息’、‘创建即时邀请’、‘踢成员’、‘禁止成员’、‘添加反应’、‘优先发言人’、‘阅读信息’、‘发送信息’、‘管理信息’、‘嵌入链接’、‘附加信息’、‘阅读信息历史’、‘提及所有人’、‘使用外部表情’、‘连接’、‘SPEAK、MUTE_成员、DEAFEN_成员、MOVE_成员、USE_VAD、CHANGE_昵称、MANAGE_昵称、MANAGE_角色、MANAGE_WEBHOOKS、MANAGE_表情符号“]
});
message.guild.createRole({
名称:“请求角色”,
颜色:“#1bb738”,
权限:['READ_MESSAGES'、'SEND_MESSAGES'、'READ_MESSAGES_HISTORY',]
});
//类别和渠道
message.guild.createChannel('clan-communications'{
类型:'类别',
许可证覆盖:[{
id:'25311096',
拒绝:['SEND_MESSAGES']
}]
});
//权限
message.channel.overwritePermissions('25311096'{
发送消息:false
});
打破

我希望角色拥有整个服务器的基本权限。但某些角色已覆盖不同的频道。相反,它表示提供的参数既不是用户也不是角色。

首先,欢迎使用堆栈溢出。希望我们能为您提供帮助

让我们一步一步地浏览解决方案,以获得您想要的结果。

当您创建角色时,您应该声明一个变量来存储它们。这样,您可以使用客户端稍后刚刚创建的内容。由于返回了,我们可以将完成的结果保存到变量中

请注意,关键字必须放在异步上下文中(在上下文中)

const vip=wait message.guild.createRole('vip',{…});
然后,当需要使用该角色时,可以引用该变量

wait message.guild.createChannel('VIPs Only'{
类型:'类别',
许可证覆盖:[
{
id:vip.id,
允许:[“读取消息”]
}, {
id:message.guild.defaultRole.id,//@everybody角色
拒绝:[“读取消息”]
}
]
});
如果角色已存在,则可以从返回的角色的中检索该角色

const testRole=message.guild.roles.get('IDhere');
const adminRole=message.guild.roles.find(r=>r.name==='Admin');
其他简单的改进。

  • 在您的代码片段中,我看不到任何错误处理。您正在使用的方法返回承诺。如果在任何情况下发生错误,承诺状态将被拒绝。任何未捕获的被拒绝承诺都将抛出错误。若要解决此问题,请将方法附加到每个承诺(更适合单独处理)或将异步代码包装到语句中
  • 创建管理员角色时,要知道
    管理员
    权限会自动授予所有其他权限(并允许用户绕过特定于频道的权限)。因此,无需列出任何其他权限,也无需更改角色在任何频道中的权限覆盖
  • 代码中的ID似乎无效。Discord ID由18位字符串表示。您可以在Discord中通过开发人员模式访问它们。但是,您不必使用此解决方案对它们进行硬编码,除非它们已经存在
  • 在请求角色的权限数组中,您有一个额外的逗号

我不明白wait/async函数是什么,我应该在那里放什么(很抱歉响应延迟,我从未看到通知。)我建议您阅读一些我超链接的文档。异步函数返回一个承诺,这意味着您必须等待响应。您可以使用关键字
wait
。但是,要使用
wait
,它必须位于异步函数内。因此,如果代码所在的最相关函数是消息event回调,将其定义为async(
async message=>{…}
async function(message){…}
)。再次感谢。我想您在另一个问题中告诉了我这一点,但无论如何还是感谢您的回复。