Отправка сообщения с использованием идентификатора канала, сохраненного с помощью enmap

#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!