Отправка сообщения в отдельной теме с помощью discord.py? - PullRequest
0 голосов
/ 23 марта 2020

Я кодирую команду (/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()

(я просто хочу, чтобы это сработало, поэтому, если у вас есть альтернативные решения, вы также можете сказать мне.)

Спасибо за помощь.

...