我正在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创建一个事件循环,然后调用该函数,但我还是以错误告终。
有什么想法吗?
您可以使用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()