Проблемы с отправкой

#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 with guild.channels.cache.find . Collection.find является синхронным методом. Снимите await .

2. Нет, все равно не работает.

3. Поскольку каналы отображаются по их идентификатору, вы можете просто сделать var hsa = guild.channels.cache.get(cha)

4. Дело в том, что я ищу канал не по идентификатору канала, а по идентификатору автора сообщения, потому что именно так называются каналы.

5. Вы уверены, что канал существует? Когда вы их создаете? Есть ли у бота разрешения на его просмотр?

Ответ №1:

У меня есть для вас 2 типа проблем:

  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");