Добавлено: обработка нажатия кнопок при подтверждении расписания
This commit is contained in:
parent
61270b83e7
commit
c1a06a834b
37
bot.py
37
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(),
|
||||
)
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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:
|
||||
"""Сменить тэг пользователя"""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=Возможно, ты написал не ту группу, попробуй снова
|
Reference in New Issue