Бот Discord v13, похоже, не может определить, что такое текстовый канал

#javascript #discord #discord.js

#javascript #Discord #discord.js

Вопрос:

Поэтому, когда я пытаюсь установить канал проверки с помощью моего бота. Похоже, он не может найти идентифицировать текстовый канал

Код:

 const db = require('quick.db');
const { PREFIX } = require('../../config');

module.exports = {
    config: {
        name: 'setverification',
        aliases: ['sv', 'setv', 'setverify'],
        category: 'moderation',
        description: 'Sets Verification Channel And Role',
        usage: '[channel name | channel ID | channel mention] <role name | role ID | role mention]',
        accessableby: 'Administrators'
    },
    run: async (bot, message, args) => {
        let prefix;
        let fetched = await db.fetch(`prefix_${message.guild.id}`);

        if (fetched === null) {
            prefix = PREFIX
        } else {
            prefix = fetched
        }

        if (!message.member.permissions.has("ADMINISTRATOR")) return message.channel.send("**You Do Not Have Required Permissions! - [ADMINISTRATOR]!**");

        if (!args[0]) return message.channel.send("**Please Enter A Channel Name Where The User Should Be Asked To Verify!**");

        if (!args[1]) return message.channel.send("**Please Enter A Role Which Will Be Added After The User Is Verified!**");

        let channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name.toLowerCase() === args[0].toLocaleLowerCase());
        if (!channel || channel.type !== "GUILD_TEXT") return message.channel.send("**Please Enter A Valid Channel!**")

        let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(r => r.name.toLowerCase() === args[1].toLocaleLowerCase());
        if (!role) return message.channel.send("**Please Enter A Valid Role!**");

        let verifiedchannel = channel;

        try {
            let a = await db.fetch(`verificationchannel_${message.guild.id}`);
            let b = await db.fetch(`verificationrole_${message.guild.id}`);

            if (channel.id === a amp;amp; role.id === b) {
                return message.channel.send('**This Channel is Already Set As Verification Channel!**');
            } else if (channel.id === a amp;amp; role.id === b) {
                return message.channel.send("**This Role is Already Set As Verification Role!**");
            }
            else {
                message.guild.channels.cache.forEach(channel => {
                    if (channel.type === 'category' amp;amp; channel.id === verifiedchannel.id) return;
                    let r = channel.permissionOverwrites.get(role.id);
                    if (!r) return;
                    if (r.deny.has("VIEW_CHANNEL") || r.deny.has("SEND_MESSAGES")) return;

                    channel.createOverwrite(message.guild.id, {
                        VIEW_CHANNEL: false
                    });

                    channel.updateOverwrite(role, {
                        VIEW_CHANNEL: true,
                        SEND_MESSAGES: true
                    });
                });

                verifiedchannel.updateOverwrite(role, {
                    SEND_MESSAGES: false,
                    VIEW_CHANNEL: false
                });
                bot.guilds.cache.get(message.guild.id).channels.cache.get(channel.id).send(`**Welcome To ${message.guild.name}!nTo Get Verified Type - `${prefix}verify`**`);
                db.set(`verificationchannel_${message.guild.id}`, channel.id);
                db.set(`verificationrole_${message.guild.id}`, role.id);

                return message.channel.send(`**Verification Channel And Role Has Been Set Successfully in `${channel.name}`!**`);
            };
        } catch {
            return message.channel.send("**Error - `Missing Permissions Or Channel Is Not A Text Channel!`**");
        };
    }
};
 

Он может знать, по какому каналу он отправляется, и знать роль (разрешения бота установлены на администратора). Я думаю, что это проблема устаревания. Этот код был создан с помощью v12

Пример кода:

Пример кода Discord

Комментарии:

1. Вы только помещаете это в catch блок, поэтому может возникнуть другая ошибка — попробуйте изменить его на catch(err) {console.log(err} (вместо catch {...} ) и сообщите нам, что он регистрирует

2. Это может быть что угодно, вы улавливаете ошибку, но никогда не использовали выбрасываемый параметр ошибки. try { } catch(error) { console.log(error); }

3. Кажется, TypeError: channel.permissionOverwrites.get is not a function я не могу найти документацию для этого. Что изменилось с версии 12 на версию 13?

4. Попробуйте channel.permissionOverwrites.resolve вместо этого

5. TypeError: Cannot read properties of undefined (reading 'resolve') Похоже, что получение новой ошибки не устраняется

Ответ №1:

GuildChannel#permissionOverwrites изменилось. Раньше он возвращал a Collection , но теперь он возвращает a PermissionOverwriteManager . Вместо этого используйте .resolve его:

 let r = channel.permissionOverwrites.resolve(role.id)
 

Комментарии:

1. См. комментарий: получение новой ошибки TypeError: не удается прочитать свойства undefined (чтение ‘resolve’) Похоже, что это не resolve

2. Что тогда channel регистрируется?

3. Моя консоль. журнал, похоже, не работает. Кажется, это игнорируется

4. Кажется, они используют v13, я думаю, они имеют в виду, что код, который они используют, изначально был создан для работы с v12.

5. Код был создан в версии 12, и я использую версию 13