Привет всем!
Это моя первая статья, буду рад за конструктивную критику. В приниципе, любая критика приветствуется)
UPDATE.
Меня правильно поправили - спам в РФ запрещен. Но есть возможность проводить автоматизированный сбор данных. Поэтому перед использованием данного метода следует получить согласие «каждого субъекта на такие действия».
То же самое с рекламной рассылкой - стоит также получить согласие «каждого субъекта на такие действия».
Ссылка скрыта от гостей
Сначала посмотрел готовые решения. Их действительно очень много, но либо не нравилось, либо не подходило по нуждам, либо я совсем терялся в коде.
Вот решил, наконец, проверить свои навыки после курса «Python для Пентестера» и написать все сам.
Ссылка на готовый код с гитхаб в конце статьи.
У нас будет три основные части программы: коннектор клиента(как это назвать по-русски??), сбор участников чата и рассылка по пользователям.
Будем использовать библиотеку telethon. Документация по библиотеке -
Ссылка скрыта от гостей
Устанавливаем библиотеку telethon
Код:
pip3 install telethon
Python:
import time
import random
from telethon.sync import TelegramClient
from telethon.errors.rpcerrorlist import PeerFloodError, SessionPasswordNeededError
Далее необходимо получить App api_id и App api_hash. Для это заходим на my.telegram.org в раздел
Ссылка скрыта от гостей
.Создаем app, копируем необходимое и создаем переменные:
Код:
phone = 'строка'
api_id = число
api_hash = 'строка'
С помощью следующих двух строчек мы подключаемся к Телеграм
Python:
client = TelegramClient(phone, api_id, api_hash)
client.connect()
Но при первом подключении надо будет ввести одноразовый код, а если включена двухфакторная авторизация, то и дополнительный пароль.
Поэтому пишем такую конструцию, которая учитывает эти вопросы.
Python:
if not сlient.is_user_authorized():
#запрашиваем однаразовый код
client.send_code_request(phone)
try:
client.sign_in(phone, input('Enter verification code: '))
#дополнительный пароль двухфакторной авторизации если необходимо
except SessionPasswordNeededError:
client.sign_in(password=input("Enter password: "))
В текущей директории создается файл *.session. Был момент, когда я долго разбирался как работает подключение и коннектился огромное количество раз, и Телеграм забанил меня на несколько суток. Если такое случится, нужно удалить это файл сессии и приконнектиться заново.
Получаем список чатов:
Python:
chats = [dialog for dialog in client.get_dialogs() if dialog.is_group and dialog.is_channel]
print('From which chat you want to parse members:')
#выводим список чатов для выбора
[print(str(chats.index(i) + 1) + ' - ' + i.title) for i in chats]
.get_dialogs – получить все диалоги
.is_group - проверка является ли диалог групповым чатом/megagroup-чатом
.is_channel – то же самое для каналов.
То есть вместе два этих условия дают спарсить групповые чаты от каналов(пабликов). Отдельно .is_channel можно спарсить участников канала, только если имеются админские права.
Дальше берем в переменную выбор пользователя.
Python:
your_choice = input(‘Your choice is: ‘)
Собираем пользователей если у них имеется юзернейм
!Можно спарсить только тех, у кого юзернейм не закрыт!
Python:
users = [user.username for user in self.client.get_participants(your_choice ) if user.username]
Можно также спарсить такие параметры как:
id, bot(False or True), scam(False or True), fake(False or True), access_hash, first_name, last_name, phone, и status(когда в последний раз был онлайн)
Далее можно добавить опцию выбора: сохранить или спамить по списку. А можно и не добавлять. Взрослые люди все-таки, сами можете выбрать есть мороженное на завтрак или в обед.
Итак, спам.
Python:
delay = random.randint(15, 40)
Лимиты в телеграме на данный момент:
- Оптимальная пауза при рассылке от 10 сек.
- На рассылку без ссылки - 40 сообщений.
- На рассылку со ссылкой - 10 сообщений.
Варианты сообщения можно положить в список message. И мы будем выбирать рандомное сообщение для каждого юзера.
Python:
message = ['Hello!', 'Ola!', 'Ni Hao!']
#сделаю рассылку на первые 40 юзеров из списка
for user in users[:39]:
print("Sending Message to: ", user)
try:
#отправляем сообщение
client.send_message(user, random.choice(message))
#Возможно словить Flood Error, поэтому лучше сразу прекратить спам и разорвать связь
except PeerFloodError:
print("[!] Got Flood Error from telegram. \n[!] Try later.")
self.client.disconnect()
break
except Exception as e:
print("[!] Error:", e, "\n Trying to continue...")
continue
else:
if user != users[:39]:
print(f"Waiting {delay} seconds")
time.sleep(delay)
print('\nEnd of the program')
Вот и все!
В программу можно добавить красивую заставку, менюшку, colorama, а также обработчики исключений и больше выбора(сохранить, не сохранить, продолжить, сменить аккаунт и тд).
Это уже по Вашему усмотрению.
Ссылка на GitHub:
GitHub - StripedBear/TeleSpam: Chat member parser and spammer for Telegram
Chat member parser and spammer for Telegram. Contribute to StripedBear/TeleSpam development by creating an account on GitHub.
github.com
Последнее редактирование модератором: