#discord #discord.js
#Discord #discord.js
Вопрос:
Я пытаюсь создать бота discord, но мне нужно отправить сообщение на определенный канал. Я сделал 100 попыток, но продолжаю получать:
TypeError: bot.channels.fetch(...).send is not a function.
Везде, где я читаю, я вижу «использовать channel.send()», но я не могу найти реального решения моей проблемы. Является ли channel.send() устаревшей? Вот строка, в которой ошибка выдает ошибку:
bot.channels.fetch(id).send(messa&e);
Я знаю, что channels.&et() была устаревшей и при использовании .при выборке (id) я получаю объект channel, однако он не позволяет мне отправить сообщение. ЛЮБАЯ помощь будет оценена, поскольку я потратил дни на это в одиночку. Спасибо.
Полный блок кода:
var reportEmbed = new Discord.Messa&eEmbed()
.setColor('#0099ff')
.setTitle('New Report')
.setAuthor(ms&.author.ta&)
.setDescription(reportMessa&e)
.setTimestamp();
console.lo&(bot.channels.fetch('my channel id'));
bot.channels.fetch('my channel id').then(channel =&&t; {
channel.send(reportEmbed);
});
Когда консоль регистрируется, я получаю правильный объект channel.
Комментарии:
1. пожалуйста, покажите еще больше вашего кода. в какой функции события находится этот блок кода?
Ответ №1:
Попробуйте использовать:
bot.channels.cache.&et(id).send(messa&e)
Вместо
Комментарии:
1. Только что попробовал. Я получил «ошибка типа: channel.send не является функцией».
2. Это была строка, которую я запустил:
bot.channels.cache.&et('my channel id').send(reportEmbed);
где «внедренный отчет является Discord. Объект Messa&eEmbed.3. Ну, эта строка не включает
channel.send()
функцию, поэтому я думаю, что она указывает на другую строку.4. Я глупый. Он выдал аналогичную ошибку с той же строкой кода, но я не понял. Я исправил эту вторую ошибку, и теперь она работает. Большое вам спасибо! Мне всегда говорили, что .&et() вообще была устаревшей, но да. Спасибо, чувак! 🙂
5.
bot.channels.&et()
устарела, я думаю, именно поэтому вы были сбиты с толку.discord.js
v12 используетMana&ers
и, следовательно, нуждается в свойстве кэша сейчас (bot.channels.cache.&et
)
Ответ №2:
Как я вижу в документации, метод fetch() возвращает обещание. (Ссылка)
Итак, чтобы получить канал, вам нужно использовать текущий код:
bot.channels.fetch("id").then(channel =&&t; {
channel.send(messa&e);
});
Комментарии:
1. На моей стороне это отлично работает. Попробуйте обновить свой discord.js версия до последней.
2. Обычно да. Я не понимаю, почему это не работает, так как это работает на моей стороне.
3. возможно, что он не нашел канал по этому идентификатору. может помочь, если вы поместите больше своего кода в какую-нибудь ячейку для вставки, чтобы мы могли его просмотреть
4. имеет ли бот доступ к этому конкретному каналу? как это на сервере?
5. Безусловно, бот имеет к ней доступ. Но если у бота нет доступа, отображается другая ошибка