Skip to content

Commit 96afadb

Browse files
committed
subs to many, dump of subs, help
1 parent a327c46 commit 96afadb

File tree

4 files changed

+106
-45
lines changed

4 files changed

+106
-45
lines changed

bot/controllers/start.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,26 @@ async def help(message: types.Message):
5757
/start - почати роботу з ботом
5858
/help - допомога
5959
/policy - політика бота та конфіденційність
60+
/ping - перевірити чи працює бот
61+
/time - поточний час сервера
6062
6163
*Персональні Функції:*
6264
/cabinet - персональний кабінет
6365
/link <session ID> - прив'язати ідентифікатор
6466
/unlink або /delete - відв'язати ідентифікатор та видалити профіль
6567
/update - оновити статус заявки вручну
68+
/dump - отримати весь дамп доступних даних на ваші підписки
6669
6770
*Сповіщення:*
6871
_Keep in mind: ви можеше мати лише 5 активних підписок_
6972
/subscribe <session ID> - підписатися на сповіщення
7073
/unsubscribe <session ID> - відписатися від сповіщень
7174
/subscriptions - список підписок
7275
/push - підписатися на сповіщення через NTFY.sh
76+
77+
*Решта:*
78+
- Відправити повідомлення яке складається з 6-7 цифр, щоб отримати інформацію про статус заявки з сайту _passport.mfa.gov.ua_
79+
- Відправити зоображення довідки з QR кодом, щоб отримати інформацію про статус заявки з сайту _passport.mfa.gov.ua_
7380
""",
7481
),
7582
parse_mode="Markdown",

bot/controllers/subscriptions.py

Lines changed: 96 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -15,66 +15,64 @@ async def subscribe(message: types.Message):
1515
await message.answer_chat_action("typing")
1616

1717
parts = message.text.split(" ")
18-
if len(parts) != 2:
18+
if len(parts) <= 1:
1919
await _message.edit_text(
2020
"Надішліть ваш ідентифікатор, будь ласка використовуючи команду /subscribe \nНаприклад /subscribe 1006655"
2121
)
2222
return
2323

24-
session_id = parts[1]
24+
session_ids = parts[1:]
2525

26-
_subscription = await SubscriptionModel.find_one(
27-
{"telgram_id": str(message.from_user.id), "session_id": session_id}
28-
)
29-
if _subscription:
30-
await _message.edit_text(
31-
"Ви вже підписані на сповіщення про зміну статусу заявки"
26+
for session_id in session_ids:
27+
_message = await _message.edit_text(
28+
f"Зачекайте, будь ласка, триває оформлення підписки #{session_id}..."
3229
)
33-
return
34-
35-
_count_subscriptions = await SubscriptionModel.find_all(
36-
{"telgram_id": str(message.from_user.id)}
37-
).count()
38-
if _count_subscriptions >= 5:
39-
await _message.edit_text(
40-
"Ви досягли максимальної кількості підписок на сповіщення про зміну статусу заявки"
30+
_subscription = await SubscriptionModel.find_one(
31+
{"telgram_id": str(message.from_user.id), "session_id": session_id}
4132
)
42-
return
33+
if _subscription:
34+
continue
4335

44-
_subscription = SubscriptionModel(
45-
telgram_id=str(message.from_user.id),
46-
session_id=session_id,
47-
)
48-
await _subscription.insert()
49-
50-
_application = await ApplicationModel.find_one({"session_id": session_id})
51-
if not _application:
52-
scraper = Scraper()
53-
# create application
54-
status = scraper.check(session_id, retrive_all=True)
55-
if not status:
36+
_count_subscriptions = await SubscriptionModel.find_all(
37+
{"telgram_id": str(message.from_user.id)}
38+
).count()
39+
40+
if _count_subscriptions > 5:
5641
await _message.edit_text(
57-
"Виникла помилка перевірки ідентифікатора, можливо дані некоректні чи ще не внесені в базу, спробуйте пізніше."
42+
"Ви досягли максимальної кількості підписок на сповіщення про зміну статусу заявки"
5843
)
5944
return
6045

61-
_statuses = []
62-
for s in status:
63-
_statuses.append(
64-
StatusModel(
65-
status=s.get("status"),
66-
date=s.get("date"),
46+
_application = await ApplicationModel.find_one({"session_id": session_id})
47+
if not _application:
48+
scraper = Scraper()
49+
# create application
50+
status = scraper.check(session_id, retrive_all=True)
51+
if not status:
52+
continue
53+
54+
_statuses = []
55+
for s in status:
56+
_statuses.append(
57+
StatusModel(
58+
status=s.get("status"),
59+
date=s.get("date"),
60+
)
6761
)
62+
_application = ApplicationModel(
63+
session_id=session_id,
64+
statuses=_statuses,
65+
last_update=datetime.now(),
6866
)
69-
_application = ApplicationModel(
67+
await _application.insert()
68+
69+
_subscription = SubscriptionModel(
70+
telgram_id=str(message.from_user.id),
7071
session_id=session_id,
71-
statuses=_statuses,
72-
last_update=datetime.now(),
7372
)
74-
await _application.insert()
75-
await _message.edit_text(
76-
"Ви успішно підписані на сповіщення про зміну статусу заявки"
77-
)
73+
await _subscription.insert()
74+
75+
await _message.edit_text("Ви успішно підписані на сповіщення про зміну статусу")
7876

7977

8078
async def unsubscribe(message: types.Message):
@@ -234,3 +232,58 @@ async def enable_push(message: types.Message):
234232
),
235233
parse_mode="Markdown",
236234
)
235+
236+
237+
async def dump_subscriptions(message: types.Message):
238+
_subscriptions = await SubscriptionModel.find(
239+
{"telgram_id": str(message.from_user.id)}
240+
).to_list()
241+
242+
if not _subscriptions:
243+
await message.answer("Ви не підписані на сповіщення про зміну статусу заявки")
244+
return
245+
246+
_msg_text = dedent(
247+
f"""
248+
*Ваші підписки:*
249+
"""
250+
)
251+
252+
for i, s in enumerate(_subscriptions):
253+
_msg_text += f"{i+1}. *{s.session_id}* \n"
254+
255+
_msg_text += dedent(
256+
f"""
257+
Всього: {len(_subscriptions)}
258+
"""
259+
)
260+
261+
_message = await message.answer(_msg_text, parse_mode="Markdown")
262+
263+
applications = await ApplicationModel.find(
264+
{"session_id": {"$in": [s.session_id for s in _subscriptions]}}
265+
).to_list()
266+
267+
_msg_text = dedent(
268+
f"""
269+
*Заявки:*
270+
"""
271+
)
272+
273+
for i, s in enumerate(_subscriptions):
274+
_msg_text += f"\n📑*{s.session_id}* \n"
275+
# add statuses
276+
_application = next(
277+
filter(lambda a: a.session_id == s.session_id, applications), None
278+
)
279+
if not _application:
280+
continue
281+
for j, st in enumerate(_application.statuses):
282+
_date = datetime.fromtimestamp(int(st.date) / 1000).strftime(
283+
"%Y-%m-%d %H:%M"
284+
)
285+
_msg_text += f" *{st.status}* \n _{_date}_\n"
286+
287+
_msg_text += dedent(f"\nВсього: {len(_subscriptions)}")
288+
289+
await _message.edit_text(_msg_text, parse_mode="Markdown")

bot/handlers/message.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55

66
def setup(dp: Dispatcher):
7-
dp.register_message_handler(custom_check, regexp=r"^\d{7}$", state="*")
8-
dp.register_message_handler(custom_check, regexp=r"^\d{6}$", state="*")
7+
dp.register_message_handler(custom_check, regexp=r"^\d{6,7}$", state="*")
98
dp.register_message_handler(
109
image_qr_recognition, content_types=["photo"], state="*"
1110
)

bot/handlers/subscriptions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
subscriptions,
77
manual_application_update,
88
enable_push,
9+
dump_subscriptions,
910
)
1011

1112

@@ -17,3 +18,4 @@ def setup(dp: Dispatcher):
1718
manual_application_update, commands=["update"], state="*"
1819
)
1920
dp.register_message_handler(enable_push, commands=["push"], state="*")
21+
dp.register_message_handler(dump_subscriptions, commands=["dump"], state="*")

0 commit comments

Comments
 (0)