import telebot import multiprocessing import time import json from daemons import base from utils import platform from utils import queues class Daemon(base.Daemon): def __init__(self): self.processes: dict[str, multiprocessing.Process|None] = {} def execute(self): while True: bots = platform.platform_client.get_config('bots') for project_name, project in bots.items(): for bot_name, bot_info in project.items(): key = f'{project_name}_{bot_name}' proc = self.processes.get(key) if bot_info.get('poll_enabled'): if proc and proc.is_alive(): print(f'process for {project_name} {bot_name} is alive') continue print(f'starting process for {project_name} {bot_name}') process = multiprocessing.Process(target=self.start_polling, args=(bot_info['secrets']['telegram_token'], bot_info['queue'])) process.start() self.processes[key] = process print(f'started process for {project_name} {bot_name}') else: if proc is None: print(f'process for {project_name} {bot_name} is not alive') continue print(f'terminating process for {project_name} {bot_name}') proc.terminate() self.processes[key] = None print(f'terminated process for {project_name} {bot_name}') time.sleep(10) def start_polling(self, token: str, queue: str): bot = telebot.TeleBot(token) @bot.message_handler(content_types=['audio', 'photo', 'voice', 'video', 'document', 'animation', 'text', 'location', 'contact', 'sticker', 'video_note']) def do_action(message: telebot.types.Message): queues.set_task(queue, message.json, 1) bot.polling()