2025-07-03 12:26:50 +05:00

93 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from telethon.errors import FloodWaitError
from telethon.tl.functions.channels import JoinChannelRequest
import asyncio
from telethon import TelegramClient
from telethon.sessions import StringSession
from src.core.settings.base import settings
import time
import openpyxl
import os
# Конфигурация Excel-файла
EXCEL_FILE_PATH = "/home/harold/Documents/chats.xlsx"
SHEET_NAME = 'Чаты' # Имя листа в Excel
LINK_COLUMN = 3 # Номер столбца со ссылками (3 = колонка C)
async def main():
# Загрузка групп из Excel
groups = []
try:
# Проверка существования файла
if not os.path.exists(EXCEL_FILE_PATH):
raise FileNotFoundError(f"Excel файл не найден: {EXCEL_FILE_PATH}")
wb = openpyxl.load_workbook(EXCEL_FILE_PATH)
# Проверка существования листа
if SHEET_NAME not in wb.sheetnames:
raise ValueError(f"Лист '{SHEET_NAME}' не найден в файле")
sheet = wb[SHEET_NAME]
# Чтение данных, пропуская заголовок
for row in range(2, sheet.max_row + 1):
link_cell = sheet.cell(row=row, column=LINK_COLUMN)
if link_cell.value and 't.me/' in link_cell.value:
# Извлекаем username из ссылки
username = link_cell.value.split('t.me/')[-1].split('/')[0].split('?')[0]
groups.append(username)
if not groups:
print("⚠️ В файле не найдено валидных ссылок на Telegram группы")
return
except Exception as e:
print(f"❌ Ошибка при чтении Excel файла: {str(e)}")
return
# Инициализация Telegram клиента
client = TelegramClient(
session=StringSession(settings.ACCOUNT.SESSION),
api_id=settings.ACCOUNT.API_ID,
api_hash=settings.ACCOUNT.API_HASH,
)
await client.start()
print(f"\nНайдено {len(groups)} групп в файле. Начинаю подписку...")
success_count = 0
for i, username in enumerate(groups, 1):
try:
# Пытаемся найти группу
group = await client.get_entity(username)
# Подписываемся
await client(JoinChannelRequest(group))
print(f"{i}. ✓ Успешно: @{username}")
success_count += 1
except FloodWaitError as e:
wait_time = e.seconds + 5
print(f"{i}. ⏳ Ожидаем {wait_time} секунд из-за ограничения Telegram")
time.sleep(wait_time)
# Повторяем попытку после ожидания
try:
await client(JoinChannelRequest(username))
print(f"{i}. ✓ Успешно после ожидания: @{username}")
success_count += 1
except Exception as e:
print(f"{i}. ✗ Ошибка повторной попытки для @{username}: {str(e)}")
except Exception as e:
print(f"{i}. ✗ Ошибка в @{username}: {str(e)}")
# Задержка между запросами
time.sleep(2)
print(f"\nПроцесс завершен! Успешно подписано на {success_count} из {len(groups)} групп")
await client.disconnect()
#
#
# if __name__ == '__main__':
# asyncio.run(main())