From 1e2ffe48cb470017b1d760238186dc625356ee2e Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Thu, 11 Apr 2024 21:17:51 +0200 Subject: Remove user if was kicked from chat --- persistence.py | 18 +++++++++++++----- tgbot.py | 22 +++++++++++++++------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/persistence.py b/persistence.py index d2998e9..941e2f7 100644 --- a/persistence.py +++ b/persistence.py @@ -9,7 +9,7 @@ class UserRepository: def __initialize(self): cur = self.__getConnection().cursor() - cur.execute("CREATE TABLE IF NOT EXISTS user(chat_id INT)") + cur.execute("CREATE TABLE IF NOT EXISTS user(chat_id INT, alias TEXT)") cur.execute("CREATE UNIQUE INDEX IF NOT EXISTS chat_id_idx ON user(chat_id)") def __getConnection(self): @@ -28,14 +28,22 @@ class UserRepository: query = "select * from user" cur.execute(query) return cur.fetchall() + + def removeChat(self, chat_id): + connection = self.__getConnection() + cur = connection.cursor() + query = "DELETE FROM user where chat_id = {chat_id}".format( + chat_id = chat_id) + cur.execute(query) + connection.commit() - def putUser(self, chat_id): + def putChat(self, chat_id, alias): if not self.getUser(chat_id): connection = self.__getConnection() cur = connection.cursor() - query = "INSERT INTO user(chat_id) VALUES({chat_id})".format(chat_id = chat_id) + query = "INSERT INTO user(chat_id, alias) VALUES({chat_id}, '{text}')".format( + chat_id = chat_id, + text = alias) cur.execute(query) connection.commit() - else: - print("User {} already exsits, skipping putUser()".format(chat_id)) diff --git a/tgbot.py b/tgbot.py index 539a1c5..c451741 100755 --- a/tgbot.py +++ b/tgbot.py @@ -40,8 +40,12 @@ fortniteStatusWrapper = FortniteStatusNotifier(FortniteStatusObserver()) fortniteClient = FortniteClient(FortnitePresenceObserver()) @bot.message_handler(commands = ['start']) -async def startCommand(message): - userRepository.putUser(message.chat.id) +async def startCommand(message: telebot.types.Message): + if message.chat.type == 'private': + alias = message.chat.username + else: + alias = message.chat.title + userRepository.putUser(message.chat.id, alias) await reply(message, 'This chat successfully registered to receive Fortnite updates') @bot.message_handler(commands = ['status']) @@ -80,11 +84,15 @@ async def addUser(message): async def send_message_to_all(message_text: str): for user in userRepository.getAllUsers(): - await bot.send_message( - user[0], - message_text, - parse_mode='MarkdownV2' - ) + try: + await 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): + userRepository.removeChat(user[0]) async def reply(message, message_text): await bot.reply_to( -- cgit v1.2.3