1+ from typing import cast
2+
13from aiogram import F , Router
24from aiogram .filters import Command , StateFilter
35from aiogram .fsm .context import FSMContext
46from aiogram .types import CallbackQuery , Message , ReplyKeyboardRemove
7+ from aiogram .types .inaccessible_message import InaccessibleMessage
58from aiogram .utils .keyboard import InlineKeyboardBuilder
9+ from playhouse .cockroachdb import BooleanField
610
711from entities import ADMINS , TEXT , States , get_keyboard
812from models import Cert , User
1115
1216
1317@router .message (StateFilter (None ), Command ("check" ), F .chat .id .in_ (ADMINS ))
14- @router .message (StateFilter (None ), F .text == TEXT ['check-cert' ],
15- F .chat .id .in_ (ADMINS ))
18+ @router .message (
19+ StateFilter (None ), F .text == TEXT ["check-cert" ], F .chat .id .in_ (ADMINS )
20+ )
1621async def check_start (message : Message , state : FSMContext ):
1722 await state .set_state (States .TypingCert )
18- await message .answer (TEXT ['input-cert' ],
19- reply_markup = ReplyKeyboardRemove ())
23+ await message .answer (TEXT ["input-cert" ], reply_markup = ReplyKeyboardRemove ())
2024
2125
2226@router .message (StateFilter (States .TypingCert ), Command ("cancel" ))
2327async def cancel (message : Message , state : FSMContext , user : User ):
2428 await state .set_state (None )
25- await message .answer (TEXT ['check-cert-cancelled' ],
26- reply_markup = get_keyboard (user ))
29+ await message .answer (
30+ TEXT ["check-cert-cancelled" ], reply_markup = get_keyboard (user )
31+ )
2732
2833
2934@router .message (StateFilter (States .TypingCert ), F .chat .id .in_ (ADMINS ))
3035async def check_cert (message : Message , state : FSMContext , user : User ):
36+ if not message .text :
37+ raise Exception (f"Message without text { user .info ()} " )
38+
3139 await state .set_state (None )
3240
3341 markup = get_keyboard (user )
3442 query = Cert .select ().where (Cert .code == message .text .strip ())
3543
36- if not await query .aio_exists ():
37- await message .answer (TEXT [' no-cert' ], reply_markup = markup )
44+ if not await query .aio_exists (): # type: ignore
45+ await message .answer (TEXT [" no-cert" ], reply_markup = markup )
3846 return
3947
40- cert = await query .aio_first ()
48+ cert = await query .aio_first () # type: ignore
4149
4250 if cert .used :
43- await message .answer (TEXT [' used-cert' ], reply_markup = markup )
51+ await message .answer (TEXT [" used-cert" ], reply_markup = markup )
4452 return
4553
46- text = TEXT [' ok-cert' ]
54+ text = TEXT [" ok-cert" ]
4755 text = text .replace ("{%NAME%}" , cert .name )
4856
4957 await message .answer (text , reply_markup = markup )
@@ -53,26 +61,35 @@ async def check_cert(message: Message, state: FSMContext, user: User):
5361 builder .button (text = "Нет" , callback_data = "unused" )
5462 builder .adjust (2 )
5563
56- await message .answer (TEXT [' input-used' ], reply_markup = builder .as_markup ())
64+ await message .answer (TEXT [" input-used" ], reply_markup = builder .as_markup ())
5765
5866
59- @router .callback_query (F .data .regexp ("used\\ |\\ d+" ),
60- F .from_user .id .in_ (ADMINS ))
61- async def cert_used (query : CallbackQuery ):
67+ @router .callback_query (F .data .regexp ("used\\ |\\ d+" ), F .from_user .id .in_ (ADMINS ))
68+ async def cert_used (query : CallbackQuery , user : User ):
6269 await query .answer ()
70+
71+ if not query .message or isinstance (query .message , InaccessibleMessage ):
72+ raise Exception (f"Query without corresponding message { user .info ()} " )
73+ if not query .data :
74+ raise Exception (f"Query without data { user .info ()} " )
75+
6376 await query .message .edit_reply_markup (reply_markup = None )
6477
6578 _ , code = query .data .split ("|" )
6679 cert : Cert = await Cert .aio_get (Cert .code == code )
67- cert .used = True
80+ cert .used = cast ( BooleanField , True )
6881 await cert .aio_save ()
6982
70- await query .message .edit_text (TEXT [' ok-used' ])
83+ await query .message .edit_text (TEXT [" ok-used" ])
7184
7285
7386@router .callback_query (F .data == "unused" , F .from_user .id .in_ (ADMINS ))
74- async def cert_unused (query : CallbackQuery ):
87+ async def cert_unused (query : CallbackQuery , user : User ):
7588 await query .answer ()
89+
90+ if not query .message or isinstance (query .message , InaccessibleMessage ):
91+ raise Exception (f"Query without corresponding message { user .info ()} " )
92+
7693 await query .message .edit_reply_markup (reply_markup = None )
7794
78- await query .message .edit_text (TEXT [' ok-unused' ])
95+ await query .message .edit_text (TEXT [" ok-unused" ])
0 commit comments