好吧,所以我一直在研究一个使用discord.js创建频道覆盖的机器人。我是discord.js的新手,但我检查了纪录片,看来更改覆盖时使用的正确方法是我在下面的代码中使用的方法,但是我收到一条错误消息,并且我绝对不知道我该如何解决。
if (command == 'lockdown') {
if (commandArgs == '') {
let channel = msg.channel;
let roles = msg.guild.roles;
console.log(roles);
let testRole = 708384707015868486;
channel
.overwritePermissions(testRole, { SEND_MESSAGES: false }, 'closing up shop')
.then(console.log)
.catch(console.log);
}
}
这是该特定命令的代码,但是我收到以下错误消息。
TypeError [INVALID_TYPE]: Supplied overwrites is not an Array or Collection of Permission Overwrites.
at TextChannel.overwritePermissions (/home/runner/Ecliptical-Productions-V3/node_modules/discord.js/src/structures/GuildChannel.js:208:9)
at Client.<anonymous> (/home/runner/Ecliptical-Productions-V3/index.js:25:17)
at Client.emit (events.js:315:20)
at Client.EventEmitter.emit (domain.js:483:12)
at MessageCreateAction.handle (/home/runner/Ecliptical-Productions-V3/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/home/runner/Ecliptical-Productions-V3/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/home/runner/Ecliptical-Productions-V3/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
at WebSocketShard.onPacket (/home/runner/Ecliptical-Productions-V3/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
at WebSocketShard.onMessage (/home/runner/Ecliptical-Productions-V3/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
at WebSocket.onMessage (/home/runner/Ecliptical-Productions-V3/node_modules/ws/lib/event-target.js:125:16) {
[Symbol(code)]: 'INVALID_TYPE'
}
如何解决此错误?我在命令后检查了通道覆盖,并且没有进行任何更改,我已经尝试修复了很长时间,但是找不到错误。
答案 0 :(得分:2)
overwritePermissions
方法希望将数组或OverwriteResolvables
的集合作为第一个参数。相反,您的第一个参数是您要更改其权限的角色的ID。
将channel.overwritePermissions
更改为下面的示例代码,然后尝试一下。
channel.overwritePermissions(
[
{
id: testRole,
deny: ['SEND_MESSAGES'],
},
],
'Closing up shop'
);
在此示例中,提供的OverwriteResolvable类型为OverwriteData
,可以使用简单的Object结构定义。
答案 1 :(得分:0)
overwritePermissions
需要一个数组,并且您为其提供了2个对象。
channel.overwritePermissions(
[ //<--- you are missing these
{
id: message.author.id,
deny: ['SEND_MESSAGES'],
},
], //<--- you are missing these
'Needed to change permissions'
);
https://discord.js.org/#/docs/main/stable/class/GuildChannel?scrollTo=overwritePermissions
答案 2 :(得分:0)
如果定义了“消息”,则可以使用“ message.channel”获取键入消息的通道。
message.channel.createOverwrite(message.guild.id, { SEND_MESSAGES: false })
您可以看到上面的内容将更改除审核角色以外的所有角色的发送消息权限,如果您想在可以使用“ .then()”函数后发送消息,如果使用V12,我告诉您的一切工作正常,建议您先进行研究,然后再询问网上有大量信息和教程。