import telebot from telebot.types import Message class CommandProcessor: """Processes user input and dispatches the data to other services.""" bot: telebot.TeleBot def __init__(self, token: str): if token is None or len(token) == 0: raise ValueError("Token should not be empty") self.bot = telebot.TeleBot(token) def run(self): """Runs a bot and polls for new messages indefinitely.""" self.bot.register_message_handler(commands=['help', 'start'], callback=self.__command_help) self.bot.register_message_handler(commands=['add'], callback=self.__add_feed) self.bot.register_message_handler(commands=['list'], callback=self.__list_feeds) self.bot.register_message_handler(commands=['del'], callback=self.__delete_feed) self.bot.infinity_polling() def __command_help(self, message: Message): self.bot.reply_to(message, 'Commands: "/add", "/list", "/del", "/help".') def __add_feed(self, message: Message): self.bot.reply_to(message, 'Feed added (stub)') def __list_feeds(self, message: Message): self.bot.reply_to(message, 'Your feeds: (stub)') def __delete_feed(self, message: Message): self.bot.reply_to(message, 'Feed deleted: (stub)') class Notifier: """Sends notifications to users about new RSS feed items.""" bot: telebot.TeleBot def __init__(self, token: str): self.bot = telebot.TeleBot(token) def send_updates(self, chat_id: int, updates: list): """Send notification about new items to the user""" for update in updates: self.__send_update(chat_id, update) def __send_update(self, chat_id: int, update): self.bot.send_message( chat_id=chat_id, text=self.__format_message(), parse_mode='MarkdownV2' ) def __format_message(self) -> str: update = { 'title': 'Item Title', 'text': 'Short item text here...', 'url': 'https://fediland.github.io/', } return ( f"**[{update['title']}]({update['url']})**\n\n" f"{update['text']}" )