Добавлено: обработка нажатия кнопок при подтверждении расписания
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.udpate_id = None
|
||||||
self.isWork = True
|
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):
|
def checkMessages(self):
|
||||||
"""Проверка и обработка входящих сообщений"""
|
"""Проверка и обработка входящих сообщений"""
|
||||||
|
|
||||||
updates = self.tg.get_updates(offset=self.udpate_id, timeout=5)
|
updates = self.tg.get_updates(offset=self.udpate_id, timeout=5)
|
||||||
for update in updates:
|
for update in updates:
|
||||||
self.udpate_id = update.update_id + 1
|
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:
|
if update.message:
|
||||||
query = update.message
|
query = update.message
|
||||||
tag, l9Id, log = self.tg_db.getTag(query)
|
tag, l9Id, log = self.tg_db.getTagM(query)
|
||||||
logger.info(log)
|
logger.info(log)
|
||||||
tgId = query.from_user.id
|
tgId = query.from_user.id
|
||||||
|
|
||||||
|
@ -67,6 +89,15 @@ class Bot:
|
||||||
if tag == 'add':
|
if tag == 'add':
|
||||||
self.addGroup(l9Id, query)
|
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:
|
else:
|
||||||
self.tg.sendMessage(
|
self.tg.sendMessage(
|
||||||
tgId,
|
tgId,
|
||||||
|
@ -77,7 +108,6 @@ class Bot:
|
||||||
def start(self, query: telegram.Message):
|
def start(self, query: telegram.Message):
|
||||||
"""Обработка нового пользователя"""
|
"""Обработка нового пользователя"""
|
||||||
|
|
||||||
global _
|
|
||||||
# Проверка лимита пользователей и обработка лишних
|
# Проверка лимита пользователей и обработка лишних
|
||||||
count = self.l9lk.countUsers()
|
count = self.l9lk.countUsers()
|
||||||
tgId = query.from_user.id
|
tgId = query.from_user.id
|
||||||
|
@ -98,7 +128,6 @@ class Bot:
|
||||||
def addGroup(self, l9Id: int, query: telegram.Message):
|
def addGroup(self, l9Id: int, query: telegram.Message):
|
||||||
"""Процесс добавления группы"""
|
"""Процесс добавления группы"""
|
||||||
|
|
||||||
global _
|
|
||||||
groupName = query.text
|
groupName = query.text
|
||||||
tgId = query.from_user.id
|
tgId = query.from_user.id
|
||||||
|
|
||||||
|
@ -130,7 +159,7 @@ class Bot:
|
||||||
self.tg_db.changeTag(tgId, f'conf_{result[21:]}')
|
self.tg_db.changeTag(tgId, f'conf_{result[21:]}')
|
||||||
self.tg.sendMessage(
|
self.tg.sendMessage(
|
||||||
tgId,
|
tgId,
|
||||||
loc['group']['checkSedule'] % (result),
|
loc['group']['checkShedule'] % (result),
|
||||||
reply_markup=Keyboard.confirm(),
|
reply_markup=Keyboard.confirm(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
from .l9 import L9_DB
|
from .l9 import L9_DB
|
||||||
from .a_ssau_parser import *
|
from .a_ssau_parser import *
|
||||||
|
import telegram
|
||||||
|
from configparser import ConfigParser
|
||||||
|
|
||||||
|
|
||||||
class Shedule_DB:
|
class Shedule_DB:
|
||||||
|
@ -23,7 +25,7 @@ class Shedule_DB:
|
||||||
|
|
||||||
groupIdInDB = self.l9lk.db.get(
|
groupIdInDB = self.l9lk.db.get(
|
||||||
'groups',
|
'groups',
|
||||||
f'groupName LIKE "%{groupName}%"',
|
f'groupName LIKE "{groupName}%"',
|
||||||
['groupId', 'groupName', 'specName'],
|
['groupId', 'groupName', 'specName'],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -58,3 +60,15 @@ class Shedule_DB:
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return 'Empty'
|
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 = l9lk.db
|
||||||
self.db.executeFile('tg')
|
self.db.executeFile('tg')
|
||||||
|
|
||||||
def getTag(self, query: telegram.Message) -> (str, str, str):
|
def getTagM(self, query: telegram.Message) -> (str, str, str):
|
||||||
"""Получить тэг и l9Id пользователя"""
|
"""Получить тэг и l9Id пользователя из сообщения"""
|
||||||
|
|
||||||
tgId = query.from_user.id
|
tgId = query.from_user.id
|
||||||
name = f'{query.from_user.first_name or ""} {query.from_user.last_name or ""}'
|
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]
|
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:
|
def changeTag(self, tgId: int, tag: str) -> None:
|
||||||
"""Сменить тэг пользователя"""
|
"""Сменить тэг пользователя"""
|
||||||
|
|
|
@ -13,6 +13,8 @@ CREATE TABLE IF NOT EXISTS `tg_users` (
|
||||||
-- Позиция пользователя в диалоге с ботом:
|
-- Позиция пользователя в диалоге с ботом:
|
||||||
-- (default) not_started - только что вступил в диалог
|
-- (default) not_started - только что вступил в диалог
|
||||||
-- add - добавляет группу
|
-- add - добавляет группу
|
||||||
|
-- conf_{groupId} - пользователь на стадии подтверждения выбранной группы
|
||||||
|
-- ready - готов к работе
|
||||||
|
|
||||||
PRIMARY KEY (`l9Id`),
|
PRIMARY KEY (`l9Id`),
|
||||||
CONSTRAINT `l9_tg` FOREIGN KEY (`l9Id`) REFERENCES `users` (`l9Id`) ON DELETE CASCADE ON UPDATE CASCADE
|
CONSTRAINT `l9_tg` FOREIGN KEY (`l9Id`) REFERENCES `users` (`l9Id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
|
|
@ -1,17 +1,29 @@
|
||||||
[etc]
|
[etc]
|
||||||
oops=Ой!
|
oops=Ой!
|
||||||
|
|
||||||
overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено.\nК сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢\n Попробуйте зайти на следующей неделе, когда лимит будет повышен
|
cancel=Действие отменено
|
||||||
|
|
||||||
hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗\nДавай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D)
|
overlimit=Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено.
|
||||||
|
К сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢
|
||||||
|
Попробуйте зайти на следующей неделе, когда лимит будет повышен
|
||||||
|
|
||||||
|
hello=Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗
|
||||||
|
Давай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D)
|
||||||
|
|
||||||
[group]
|
[group]
|
||||||
connected=Поздравляем, твоя группа %%s, направление "%%s", подключена!
|
connected=Поздравляем, твоя группа %%s, направление "%%s", подключена!
|
||||||
|
|
||||||
exists=❗️Эта группа у тебя уже подключена
|
exists=❗️Эта группа у тебя уже подключена
|
||||||
|
|
||||||
error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка.\nПопробуйте позже
|
error=❗У меня этой группы пока нет, а сайте возникла какая-то ошибка.
|
||||||
|
Попробуйте позже
|
||||||
|
|
||||||
checkShedule=Такой группы у меня пока нет в базе, но она есть на сайте\n%%s\nПроверь, пожалуйста, что это твоя группа и нажми кнопку
|
checkShedule:Такой группы у меня пока нет в базе, но она есть на сайте
|
||||||
|
%%s
|
||||||
|
Проверь, пожалуйста, что это твоя группа и нажми кнопку
|
||||||
|
|
||||||
empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :(
|
empty=К сожалению, такой группы нет ни в моей базе, ни на сайте университета :(
|
||||||
|
|
||||||
|
loading=Загружаю расписание...
|
||||||
|
|
||||||
|
nogroup=Возможно, ты написал не ту группу, попробуй снова
|
Reference in New Issue