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

仅在某些消息上出现Python discord bot属性错误

袁单鹗
2023-03-14

我很困惑这个错误是如何发生的,它只发生在当我在我的机器人中使用踢/禁止命令而没有其他命令时,我看了on_message函数,它不会导致错误,当我发送任何其他消息时,除了从踢/禁止命令,我不知道为什么。我正确地通过公会,有一个id属性,因为代码还在工作,但它还是会出现这个。

以下是错误:

    Ignoring exception in on_message
Traceback (most recent call last):
  File ".local/lib/python3.7/site-packages/discord/client.py", line 333, in _run_event
    await coro(*args, **kwargs)
  File "file path", line 1937, in on_message
    await open_automod(guild)
  File "file path", line 1920, in open_automod
    if str(guild.id) in data:
AttributeError: 'NoneType' object has no attribute 'id'

下面是导致此错误的bot命令示例:

@bot.command(name='testlog')
@commands.has_permissions(kick_members=True)
async def kick (ctx, member:discord.Member, *reason):
    moderator = ctx.message.author.id
    server = ctx.guild.id
    if member == None or member == moderator:
        await ctx.channel.send("You cannot kick yourself")
        return
    if reason == None:
        reason = "no reason stated"
    reason = " ".join(reason)
    message = f"You have been banned from {ctx.guild.name}. Reason: {reason}"
    await member.send(message)
    await ctx.channel.send(f"{member} has been kicked. Reason: {reason}")
    await send_log('test', moderator, member.id, reason, server)

下面是open_automod函数:

async def open_automod(guild):
    data = await get_automod_data()

    if str(guild.id) in data:
        return False
    else:
        data[str(guild.id)] = {}
        data[str(guild.id)]["automodenabled"] = f'off'
        data[str(guild.id)]["automodlogging"] = f'false'
        data[str(guild.id)]["automodchannel"] = 0

    with open("automoderator.json","w") as f:
        json.dump(data,f)
    return True

下面是在“公会”中传递的代码部分:

@bot.event
async def on_message(message):  
    guild = message.guild
    await open_automod(guild)

我不明白的是,为什么这个错误只出现在我使用kicks或bans的消息上,或者在上面的例子中是测试kick。谁能解释一下为什么我会出现这个错误,为什么它只发生在这条消息上?消息的一个示例是“h/testlog@user reason”

共有1个答案

祁烈
2023-03-14
  1. 看起来正在运行消息上的,而不是错误显示的kick。从您的问题来看,您似乎期望运行kick。这是因为在消息上覆盖了。看到不和谐。为什么on_消息使我的命令停止工作的py文档:

覆盖\u消息上提供的默认值将禁止运行任何额外的命令。要解决此问题,请添加一个bot。处理\u命令(消息)消息末尾的行。或者,您可以[使用@bot.listen('on_message')]

@bot.event
async def on_message(message):  
    if (guild := message.guild):
        await open_automod(guild)
  • 如果仅在通道内调用,则应确保检查之前的ctx.guildctx.channel不是尝试使用它们,并回复如何正确使用机器人的说明。
  • 如果命令是直接发送到bot,而不是在一个通道中,你应该想出另一种方法来获取公会通道(例如存储它,或作为命令的一部分传递)。

 类似资料:
  • 你好,我看到的日志信息只在某些类,不知道在哪里看。是我的原木模式搞错了还是?这是我的log4j配置,我将它与sfl4j一起使用: null 我创建的记录器是这样的,类字段: 和日志记录,如: 有什么想法吗? 更新 根据Petar Minchev的回答改为信息,但我仍然没有得到任何东西。 更新II 现在,在添加了一些依赖项之后,它可以在一些类上工作(仍然不能在其他一些类上工作)。有一些实现runna

  • 我有一个目标。我想通过删除除某些特定属性之外的所有属性来修改对象(而不是克隆它)。例如,如果我从这个对象开始: 并且只需要属性p1、p2和p100,如何获得此对象: 我明白如何用蛮力做到这一点,但我想要一个更优雅的解决方案。

  • 我的Android应用程序无法安装在一些“随机”、较旧的API设备上(任何低于API级别25的设备),错误如下: 所以,基本上看起来… API 我见过类似的问题,答案与小写的包名有关。我已经有了。 有人有什么想法吗? 舱单: BTW我用的是Visual Studio 2019和一夫一妻制3.7

  • 这条信息是什么意思?我搜索了一下,但什么也没找到。什么可能导致这一切?

  • 我正在Apache7.xx应用程序上开发Spring MVC,并且没有任何错误地设置了所有内容。 我有一个应用程序将我的dispatcher servlet映射到HomeController,HomeController为视图“home/view”提供服务,该视图也在工作。 spring-servlet相关片段(在我的例子中是cmgr-servlet) applicationcontext.xml

  • 问题内容: 我正在使用Android Custom Launcher。该应用程序可以在某些手机上完美运行,但不能在其他手机上启动。启动应用程序时,会发生以下错误。 问题答案: 因此,经过大量搜索之后,我才知道这个问题是由于多重处理造成的。在某些手机上,多点排序不起作用。可能是由于其Android版本。但是我通过引入应用程序类来解决此问题 在清单中,我在应用程序标签中输入了该名称,例如: