#discord.js
#discord.js
Вопрос:
Я пытаюсь отправить встраивание в канал, используя идентификатор канала, сохраненный с помощью enmap. Каналы сохранялись как <#123456789>
, что я решил с помощью replace()
. Консоль.журнал подтверждает, что то, что сохранено в этой записи enmap, не что иное, как 123456789
.
Однако, когда я пытаюсь: client.channels.cache.get(chanID).send({ embed })
или: client.guild.channels.resolve(chanID).send({ embed })
( chanID
содержит идентификатор канала, полученный из enmap.)
Я получаю сообщение об ошибке: Cannot read property 'send' of null
.
Код channels.resolve работает на другом боте, когда идентификатор вводится напрямую.. поэтому я не понимаю, почему это выдает ошибки.. очевидно, что всего несколько дней в JS не помогает 🙂
Любая помощь была бы очень признательна!
`
Комментарии:
1. Если вы используете DiscordJS v12, вам необходимо кэшировать каналы. Вы получили
client.guild.channels.resolve
, когда это должно бытьclient.guild.channels.cache.resolve
.
Ответ №1:
Enmap не является ошибкой. client.guild.channels.resolve(chanID).send({ embed })
неверно client.guild.channels
, поскольку неправильно сформулировано. Для этого должна быть определена гильдия. Когда вы это делаете client.channels.cache.get(chanID).send({ embed })
, он выполняет поиск канала на всех серверах, к которым подключен бот. Кроме того, значение Enmap должно быть строкой, а не числом. Попробуйте и скажите мне, была ли устранена ваша ошибка
РЕДАКТИРОВАТЬ: кэш обновляется при вызове канала с client.on
помощью . Если вы хотите получить его, используйте client.channels.fetch(chanID)
. Если вы хотите сохранить его в кэше, чтобы исключить ожидание, используйте client.channels.fetch(chanID, true)
.
Комментарии:
1. Привет, мигу. Спасибо за ответ .. извиняюсь за поздний ответ.
client.channels.cache.get(chanID).send({ embed })
конечно, работает, если я использую идентификатор канала. Когда я использую переменную, содержащую идентификатор канала .. она перестает работать и выдаетTypeError: Cannot read property 'send' of undefined
ошибку. Вывод содержимого переменной на консоль показывает, что она не содержит ничего, кроме идентификатора канала, никаких других символов или номеров идентификаторов. Я перепробовал все, что мог придумать, но продолжаю получать ту же ошибку. использование toString() также не имеет значения. Я в тупике.2. Привет @ G.R, я нашел ошибку. В кэше он содержит все, что нужно обработать боту. Я имею в виду, что вы не можете извлечь канал из кэша, не взаимодействуя с ним
client.on
. Если у вас естьclient.on('message',...
, и вы отправляете сообщение по нужному каналу, он сохранит этот канал в кэше, и вы сможете его использовать. Но мне нравится решение не кэшировать!client.channels.fetch(chanID)
должно сработать. Если вы хотите его кэшировать, используйтеclient.channels.fetch(chanID, true)
Hope it works!