【问题标题】:discord.py on_message definitions conflicting?discord.py on_message 定义冲突?
【发布时间】:2022-01-15 01:13:59
【问题描述】:

这是代码:

async def on_message(message):
    if client.user.mentioned_in(message):
        await message.channel.send("Hey!")

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if "$example" in message.content:
        if message.author.id == int(discord id here):
            await message.channel.send("Hi Name")
        if message.author.id == int(discord id here):
            await message.channel.send("Hi Name2")

所以,我的问题是,如果我有第二段代码,我的第一段代码就不起作用。没有错误消息,它似乎不存在。我假设反之亦然。 我的问题是:我想知道是什么原因造成的,以及我应该如何解决它。我的代码不正确吗?我错过了什么吗?还是我应该将其中之一定义为其他东西?我被困住了。提前致谢。

【问题讨论】:

  • on_message 一次只能引用其中一个函数。我本来预计会出现某种运行时错误,但是自从我写了一些 python 以来已经有一段时间了。查看其他 SO 帖子:Methods with the same name in one class in Python
  • 我是他们没有被同时使用,我相信 discord py 的重点是单独编程每个机器人命令,这意味着程序不会同步运行。这就是为什么我对这个问题感到困惑,因为每个定义都不应该知道另一个存在。
  • Python 不允许定义两个或多个同名函数

标签: python discord discord.py


【解决方案1】:

在同一个文件中不能存在两个同名的函数。您可以尝试使用cog 或合并您的函数代码。

【讨论】:

  • 我是否只是将每个定义分成各自的类?对不起,我很新。
  • 是的,这就是 cog 的作用,它将与机器人相关的代码片段分开,因此它们易于阅读并且可以重复。我已经在我的答案中链接了 cogs 的文档。
  • 谢谢,我会这样做的
  • 不确定你是否仍然在线@konstantinos-georgiadis 但是使用类会破坏我的代码,discord.py 中超过一半的内容说它们不存在,或者无论如何都会破坏我把它们。例如,除非我将“self”放在我的定义中,否则一切都会变红: async def on_message(self, message): 但是当我实际尝试使用它时,就好像我什至从未声明过 message。该课程破坏了我的整个代码。
  • 嘿@Occy,我链接的文档页面说事件侦听器使用装饰器commands.Cog.listener() 进行标记,这应该可以解决您的侦听器未被标记的问题。另外我建议你看看面向对象的编程和装饰器,它们是值得了解的东西,肯定会帮助你解决不和谐的齿轮。
猜你喜欢
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2019-08-23
  • 2021-01-30
相关资源
最近更新 更多