当前位置: 首页 > 知识库问答 >
问题:

如何让我的Discord Bot忽略类型错误并继续执行我的函数?

陶鸿畴
2023-03-14

正如问题所述,我有一个机器人,我正在使用它向所有被邀请加入的行会发送特定频道的消息。首先,在我的控制实验中,这个功能在我用3台服务器做的控制实验中起作用,我用机器人需要的通道来中继我所有的消息。然后,当我的bot公开时,一些成员的服务器中没有此通道,这导致我的bot在执行我的测试/中继功能时显示TypeError

TypeError: Cannot read property 'send' of undefined

我希望bot能够将我的中继消息发送到我指定的频道名称,并忽略其服务器中没有该频道的所有人,并继续将消息发送到其服务器中有该频道的所有其他人。有人能告诉我该怎么做吗?

这是我的命令函数代码。我试着用了一个try-and-catch挡块,但它似乎也不起作用。

细节:

关联=从我这里接收bot消息所需的通道。

test=我发出的用于中继消息的命令。

if (command === "test") {
  const Detail = args.join(" ");
  try {

    bot.guilds.cache.forEach(guild => {
      guild.channels.cache.find(t => t.name == 'associations').send(Detail)
    });

  }
  catch (err) {
    console.log(err)
  }
}

共有1个答案

南门祯
2023-03-14

正如syntle所说,您应该让频道名称更具包容性,但要回答您的问题,您只需使用

if (command === "test") {
    const Detail = args.join(" ");
    bot.guilds.cache.forEach(guild => {
        const channel = guild.channels.cache.find(t => t.name.toLowerCase().startsWith('associations'));
        if (channel) { channel.send(Detail); }
    });
}

当错误处理像if语句一样容易时,不需要昂贵的try块。它也确实起作用了,它记录的原因是因为您指定它使用console.log(err)记录

 类似资料:
  • 问题内容: 我的代码中有一个try … except块,当抛出异常时。我真的只想继续编写代码,因为在这种情况下,所有内容仍然可以正常运行。问题是,如果您将except:块保留为空或不执行任何操作,则会出现语法错误。我不能使用continue,因为它不在循环中。我可以使用一个关键字来告诉代码继续运行吗? 问题答案: except Exception: pass 适用于pass语句的Python文档

  • 像这种类型错误,发现是因为扩展版本的问题导致的错误,打算不去修复,想进行忽略,但是发现像 <!-- @ts-ignore --> 这样的注释没效果,这个怎么办好?

  • 问题内容: 我有一些使用Eclipse和Java 6 SDK编写的Java代码,因此实现接口的方法都带有注释-Java 6中是合法的注释,而Java 5中不是。 我想使用Java 5 SDK(在Mac OS X 10.5上)编译相同的代码。除注释外,所有内容均可编译并正常运行。有什么方法可以让javac忽略此项目的注释,还是唯一删除所有注释的解决方案? 问题答案: 显然,您可以升级到Java 1.

  • 我有一个带有以下方法的TestNG类。 我想实现的是:Test2、Test3和Test 4依赖于Test1。所以只有当Test1通过时,我才需要继续。 Test5依赖于Test2、Test3和Test4。但是我可以跳过任何测试(即Test2、Test3或Test4),并且如果其他测试没有失败,我仍然希望继续执行Test5。 我怎样才能做到这一点。

  • 问题内容: 我正在使用Retrofit(与OkHttp和GSON结合使用)与在线Web服务进行通信。该Web服务的所有响应都有一个默认包装,类似于: 在此示例中,将为或。此外,仅在处理请求时发生错误时才包含任何内容。最后但并非最不重要的一点将包含调用的实际结果(示例中为字符串,但是某些调用返回JSON数组或JSON对象)。 为了处理此元数据,我创建了一个通用类,如下所示: 我还创建了代表有时给出的

  • 我有这个数据类型,只是对相关数据进行分组。它应该是一个类似结构的东西,所以我选择了一个 另一方面, 没有默认值,因此我驻留在另一个答案中提出的黑客攻击中。 显然,这使得类型检查失败:< code >错误:“Callable[[Type[NT],Any,Any,Any,Any,Any],NT]”没有属性“_ _ defaults _ _” 因为我很清楚这是一种黑客行为,所以我使用内联注释< code