Files
PrimoPearlBot/Test/GUI/console_0.py

75 lines
2.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sys
import customtkinter as ctk
import asyncio
import threading
# Ваши настройки и модули
from BotLibrary import *
from BotCode.routers import router as main_router
from BotCode.routers import set_commands
# Класс для перенаправления стандартного вывода в текстовое поле
class Logger:
def __init__(self, text_widget):
self.text_widget = text_widget
def write(self, message):
self.text_widget.insert("end", message)
self.text_widget.see("end") # Прокрутка к последнему сообщению
def flush(self):
pass
# Основная функция для запуска бота
async def main_bot():
just_fix_windows_console() # Подключение ANSI в Windows CMD
dp.include_router(main_router) # Подключение главного роутера
await set_all() # Установка настроек бота
await set_commands() # Установка команд бота
await bot_get_info() # Получение информации о боте
# Логирование в консоль и текстовое поле
logger.add(sys.stderr, colorize=True, format=logs_text, level="INFO")
logger.info(f"Начало запуска бота @{BotInfo.username}...")
bot_info_out() # Включение опроса бота
await dp.start_polling(bot) # Запуск бота
# Класс графического интерфейса
class BotConsoleWindow(ctk.CTk):
def __init__(self):
super().__init__()
# Настройка окна
self.title("Bot Console")
self.geometry("800x600")
# Создание текстового поля для логов
self.log_text = ctk.CTkTextbox(self, wrap="word", width=780, height=500)
self.log_text.pack(padx=10, pady=10)
# Перенаправление вывода в текстовое поле
sys.stdout = Logger(self.log_text)
sys.stderr = Logger(self.log_text)
# Кнопка запуска бота
self.start_button = ctk.CTkButton(self, text="Запустить бота", command=self.start_bot)
self.start_button.pack(pady=10)
def start_bot(self):
self.start_button.configure(state="disabled") # Отключить кнопку
threading.Thread(target=self.run_bot, daemon=True).start()
def run_bot(self):
asyncio.run(main_bot())
self.start_button.configure(state="normal") # Включить кнопку после завершения
if __name__ == "__main__":
app = BotConsoleWindow()
app.mainloop()