在Python Discord机器人中从同步线程发送消息

时间:2019-02-28 15:14:20

标签: python multithreading discord python-asyncio discord.py

我正在使用discord.py库在Python 3.6中开发Discord机器人,但在尝试从我创建的线程向特定通道发送消息时遇到问题。

基本上,我有一些监视网站的线程,我想调用一个函数(我正在传递给线程),当我注意到网站上的更改时,该函数将消息发送到一个特定的频道。

我最初尝试直接在没有异步/等待的情况下调用client.send_message(),但是它根本不起作用,所以我编写了异步/等待函数来发送消息(测试了它并起作用),但是我又遇到了问题它从线程中获取,所以我最终将bot客户端传递给我的线程并调用self.bot_client.loop.create_task(self.sendmsgfunction(msg))。可以,但是与机器人用通常的{{1}来回答消息所花费的时间相比,它的速度慢得令人难以置信(大约需要15秒发送消息,而且无论如何也可能不是正确的处理方式)。 }功能。

我已经尝试过使用asyncio创建一个事件循环,然后调用该函数,但是再次失败了。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果要向特定频道发送消息,首先应获取频道对象。

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

那你就可以做

await channel.send()

答案 1 :(得分:0)

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

import asyncio

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

asyncio.run(async_func())