#javascript #node.js #collections #discord.js
Вопрос:
Я хочу получить канал только с указанным идентификатором. Итак, способ, описанный в документах, выглядит следующим образом: client.channels.cache.get('channel id')
, и именно так я это и делаю. Но, распечатав кэш, я вижу, что карта кэша пуста (длина = 0). Дело в том, что при размещении console.log(client.channels.cache)
в моем клиенте «готового» прослушивателя событий он распечатывается.
Я читал, что эта ошибка может появиться, если клиент не вошел в систему должным образом, но этого не может быть, поскольку я вызываю функцию с помощью команды, и журнал консоли в прослушивателе событий «ready» вызывается сразу после запуска программы и работает лучше.
Так что, должно быть, есть что-то еще, чего мне не хватает.
Комментарии:
1. Какую версию
discord.js
вы используете?
Ответ №1:
Если вы знаете идентификатор канала, вы можете просто fetch
указать канал по этому идентификатору. Если он кэширован, он возвращает кэшированный канал:
const channel = await client.channels.fetch(CHANNEL_ID)
console.log(channel)
fetch()
возвращает обещание, поэтому вам нужно будет использовать await
в асинхронной функции или then
методах.
Комментарии:
1. Итак, по-вашему, я получил еще одно сообщение об ошибке, сообщающее мне, что в тот момент, когда я выполнял запрос для канала, мой клиент не был авторизован (как я уже думал). Простым добавлением client.login(‘TOKEN’) в функцию это исправлено. Я не знаю, могу ли я столкнуться с проблемами при повторном входе в свой код, поэтому, если вы что-то знаете об этом, пожалуйста, дайте мне знать. Но спасибо за ваш ответ. Это помогло найти способ <3
2. Не уверен, могу ли я понять 1, где вы пытаетесь получить канал, 2, где вы пытаетесь снова войти в систему.
3. Я вызываю функцию из команды в discord (я полагаю, вы знаете, как примерно выглядит настройка при обработке команд и вызове соответствующей функции). И в этой функции, которая вызывается из команды, я хочу получить канал и прямо перед этим запросом я теперь добавил
client.login()
. Надеюсь, это понятно