提问者:小点点

在Python Discord bot中从同步线程发送消息


我正在Python3.6中使用Discord.py库开发一个Discord bot,在试图从创建的线程向特定通道发送消息时遇到了问题。

基本上,我有一些线程监视网站,我想调用一个函数(我正在传递给线程),当我注意到网站上的变化时,它会向一个特定的通道发送消息。

我最初尝试直接调用client.send_message(),而不使用Async/await,但它根本不起作用,所以我编写了Async/await函数发送消息(测试了它,它起作用了),但从线程调用它时再次遇到问题,所以我最终将bot客户端传递给我的线程,并调用self.bot_client.loop.create_task(Self.SendMsgFunction(msg))。这是可行的,但与机器人使用通常的@bot.event函数应答消息所需的时间相比,它慢得令人难以置信(发送消息需要大约15秒,而且这可能不是正确的方法)。

我已经尝试用asyncio创建一个事件循环,然后调用该函数,但我还是以错误告终。

有什么想法吗?


共2个答案

匿名用户

您可以使用asyncio.run()运行异步函数,如下所示:

import asyncio

async def async_func():
    print("Async function run!")

asyncio.run(async_func())

匿名用户

如果您想将消息发送到一个特定的通道,首先您应该获得通道对象。

channel = discord.utils.get(ctx.guild.channels, id=channel_id_here)

那你就可以做

await channel.send()