chgksuite 0.24.0b2__py3-none-any.whl → 0.24.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,115 @@
1
+ import asyncio
2
+ import json
3
+ import os
4
+ import sqlite3
5
+ import threading
6
+ from datetime import datetime
7
+
8
+ import requests
9
+ import toml
10
+ from telegram import Update
11
+ from telegram.ext import Application, ContextTypes, MessageHandler, filters
12
+
13
+ from chgksuite.common import get_chgksuite_dir
14
+
15
+
16
+ class TelegramSidecarBot:
17
+ def __init__(self, bot_token, db_path):
18
+ self.db_path = db_path
19
+ self._local = threading.local()
20
+ self.token = bot_token
21
+
22
+ @property
23
+ def conn(self):
24
+ if not hasattr(self._local, "connection"):
25
+ self._local.connection = sqlite3.connect(self.db_path)
26
+ return self._local.connection
27
+
28
+ async def handle_message(self, update: Update, _: ContextTypes.DEFAULT_TYPE):
29
+ cursor = self.conn.cursor()
30
+ raw_data = json.dumps(update.to_dict(), ensure_ascii=False)
31
+ cursor.execute(
32
+ "INSERT INTO messages (raw_data, chat_id, created_at) VALUES (?, ?, ?)",
33
+ (raw_data, update.message.chat.id, datetime.now().isoformat()),
34
+ )
35
+ self.conn.commit()
36
+
37
+ async def error_handler(self, update, context):
38
+ print(f"Update {update} caused error: {context.error}")
39
+
40
+ async def check_connectivity(self):
41
+ url = f"https://api.telegram.org/bot{self.token}/getMe"
42
+ req = requests.get(url)
43
+ cursor = self.conn.cursor()
44
+ if req.status_code == 200 and "ok" in req.json():
45
+ cursor.execute(
46
+ "INSERT INTO bot_status (raw_data, created_at) VALUES (?, ?)",
47
+ (json.dumps({"status": "ok"}), datetime.now().isoformat()),
48
+ )
49
+ self.conn.commit()
50
+ else:
51
+ print(f"couldn't check status, req: {req.text}")
52
+ cursor.execute(
53
+ "INSERT INTO bot_status (raw_data, created_at) VALUES (?, ?)",
54
+ (
55
+ json.dumps(
56
+ {
57
+ "status": "bad",
58
+ "error": req.text,
59
+ "status_code": req.status_code,
60
+ }
61
+ ),
62
+ datetime.now().isoformat(),
63
+ ),
64
+ )
65
+ self.conn.commit()
66
+ return True
67
+
68
+ def run(self):
69
+ loop = asyncio.get_event_loop()
70
+ application = (
71
+ Application.builder()
72
+ .token(self.token)
73
+ .connect_timeout(30.0)
74
+ .read_timeout(30.0)
75
+ .write_timeout(30.0)
76
+ .build()
77
+ )
78
+ application.add_handler(MessageHandler(filters.ALL, self.handle_message))
79
+ application.add_error_handler(self.error_handler)
80
+ loop.run_until_complete(application.initialize())
81
+ loop.run_until_complete(application.start())
82
+ loop.run_until_complete(
83
+ application.updater.start_polling(
84
+ allowed_updates=Update.ALL_TYPES, drop_pending_updates=True
85
+ )
86
+ )
87
+ loop.run_forever()
88
+
89
+
90
+ def run_bot_in_thread(bot_token, db_path):
91
+ """Run the bot in a daemon thread."""
92
+
93
+ def thread_function():
94
+ loop = asyncio.new_event_loop()
95
+ asyncio.set_event_loop(loop)
96
+ bot = TelegramSidecarBot(bot_token, db_path)
97
+ connectivity_ok = loop.run_until_complete(bot.check_connectivity())
98
+ if not connectivity_ok:
99
+ raise Exception("bot couldn't connect")
100
+ bot.run()
101
+
102
+ bot_thread = threading.Thread(target=thread_function, daemon=True)
103
+ bot_thread.start()
104
+ return bot_thread
105
+
106
+
107
+ def main():
108
+ toml_path = os.path.join(get_chgksuite_dir(), "telegram.toml")
109
+ with open(toml_path, "r", encoding="utf8") as f:
110
+ bot_token = toml.load(f)["bot_token"]
111
+ run_bot_in_thread(bot_token, "test_bot.db")
112
+
113
+
114
+ if __name__ == "__main__":
115
+ main()
@@ -1,16 +1,16 @@
1
1
  {
2
- "tour": "^(# +)?Т[Уу][Рр] ?№? ?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+) [Тт][Уу][Рр]([\\.:])?$",
4
- "question": "П[Ыы][Тт][Аа][Нн][Ьь]?[Нн][Ее] ?[№N]?([0-9 ]*) ?([\\.:]|\n|\r\n|$)",
5
- "handout": "Р[Аа][Зз][Дд][Аа][Тт]([Аа][Чч][Нн]|[Кк][Аа][Вв])[Ыы][ ][Мм][Аа][Тт][Ээ][Рр][Ыы][Яя][Лл][\\.:]",
6
- "answer": "А[Дд][Кк][Аа][Зз][Ыы]? ?[№N]?([0-9]+)? ?[\\.:]",
7
- "zachet": "З[Аа][Лл][Іі][Кк] ?[\\.:]",
8
- "nezachet": "Н[Ее][Зз][Аа][Лл][Іі][Кк] ?[\\.:]",
9
- "comment": "К[Аа][Мм]([Ее][Нн][Тт]([Аа][Рр]([Ыы][Йй])?|\\.)|\\.) ?[№N]?([0-9]+)? ?[\\.:]",
10
- "author": "А[Ўў][Тт][Аа][Рр](\\(?[Ыы]?\\)?|[Кк][АаИи])? ?[\\.:]",
11
- "source": "К[Рр][Ыы][Нн][Іі][Цц][АаЫы] ?[\\.:]",
12
- "editor": "[Рр][Ээ][Дд][Аа][Кк][Тт][Аа][Рр]([Ыы])?( ?[\\.:]| [\\-–—]+ )",
13
- "date": "Д[Аа][Тт][Аа] ?[\\.:]",
2
+ "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
+ "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
4
+ "question": "П[Ыы][Тт][Аа][Нн][Ьь]?[Нн][Ее]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
+ "handout": "Р[Аа][Зз][Дд][Аа][Тт]([Аа][Чч][Нн]|[Кк][Аа][Вв])[Ыы][\\s\\s][Мм][Аа][Тт][Ээ][Рр][Ыы][Яя][Лл][\\.:]",
6
+ "answer": "А[Дд][Кк][Аа][Зз][Ыы]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
7
+ "zachet": "З[Аа][Лл][Іі][Кк]\\s?[\\.:]",
8
+ "nezachet": "Н[Ее][Зз][Аа][Лл][Іі][Кк]\\s?[\\.:]",
9
+ "comment": "К[Аа][Мм]([Ее][Нн][Тт]([Аа][Рр]([Ыы][Йй])?|\\.)|\\.)\\s?[№N]?([0-9]+)?\\s?[\\.:]",
10
+ "author": "А[Ўў][Тт][Аа][Рр](\\(?[Ыы]?\\)?|[Кк][АаИи])?\\s?[\\.:]",
11
+ "source": "К[Рр][Ыы][Нн][Іі][Цц][АаЫы]\\s?[\\.:]",
12
+ "editor": "[Рр][Ээ][Дд][Аа][Кк][Тт][Аа][Рр]([Ыы])?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
13
+ "date": "Д[Аа][Тт][Аа]\\s?[\\.:]",
14
14
  "date2": "(^|\\s)студзеня|лютага|сакавіка|красавіка|мая|чэрвеня|ліпеня|жніўня|верасня|кастрычніка|лістапада|снежня(\\s|$)",
15
- "number": "^[0-9]+[\\.\\)] *"
15
+ "number": "^[0-9]+[\\.\\)]\\s*"
16
16
  }
@@ -1,16 +1,16 @@
1
1
  {
2
- "tour": "^(# +)?(B[Ll][Oo][Cc][Kk]|R[Oo][Uu][Nn][Dd]) ?№? ?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+) (B[Ll][Oo][Cc][Kk]|R[Oo][Uu][Nn][Dd])([\\.:])?$",
4
- "question": "Q[Uu][Ee][Ss][Tt][Ii][Oo][Nn] ?[№N]?([0-9 ]*) ?([\\.:]|\n|\r\n|$)",
5
- "answer": "A[Nn][Ss][Ww][Ee][Rr] ?[№N]?([0-9]+)? ?[\\.:]",
2
+ "tour": "^(#\\s+)?(B[Ll][Oo][Cc][Kk]|R[Oo][Uu][Nn][Dd])\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
+ "tourrev": "^([0-9IVXLCDM]+)\\s(B[Ll][Oo][Cc][Kk]|R[Oo][Uu][Nn][Dd])([\\.:])?$",
4
+ "question": "Q[Uu][Ee][Ss][Tt][Ii][Oo][Nn]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
+ "answer": "A[Nn][Ss][Ww][Ee][Rr]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
6
6
  "handout": "^H[Aa][Nn][Dd][Oo][Uu][Tt][\\.:]",
7
- "zachet": "A[Cc][Ee][Pp][Tt] ?[\\.:]",
8
- "nezachet": "R[Ee][Jj][Ee][Cc][Tt] ?[\\.:]",
9
- "comment": "C[Oo][Mm][Mm]?([Ee][Nn][Tt])? ?[№N]?([0-9]+)? ?[\\.:]",
10
- "author": "A[Uu][Tt][Hh][Oo][Rr][Ss]? ?[\\.:]",
11
- "source": "S[Oo][Uu][Rr][Cc][Ee][Ss]? ?[\\.:]",
12
- "editor": "E[Dd][Ii][Tt]([Oo][Rr][Ss]?|[Ee][Dd] [Bb][Yy]) ?( ?[\\.:]| [\\-–—]+ )",
13
- "date": "D[Aa][Tt][Ee] ?[\\.:]",
7
+ "zachet": "A[Cc][Ee][Pp][Tt]\\s?[\\.:]",
8
+ "nezachet": "R[Ee][Jj][Ee][Cc][Tt]\\s?[\\.:]",
9
+ "comment": "C[Oo][Mm][Mm]?([Ee][Nn][Tt])?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
10
+ "author": "A[Uu][Tt][Hh][Oo][Rr][Ss]?\\s?[\\.:]",
11
+ "source": "S[Oo][Uu][Rr][Cc][Ee][Ss]?\\s?[\\.:]",
12
+ "editor": "E[Dd][Ii][Tt]([Oo][Rr][Ss]?|[Ee][Dd]\\s[Bb][Yy])\\s?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
13
+ "date": "D[Aa][Tt][Ee]\\s?[\\.:]",
14
14
  "date2": "(^|\\s)Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?(\\s|$)",
15
- "number": "^[0-9]+[\\.\\)] *"
15
+ "number": "^[0-9]+[\\.\\)]\\s*"
16
16
  }
@@ -1,15 +1,15 @@
1
1
  {
2
- "tour": "^(# +)?([0-9]+) ?[-–—] ?[Тт][Уу][Рр]\\s*$",
3
- "question": "([0-9]+) ?[-–—] ? С[Ұұ][Рр][Аа][Ққ]([\\.:]|\n|\r\n|$)",
4
- "handout": "^Ү[Лл][Ее][Сс][Тт][Іі][Рр][Уу][ ][Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][Ыы][\\.:]",
5
- "answer": "Ж[Аа][Уу][Аа][Пп] ?[№N]?([0-9]+)? ?[\\.:]",
6
- "zachet": "Қ[Аа][Бб][Ыы][Лл][Дд][Аа][Нн][Аа][Тт][Ыы][Нн] [Жж][Аа][Уу][Аа][Пп](\\([Тт][Аа][Рр]\\))? ?[\\.:]",
7
- "nezachet": "Қ[Аа][Бб][Ыы][Лл][Дд][Аа][Нн][Бб][Аа][Йй][Тт][Ыы][Нн] [Жж][Аа][Уу][Аа][Пп](\\([Тт][Аа][Рр]\\))? ?[\\.:]",
8
- "comment": "Т[Үү][Сс][Іі][Нн][Іі][Кк][Тт][Ее][Мм][Ее] ?[№N]?([0-9]+)? ?[\\.:]",
9
- "author": "А[Вв][Тт][Оо][Рр]([Лл][Аа][Рр])? ?[\\.:]",
10
- "source": "Д[Ее][Рр][Ее][Кк][Кк][Өө][Зз]([Дд][Ее][Рр])? ?[\\.:]",
11
- "editor": "Р[Ее][Дд][Аа][Кк][Тт][Оо][Рр]([Лл][Аа][Рр])?( ?[\\.:]| [\\-–—]+ )",
12
- "date": "Д[Аа][Тт][Аа] ?[\\.:]",
2
+ "tour": "^(#\\s+)?([0-9]+)\\s?[-–—]\\s?[Тт][Уу][Рр]\\s*$",
3
+ "question": "([0-9]+)\\s?[-–—]\\s?\\sС[Ұұ][Рр][Аа][Ққ]([\\.:]|\n|\r\n|$)",
4
+ "handout": "^Ү[Лл][Ее][Сс][Тт][Іі][Рр][Уу][\\s\\s][Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][Ыы][\\.:]",
5
+ "answer": "Ж[Аа][Уу][Аа][Пп]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
6
+ "zachet": "Қ[Аа][Бб][Ыы][Лл][Дд][Аа][Нн][Аа][Тт][Ыы][Нн]\\s[Жж][Аа][Уу][Аа][Пп](\\([Тт][Аа][Рр]\\))?\\s?[\\.:]",
7
+ "nezachet": "Қ[Аа][Бб][Ыы][Лл][Дд][Аа][Нн][Бб][Аа][Йй][Тт][Ыы][Нн]\\s[Жж][Аа][Уу][Аа][Пп](\\([Тт][Аа][Рр]\\))?\\s?[\\.:]",
8
+ "comment": "Т[Үү][Сс][Іі][Нн][Іі][Кк][Тт][Ее][Мм][Ее]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
9
+ "author": "А[Вв][Тт][Оо][Рр]([Лл][Аа][Рр])?\\s?[\\.:]",
10
+ "source": "Д[Ее][Рр][Ее][Кк][Кк][Өө][Зз]([Дд][Ее][Рр])?\\s?[\\.:]",
11
+ "editor": "Р[Ее][Дд][Аа][Кк][Тт][Оо][Рр]([Лл][Аа][Рр])?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
12
+ "date": "Д[Аа][Тт][Аа]\\s?[\\.:]",
13
13
  "date2": "(^|\\s)[Яя][Нн][Вв][Аа][Рр][ЬьЯя]|[Фф][Ее][Вв][Рр][Аа][Лл][ЬьЯя]|[Мм][Аа][Рр][Тт][Аа]?|[Аа][Пп][Рр][Ее][Лл][ЬьЯя]|[Мм][Аа][ЙйЯя]|[Ии][Юю][Нн][ЬьЯя]|[Ии][Юю][Лл][ЬьЯя]|[Аа][Вв][Гг][Уу][Сс][Тт][Аа]?|[Сс][Ее][Нн][Тт][Яя][Бб][Рр][ЬьЯя]|[Оо][Кк][Тт][Яя][Бб][Рр][ЬьЯя]|[Нн][Оо][Яя][Бб][Рр][ЬьЯя]|[Дд][Ее][Кк][Аа][Бб][Рр][ЬьЯя](\\s|$)",
14
- "number": "^[0-9]+[\\.\\)] *"
14
+ "number": "^[0-9]+[\\.\\)]\\s*"
15
15
  }
@@ -1,16 +1,16 @@
1
1
  {
2
- "tour": "^(# +)?Т[Уу][Рр] ?№? ?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+) [Тт][Уу][Рр]([\\.:])?$",
4
- "question": "В[Оо][Пп][Рр][Оо][Сс] ?[№N]?([0-9 ]*) ?([\\.:]|\n|\r\n|$)",
5
- "handout": "^Р[Аа][Зз][Дд][Аа][Тт][Оо][Чч][Нн][Ыы][Йй] +[Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
- "answer": "О[Тт][Вв][Ее][Тт][Ыы]? ?[№N]?([0-9]+)? ?[\\.:]",
7
- "zachet": "З[Аа][Чч][ЕеЁё][Тт] ?[\\.:]",
8
- "nezachet": "Н[Ее][Зз][Аа][Чч][ЕеЁё][Тт] ?[\\.:]",
9
- "comment": "К[Оо][Мм][Мм]?([Ее][Нн][Тт]([Аа][Рр][Ии][ИиЙй]|\\.)|\\.) ?[№N]?([0-9]+)? ?[\\.:]",
10
- "author": "А[Вв][Тт][Оо][Рр](\\(?[Ыы]?\\)?|[Кк][АаИи])? ?[\\.:]",
11
- "source": "И[Сс][Тт][Оо][Чч][Нн][Ии][Кк]\\(?[Ии]?\\)? ?[\\.:]",
12
- "editor": "[Рр][Ее][Дд][Аа][Кк][Тт][Оо][Рр]([Ыы]|[Сс][Кк][Аа][Яя] [Гг][Рр][Уу][Пп][Пп][Аа])?( ?[\\.:]| [\\-–—]+ )",
13
- "date": "Д[Аа][Тт][Аа] ?[\\.:]",
2
+ "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
+ "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
4
+ "question": "В[Оо][Пп][Рр][Оо][Сс]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
+ "handout": "^Р[Аа][Зз][Дд][Аа][Тт][Оо][Чч][Нн][Ыы][Йй]\\s+[Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
+ "answer": "О[Тт][Вв][Ее][Тт][Ыы]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
7
+ "zachet": "З[Аа][Чч][ЕеЁё][Тт]\\s?[\\.:]",
8
+ "nezachet": "Н[Ее][Зз][Аа][Чч][ЕеЁё][Тт]\\s?[\\.:]",
9
+ "comment": "К[Оо][Мм][Мм]?([Ее][Нн][Тт]([Аа][Рр][Ии][ИиЙй]|\\.)|\\.)\\s?[№N]?([0-9]+)?\\s?[\\.:]",
10
+ "author": "А[Вв][Тт][Оо][Рр](\\(?[Ыы]?\\)?|[Кк][АаИи])?\\s?[\\.:]",
11
+ "source": "И[Сс][Тт][Оо][Чч][Нн][Ии][Кк]\\(?[Ии]?\\)?\\s?[\\.:]",
12
+ "editor": "[Рр][Ее][Дд][Аа][Кк][Тт][Оо][Рр]([Ыы]|[Сс][Кк][Аа][Яя]\\s[Гг][Рр][Уу][Пп][Пп][Аа])?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
13
+ "date": "Д[Аа][Тт][Аа]\\s?[\\.:]",
14
14
  "date2": "(^|\\s)[Яя][Нн][Вв][Аа][Рр][ЬьЯя]|[Фф][Ее][Вв][Рр][Аа][Лл][ЬьЯя]|[Мм][Аа][Рр][Тт][Аа]?|[Аа][Пп][Рр][Ее][Лл][ЬьЯя]|[Мм][Аа][ЙйЯя]|[Ии][Юю][Нн][ЬьЯя]|[Ии][Юю][Лл][ЬьЯя]|[Аа][Вв][Гг][Уу][Сс][Тт][Аа]?|[Сс][Ее][Нн][Тт][Яя][Бб][Рр][ЬьЯя]|[Оо][Кк][Тт][Яя][Бб][Рр][ЬьЯя]|[Нн][Оо][Яя][Бб][Рр][ЬьЯя]|[Дд][Ее][Кк][Аа][Бб][Рр][ЬьЯя](\\s|$)",
15
- "number": "^[0-9]+[\\.\\)] *"
15
+ "number": "^[0-9]+[\\.\\)]\\s*"
16
16
  }
@@ -1,16 +1,16 @@
1
1
  {
2
- "tour": "^(# +)?R[Uu][Nn][Dd][Aa] ?№? ?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+) R[Uu][Nn][Dd][Aa]([\\.:])?$",
4
- "question": "P[Ii][Tt][Aa][Nn][Jj][Ee] ?[№N]?([0-9 ]*) ?([\\.:]|\n|\r\n|$)",
5
- "answer": "O[Dd][Gg][Oo][Vv][Oo][Rr] ?[№N]?([0-9]+)? ?[\\.:]",
2
+ "tour": "^(#\\s+)?R[Uu][Nn][Dd][Aa]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
+ "tourrev": "^([0-9IVXLCDM]+)\\sR[Uu][Nn][Dd][Aa]([\\.:])?$",
4
+ "question": "P[Ii][Tt][Aa][Nn][Jj][Ee]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
+ "answer": "O[Dd][Gg][Oo][Vv][Oo][Rr]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
6
6
  "handout": "^(M[Aa][Tt][Ee][Rr][Ii][Jj][Aa][Ll]|P[Oo][Dd][Ee][Ll][Jj][Ee][Nn][Oo])[\\.:]",
7
- "zachet": "P[Rr][Ii][Hh][Vv][Aa][Tt][Aa] [Ss][Ee] ?[\\.:]",
8
- "nezachet": "N[Ee] [Pp][Rr][Ii][Hh][Vv][Aa][Tt][Aa] [Ss][Ee] ?[\\.:]",
9
- "comment": "K[Oo][Mm][Ee][Nn][Tt][Aa][Rr] ?[№N]?([0-9]+)? ?[\\.:]",
10
- "author": "A[Uu][Tt][Oo][Rr][Ii]? ?[\\.:]",
11
- "source": "I[Zz][Vv][Oo][Rr][Ii]? ?[\\.:]",
12
- "editor": "U[Rr][Ee][Dd][Nn][Ii][Kk][Ii]? ?( ?[\\.:]| [\\-–—]+ )",
13
- "date": "D[Aa][Tt][Uu][Mm] ?[\\.:]",
7
+ "zachet": "P[Rr][Ii][Hh][Vv][Aa][Tt][Aa]\\s[Ss][Ee]\\s?[\\.:]",
8
+ "nezachet": "N[Ee]\\s[Pp][Rr][Ii][Hh][Vv][Aa][Tt][Aa]\\s[Ss][Ee]\\s?[\\.:]",
9
+ "comment": "K[Oo][Mm][Ee][Nn][Tt][Aa][Rr]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
10
+ "author": "A[Uu][Tt][Oo][Rr][Ii]?\\s?[\\.:]",
11
+ "source": "I[Zz][Vv][Oo][Rr][Ii]?\\s?[\\.:]",
12
+ "editor": "U[Rr][Ee][Dd][Nn][Ii][Kk][Ii]?\\s?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
13
+ "date": "D[Aa][Tt][Uu][Mm]\\s?[\\.:]",
14
14
  "date2": "WILL_FILL_LATER",
15
- "number": "^[0-9]+[\\.\\)] *"
15
+ "number": "^[0-9]+[\\.\\)]\\s*"
16
16
  }
@@ -1,16 +1,16 @@
1
1
  {
2
- "tour": "^(# +)?Т[Уу][Рр] ?№? ?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+) [Тт][Уу][Рр]([\\.:])?$",
4
- "question": "З[Аа][Пп][Ии][Тт][Аа][Нн][Нн][Яя] ?[№N]?([0-9 ]*) ?([\\.:]|\n|\r\n|$)",
5
- "handout": "Р[Оо][Зз][Дд][Аа][Тт][Кк][Оо][Вв][Ии][Йй][ ][Мм][Аа][Тт][Ее][Рр][Іі][Аа][Лл][\\.:]",
6
- "answer": "В[Іі][Дд][Пп][Оо][Вв][Іі][Дд][Ьь]? ?[№N]?([0-9]+)? ?[\\.:]",
7
- "zachet": "З[Аа][Лл][Іі][Кк] ?[\\.:]",
8
- "nezachet": "Н[Ее][Зз][Аа]Лл][Іі][Кк] ?[\\.:]",
9
- "comment": "К[Оо][Мм][Мм]?([Ее][Нн][Тт]([Аа][Рр]|\\.)|\\.) ?[№N]?([0-9]+)? ?[\\.:]",
10
- "author": "А[Вв][Тт][Оо][Рр](\\(?[Ии]?\\)?|[Кк][АаИи])? ?[\\.:]",
11
- "source": "Д[Жж][Ее][Рр][Ее][Лл][ОоАа] ?[\\.:]",
12
- "editor": "[Рр][Ее][Дд][Аа][Кк][Тт][Оо][Рр]([Ии]|[Сс][Ьь][Кк][Аа] [Гг][Рр][Уу][Пп][Аа])?( ?[\\.:]| [\\-–—]+ )",
13
- "date": "Д[Аа][Тт][Аа] ?[\\.:]",
2
+ "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
+ "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
4
+ "question": "З[Аа][Пп][Ии][Тт][Аа][Нн][Нн][Яя]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
+ "handout": "Р[Оо][Зз][Дд][Аа][Тт][Кк][Оо][Вв][Ии][Йй][\\s\\s][Мм][Аа][Тт][Ее][Рр][Іі][Аа][Лл][\\.:]",
6
+ "answer": "В[Іі][Дд][Пп][Оо][Вв][Іі][Дд][Ьь]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
7
+ "zachet": "З[Аа][Лл][Іі][Кк]\\s?[\\.:]",
8
+ "nezachet": "Н[Ее][Зз][Аа]Лл][Іі][Кк]\\s?[\\.:]",
9
+ "comment": "К[Оо][Мм][Мм]?([Ее][Нн][Тт]([Аа][Рр]|\\.)|\\.)\\s?[№N]?([0-9]+)?\\s?[\\.:]",
10
+ "author": "А[Вв][Тт][Оо][Рр](\\(?[Ии]?\\)?|[Кк][АаИи])?\\s?[\\.:]",
11
+ "source": "Д[Жж][Ее][Рр][Ее][Лл][ОоАа]\\s?[\\.:]",
12
+ "editor": "[Рр][Ее][Дд][Аа][Кк][Тт][Оо][Рр]([Ии]|[Сс][Ьь][Кк][Аа]\\s[Гг][Рр][Уу][Пп][Аа])?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
13
+ "date": "Д[Аа][Тт][Аа]\\s?[\\.:]",
14
14
  "date2": "(^|\\s)cічня|лютого|березня|квітня|травня|червня|липня|серпня|вересня|жовтня|листопада|грудня(\\s|$)",
15
- "number": "^[0-9]+[\\.\\)] *"
15
+ "number": "^[0-9]+[\\.\\)]\\s*"
16
16
  }
@@ -1,15 +1,15 @@
1
1
  {
2
- "tour": "^(# +)?([0-9]+) ?[-–—] ?[Тт][Уу][Рр]\\s*$",
3
- "question": "([0-9]+) ?[-–—] ? С[Аа][Вв][Оо][Лл]([\\.:]|\n|\r\n|$)",
4
- "answer": "Ж[Аа][Вв][Оо][Бб] ?[№N]?([0-9]+)? ?[\\.:]",
5
- "handout": "Т[Аа][Рр][Ққ][Аа][Тт][Мм][Аа][ ][Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
- "zachet": "Қ[Аа][Бб][Уу][Лл] ?[\\.:]",
7
- "nezachet": "Қ[Аа][Бб][Уу][Лл] [Ээ][Мм][Аа][Сс]?[\\.:]",
8
- "comment": "И[Зз][Оо][Ҳҳ] ?[№N]?([0-9]+)? ?[\\.:]",
9
- "author": "М[Уу][Аа][Лл][Лл][Ии][Фф]([Лл][Аа][Рр])? ?[\\.:]",
10
- "source": "М[Аа][Нн][Бб][Аа] ?[\\.:]",
11
- "editor": "(М|Тур м)[Уу][Ҳҳ][Аа][Рр][Рр][Ии][Рр]([Лл][Аа][Рр][Ии]?)?( ?[\\.:]| [\\-–—]+ )",
12
- "date": "С[Аа][Нн][Аа] ?[\\.:]",
2
+ "tour": "^(#\\s+)?([0-9]+)\\s?[-–—]\\s?[Тт][Уу][Рр]\\s*$",
3
+ "question": "([0-9]+)\\s?[-–—]\\s?\\sС[Аа][Вв][Оо][Лл]([\\.:]|\n|\r\n|$)",
4
+ "answer": "Ж[Аа][Вв][Оо][Бб]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
5
+ "handout": "Т[Аа][Рр][Ққ][Аа][Тт][Мм][Аа][\\s\\s][Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
+ "zachet": "Қ[Аа][Бб][Уу][Лл]\\s?[\\.:]",
7
+ "nezachet": "Қ[Аа][Бб][Уу][Лл]\\s[Ээ][Мм][Аа][Сс]?[\\.:]",
8
+ "comment": "И[Зз][Оо][Ҳҳ]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
9
+ "author": "М[Уу][Аа][Лл][Лл][Ии][Фф]([Лл][Аа][Рр])?\\s?[\\.:]",
10
+ "source": "М[Аа][Нн][Бб][Аа]\\s?[\\.:]",
11
+ "editor": "(М|Тур\\sм)[Уу][Ҳҳ][Аа][Рр][Рр][Ии][Рр]([Лл][Аа][Рр][Ии]?)?(\\s?[\\.:]|\\s[\\-–—]+\\s)",
12
+ "date": "С[Аа][Нн][Аа]\\s?[\\.:]",
13
13
  "date2": "(^|\\s)январь|февраль|март|апрель|май|июнь|июль|август|сентябрь|октябрь|ноябрь|декабрь(\\s|$)",
14
- "number": "^[0-9]+[\\.\\)] *"
14
+ "number": "^[0-9]+[\\.\\)]\\s*"
15
15
  }
chgksuite/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.24.0b2"
1
+ __version__ = "0.24.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chgksuite
3
- Version: 0.24.0b2
3
+ Version: 0.24.1
4
4
  Summary: A package for chgk automation
5
5
  Home-page: https://gitlab.com/peczony/chgksuite
6
6
  Author: Alexander Pecheny
@@ -24,8 +24,7 @@ Requires-Dist: pyperclip
24
24
  Requires-Dist: python-docx
25
25
  Requires-Dist: python-pptx
26
26
  Requires-Dist: requests
27
- Requires-Dist: telethon
28
- Requires-Dist: TgCrypto
27
+ Requires-Dist: python-telegram-bot
29
28
  Requires-Dist: toml
30
29
  Dynamic: author
31
30
  Dynamic: author-email
@@ -1,25 +1,26 @@
1
1
  chgksuite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  chgksuite/__main__.py,sha256=0-_jfloveTW3SZYW5XEagbyaHKGCiDhGNgcLxsT_dMs,140
3
3
  chgksuite/cli.py,sha256=8YoHWfc-wv6gdYMPH3X8HxV9SG70S7M6IQqavJaBXV4,31990
4
- chgksuite/common.py,sha256=lHQG72HghaBudr1X6ognGbrKmStW5k9nGSLdoxydMSA,10834
4
+ chgksuite/common.py,sha256=FkEntLcVTApjLtTFTDf2QiMOath05i322wcmJIFjztQ,11093
5
5
  chgksuite/parser.py,sha256=AVNeTUgv0aGHsxWunV_7bM4Ul2hbDslkzqg0dU49lic,37285
6
6
  chgksuite/parser_db.py,sha256=W1--OcDnx18mehH1T2ISHu3Saeq-9mqHo-xJopNySXI,11135
7
7
  chgksuite/trello.py,sha256=BG1Qb_W7Uu4o3Mfc_tK71ElU8ysdSplGlj_sAKfvUn4,14730
8
8
  chgksuite/typotools.py,sha256=Jdk65Wn_bXqpQtOT7PkBZyD2ZG1MBeeZFPMzcHEPkf4,12771
9
- chgksuite/version.py,sha256=0Oh9QRxXRu7bku7hpnaBfS0Bood-SOaN3j3uUzin3lM,25
9
+ chgksuite/version.py,sha256=23Q5wqrB_jTfEuw8bupXFhwqZO0_-oiISvjn1gCVUsA,23
10
10
  chgksuite/vulture_whitelist.py,sha256=P__p_X0zt10ivddIf81uyxsobV14vFg8uS2lt4foYpc,3582
11
11
  chgksuite/composer/__init__.py,sha256=MAOVZIYXmZmD6nNQSo9DueV6b5RgxF7_HGeLvsAhMJs,6490
12
- chgksuite/composer/chgksuite_parser.py,sha256=gOFAqPXRh-I5_GAPM6j1Jki-Wcdald5vPp2vFU1NwOM,8303
12
+ chgksuite/composer/chgksuite_parser.py,sha256=MFcLUWbccMqo3OYEuaAIA0loEvWM_PNS9vR7c1z_c60,8843
13
13
  chgksuite/composer/composer_common.py,sha256=S5ipehxep6LlGIZ9dcBnifbVaMYXijMhq6-pUHRISo8,15309
14
14
  chgksuite/composer/db.py,sha256=71cINE_V8s6YidvqpmBmmlWbcXraUEGZA1xpVFAUENw,8173
15
15
  chgksuite/composer/docx.py,sha256=5MASXACM-ztWrr3VdO8HZ-W-hWWQ5TY1jXMsCQIufGc,18346
16
16
  chgksuite/composer/latex.py,sha256=WtLdUICxeX4_5vHEJRF0YhFLpTsOUwBkQFunQS488FA,9248
17
17
  chgksuite/composer/lj.py,sha256=nty3Zs3N1H0gNK378U04aAHo71_5cABhCM1Mm9jiUEA,15213
18
18
  chgksuite/composer/openquiz.py,sha256=CWGxb_cPG2Qh3dQ3hu0pS5fOfhKc8klZuO38Lo9hUF8,7020
19
- chgksuite/composer/pptx.py,sha256=05JxulgU80jBmxRqC3cFh0q_B3bMUCe31JzLYvnNZYM,19119
19
+ chgksuite/composer/pptx.py,sha256=y1W2m3Cj28rDWguX5drczZvfIwm9QPsJ8_da5YTd1aE,19164
20
20
  chgksuite/composer/reddit.py,sha256=-Eg4CqMHhyGGfCteVwdQdtE1pfUXQ42XcP5OYUrBXmo,3878
21
21
  chgksuite/composer/stats.py,sha256=GbraSrjaZ8Mc2URs5aGAsI4ekboAKzlJJOqsbe96ELA,3995
22
- chgksuite/composer/telegram.py,sha256=Af0LJIjz3vO5OiQikV7XQObx4ABJewBp7YqHRt0P4GY,25670
22
+ chgksuite/composer/telegram.py,sha256=H65LS79JZ3aCcqeq_SrnUU4E4yro1f-EZxCM3IrIyyQ,46526
23
+ chgksuite/composer/telegram_bot.py,sha256=xT5D39m4zGmIbHV_ZfyQ9Rc8PAmG2V5FGUeDKpkgyTw,3767
23
24
  chgksuite/composer/telegram_parser.py,sha256=50WqOuvzzdMJJm5wsSLS49oURAQRYToPnbPJjQbMYC4,8096
24
25
  chgksuite/resources/cheader.tex,sha256=Jfe3LESk0VIV0HCObbajSQpEMljaIDAIEGSs6YY9rTk,3454
25
26
  chgksuite/resources/fix-unnumbered-sections.sty,sha256=FN6ZSWC6MvoRoThPm5AxCF98DdgcxbxyBYG6YImM05s,1409
@@ -33,19 +34,19 @@ chgksuite/resources/labels_ua.toml,sha256=sUZdwwpkddb_56bmrZyO56cDrm68ft_JoMqR38
33
34
  chgksuite/resources/labels_uz.toml,sha256=uRnf6tjBf1rYpWjt675ecB2MPn_Ohz-Hj6XDYNPpe3o,609
34
35
  chgksuite/resources/labels_uz_cyr.toml,sha256=ztqHItwhJjfBTOIj_vA1hrneYo8s5gvZkkSr0k9S3rs,814
35
36
  chgksuite/resources/pptx_config.toml,sha256=pbdQpZTBZajfXxf9Ej6jFQv8luA9_h2Lsihx9hs2jkI,570
36
- chgksuite/resources/regexes_by.json,sha256=SdmBZScVCKL5iZxbulHVorv22sMFN7z5kUXb7GwcNbg,1252
37
- chgksuite/resources/regexes_en.json,sha256=Ax_91Diozvhi7Oi9hLyT0xXjT1qbX3yRGJpB3NwibEM,959
38
- chgksuite/resources/regexes_kz_cyr.json,sha256=cJEOBPU5_zJnxhMRXg3t7RSCc9NdX12q_Nymqp-ECW0,1633
39
- chgksuite/resources/regexes_ru.json,sha256=Y7lFJKMDNgFgSul0n18bfHRn4vcTEB5HYxYIJB7lDJg,1608
40
- chgksuite/resources/regexes_sr.json,sha256=B_X0ZciHYwUO75vjbd2vkEt0TL4RG-yywgTtJ9QqoDI,877
41
- chgksuite/resources/regexes_ua.json,sha256=0pO0WRF1TWRIZis5gr-GmCwlAO_eVforpFuFiO6EQ04,1284
42
- chgksuite/resources/regexes_uz_cyr.json,sha256=cIQrNXbjDzRwvywDlicy7m6VEvgpE3V1DOOeIlEQAwc,1062
37
+ chgksuite/resources/regexes_by.json,sha256=43K_jjNocNrx75OcSlVxg2zHNJKoHwzceFbtfZgM0Vo,1296
38
+ chgksuite/resources/regexes_en.json,sha256=v1RPW8Oj0UiS_86ieYjpFOGm3qN5-OlM-qgAqa6oCy4,1003
39
+ chgksuite/resources/regexes_kz_cyr.json,sha256=QW6MxkPjSRNU-KPAAqh4jwFZ--ckJo9EOn_p30gihiQ,1679
40
+ chgksuite/resources/regexes_ru.json,sha256=_ZgSG31eV348eIYgmcEWvygKL3cWZeaauXsBWyrCWaM,1652
41
+ chgksuite/resources/regexes_sr.json,sha256=SiDDtxWND41XOBvHM4MgSXcogh7bRTqsY3JbJPT2wF4,925
42
+ chgksuite/resources/regexes_ua.json,sha256=IXtJtoUY15OoBu5Y5yW6adhJUhsDRkwfxWsPYIrbgPA,1330
43
+ chgksuite/resources/regexes_uz_cyr.json,sha256=mIvWjyZZXQ3lr_ntuC7-ybknnYJxSSQEKxqnGluTvow,1106
43
44
  chgksuite/resources/template.docx,sha256=Do29TAsg3YbH0rRSaXhVzKEoh4pwXkklW_idWA34HVE,11189
44
45
  chgksuite/resources/template.pptx,sha256=hEFWqE-yYpwZ8ejrMCJIPEyoMT3eDqaqtiEeQ7I4fyk,29777
45
46
  chgksuite/resources/trello.json,sha256=M5Q9JR-AAJF1u16YtNAxDX-7c7VoVTXuq4POTqYvq8o,555
46
- chgksuite-0.24.0b2.dist-info/licenses/LICENSE,sha256=_a1yfntuPmctLsuiE_08xMSORuCfGS8X5hQph2U_PUw,1081
47
- chgksuite-0.24.0b2.dist-info/METADATA,sha256=YbM_s5ki5fEblYecm8L3X1ScDldUlrvXQJgRdEbDawI,1309
48
- chgksuite-0.24.0b2.dist-info/WHEEL,sha256=DK49LOLCYiurdXXOXwGJm6U4DkHkg4lcxjhqwRa0CP4,91
49
- chgksuite-0.24.0b2.dist-info/entry_points.txt,sha256=lqjX6ULQZGDt0rgouTXBuwEPiwKkDQkSiNsT877A_Jg,54
50
- chgksuite-0.24.0b2.dist-info/top_level.txt,sha256=cSWiRBOGZW9nIO6Rv1IrEfwPgV2ZWs87QV9wPXeBGqM,10
51
- chgksuite-0.24.0b2.dist-info/RECORD,,
47
+ chgksuite-0.24.1.dist-info/licenses/LICENSE,sha256=_a1yfntuPmctLsuiE_08xMSORuCfGS8X5hQph2U_PUw,1081
48
+ chgksuite-0.24.1.dist-info/METADATA,sha256=lNdWAz-SnWg5kWZy7HIJT5XahbGZkfza4s-HIgKOXAI,1294
49
+ chgksuite-0.24.1.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
50
+ chgksuite-0.24.1.dist-info/entry_points.txt,sha256=lqjX6ULQZGDt0rgouTXBuwEPiwKkDQkSiNsT877A_Jg,54
51
+ chgksuite-0.24.1.dist-info/top_level.txt,sha256=cSWiRBOGZW9nIO6Rv1IrEfwPgV2ZWs87QV9wPXeBGqM,10
52
+ chgksuite-0.24.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.0.2)
2
+ Generator: setuptools (79.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5