【问题标题】:Problems with sending发送问题
【发布时间】:2021-10-10 10:18:40
【问题描述】:

所以,我的服务器为每个用户都有频道,频道的名称就是他们的用户 ID。

我希望它的工作方式是;

当用户向机器人发送任何消息时,机器人会在服务器中查找该频道(以用户 ID 命名的频道)并将其在 DM 中收到的消息内容发送,但我不断收到错误消息:

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

【问题讨论】:

  • 您收到错误是因为您将awaitguild.channels.cache.find 一起使用。 Collection.find 是一种同步方法。删除await
  • 不行,还是不行。
  • 由于频道是通过他们的 ID 映射的,你可以简单地做var hsa = guild.channels.cache.get(cha)
  • 问题是我不是通过频道 id 来查找频道,而是通过消息作者的 id 来查找频道,因为这就是频道的命名方式。
  • 您确定频道存在吗?你什么时候创建它们?机器人是否有权查看它?

标签: javascript node.js discord discord.js


【解决方案1】:

我有两种类型的问题要问你:

  1. bot 没有权限查看频道,或者频道不存在。 (但是,您在 cmets 中另有说法)
  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");

【讨论】:

    猜你喜欢
    • 2012-04-02
    • 2011-07-14
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2014-08-09
    • 2011-09-07
    相关资源
    最近更新 更多