lyrpy 2024.0.4__py3-none-any.whl → 2025.0.2__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.

Potentially problematic release.


This version of lyrpy might be problematic. Click here for more details.

Files changed (149) hide show
  1. SRC/LIB/__init__.py +21 -0
  2. SRC/LIB/lyrpy/LUConst.py +358 -0
  3. {lyrpy → SRC/LIB/lyrpy}/LUDateTime.py +2 -4
  4. {lyrpy → SRC/LIB/lyrpy}/LUDecotators.py +2 -3
  5. {lyrpy → SRC/LIB/lyrpy}/LUDict.py +0 -1
  6. {lyrpy → SRC/LIB/lyrpy}/LUDoc.py +4 -3
  7. {lyrpy → SRC/LIB/lyrpy}/LUErrors.py +0 -1
  8. {lyrpy → SRC/LIB/lyrpy}/LUFile.py +115 -61
  9. {lyrpy → SRC/LIB/lyrpy}/LUFileUtils.py +60 -45
  10. {lyrpy → SRC/LIB/lyrpy}/LULog.py +267 -191
  11. {lyrpy → SRC/LIB/lyrpy}/LUObjects.py +4 -4
  12. {lyrpy → SRC/LIB/lyrpy}/LUObjectsYT.py +39 -22
  13. {lyrpy → SRC/LIB/lyrpy}/LUParserARG.py +2 -3
  14. {lyrpy → SRC/LIB/lyrpy}/LUParserINI.py +8 -3
  15. {lyrpy → SRC/LIB/lyrpy}/LUParserREG.py +5 -1
  16. {lyrpy → SRC/LIB/lyrpy}/LUQThread.py +6 -4
  17. {lyrpy → SRC/LIB/lyrpy}/LUQTimer.py +5 -5
  18. {lyrpy → SRC/LIB/lyrpy}/LUSheduler.py +24 -23
  19. SRC/LIB/lyrpy/LUTelegram.py +428 -0
  20. {lyrpy → SRC/LIB/lyrpy}/LUThread.py +7 -6
  21. {lyrpy → SRC/LIB/lyrpy}/LUTimer.py +5 -3
  22. {lyrpy → SRC/LIB/lyrpy}/LUVersion.py +4 -1
  23. {lyrpy → SRC/LIB/lyrpy}/LUYouTube.py +6 -7
  24. {lyrpy → SRC/LIB/lyrpy}/LUos.py +13 -3
  25. SRC/LIB/lyrpy/__init__.py +21 -0
  26. {lyrpy → SRC/LIB/lyrpy}/__main__.py +20 -19
  27. SRC/__init__.py +0 -0
  28. SRC/lyrpy/LUConsole.py +402 -0
  29. SRC/lyrpy/LUConst.py +358 -0
  30. SRC/lyrpy/LUDateTime.py +205 -0
  31. SRC/lyrpy/LUDecotators.py +417 -0
  32. SRC/lyrpy/LUDict.py +116 -0
  33. SRC/lyrpy/LUDoc.py +62 -0
  34. SRC/lyrpy/LUErrors.py +79 -0
  35. SRC/lyrpy/LUFile.py +1228 -0
  36. SRC/lyrpy/LUFileUtils.py +501 -0
  37. SRC/lyrpy/LULog.py +2324 -0
  38. SRC/lyrpy/LUNetwork.py +277 -0
  39. SRC/lyrpy/LUNumUtils.py +305 -0
  40. SRC/lyrpy/LUObjects.py +208 -0
  41. SRC/lyrpy/LUObjectsYT.py +846 -0
  42. SRC/lyrpy/LUParserARG.py +364 -0
  43. SRC/lyrpy/LUParserINI.py +376 -0
  44. SRC/lyrpy/LUParserREG.py +514 -0
  45. SRC/lyrpy/LUProc.py +110 -0
  46. SRC/lyrpy/LUQThread.py +141 -0
  47. SRC/lyrpy/LUQTimer.py +197 -0
  48. SRC/lyrpy/LUSheduler.py +941 -0
  49. SRC/lyrpy/LUStrDecode.py +223 -0
  50. SRC/lyrpy/LUStrUtils.py +633 -0
  51. SRC/lyrpy/LUSupport.py +124 -0
  52. SRC/lyrpy/LUTelegram.py +428 -0
  53. SRC/lyrpy/LUThread.py +177 -0
  54. SRC/lyrpy/LUTimer.py +141 -0
  55. SRC/lyrpy/LUVersion.py +383 -0
  56. SRC/lyrpy/LUYouTube.py +203 -0
  57. SRC/lyrpy/LUos.py +807 -0
  58. lyrpy/LUConst.py → SRC/lyrpy/LUsys.py +12 -10
  59. SRC/lyrpy/__init__.py +21 -0
  60. lyrpy/__init__.py → SRC/lyrpy/__main__.py +2 -3
  61. TESTS/__init__.py +0 -0
  62. TESTS/test_lyrpy.py +4 -0
  63. TESTS/test_main.py +10 -0
  64. __SRC/LIB/__init__.py +0 -0
  65. __SRC/LIB/lyrpy/LUConsole.py +402 -0
  66. __SRC/LIB/lyrpy/LUConst.py +358 -0
  67. __SRC/LIB/lyrpy/LUDateTime.py +205 -0
  68. __SRC/LIB/lyrpy/LUDecotators.py +417 -0
  69. __SRC/LIB/lyrpy/LUDict.py +116 -0
  70. __SRC/LIB/lyrpy/LUDoc.py +62 -0
  71. __SRC/LIB/lyrpy/LUErrors.py +79 -0
  72. __SRC/LIB/lyrpy/LUFile.py +1228 -0
  73. __SRC/LIB/lyrpy/LUFileUtils.py +501 -0
  74. __SRC/LIB/lyrpy/LULog.py +2324 -0
  75. __SRC/LIB/lyrpy/LUNetwork.py +277 -0
  76. __SRC/LIB/lyrpy/LUNumUtils.py +305 -0
  77. __SRC/LIB/lyrpy/LUObjects.py +208 -0
  78. __SRC/LIB/lyrpy/LUObjectsYT.py +846 -0
  79. __SRC/LIB/lyrpy/LUParserARG.py +364 -0
  80. __SRC/LIB/lyrpy/LUParserINI.py +376 -0
  81. __SRC/LIB/lyrpy/LUParserREG.py +514 -0
  82. __SRC/LIB/lyrpy/LUProc.py +110 -0
  83. __SRC/LIB/lyrpy/LUQThread.py +141 -0
  84. __SRC/LIB/lyrpy/LUQTimer.py +197 -0
  85. __SRC/LIB/lyrpy/LUSheduler.py +941 -0
  86. __SRC/LIB/lyrpy/LUStrDecode.py +223 -0
  87. __SRC/LIB/lyrpy/LUStrUtils.py +633 -0
  88. __SRC/LIB/lyrpy/LUSupport.py +124 -0
  89. __SRC/LIB/lyrpy/LUTelegram.py +428 -0
  90. __SRC/LIB/lyrpy/LUThread.py +177 -0
  91. __SRC/LIB/lyrpy/LUTimer.py +141 -0
  92. __SRC/LIB/lyrpy/LUVersion.py +383 -0
  93. __SRC/LIB/lyrpy/LUYouTube.py +203 -0
  94. __SRC/LIB/lyrpy/LUos.py +807 -0
  95. __SRC/LIB/lyrpy/LUsys.py +47 -0
  96. __SRC/LIB/lyrpy/__init__.py +21 -0
  97. __SRC/LIB/lyrpy/__main__.py +20 -0
  98. __SRC/__init__.py +0 -0
  99. ____src/__init__.py +0 -0
  100. ____src/lyrpy/LUConsole.py +402 -0
  101. ____src/lyrpy/LUConst.py +358 -0
  102. ____src/lyrpy/LUDateTime.py +205 -0
  103. ____src/lyrpy/LUDecotators.py +417 -0
  104. ____src/lyrpy/LUDict.py +116 -0
  105. ____src/lyrpy/LUDoc.py +62 -0
  106. ____src/lyrpy/LUErrors.py +79 -0
  107. ____src/lyrpy/LUFile.py +1228 -0
  108. ____src/lyrpy/LUFileUtils.py +501 -0
  109. ____src/lyrpy/LULog.py +2324 -0
  110. ____src/lyrpy/LUNetwork.py +277 -0
  111. ____src/lyrpy/LUNumUtils.py +305 -0
  112. ____src/lyrpy/LUObjects.py +208 -0
  113. ____src/lyrpy/LUObjectsYT.py +846 -0
  114. ____src/lyrpy/LUParserARG.py +364 -0
  115. ____src/lyrpy/LUParserINI.py +376 -0
  116. ____src/lyrpy/LUParserREG.py +514 -0
  117. ____src/lyrpy/LUProc.py +110 -0
  118. ____src/lyrpy/LUQThread.py +141 -0
  119. ____src/lyrpy/LUQTimer.py +197 -0
  120. ____src/lyrpy/LUSheduler.py +941 -0
  121. ____src/lyrpy/LUStrDecode.py +223 -0
  122. ____src/lyrpy/LUStrUtils.py +633 -0
  123. ____src/lyrpy/LUSupport.py +124 -0
  124. ____src/lyrpy/LUTelegram.py +428 -0
  125. ____src/lyrpy/LUThread.py +177 -0
  126. ____src/lyrpy/LUTimer.py +141 -0
  127. ____src/lyrpy/LUVersion.py +383 -0
  128. ____src/lyrpy/LUYouTube.py +203 -0
  129. ____src/lyrpy/LUos.py +807 -0
  130. ____src/lyrpy/LUsys.py +47 -0
  131. ____src/lyrpy/__init__.py +21 -0
  132. ____src/lyrpy/__main__.py +20 -0
  133. lyrpy-2025.0.2.dist-info/METADATA +21 -0
  134. lyrpy-2025.0.2.dist-info/RECORD +145 -0
  135. {lyrpy-2024.0.4.dist-info → lyrpy-2025.0.2.dist-info}/WHEEL +1 -1
  136. lyrpy-2025.0.2.dist-info/top_level.txt +2 -0
  137. lyrpy-2024.0.4.data/data/data/text.txt +0 -1
  138. lyrpy-2024.0.4.dist-info/METADATA +0 -44
  139. lyrpy-2024.0.4.dist-info/RECORD +0 -38
  140. lyrpy-2024.0.4.dist-info/top_level.txt +0 -1
  141. {lyrpy → SRC/LIB/lyrpy}/LUConsole.py +0 -0
  142. {lyrpy → SRC/LIB/lyrpy}/LUNetwork.py +0 -0
  143. {lyrpy → SRC/LIB/lyrpy}/LUNumUtils.py +0 -0
  144. {lyrpy → SRC/LIB/lyrpy}/LUProc.py +0 -0
  145. {lyrpy → SRC/LIB/lyrpy}/LUStrDecode.py +0 -0
  146. {lyrpy → SRC/LIB/lyrpy}/LUStrUtils.py +0 -0
  147. {lyrpy → SRC/LIB/lyrpy}/LUSupport.py +0 -0
  148. {lyrpy → SRC/LIB/lyrpy}/LUsys.py +0 -0
  149. {lyrpy-2024.0.4.dist-info → lyrpy-2025.0.2.dist-info/licenses}/LICENSE +0 -0
SRC/lyrpy/LUSupport.py ADDED
@@ -0,0 +1,124 @@
1
+ """LUSupport.py"""
2
+ # -*- coding: UTF-8 -*-
3
+ __annotations__ = """
4
+ =======================================================
5
+ Copyright (c) 2023-2024
6
+ Author:
7
+ Lisitsin Y.R.
8
+ Project:
9
+ LU_PY
10
+ Python (LU)
11
+ Module:
12
+ LUSupport.py
13
+
14
+ =======================================================
15
+ """
16
+
17
+ #------------------------------------------
18
+ # БИБЛИОТЕКИ python
19
+ #------------------------------------------
20
+ import sys
21
+
22
+ #------------------------------------------
23
+ # БИБЛИОТЕКИ сторонние
24
+ #------------------------------------------
25
+
26
+ #------------------------------------------
27
+ # БИБЛИОТЕКИ LU
28
+ #------------------------------------------
29
+
30
+ """
31
+ function LoadDLL (NameDll: string; var HandleDLL: HModule): Boolean;
32
+ { LoadDLL }
33
+ begin
34
+ HandleDLL := LoadLibrary (PChar(NameDll));
35
+ Result := (HandleDLL >= HINSTANCE_ERROR);
36
+ end;
37
+
38
+ function UnLoadDLL (HandleDLL: HModule): Boolean;
39
+ { UnLoadDLL }
40
+ begin
41
+ Result := FreeLibrary (HandleDLL);
42
+ end;
43
+
44
+ function GetFunc (HandleDLL: HModule; NameFunc: string; var AddFunc: Pointer): Boolean;
45
+ { GetFunc }
46
+ begin
47
+ try
48
+ AddFunc := GetProcAddress (HandleDLL, PChar(NameFunc));
49
+ except
50
+ AddFunc := nil;
51
+ end;
52
+ Result := Assigned (AddFunc);
53
+ end;
54
+
55
+ function ErrorString (Error: DWORD): string;
56
+ { ErrorString }
57
+ begin
58
+ Result := SysErrorMessage (Error);
59
+ end;
60
+
61
+ function LastErrorString: string;
62
+ { LastErrorString }
63
+ begin
64
+ Result := ErrorString (GetLastError);
65
+ end;
66
+ """
67
+
68
+ #-------------------------------------------------
69
+ # IsTerminal
70
+ # Возвращает True, если текущая консоль является терминалом
71
+ #-------------------------------------------------
72
+ def IsTerminal () -> bool:
73
+ """IsTerminal"""
74
+ #beginfunction
75
+ return sys.stdout.isatty ()
76
+ #endfunction
77
+
78
+ #-------------------------------------------------
79
+ # TupleToStr
80
+ # Возвращает кортеж в виде строки, состоящей из элементов ATuple
81
+ #-------------------------------------------------
82
+ def TupleToStr (ATuple:()) -> str:
83
+ """TupleToStr"""
84
+ #beginfunction
85
+ LResult = ''
86
+ i = 0
87
+ j = 0
88
+ if type(ATuple) is tuple:
89
+ for r in ATuple:
90
+ i = i + 1
91
+ if r != '':
92
+ j = j + 1
93
+ if j == 1:
94
+ LResult = LResult + r
95
+ else:
96
+ LResult = LResult + ';' + r
97
+ #endif
98
+ #endif
99
+ #endfor
100
+ else:
101
+ if len (ATuple) > 0:
102
+ LResult = LResult + ATuple
103
+ #endif
104
+ #endif
105
+ return LResult
106
+ #endfunction
107
+
108
+ #---------------------------------------------------------
109
+ # main
110
+ #---------------------------------------------------------
111
+ def main ():
112
+ #beginfunction
113
+ ...
114
+ #endfunction
115
+
116
+ #---------------------------------------------------------
117
+ #
118
+ #---------------------------------------------------------
119
+ #beginmodule
120
+ if __name__ == "__main__":
121
+ main()
122
+ #endif
123
+
124
+ #endmodule
@@ -0,0 +1,428 @@
1
+ """LUTelegram.py"""
2
+ # -*- coding: UTF-8 -*-
3
+ __annotations__ = """
4
+ =======================================================
5
+ Copyright (c) 2025
6
+ Author:
7
+ Lisitsin Y.R.
8
+ Project:
9
+ lyrpy
10
+
11
+ Module:
12
+ LUTelegram.py
13
+
14
+ =======================================================
15
+ """
16
+
17
+ from fontTools.misc.cython import returns
18
+ #------------------------------------------
19
+ # БИБЛИОТЕКИ python
20
+ #------------------------------------------
21
+
22
+ #------------------------------------------
23
+ # БИБЛИОТЕКИ сторонние
24
+ #------------------------------------------
25
+
26
+ #------------------------------------------
27
+ # БИБЛИОТЕКА telethon
28
+ #------------------------------------------
29
+ # import telethon
30
+ import telethon.sync
31
+ import telethon.tl.types
32
+
33
+ from telethon.sync import TelegramClient
34
+ from telethon.tl.types import PeerUser, PeerChat, PeerChannel
35
+ import re
36
+ import asyncio
37
+
38
+ # from telethon.tl.functions.messages import GetDialogsRequest
39
+ # from telethon.tl.types import InputPeerEmpty
40
+ # from telethon.tl.types import User
41
+ # # класс, позволяющий нам подключаться к клиенту мессенджера и работать с ним;
42
+ # from telethon.sync import TelegramClient
43
+ # # PeerChannel - специальный тип, определяющий объекты типа «канал/чат»,
44
+ # # с помощью которого можно обратиться к нужному каналу для парсинга сообщений.
45
+ # from telethon.tl.types import Channel, PeerChannel, PeerChat, PeerUser, Message, User, MessageMediaPhoto, MessageMediaDocument
46
+ # # конструктор для работы с InputPeer, который передаётся в качестве аргумента в GetDialogsRequest;
47
+ # from telethon.tl.types import InputMessagesFilterPhotos
48
+ # # функция, позволяющая работать с сообщениями в чате;
49
+ # # метод, позволяющий получить сообщения пользователей из чата и работать с ним;
50
+ # from telethon.tl.functions.messages import GetHistoryRequest
51
+ # from telethon import TelegramClient, events, sync
52
+ # import telethon.errors
53
+ # import telethon.client.messages as messages
54
+ #------------------------------------------
55
+ # БИБЛИОТЕКА pyrogram
56
+ #------------------------------------------
57
+ # from pyrogram import Client
58
+ import pyrogram
59
+
60
+ #------------------------------------------
61
+ # БИБЛИОТЕКИ LU
62
+ #------------------------------------------
63
+
64
+ LIB_name = ''
65
+
66
+ # ------------------------------------------
67
+ # Авторизация в Telegram
68
+ # get_telethon_client (session_name, api_id, api_hash, phone, password) -> telethon.sync.TelegramClient:
69
+ # ------------------------------------------
70
+ def get_telethon_client (session_name, api_id, api_hash, phone, password) -> telethon.sync.TelegramClient:
71
+ """get_telethon_client"""
72
+ # beginfunction
73
+ result = telethon.sync.TelegramClient(session_name, api_id, api_hash, system_version="4.16.30-vxNAME ")
74
+ # Вместо NAME используйте любое сочетание букв на английском КАПСОМ Пример: vxXYI, vxABC, vxMYNAME
75
+ # # (в папке с кодом нет файлика .session, клиент сам его создаст (в нашем случае 'my_session')
76
+ # # и будет с ним работать. Поэтому просто вставляем эти параметры в инициализацию и кайфуем:finger_up: )
77
+
78
+ # Tclient = TelegramClient (Gsession_name, Gapi_id, Gapi_hash,
79
+ # # device_model = "iPhone 13 Pro Max",
80
+ # # app_version = "8.4",
81
+ # # lang_code = "en",
82
+ # # system_lang_code = "en-US")
83
+ # system_version='4.16.30-vxABC')
84
+ # Tclient.start (phone=Gphone, password=Gpassword)
85
+ result.start (phone=phone, password=password)
86
+ result.connect ()
87
+ # print (f'{LIB_name}_user_authorized={result.is_user_authorized()}')
88
+ return result
89
+ # endfunction
90
+
91
+ # ------------------------------------------
92
+ # Получить the current User who is logged
93
+ # get_telethon_me (client:telethon.sync.TelegramClient) -> telethon.tl.types.User:
94
+ # ------------------------------------------
95
+ def get_telethon_me (client:telethon.sync.TelegramClient) -> telethon.tl.types.User:
96
+ """get_telethon_me"""
97
+ # beginfunction
98
+ result:User = client.get_me ()
99
+
100
+ # print (f'{LIB_name}_username={result.username}')
101
+ # print (f'{LIB_name}_phone={result.phone}')
102
+
103
+ # print (f'{LIB_name}_stringify={result.stringify()}')
104
+ return result
105
+ # endfunction
106
+
107
+ # ------------------------------------------
108
+ # Получить channel
109
+ # get_telethon_channel (client:telethon.sync.TelegramClient, channel_name_id) -> telethon.tl.types.Channel:
110
+ # ------------------------------------------
111
+ def get_telethon_channel (client:telethon.sync.TelegramClient, channel_name_id) -> telethon.tl.types.Channel:
112
+ """get_telethon_channel"""
113
+ # beginfunction
114
+ result = client.get_entity (channel_name_id)
115
+ # print (result)
116
+ # print(f'{LIB_name}_Channel.title={result.title}')
117
+ # print(f'{LIB_name}_Channel.id={result.id}')
118
+ # print(f'{LIB_name}_Channel.username={result.id}')
119
+ return result
120
+ # endfunction
121
+
122
+ # ------------------------------------------
123
+ # Получить message
124
+ # get_telethon_message (client:telethon.sync.TelegramClient, channel:telethon.tl.types.Channel, message_id) -> telethon.tl.types.Message:
125
+ # ------------------------------------------
126
+ def get_telethon_message (client:telethon.sync.TelegramClient, channel:telethon.tl.types.Channel, message_id) -> telethon.tl.types.Message:
127
+ """get_telethon_message"""
128
+ # beginfunction
129
+ try:
130
+ result = client.get_messages (channel.id, ids=message_id)
131
+ # print(f'{LIB_name}_Message={result}')
132
+ except:
133
+ result = None
134
+
135
+ return result
136
+ # endfunction
137
+
138
+ #------------------------------------------
139
+ # Получить мои группы
140
+ # get_telethon_mygroups (client:TelegramClient):
141
+ #------------------------------------------
142
+ def get_telethon_mygroups (client:telethon.sync.TelegramClient):
143
+ """get_telethon_mygroups"""
144
+ #beginfunction
145
+ # Получение списка диалогов
146
+ dialogs = client.get_dialogs()
147
+ # Отображение списка групп
148
+ for dialog in dialogs:
149
+ if dialog.is_group:
150
+ print(f"{LIB_name}_Группа: {dialog.title} (ID: {dialog.id})")
151
+ #endfunction
152
+
153
+ #------------------------------------------
154
+ # Получить список groups
155
+ #------------------------------------------
156
+ def get_telethon_groups (client:telethon.sync.TelegramClient) -> list:
157
+ """get_telethon_groups"""
158
+ #beginfunction
159
+ chats = []
160
+ last_date = None
161
+ size_chats = 200
162
+ groups = []
163
+
164
+ # -----------------------------------------------
165
+ # Напишем запрос для получения списка групп
166
+ # -----------------------------------------------
167
+ # offset_date и offset_peer мы передаём с пустыми значениями.
168
+ # Обычно они используются для фильтрации полученных данных, но здесь мы
169
+ # хотим получить весь список. Лимит по количеству элементов в ответе задаём 200,
170
+ # передавая в параметр limit переменную size_chats.
171
+ result = client (telethon.tl.functions.messages.GetDialogsRequest (
172
+ offset_date=last_date,
173
+ offset_id=0,
174
+ offset_peer=telethon.tl.types.InputPeerEmpty (),
175
+ limit=size_chats,
176
+ hash=0
177
+ ))
178
+ chats.extend (result.chats)
179
+
180
+ # -----------------------------------------------
181
+ #
182
+ # -----------------------------------------------
183
+ for chat in chats:
184
+ try:
185
+ # print (int(chat.megagroup), chat.title)
186
+
187
+ # Megagroup в библиотеке Telethon — это свойство объекта Channel,
188
+ # которое указывает, является ли он мегагруппой (большой группой).
189
+ # Мегагруппы — это каналы, для которых значение свойства channel.megagroup равно True.
190
+ # В официальных приложениях Telegram такие группы называются «супергруппами»
191
+
192
+ if chat.megagroup == True:
193
+ groups.append (chat)
194
+ except:
195
+ continue
196
+ return groups
197
+
198
+ #endfunction
199
+
200
+ #------------------------------------------
201
+ # Получить список groups
202
+ #------------------------------------------
203
+ def get_telethon_groups (client:telethon.sync.TelegramClient) -> list:
204
+ """get_telethon_groups"""
205
+ #beginfunction
206
+ chats = []
207
+ last_date = None
208
+ size_chats = 200
209
+ groups = []
210
+
211
+ # -----------------------------------------------
212
+ # Напишем запрос для получения списка групп
213
+ # -----------------------------------------------
214
+ # offset_date и offset_peer мы передаём с пустыми значениями.
215
+ # Обычно они используются для фильтрации полученных данных, но здесь мы
216
+ # хотим получить весь список. Лимит по количеству элементов в ответе задаём 200,
217
+ # передавая в параметр limit переменную size_chats.
218
+ result = client (telethon.tl.functions.messages.GetDialogsRequest (
219
+ offset_date=last_date,
220
+ offset_id=0,
221
+ offset_peer=telethon.tl.types.InputPeerEmpty (),
222
+ limit=size_chats,
223
+ hash=0
224
+ ))
225
+ chats.extend (result.chats)
226
+ # -----------------------------------------------
227
+ #
228
+ # -----------------------------------------------
229
+ for chat in chats:
230
+ try:
231
+ # print (int(chat.megagroup), chat.title)
232
+ # Megagroup в библиотеке Telethon — это свойство объекта Channel,
233
+ # которое указывает, является ли он мегагруппой (большой группой).
234
+ # Мегагруппы — это каналы, для которых значение свойства channel.megagroup равно True.
235
+ # В официальных приложениях Telegram такие группы называются «супергруппами»
236
+ if chat.megagroup == True:
237
+ groups.append (chat)
238
+ else:
239
+ # groups.append (chat)
240
+ pass
241
+ except:
242
+ continue
243
+ return groups
244
+ #endfunction
245
+
246
+ #------------------------------------------
247
+ # Получить список users group
248
+ #------------------------------------------
249
+ def get_telethon_users_group (client:telethon.sync.TelegramClient, group) -> list:
250
+ """get_telethon_users_group"""
251
+ #beginfunction
252
+ #-----------------------------------------------
253
+ # Узнаём пользователей...
254
+ #-----------------------------------------------
255
+ all_participants = []
256
+ try:
257
+ all_participants = client.get_participants (group, limit=100000)
258
+ # print (group)
259
+ # for user in all_participants:
260
+ # if user.username:
261
+ # username = user.username
262
+ # else:
263
+ # username = ""
264
+ # if user.first_name:
265
+ # first_name = user.first_name
266
+ # else:
267
+ # first_name = ""
268
+ # if user.last_name:
269
+ # last_name = user.last_name
270
+ # else:
271
+ # last_name = ""
272
+ # name = (first_name + ' ' + last_name).strip ()
273
+ # print(f'{username=}, {name=}, {target_group.title=}')
274
+ except:
275
+ pass
276
+ return all_participants
277
+ #endfunction
278
+
279
+ #------------------------------------------
280
+ # Получить список CHATs
281
+ #------------------------------------------
282
+ def get_telethon_CHATs (client:telethon.sync.TelegramClient):
283
+ """get_telethon_CHATs"""
284
+ #beginfunction
285
+ # понять, канал или чат, можно проверяя у диалога параметр "dialog.entity.megagroup
286
+ for dialog in client.iter_dialogs ():
287
+ if 'Channel' in str (type (dialog.entity)): # откидываем юзеров
288
+ if dialog.entity.megagroup:
289
+ print (dialog.entity.id, '//', dialog.entity.username,
290
+ ' - ', dialog.name, ' is CHAT')
291
+ #endfunction
292
+
293
+ #------------------------------------------
294
+ # Получить список CHANNELs
295
+ #------------------------------------------
296
+ def get_telethon_CHANNELs (client:telethon.sync.TelegramClient):
297
+ """get_telethon_CHANNELs"""
298
+ #beginfunction
299
+ # понять, канал или чат, можно проверяя у диалога параметр "dialog.entity.megagroup
300
+ for dialog in client.iter_dialogs ():
301
+ if 'Channel' in str (type (dialog.entity)): # откидываем юзеров
302
+ if not dialog.entity.megagroup:
303
+ print (dialog.entity.id, '//', dialog.entity.username,
304
+ ' - ', dialog.name, ' is CHANNEL')
305
+ #endfunction
306
+
307
+ # ----------------------------------------------
308
+ # Получаем последние 10 сообщений из указанного чата
309
+ # ----------------------------------------------
310
+ def get_telethon_chat (client:telethon.sync.TelegramClient, chat_id):
311
+ """get_telethon_chat"""
312
+ #beginfunction
313
+ # ID чата/канала/пользователя, откуда читать сообщения
314
+ # chat_id = '@GardeZ66' # или ID (число), или юзернейм (например, '@telegram')
315
+ for message in client.iter_messages (chat_id, limit=10):
316
+ print (f"{LIB_name}_message.sender_id:{message.sender_id}: {message.text}")
317
+ #endfunction
318
+
319
+
320
+
321
+ # ----------------------------------------------
322
+ # Функция для парсинга ссылки
323
+ # ----------------------------------------------
324
+ def parse_message_link (link):
325
+ """parse_message_link"""
326
+ #beginfunction
327
+ pattern = r'https?://t\.me/([a-zA-Z0-9\_]+|c/(\d+))/(\d+)/(\d+)'
328
+ match = re.match (pattern, link)
329
+ if not match:
330
+ raise ValueError ("Invalid link")
331
+
332
+ # print(f'{match.group (1)=}')
333
+ # print(f'{match.group (2)=}')
334
+ # print(f'{match.group (3)=}')
335
+ # print(f'{match.group (4)=}')
336
+
337
+ if match.group (1).startswith ('c'):
338
+ channel_id = int (match.group (3))
339
+ msg_id = int (match.group (3))
340
+ return {'channel_id': channel_id, 'msg_id': msg_id}
341
+ else:
342
+ username = match.group (1)
343
+ msg_id = int (match.group (3))
344
+ return {'username': username, 'msg_id': msg_id}
345
+ #endfunction
346
+
347
+ # ----------------------------------------------
348
+ # async def get_channel_name (link, TelegramClient):
349
+ # ----------------------------------------------
350
+ def get_channel_name (link, session_name, api_id, api_hash, phone):
351
+ """get_channel_name"""
352
+ #beginfunction
353
+ with TelegramClient (session_name, api_id, api_hash) as client:
354
+ client.start (phone)
355
+ # print (f'{link=}')
356
+ parsed = parse_message_link (link)
357
+ print (f'{parsed=}')
358
+
359
+ if 'username' in parsed:
360
+ entity = client.get_entity (parsed ['username'])
361
+ # entity = client.get_entity (parsed ['msg_id'])
362
+ elif 'channel_id' in parsed:
363
+ entity = client.get_entity (PeerChannel (parsed ['channel_id']))
364
+ else:
365
+ raise ValueError ("Could not resolve entity")
366
+ print (f"Название канала: {entity.title}")
367
+
368
+ # client.disconnect ()
369
+
370
+ return entity.title
371
+ #endfunction
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+ # ------------------------------------------
381
+ # Авторизация в Telegram [pyrogram]
382
+ # ------------------------------------------
383
+ def get_pyrogram_client (api_id, api_hash, login, phone) -> pyrogram.Client:
384
+ """get_pyrogram_client"""
385
+ # beginfunction
386
+ result = pyrogram.Client (login, api_id=api_id, api_hash=api_hash, phone_number=phone)
387
+ result.start ()
388
+ # result.connect ()
389
+ # print (f'{LIB_name}_is_connected={result.is_connected}')
390
+
391
+ # print(Tclient.export_session_string())
392
+ # print(result.workdir)
393
+
394
+ # result.run ()
395
+ return result
396
+ # endfunction
397
+
398
+ # ------------------------------------------
399
+ # Метод client.get_me() в библиотеке Pyrogram возвращает объект pyrogram.User
400
+ # с информацией о текущем зарегистрированном пользователе или боте.
401
+ # ------------------------------------------
402
+ def get_pyrogram_me (client:pyrogram.Client) -> pyrogram.types.User:
403
+ """get_pyrogram_me"""
404
+ # beginfunction
405
+ result = client.get_me()
406
+ # print (f'{LIB_name}_username={result.username}')
407
+ # print (f'{LIB_name}_phone_number={result.phone_number}')
408
+ # print (f'pyrogram:stringify={result.stringify()}')
409
+ return result
410
+ # endfunction
411
+
412
+ #---------------------------------------------------------
413
+ # main
414
+ #---------------------------------------------------------
415
+ def main ():
416
+ #beginfunction
417
+ pass
418
+ #endfunction
419
+
420
+ #---------------------------------------------------------
421
+ #
422
+ #---------------------------------------------------------
423
+ #beginmodule
424
+ if __name__ == "__main__":
425
+ main()
426
+ #endif
427
+
428
+ #endmodule