summaryrefslogtreecommitdiff
path: root/telegram_bot.py
diff options
context:
space:
mode:
authorDmitrii Morozov <snoopdesigns@gmail.com>2024-05-07 16:50:38 +0200
committerDmitrii Morozov <snoopdesigns@gmail.com>2024-05-07 16:50:38 +0200
commitcfa79cbbaf42a8f74a2cd4bca4d1d495b4d597f1 (patch)
tree6112ceda171cda2ed8c40c53cc0a8e0766c6e008 /telegram_bot.py
parentf5c57d8e73f33ca1d7374a2662fbc7a4592eb7cd (diff)
Python code style
Diffstat (limited to 'telegram_bot.py')
-rw-r--r--telegram_bot.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/telegram_bot.py b/telegram_bot.py
new file mode 100644
index 0000000..26d3071
--- /dev/null
+++ b/telegram_bot.py
@@ -0,0 +1,59 @@
+import telebot
+import os
+import logging
+import traceback
+import sys
+from telebot.async_telebot import AsyncTeleBot
+from persistence import UserRepository
+
+class CommandHandler:
+ async def handle(self, message: telebot.types.Message):
+ pass
+
+class TelegramBot:
+ __bot: AsyncTeleBot
+ __user_repository: UserRepository
+
+ def __init__(self, user_repository: UserRepository):
+ self.__user_repository = user_repository
+
+ # Check token in environment variables
+ if "TELEBOT_BOT_TOKEN" not in os.environ:
+ raise AssertionError("Please configure TELEBOT_BOT_TOKEN as environment variables")
+
+ self.__bot = telebot.async_telebot.AsyncTeleBot(
+ token=os.environ["TELEBOT_BOT_TOKEN"],
+ exception_handler=ExceptionHandler())
+
+ async def run(self):
+ await self.__bot.polling()
+
+ def register_command_handler(self, command: str, command_handler: CommandHandler):
+ self.__bot.register_message_handler(
+ command_handler.handle,
+ commands=[ command ])
+
+ async def send_message_to_all(self, message_text: str):
+ for user in self.__user_repository.get_all_users():
+ try:
+ await self.__bot.send_message(
+ user[0],
+ message_text,
+ parse_mode='MarkdownV2'
+ )
+ except Exception as error:
+ if 'bot was kicked from the group chat' in str(error):
+ self.__user_repository.remove_chat(user[0])
+
+ async def reply(self, message, message_text):
+ await self.__bot.reply_to(
+ message,
+ message_text,
+ parse_mode='MarkdownV2')
+
+class ExceptionHandler(telebot.ExceptionHandler):
+ def handle(self, exception):
+ logging.error('Exception happened: {}'.format(str(exception)))
+ print(traceback.format_exc())
+ sys.exit('Exiting with telebot exception')
+ return True \ No newline at end of file