client.channels.cache.get(‘id’) возвращает пустую карту

#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() . Надеюсь, это понятно