import random
import asyncio
from telethon.sync import TelegramClient
from telethon.tl.functions.contacts import ImportContactsRequest
from telethon.tl.types import InputPhoneContact
# Функция для загрузки данных из файлов с указанием кодировки
def load_data(filename):
with open(filename, 'r', encoding='utf-8') as file:
return file.read().strip()
# Загрузка данных из файлов
api_id, api_hash = load_data('api.txt').split(':')
phones = load_data('phones.txt').split('\n')
# Функция для авторизации
async def auth(api_id, api_hash):
client = TelegramClient('session', api_id, api_hash)
await client.start()
return client
# Функция для добавления контакта
async def add_contact(client, phone):
try:
# Добавляем контакт в список контактов
await client(ImportContactsRequest(contacts=[InputPhoneContact(client_id=0, phone=phone, first_name=phone, last_name='')]))
print(f"Контакт {phone} добавлен.")
except Exception as e:
print(f"Ошибка при добавлении контакта {phone}: {e}")
# Функция для отправки сообщения без добавления в контакты
async def send_message_without_contact(client, phone, message):
try:
# Отправляем сообщение без добавления в контакты
await client.send_message(phone, message)
print(f"Сообщение отправлено на номер: {phone}")
return True
except Exception as e:
print(f"Ошибка при отправке на номер {phone}: {e}")
return False
# Функция для отправки сообщений
async def send_messages(client):
# Загрузка сообщений из файла
with open('message.txt', 'r', encoding='utf-8') as file:
message_modules = file.read().strip().split('+++')
# Запрос количества сообщений для отправки
num_messages = int(input("Введите количество сообщений для отправки: "))
# Запрос диапазона задержки между сообщениями
delay_range_start, delay_range_end = map(int, input("Введите диапазон задержки между сообщениями (в секундах), через пробел: ").split())
# Переменные для статистики
sent_count = 0
not_sent = []
# Отправка сообщений
for phone in phones:
# Выбираем случайный модуль из списка модулей
random_module = random.choice(message_modules)
await add_contact(client, phone) # Добавляем контакт перед отправкой сообщения
if await send_message_without_contact(client, phone, random_module):
sent_count += 1
if sent_count >= num_messages:
break
else:
not_sent.append(phone)
# Выбираем случайное время задержки из диапазона и ждем
delay = random.randint(delay_range_start, delay_range_end)
print(f"Следующее сообщение будет отправлено через {delay} секунд")
await asyncio.sleep(delay)
# Вывод статистики
print(f"Отправлено сообщений: {sent_count}/{num_messages}")
print("Номера, на которые не были отправлены сообщения:")
for phone in not_sent:
print(phone)
# Ожидание нажатия Enter для завершения программы
input("Для выхода нажмите Enter...")
# Главная функция
async def main():
# Авторизация
client = await auth(api_id, api_hash)
while True:
# Запрос действия пользователя
action = int(input("Выберите действие:\n1. Отправить сообщения\n2. Выйти из программы\nВведите номер действия: "))
if action == 1:
# Оставляем текущую логику для отправки сообщений
await send_messages(client)
elif action == 2:
break
else:
print("Некорректный выбор действия.")
if __name__ == "__main__":
asyncio.run(main())