Skip to content

Commit 16b7289

Browse files
committed
Рефакторинг кода
1 parent 0f23cdc commit 16b7289

1 file changed

Lines changed: 169 additions & 24 deletions

File tree

src/features/account/inviting.py

Lines changed: 169 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -120,59 +120,101 @@ async def general_invitation_to_the_group(_):
120120

121121
time_inviting_1 = TIME_INVITING_1.value
122122
if time_inviting_1 == "":
123-
await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю
123+
await self.gui_program.show_notification(
124124
message="Время должно быть больше 0"
125125
)
126126
self.page.go("/inviting")
127127
return
128128

129129
time_inviting_2 = TIME_INVITING_2.value
130130
if time_inviting_2 == "":
131-
await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю
131+
await self.gui_program.show_notification(
132132
message="Время должно быть больше 0"
133133
)
134134
self.page.go("/inviting")
135135
return
136136

137137
start = await self.app_logger.start_time()
138-
self.page.update() # Обновите страницу, чтобы сразу показать сообщение 🔄
138+
self.page.update()
139139

140140
limit = get_limit(limits) # Получаем лимит введенный пользователем
141141

142-
usernames = await select_records_with_limit(limit=limit, app_logger=self.app_logger)
143-
await self.app_logger.log_and_display(message=f"Список usernames: {usernames}\n\nЛимит на аккаунт {limit}")
142+
# Получаем ВЕСЬ список пользователей для инвайтинга
143+
all_usernames = await select_records_with_limit(limit=None, app_logger=self.app_logger)
144144

145-
if not usernames:
145+
if not all_usernames:
146146
await self.app_logger.log_and_display(
147147
message="В таблице members нет пользователей для инвайтинга."
148148
)
149-
await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю
149+
await self.gui_program.show_notification(
150150
message="🔚 Нет пользователей для инвайтинга"
151151
)
152152
self.page.go("/inviting")
153153
return
154154

155-
for session_name in self.session_string:
155+
await self.app_logger.log_and_display(
156+
message=f"Всего пользователей для инвайтинга: {len(all_usernames)}\n"
157+
f"Лимит на аккаунт: {limit if limit else 'не установлен'}\n"
158+
f"Количество аккаунтов: {len(self.session_string)}"
159+
)
160+
161+
# 🔄 Индекс для отслеживания текущей позиции в списке пользователей
162+
current_user_index = 0
163+
164+
for account_number, session_name in enumerate(self.session_string, 1):
165+
# Проверяем, остались ли пользователи для инвайтинга
166+
if current_user_index >= len(all_usernames):
167+
await self.app_logger.log_and_display(
168+
message="✅ Все пользователи обработаны, инвайтинг завершен"
169+
)
170+
break
171+
156172
client: TelegramClient | None = await self.connect.client_connect_string_session(
157-
session_name=session_name)
173+
session_name=session_name
174+
)
158175

159176
if client is None:
160177
await self.app_logger.log_and_display(
161-
message=f"⚠️ Пропускаем сессию {session_name} - не удалось подключиться.")
178+
message=f"⚠️ Пропускаем сессию {session_name} - не удалось подключиться."
179+
)
162180
continue # Переходим к следующему аккаунту
163181

182+
# 📊 Определяем количество пользователей для текущего аккаунта
183+
if limit:
184+
# Если установлен лимит - берем N пользователей
185+
users_for_this_account = all_usernames[current_user_index:current_user_index + limit]
186+
current_user_index += limit
187+
else:
188+
# Если лимит не установлен - распределяем поровну между аккаунтами
189+
remaining_accounts = len(self.session_string) - account_number + 1
190+
remaining_users = len(all_usernames) - current_user_index
191+
users_per_account = remaining_users // remaining_accounts
192+
193+
users_for_this_account = all_usernames[current_user_index:current_user_index + users_per_account]
194+
current_user_index += users_per_account
195+
196+
if not users_for_this_account:
197+
await self.app_logger.log_and_display(
198+
message=f"⚠️ Для аккаунта {session_name} нет пользователей"
199+
)
200+
await client.disconnect()
201+
continue
202+
203+
await self.app_logger.log_and_display(
204+
message=f"🔹 Аккаунт #{account_number}: {session_name}\n"
205+
f" Будет обработано пользователей: {len(users_for_this_account)}\n"
206+
f" Диапазон: {current_user_index - len(users_for_this_account) + 1}-{current_user_index}"
207+
)
208+
164209
# Подписываемся на группы
165210
await self.subscribe.subscribe_to_group_or_channel(client=client, groups=links)
166211
await self.app_logger.log_and_display(message=f"✅ Подписка на группы: {links}")
167212

168-
if len(usernames) == 0:
169-
await self.app_logger.log_and_display(message=f"В таблице members нет пользователей для инвайтинга")
170-
await self.subscribe_unsubscribe_telegram.unsubscribe_from_the_group(client, links)
171-
break # Прерываем работу и меняем аккаунт
172-
173-
for username in usernames:
174-
await self.app_logger.log_and_display(message=f"Приглашение пользователя: {username}")
175-
# Инвайтинг в группу по полученному списку
213+
# 🎯 Инвайтим ТОЛЬКО пользователей для этого аккаунта
214+
for idx, username in enumerate(users_for_this_account, 1):
215+
await self.app_logger.log_and_display(
216+
message=f" [{idx}/{len(users_for_this_account)}] Приглашение: {username}"
217+
)
176218

177219
try:
178220
await self.add_user_test(
@@ -182,20 +224,123 @@ async def general_invitation_to_the_group(_):
182224
time_inviting_1=TIME_INVITING_1.value,
183225
time_inviting_2=TIME_INVITING_2.value
184226
)
185-
except KeyboardInterrupt: # Закрытие окна программы
186-
await self.app_logger.log_and_display(message=translations["ru"]["errors"]["script_stopped"],
187-
level="error")
227+
except KeyboardInterrupt:
228+
await self.app_logger.log_and_display(
229+
message=translations["ru"]["errors"]["script_stopped"],
230+
level="error"
231+
)
232+
await client.disconnect()
233+
return # Полностью прерываем работу
234+
235+
# Отписываемся от группы после завершения работы аккаунта
188236
await self.subscribe_unsubscribe_telegram.unsubscribe_from_the_group(
189237
client=client,
190238
group_link=links
191239
)
192-
await self.app_logger.log_and_display(message=f"[!] Инвайтинг окончен!")
240+
await self.app_logger.log_and_display(
241+
message=f"✅ Аккаунт {session_name} завершил работу. "
242+
f"Приглашено: {len(users_for_this_account)} пользователей"
243+
)
244+
await client.disconnect()
193245

246+
await self.app_logger.log_and_display(
247+
message=f"🎉 Инвайтинг полностью завершен!\n"
248+
f" Всего обработано: {current_user_index} из {len(all_usernames)} пользователей"
249+
)
194250
await self.app_logger.end_time(start=start)
195-
await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю # Выводим уведомление пользователю
251+
await self.gui_program.show_notification(
196252
message="🔚 Конец инвайтинга"
197253
)
198-
self.page.go("/inviting") # переходим к основному меню инвайтинга 🏠
254+
self.page.go("/inviting")
255+
256+
# async def general_invitation_to_the_group(_):
257+
# """
258+
# Основной метод для выполнения инвайтинга пользователей в указанные группы.
259+
# """
260+
#
261+
# links = await get_invitation_links()
262+
# if not links:
263+
# return # Нет ссылок — завершаем выполнение
264+
#
265+
# time_inviting_1 = TIME_INVITING_1.value
266+
# if time_inviting_1 == "":
267+
# await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю
268+
# message="Время должно быть больше 0"
269+
# )
270+
# self.page.go("/inviting")
271+
# return
272+
#
273+
# time_inviting_2 = TIME_INVITING_2.value
274+
# if time_inviting_2 == "":
275+
# await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю
276+
# message="Время должно быть больше 0"
277+
# )
278+
# self.page.go("/inviting")
279+
# return
280+
#
281+
# start = await self.app_logger.start_time()
282+
# self.page.update() # Обновите страницу, чтобы сразу показать сообщение 🔄
283+
#
284+
# limit = get_limit(limits) # Получаем лимит введенный пользователем
285+
#
286+
# usernames = await select_records_with_limit(limit=limit, app_logger=self.app_logger)
287+
# await self.app_logger.log_and_display(message=f"Список usernames: {usernames}\n\nЛимит на аккаунт {limit}")
288+
#
289+
# if not usernames:
290+
# await self.app_logger.log_and_display(
291+
# message="В таблице members нет пользователей для инвайтинга."
292+
# )
293+
# await self.gui_program.show_notification( # ✅ Показываем уведомление пользователю
294+
# message="🔚 Нет пользователей для инвайтинга"
295+
# )
296+
# self.page.go("/inviting")
297+
# return
298+
#
299+
# for session_name in self.session_string:
300+
# client: TelegramClient | None = await self.connect.client_connect_string_session(
301+
# session_name=session_name)
302+
#
303+
# if client is None:
304+
# await self.app_logger.log_and_display(
305+
# message=f"⚠️ Пропускаем сессию {session_name} - не удалось подключиться.")
306+
# continue # Переходим к следующему аккаунту
307+
#
308+
# # Подписываемся на группы
309+
# await self.subscribe.subscribe_to_group_or_channel(client=client, groups=links)
310+
# await self.app_logger.log_and_display(message=f"✅ Подписка на группы: {links}")
311+
#
312+
# if len(usernames) == 0:
313+
# await self.app_logger.log_and_display(message=f"В таблице members нет пользователей для инвайтинга")
314+
# await self.subscribe_unsubscribe_telegram.unsubscribe_from_the_group(client, links)
315+
# break # Прерываем работу и меняем аккаунт
316+
#
317+
# for username in usernames:
318+
# await self.app_logger.log_and_display(message=f"Приглашение пользователя: {username}")
319+
# # Инвайтинг в группу по полученному списку
320+
#
321+
# try:
322+
# await self.add_user_test(
323+
# client=client,
324+
# username_group=links,
325+
# username=username,
326+
# time_inviting_1=TIME_INVITING_1.value,
327+
# time_inviting_2=TIME_INVITING_2.value
328+
# )
329+
# except KeyboardInterrupt: # Закрытие окна программы
330+
# await self.app_logger.log_and_display(message=translations["ru"]["errors"]["script_stopped"],
331+
# level="error")
332+
# await self.subscribe_unsubscribe_telegram.unsubscribe_from_the_group(
333+
# client=client,
334+
# group_link=links
335+
# )
336+
# await self.app_logger.log_and_display(message=f"[!] Инвайтинг окончен!")
337+
#
338+
# await self.app_logger.end_time(start=start)
339+
# await self.gui_program.show_notification(
340+
# # ✅ Показываем уведомление пользователю # Выводим уведомление пользователю
341+
# message="🔚 Конец инвайтинга"
342+
# )
343+
# self.page.go("/inviting") # переходим к основному меню инвайтинга 🏠
199344

200345
async def launching_an_invite_once_an_hour(_):
201346
"""

0 commit comments

Comments
 (0)