diff --git a/bot.py b/bot.py index 878c81b..3e344d9 100644 --- a/bot.py +++ b/bot.py @@ -49,15 +49,37 @@ class Bot: self.udpate_id = None self.isWork = True + def answer(self, query: telegram.CallbackQuery, text=None, alert=False): + try: + query.answer(text, alert) + except telegram.error.BadRequest: + pass + def checkMessages(self): """Проверка и обработка входящих сообщений""" updates = self.tg.get_updates(offset=self.udpate_id, timeout=5) for update in updates: self.udpate_id = update.update_id + 1 + + if update.callback_query: + query = update.callback_query + tag, l9Id, log = self.tg_db.getTagC(query) + logger.info(log) + tgId = query.from_user.id + + if 'conf' in tag: + success = self.shedule.uploadShedule(query, tag[5:], loc) + self.answer(query) + if success: + # Код с загрузкой расписания + self.tg_db.changeTag(tgId, 'ready') + else: + self.tg_db.changeTag(tgId, 'add') + if update.message: query = update.message - tag, l9Id, log = self.tg_db.getTag(query) + tag, l9Id, log = self.tg_db.getTagM(query) logger.info(log) tgId = query.from_user.id @@ -67,6 +89,15 @@ class Bot: if tag == 'add': self.addGroup(l9Id, query) + if query.text == 'Отмена': + # TODO: прописать отмену при отсутствующих группах + self.tg_db.changeTag(tgId, 'ready') + self.tg.sendMessage( + tgId, + loc['etc']['cancel'], + reply_markup=Keyboard.menu(), + ) + else: self.tg.sendMessage( tgId, @@ -77,7 +108,6 @@ class Bot: def start(self, query: telegram.Message): """Обработка нового пользователя""" - global _ # Проверка лимита пользователей и обработка лишних count = self.l9lk.countUsers() tgId = query.from_user.id @@ -98,7 +128,6 @@ class Bot: def addGroup(self, l9Id: int, query: telegram.Message): """Процесс добавления группы""" - global _ groupName = query.text tgId = query.from_user.id @@ -130,7 +159,7 @@ class Bot: self.tg_db.changeTag(tgId, f'conf_{result[21:]}') self.tg.sendMessage( tgId, - loc['group']['checkSedule'] % (result), + loc['group']['checkShedule'] % (result), reply_markup=Keyboard.confirm(), ) diff --git a/database/shedule.py b/database/shedule.py index 93a7415..3981d81 100644 --- a/database/shedule.py +++ b/database/shedule.py @@ -1,5 +1,7 @@ from .l9 import L9_DB from .a_ssau_parser import * +import telegram +from configparser import ConfigParser class Shedule_DB: @@ -23,7 +25,7 @@ class Shedule_DB: groupIdInDB = self.l9lk.db.get( 'groups', - f'groupName LIKE "%{groupName}%"', + f'groupName LIKE "{groupName}%"', ['groupId', 'groupName', 'specName'], ) @@ -58,3 +60,15 @@ class Shedule_DB: else: return 'Empty' + + def uploadShedule( + self, query: telegram.CallbackQuery, groupId: str, loc: ConfigParser + ): + if query.data == 'yes': + query.edit_message_text(loc['group']['loading']) + + else: + query.edit_message_text(loc['group']['nogroup']) + query.edit_message_reply_markup(Keyboard.cancel()) + + return query.data == 'yes' diff --git a/database/tg.py b/database/tg.py index 037241a..f0fad3a 100644 --- a/database/tg.py +++ b/database/tg.py @@ -10,8 +10,8 @@ class TG_DB: self.db = l9lk.db self.db.executeFile('tg') - def getTag(self, query: telegram.Message) -> (str, str, str): - """Получить тэг и l9Id пользователя""" + def getTagM(self, query: telegram.Message) -> (str, str, str): + """Получить тэг и l9Id пользователя из сообщения""" tgId = query.from_user.id name = f'{query.from_user.first_name or ""} {query.from_user.last_name or ""}' @@ -26,7 +26,25 @@ class TG_DB: tag = self.db.get('tg_users', f"tgId = {tgId}", ["posTag"])[0][0] - return tag, l9Id, f'{tgId}\t{tag}\t{name}\t{query.text}' + return tag, l9Id, f'{tgId}\t{tag}\t{name}\tM:{query.text}' + + def getTagC(self, query: telegram.CallbackQuery) -> (str, str, str): + """Получить тэг и l9Id пользователя из CallbackQuery (кнопки)""" + + tgId = query.from_user.id + name = f'{query.from_user.first_name or ""} {query.from_user.last_name or ""}' + + l9Id = self.db.get('tg_users', f"tgId = {tgId}", ["l9Id"]) + if l9Id == []: + l9Id = self.l9lk.initUser(0) + user = {"l9Id": l9Id, "tgId": tgId, "name": name} + self.db.insert('tg_users', user) + else: + l9Id = l9Id[0][0] + + tag = self.db.get('tg_users', f"tgId = {tgId}", ["posTag"])[0][0] + + return tag, l9Id, f'{tgId}\t{tag}\t{name}\tC:{query.data}' def changeTag(self, tgId: int, tag: str) -> None: """Сменить тэг пользователя""" diff --git a/database/tg.sql b/database/tg.sql index 5a90a8d..14f3754 100644 --- a/database/tg.sql +++ b/database/tg.sql @@ -13,6 +13,8 @@ CREATE TABLE IF NOT EXISTS `tg_users` ( -- Позиция пользователя в диалоге с ботом: -- (default) not_started - только что вступил в диалог -- add - добавляет группу + -- conf_{groupId} - пользователь на стадии подтверждения выбранной группы + -- ready - готов к работе PRIMARY KEY (`l9Id`), CONSTRAINT `l9_tg` FOREIGN KEY (`l9Id`) REFERENCES `users` (`l9Id`) ON DELETE CASCADE ON UPDATE CASCADE diff --git a/locale/ru.ini b/locale/ru.ini index fb251be..dfb3b85 100644 --- a/locale/ru.ini +++ b/locale/ru.ini @@ -1,17 +1,29 @@ [etc] oops=Ой! -overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено.\nК сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢\n Попробуйте зайти на следующей неделе, когда лимит будет повышен +cancel=Действие отменено -hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗\nДавай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D) +overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено. + К сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢 + Попробуйте зайти на следующей неделе, когда лимит будет повышен + +hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗 + Давай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D) [group] connected=Поздравляем, твоя группа %%s, направление "%%s", подключена! exists=❗️Эта группа у тебя уже подключена -error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка.\nПопробуйте позже +error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка. + Попробуйте позже -checkShedule=Такой группы у меня пока нет в базе, но она есть на сайте\n%%s\nПроверь, пожалуйста, что это твоя группа и нажми кнопку +checkShedule:Такой группы у меня пока нет в базе, но она есть на сайте + %%s + Проверь, пожалуйста, что это твоя группа и нажми кнопку -empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :( \ No newline at end of file +empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :( + +loading=Загружаю расписание... + +nogroup=Возможно, ты написал не ту группу, попробуй снова \ No newline at end of file