hoojpop
@hoojpop

Как правильно запустить Discord-бота в потоке?

Работаю с PyQt5. Нужно запустить Discord-бота вместе с остальным потоком.

def BOT_RUN():
    print("FUNC: BOT_RUN")
    bot.run(config.BOT_TOKEN)


class WorkThread(QtCore.QThread):
    threadSignal = QtCore.pyqtSignal(int)

    def __init__(self):
        super().__init__()

    def run(self):
        i = ''
        self.msleep(300)
        self.threadSignal.connect(BOT_RUN)
        self.threadSignal.connect(CHECK_CSVS)
        self.threadSignal.connect(SERVER_MONITORING)
        self.threadSignal.emit(i)
        self.threadSignal.disconnect(CHECK_CSVS)


self.threadSignal.connect(BOT_RUN) - срабатывает и запускает бота, но приложение закрывается. Будто, запустил бота и это ему хватает.

Для дебага написал в каждой функции print("FUNC: функция"), чтобы понять, запускаются ли остальные функции.
Получается что не запускается:

FUNC: BOT_RUN
PS C:\Users\...\Desktop\LOGGER>


Как продолжить дальнейшее действия кода после запуска бота?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
hoojpop
@hoojpop Автор вопроса
def START():
    loop = asyncio.new_event_loop()
    try:
        loop.run_until_complete(bot.start(config.BOT_TOKEN))
    except KeyboardInterrupt:
        loop.run_until_complete(bot.close())
    finally:
        loop.close()

class WorkThread(QtCore.QThread):
    threadSignal = QtCore.pyqtSignal(int)

    def __init__(self):
        super().__init__()

    def run(self):
        i = ''
        self.msleep(300)

        self.threadSignal.connect(START)
        self.threadSignal.emit(i)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Я не в курсе как работает threadSignal.connect(), но я знаю, что bot.run() не вернёт управление, пока бот не завершит работу.
Т.е. из функции BOT_RUN поток управления не вернётся ещё очень долго.
Возможно, стоит перепланировать, какой поток что делает? Выделить отдельный поток под bot.run()?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы