- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为什么我不能有多个 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/
我正在使用discord.py 编写一个discord 机器人。我编写了一个初始版本,但我认为所有这些都需要重新组织,因此我将代码移动到不同的文件中。 代码与以前相同,但现在当我启动机器人时,机器人检
在 gui 应用程序中有 ON_MESSAGE(id, handler) 和 hanler 的 LRESULT CMainFrame::handler(WPARAM wParam, LPARAM lP
如何接收 MQTT 并将其传递给我设置的 bash 脚本?我收到的值在我发送的消息和收到消息之间不断增加,我无法判断它是否已执行 bash 脚本,并且它不会打印后面的行进行检查,所以我怀疑有什么问题之
我的代码运行正常。只有一个问题,即在调用任何命令后,我的 on_message 会立即被调用(这会导致一些副作用) async def delete_on_swear(message): if
当我将太多参数传递给f()时,为什么python不抛出错误或异常?显然,由于该错误,未执行f()。我正在使用VS-Code和python 3.8。 (如果要复制,则必须安装websocket_clie
我使用python从nodejs服务器接收流数据,使用以下python代码。websocket 应该获取实时流数据。我假设 python 的 WebSocketApp 获取流数据的唯一方法是通过 on
为什么我不能有多个 on_message 事件? import discord client = discord.Client() @client.event async def on_ready()
基本上,一切似乎都可以正常工作并启动,但由于某种原因我无法调用任何命令。我现在已经轻松地环顾四周并查看示例/观看视频,但我终生无法找出问题所在。代码如下: import discord import
我正在尝试使机器人基本上处于 sleep 模式的命令,这意味着让机器人停止响应命令(如果可能的话,或 on_messages)尝试使用 client.pause (Boolean) 但它没有给出错误我
我有以下类(class): class SessionHandler(tornado.websocket.WebSocketHandler): @tornado.gen.coroutine
假设我已经订阅了某个主题,并且 mosquitto 服务器正在持续发布有关该主题的一些消息。 当新消息从 mosquitto 代理到达时,如何调用 on_message 方法?它是在主线程上运行,从而
我是 Tornado 的新手。我正在尝试用 Tornado 构建一个聊天服务器代理,我从网络客户端收到消息,通常它只需要将其发送回来,但是,我需要将这些消息发送给另一个服务器优先,问题来了,等待其他服
我最近开始用 Python 制作一个 Discord 机器人(用它测试 Python 的基础),并自己创建了一个带有多个命令的功能机器人。为了扩大其用途,我添加了一个级别/XP 系统,到目前为止该系统
当我的代码中有 on_message() 时,它会停止所有其他 @bot.command 命令的工作。我尝试await bot.process_commands(message),但这也不起作用。这是
我已经安装了 Mosquitto 并在终端中使用没有问题,还为 c++ 安装了 paho,mosquitto 和 paho 都运行良好。然后通过 pip 安装 paho for python。现在我正
请帮忙:)我刚开始在 python 中使用 MQTT。当我运行以下程序时: import paho.mqtt.client as mqtt def on_connect(client, userdat
我的 discord.py 脚本给了我一个意外错误。它基本上标记了我在 async def on_message(): 之外定义的所有变量。但在此之下用作“未定义”。 好吧,您可以通过在 on_mes
这让我发疯。我正在使用 Tornado 3.2 和 python 2.7。我已经在我的测试机 (Windows) 和我的 Linux 机器上都试过了。我只是在用(我认为是)一个简单的聊天室应用程序试水
我正在用 python 编写一个 discord-bot,它可以在 IntelliJ 甚至终端上正常运行。 当我尝试让它在 linux 服务器上运行但未连接到它时,问题就开始了 # Calle
最近我的 bot 越来越大,我花时间重写代码以使其与 Discord Py 的 cogs 系统一起工作 我已经正确调整了所有代码,但是我停止工作的所有 on_message 事件都没有抛出任何类型的错
我是一名优秀的程序员,十分优秀!