Ошибка типа: channel.send не является функцией (устарела?)

#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. Безусловно, бот имеет к ней доступ. Но если у бота нет доступа, отображается другая ошибка