python – 为什么多个on_message事件不起作用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么多个on_message事件不起作用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2119字,纯文字阅读大概需要4分钟。
内容图文
为什么我不能有多个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.我怎样才能让这三个人都工作?
解决方法:
本机客户端无法实现
您只能有一个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扩展,则有一种本机方式可以有多个on_message回调.您可以通过将它们定义为侦听器来实现.您最多只能有一个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事件不起作用?全部内容,希望文章能够帮你解决python – 为什么多个on_message事件不起作用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。