Добавлено: обработка нажатия кнопок при подтверждении расписания

This commit is contained in:
far-galaxy 2023-02-01 17:58:34 +03:00
parent 61270b83e7
commit c1a06a834b
5 changed files with 88 additions and 13 deletions

37
bot.py
View File

@ -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(),
)

View File

@ -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'

View File

@ -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:
"""Сменить тэг пользователя"""

View File

@ -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

View File

@ -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=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :(
empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :(
loading=Загружаю расписание...
nogroup=Возможно, ты написал не ту группу, попробуй снова