-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbutton.py
57 lines (54 loc) · 3.69 KB
/
button.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from telegram import InlineKeyboardMarkup, InlineKeyboardButton
from data import db_session
from data.users import User
from data.olimpics import Olimp
from data.user_olimpyc import Relation
from data.subjects import Subject
from data.olimp_subject import Olimp_Subject
async def button(update, context): # кнопки
query = update.callback_query
variant = query.data # тип кнопки
session = db_session.create_session()
self_id = session.query(User).filter(User.telegram_id == update.effective_user.id).first()
# определение пользователя
if variant.split('*')[1] == 'add': # если кнопка для добавления
if session.query(Relation).filter(Relation.user == self_id.id, Relation.olimp == variant.split('*')[0]).all():
await query.answer("Олимпиада уже добавлена в напоминания") # проверка наличия олимпиады у пользователя
else:
session.add(Relation(user=self_id.id, olimp=variant.split('*')[0])) # добавление олимпиады к пользователю
session.commit()
await query.answer(
f'''"{session.query(Olimp.name).filter(Olimp.id ==
int(variant.split(
'*')[0])).first()[0]}" успешно добавлена в напоминания''')
elif variant.split('*')[1] == 'unset': # если кнопка для удаления
if session.query(Relation).filter(Relation.id == int(variant.split('*')[0])).all():
# проверка наличия оимпиады у пользователя
olimp = session.query(Relation.olimp).filter(Relation.id == int(variant.split('*')[0])).first()[0]
session.query(Relation).filter(Relation.id == int(variant.split('*')[0])).delete()
session.commit() # удаление олимпиады
await query.answer(
f'''"{session.query(Olimp.name).filter(Olimp.id ==
olimp).first()[0]}" успешно удалена из напоминаний''')
else:
await query.answer('Олимпиада уже удалена')
elif variant.split('*')[1] == 'find': # если кнопка для поиска
olimp = session.query(Olimp).filter(Olimp.id == int(variant.split("*")[0])).first()
text = f'{olimp.name}\n\n' # формирование сообщения об олимпиаде
subjects = session.query(Olimp_Subject.subject).filter(Olimp_Subject.olimp == olimp.id).all()
for num, k in enumerate(subjects):
if num != 0:
text += f', {session.query(Subject.name).filter(Subject.id == k[0]).first()[0].capitalize()}'
else:
text += f'{session.query(Subject.name).filter(Subject.id == k[0]).first()[0].capitalize()}'
if olimp.min_class != olimp.max_class:
text += f'\n\n{olimp.min_class}-{olimp.max_class} класс'
else:
text += f'\n\n{olimp.max_class} класс'
if olimp.desc:
text += f'\n\n{olimp.desc}'
text += f'\n\nПодробнее по ссылке:\nhttps://olimpiada.ru{olimp.href}'
keyboard = [[InlineKeyboardButton('Добавить в напоминания', callback_data=f'{olimp.id}*add')]]
markup = InlineKeyboardMarkup(keyboard) # кнопка добавления
await context.bot.send_message(text=text, chat_id=update.effective_chat.id, reply_markup=markup)
# вывод сообщения