首页 > 解决方案 > 使用 discord.py 在单独的线程中发送消息?

问题描述

我正在为我的不和谐机器人编写命令(/mc,/是前缀)以获取结果并发送消息。但是得到结果需要很多时间。为了防止一次多个请求,我将获取结果的代码放在一个单独的函数mainmc()(不是async)中,并mainmc通过创建一个新类来启动线程并作为线程调用mainThreadMC(threading.Thread),并创建一个新的类对象并启动它,这样当有多个请求时,该命令将立即运行,而无需等待前一个请求。但是在我运行它之后很快,我发现它是不可能的,因为发送消息需要await,否则它将无法工作。但是如果你await在一个函数中有这个函数需要async。这意味着我必须编辑模块threading让它工作?当然,这不是这样做的方法。但是我该怎么办?

这是代码(简化):

class mainThreadMC(threading.Thread):
    def __init__(self, threadID, name, ctx,args):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.args = args
        self.ctx = ctx
    def run(self):
        logger.info("Starting " + self.name)
        mainmc(self.ctx,self.args)
        logger.info(f'Exiting {self.name}')

def mainmc(ctx,args):
    # fetching data... creating / editing variable embed
    ctx.send(embed=embed)  #ERROR!!!!!!!!!!!
    # finalize...
    return

@bot.command(name='mc',pass_content=True)
async def mc(ctx,*,args=""):
    global runno
    threadMainMC = mainThreadMC(runno,f"MainMC_{str(runno)}",ctx,args)
    threadMainMC.start()

(我只是想让它工作,所以如果你有一些替代解决方案,你也可以告诉我。)

感谢您的帮助。

标签: pythonpython-3.xmultithreadingpython-3.6discord.py

解决方案


推荐阅读