#javascript #node.js #discord #discord.js
Вопрос:
Итак, на моем сервере есть каналы для каждого пользователя, и название канала-это их идентификатор пользователя.
Я хочу, чтобы это работало следующим образом;
Когда пользователь отправляет боту какое-либо сообщение, бот ищет этот канал (канал, названный в качестве идентификатора пользователя) на сервере и отправляет содержимое сообщения, которое он получил в DMs, но я продолжаю получать сообщение об ошибке:
Cannot read property "send" of undefined
Вот мой код
client.on("message", async (message) => {
if (message.channel.type === "dm") {
if (message.author.bot) return;
var guild = client.guilds.cache.get("840120593311334410");
const cha = message.author.id;
var hsa = await guild.channels.cache.find((ch) => ch.name === cha);
hsa.send("test");
}
});
Комментарии:
1. Вы получаете ошибку, потому что используете
await
withguild.channels.cache.find
.Collection.find
является синхронным методом. Снимитеawait
.2. Нет, все равно не работает.
3. Поскольку каналы отображаются по их идентификатору, вы можете просто сделать
var hsa = guild.channels.cache.get(cha)
4. Дело в том, что я ищу канал не по идентификатору канала, а по идентификатору автора сообщения, потому что именно так называются каналы.
5. Вы уверены, что канал существует? Когда вы их создаете? Есть ли у бота разрешения на его просмотр?
Ответ №1:
У меня есть для вас 2 типа проблем:
- У бота нет прав на просмотр канала, или канал не существует. (Однако в комментариях вы сказали иное)
- У вас нет канала в кэше — код, который вы используете, зависит от кэша, что означает, что вы должны убедиться, что у вас есть каналы в кэше. Используйте простой
GuildChannelManager.fetch()
для кэширования всех каналов.
var guild = client.guilds.cache.get("840120593311334410");
const cha = message.author.id;
await guild.channels.fetch(); //ONLY NEW LINE
var hsa = await guild.channels.cache.find((ch) => ch.name === cha);
hsa.send("test");