#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. Спасибо за помощь!