javascript - Discord.js v 12.5.1 覆盖权限
问题描述
我有这个错误的问题:
UnhandledPromiseRejectionWarning:TypeError [INVALID_TYPE]:提供的参数既不是用户也不是角色。
我几乎尝试了我所知道的每一个修复程序,试图寻找 api 以发现问题所在,但我没有得到任何解决方案。
这是代码:
const Discord = require('discord.js')
const { MessageEmbed } = require('discord.js');
const config = require('../../config.json');
module.exports = {
name: "new",
category: "tickets",
description: "Vytvorí nový ticket",
usage: "[príkaz | alias]",
run: async (client, message, args) => {
message.delete();
let [parent, support, supervisor] = [config.tickets.category, message.guild.roles.cache.get(config.tickets.roles.support), message.guild.roles.cache.get(config.tickets.roles.supervisor)];
let co = true;
function check() {
let channels = message.guild.channels.cache.filter(ch => ch.type === 'text' && ch.name.startsWith('ticket-'));
channels.forEach(channel => {
if(channel.topic.includes(message.author.id)) co = false;
});
}
check();
if(!co) {
let embed = new MessageEmbed().addField(':x: Error 404', 'Už máš otvorený ticket. Prosím ukonči ho predtým ako vytvoríš ďalší!').setColor('RED');
return message.channel.send({embed: embed});
}
let ticket = await message.guild.channels.create(`ticket-${message.author.username}`, 'text');
let ch = await message.guild.channels.cache.find(channel => channel.id === parent);
if(ch && ch.type === 'category') ticket.setParent(ch.id);
ticket.setTopic(message.author.id);
ticket.overwritePermissions([message.guild.roles.everyone, { SEND_MESSAGES: false, VIEW_CHANNEL: false, READ_MESSAGE_HISTORY: false }]);
ticket.overwritePermissions([message.author.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, READ_MESSAGE_HISTORY: true }]);
if(support) ticket.overwritePermissions([support.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, READ_MESSAGE_HISTORY: true }]);
if(supervisor) ticket.overwritePermissions([supervisor.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, READ_MESSAGE_HISTORY: true, MANAGE_MESSAGES: true }]);
let embed = new MessageEmbed().setColor('BLUE').setAuthor(`Vitaj ${message.author.tag}`, message.author.displayAvatarURL).setDescription(config.tickets.messages.welcome);
ticket.send({embed: embed});
embed = new MessageEmbed().setColor('GREEN').addField(`✅ Ticket Vytvorený`, `Úspešne vytvorený tvoj ticket <#${ticket.id}>`);
message.channel.send({embed: embed});
}
};
问题是这段代码不会覆盖权限。
ticket.overwritePermissions([message.guild.roles.everyone, { SEND_MESSAGES: false, VIEW_CHANNEL: false, READ_MESSAGE_HISTORY: false }]);
ticket.overwritePermissions([message.author.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, READ_MESSAGE_HISTORY: true }]);
if(support) ticket.overwritePermissions([support.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, READ_MESSAGE_HISTORY: true }]);
if(supervisor) ticket.overwritePermissions([supervisor.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, READ_MESSAGE_HISTORY: true, MANAGE_MESSAGES: true }]);
对此有什么帮助吗?将不胜感激。
解决方案
所以在发现并尝试了每一件事之后,我得到了修复。只是为将寻求帮助的人发布此信息。错误是每个overwritePermissions()
尝试覆盖自己的权限,并且语法也很糟糕。只需用以下代码替换它,一切正常。
ticket.overwritePermissions([
{
id: message.guild.roles.everyone.id,
deny: ['VIEW_CHANNEL'],
},
{
id: message.author.id,
allow: ['VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', 'SEND_MESSAGES'],
},
{
id: support.id,
allow: ['VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', 'SEND_MESSAGES'],
},
{
id: supervisor.id,
allow: ['VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', 'SEND_MESSAGES', 'MANAGE_MESSAGES'],
},
]);
推荐阅读
- xero-api - Xero-Partner-App 中没有用于更新令牌的会话句柄
- swift - 如何在 Swift 4 中访问另一个结构内的结构值?
- laravel - 模态定位相同的ID,无论我点击哪个用户
- java - 如何检查枚举值是否存在于对象列表中
- angular - Google Analytics - Angular 2 - 事件包含未定义的值
- php - 用户登录自定义帖子类型存档页面
- vhdl - 使用 VHDL 的 4 位 ALU 显示错误:运算符“+”(“-”、“*”和“/”)没有函数声明
- python - 从第三方 api 返回项目列表的 DRF 方式是什么?
- javascript - 使用 Array 中的值更新对象数据
- java - 计算(紧凑)字符串的内存使用情况