@@ -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
8078async 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" )
0 commit comments