Как реализовать параллельную работу Телеграм бота и приложения на customtkinter?
Есть приложении на customtkinter и бот на aiogram, оба реализованы через класс с функциями, в скрипте приложения используется экземпляр бота и 1 из его функций, а в самом боте помимо этой функции также имеется асинхронная обработка кнопок. Нужен способ параллельной работы обоих скриптов. Пытался через многопоточность или асинхрон но не получилось.
скрипт бота:
class ChatBot():
def __init__(self, bot_token):
self.bot = Bot(token=bot_token)
self.dp = Dispatcher()
self.setup_handlers()
self.router = Router()
print('bot initiated')
async def start(self):
print("Bot started.")
await self.dp.start_polling(self.bot)
async def stop(self):
print("Bot stopped.")
await asyncio.run(self.dp.stop_polling())
def send_new_order_message(self, ID, Customer_name, Customer_phn, Service_name, master_id):
message_text = f"Новая заявка! №{ID}\n" \
f"Тип услуги - {Service_name}\n" \
f"Клиент - {Customer_name}\n" \
f"Номер - {Customer_phn}"
button = InlineKeyboardButton(text='Выполнено✅', callback_data=f"Order_succes_{ID}")
keyboard = InlineKeyboardBuilder().add(button)
asyncio.run(self.bot.send_message(chat_id=master_id, text=message_text, reply_markup=keyboard.as_markup()))
def setup_handlers(self):
@self.dp.callback_query(lambda callback: callback.data.startswith('Order_succes'))
async def Order_succes(callback: types.CallbackQuery):
print('buttonpressed')
ID = int(callback.data.split('_')[2])
data = {'ID': ID, 'CstmrID': '', 'SrvcID': '', 'Dt': '', 'Master': ''}
for key, value in data.items():
data[key] = (c.execute(f"SELECT {key} FROM Unfinished_Orders WHERE ID = {ID}")).fetchone()[0]
c.execute(f"DELETE FROM Unfinished_Orders WHERE ID = {ID}")
print(data)
columns = ', '.join(data.keys())
placeholders = ', '.join(['?' for _ in data])
values = tuple(data.values())
c.execute(f"INSERT INTO Finished_Orders ({columns}) VALUES ({placeholders})", values)
conn.commit()
await self.bot.edit_message_reply_markup(callback.message.chat.id, callback.message.message_id)
bot = ChatBot(bot_token)
попытка в многопоточность:
from app import App
from TBot import bot
async def run_customtkinter():
app = App()
app.mainloop()
async def start_bot():
await bot.start()
if __name__ == "__main__":
# Запуск бота в отдельном потоке
bot_thread = threading.Thread(target=lambda: asyncio.run(start_bot()))
bot_thread.start()
bot_thread.join()
# Запуск tkinter в основном потоке
run_customtkinter()