首页 > 解决方案 > 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 }]);

对此有什么帮助吗?将不胜感激。

标签: javascriptdiscord.js

解决方案


所以在发现并尝试了每一件事之后,我得到了修复。只是为将寻求帮助的人发布此信息。错误是每个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'],
            },
        ]);

推荐阅读