gpt4 book ai didi

python - 为什么多个 on_message 事件不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:09 24 4
gpt4 key购买 nike

为什么我不能有多个 on_message 事件?

import discord

client = discord.Client()

@client.event
async def on_ready():
print('in on_ready')

@client.event
async def on_message(message):
print("in on_message #1")

@client.event
async def on_message(message):
print("in on_message #2")

@client.event
async def on_message(message):
print("in on_message #3")

client.run("TOKEN")

例如,如果我在 discord 中输入任何内容,它总是只会触发最后一个 on_message。我怎样才能让这三个都工作?

最佳答案

使用原生 Client 是不可能的

你只能有一个 on_message,如果你有多个,只有最后一个会被on_message事件调用。您只需组合三个 on_message

import discord

client = discord.Client()

@client.event
async def on_message(message):
print("in on_message #1")
print("in on_message #2")
print("in on_message #3")

client.run("TOKEN")

像任何 Python 变量/函数(除非装饰器存储你的函数,@client.event 只保留最近的回调),如果多个名称相同,最近的将被保留,所有其他的将被覆盖。

这是我编写的一个简单示例,旨在让您广泛了解 discord.py 中的事件如何工作(注意:实际代码并不完全像这样,因为它被重写并显着减少)。

class Client:
def event(self, func):
if func.__name__ == "on_message":
self.on_message_handle = func
return func

def receive_message(self, msg):
func = getattr(self, "on_message_handle", None)
if func is not None:
func(msg)
else:
self.process_commands(msg)

client = Client()

@client.event
def on_message(msg):
print("in on_message #1")

@client.event
def on_message(msg):
print("in on_message #2")

client.receive_message("hello")
# "in on_message #2"

如您所见,client.event 只保留一个 on_message 实例。


您可以使用 Bot 实例

或者,如果您使用的是 discord.py 的 ext.commands 扩展,则有一种 native 方法可以进行多个 on_message 回调。您可以通过将它们定义为 listener 来实现。您最多可以拥有一个 on_message 事件,以及无限数量的 on_message 监听器。

from discord.ext import commands

bot = commands.Bot('.')

@bot.event
async def on_message(msg):
print("in on_message #1")
await bot.process_commands(msg) # so `Command` instances will still get called


@bot.listen()
async def on_message(msg):
print("in on_message #2")


@bot.listen()
async def on_message(msg):
print("in on_message #3")

bot.run("TOKEN")

当收到一条消息时,所有的on_message #1-3都会被打印出来。

关于python - 为什么多个 on_message 事件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com