【问题标题】:Discord js cannot find the channel to send error messages inDiscord js 找不到发送错误消息的通道
【发布时间】:2021-06-28 16:15:21
【问题描述】:

根据发送给它的消息,我有以下代码编写文本:

var text = null;
try {
 commandFiles.forEach((file) => {
  if (text != null) {
   return;
  }
  text = file.functionSwitch(event, command, commandArgs);
 });
} catch(err) {
 text = "I seem to have hit a problem. Please let bot creator look at it.";
 const errChannel = client.channels.cache.find(channel => channel.id === errChannelID);
 errChannel.send(err.message);
}

代码给出以下错误:

TypeError:无法读取未定义的属性“发送”

我不确定如何修复此错误或正确找到频道。我尝试过getfind

提前谢谢你。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    尝试通过其 ID 访问 fetch the channelfetch() 返回一个承诺,一旦它被解决,您将收到 ID 为 errChannelID 的频道(我在下面将其命名为 ch)。因此,如果具有该 ID 的通道存在,则可以使用其 send() 方法发送消息,如果它不存在,则拒绝承诺并运行 catch() 方法中的函数:

    client.channels
      .fetch(errChannelID)
      .then((ch) => ch.send(err.message))
      .catch(console.error);
    

    确保errChannelID 是一个有效的雪花并且是一个字符串。如果您将其存储为整数并且大于Number.MAX_SAFE_INTEGER (2^53),它将无法以数字类型表示,并且将通过 JavaScript 转换为其他值。

    【讨论】:

    • 另外,我刚刚尝试了该代码。现在它给了我一个 DiscordAPIError 说“未知频道”。这是一个新错误,至少
    • 我刚刚更新了我的答案,详细说明了它的工作原理。该 ID 似乎不是有效的频道 ID。
    • 我现在正在查看它给出的错误消息。出于某种原因,当频道 id 为 827207044817879091 时,它会给出“路径:'/channels/827207044817879000'”。将 id 直接放入 fetch 没有帮助。
    • 您似乎将整数作为雪花而不是字符串传递。大于 2^53 的整数在数字类型中不可表示。 827207044817879091 大于 2^53,所以会被 JavaScript 转换为 827207044817879000。尝试在它周围使用引号,例如:const errChannelID = '827207044817879091'.
    • 这修复了它!非常感谢。我没有意识到整数限制会搞砸,虽然我应该用 0 来计算。
    猜你喜欢
    • 2020-08-25
    • 2021-10-28
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2021-03-24
    • 2020-05-18
    • 2019-08-26
    相关资源
    最近更新 更多