Проверка идентификатора канала

#javascript #node.js #discord.js

Вопрос:

Итак, у меня есть эта странная проблема. Я пытаюсь подтвердить, что идентификатор канала существует в гильдии, и если это так, то я хочу, чтобы он что-то сделал. Но я просто не могу заставить это работать.

Обычно bot.channels.cache.get(args[0]) возвращается вся информация о канале, но по какой-то причине она всегда возвращается undefined , и я не понимаю, почему. (Это было написано в Discord.JS 1.12.5 не последняя версия)

 const mongoDB = require("../../utility/mongodbFramework");
const Discord = require("discord.js");

const bot = new Discord.Client();

module.exports = {
    name: "welcome",
    aliases: ["setwelcome", "welcome"],
    description: "Server config",
    args: true,
    maxArgs: 2,
    minArgs: 2,
    cooldown: 1,
    permissions: "ADMINISTRATOR",
    usage: "<channelId> <message>",
    async execute(message, args) {
        const { guild } = message;

        if (!bot.channels.cache.get(args[0]))
            return message.channel.send(
                "Send a valid channel ID. (You can use the `.id` command. Or you could use the Discord developer tools)"
            );

        const channelId = args[0];

        args.shift();
        welcomeMessage = args.join(" ");

        await mongoDB.setWelcome(guild.id, channelId, welcomeMessage);

        message.channel.send(`Channel ID: ${guild.id}, message: ${welcomeMessage}`);
    },
};
 

Ответ №1:

Проблема в том, что ваш бот не тот, с кем вы вошли в систему, поэтому его кэш всегда будет пустым. Попытайтесь получить клиента от вашего message :

 const mongoDB = require('../../utility/mongodbFramework');

module.exports = {
  name: 'welcome',
  aliases: ['setwelcome', 'welcome'],
  description: 'Server config',
  args: true,
  maxArgs: 2,
  minArgs: 2,
  cooldown: 1,
  permissions: 'ADMINISTRATOR',
  usage: '<channelId> <message>',
  async execute(message, args) {
    const { client, guild } = message;
    const channelId = args[0];

    if (!client.channels.cache.get(channelId))
      return message.channel.send(
        'Send a valid channel ID. (You can use the `.id` command. Or you could use the Discord developer tools)',
      );

    args.shift();
    
    const welcomeMessage = args.join(' ');
    await mongoDB.setWelcome(guild.id, channelId, welcomeMessage);

    message.channel.send(`Channel ID: ${guild.id}, message: ${welcomeMessage}`);
  },
};
 

PS: вы также можете попробовать подключиться к fetch каналу по его идентификатору, вместо того, чтобы полагаться на кэш:

 const channelId = args[0];
const channel = await client.channels.fetch(channelId);

if (!channel)
  return message.channel.send( /* ... */)

 

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

1. Спасибо за помощь!