Nat*_*rry 3 python discord discord.py
为什么不能有多个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")
Run Code Online (Sandbox Code Playgroud)
例如,如果我输入不一致的内容,则总是只有最后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")
Run Code Online (Sandbox Code Playgroud)
像任何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"
Run Code Online (Sandbox Code Playgroud)
如您所见,client.event仅保留一个实例on_message。
Bot实例另外,如果您使用的ext.commands是discord.py扩展名,则可以使用本机方式来进行多个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")
Run Code Online (Sandbox Code Playgroud)
收到消息后,on_message #1-3将全部打印。
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |