Всех приветствую!В данной статье хочу показать процесс создания максимально простого юзербота с помощью telethon. Знания python не обязательны! (но желательно знать самые основы, по типу: переменные, списки и пр). Мы будем использовать библиотеку telethon. Буду комментировать каждую строчку. Планирую сделать 3-5 частей, в процессе которых, мы создадим несколько маленьких/один большой проект(ов). Об этом напишите в комментариях (я бы предпочел сделать что-то одно большое). Меньше слов - больше дела: 1. УСТАНОВКА И НАСТРОЙКА 1. Установить библиотеку telethon: pip install telethon==1.29.0. Установите мою версию библиотеки (на 25.07.23 - самую новую) данной командой, чтобы все процессы создания юзербота у нас совпадали 2. Создайте файлы: config.json и main.py. В json файле мы будем хранить все настройки, а в .py - писать код. 3. Вам рекомендую сделать json таким же, как и у меня, чтобы не менять работу с json. Откройте json файл и запишите: { "account" : { "api_id" : "xxxxxx", "api_hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "phone": "+xxxxxxxxxxx" } } Code { "account" : { "api_id" : "xxxxxx", "api_hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "phone": "+xxxxxxxxxxx" } } 4. Посетите my.telegram.org >> войдите >> создайте приложение и заполните json вашими данными Отлично - настройка окончена. Можем начинать писать код! 2. НАЧАЛО В python файле импортируем библиотеку, а также возьмем данные из json файла (для удобной работы с ним - будем также использовать библиотеку): from telethon.sync import TelegramClient from telethon.tl.functions.messages import SendReactionRequest from telethon import types from telethon import events import asyncio, json # Достаем все параметры из json with open("config.json", "r") as file: config = json.load(file) api_id = config["account"]["api_id"] api_hash = config["account"]["api_hash"] phone = config["account"]["phone"] Python from telethon.sync import TelegramClient from telethon.tl.functions.messages import SendReactionRequest from telethon import types from telethon import events import asyncio, json # Достаем все параметры из json with open("config.json", "r") as file: config = json.load(file) api_id = config["account"]["api_id"] api_hash = config["account"]["api_hash"] phone = config["account"]["phone"] Я изменял названия в json. Что делать? 1 способ) сделать как у меня 2 способ) по аналогии изменить названия Отлично. Создаем клиент (простым языком сессию, с помощью которой, мы будем управлять аккаунтом): client = TelegramClient('telethon_session', api_id, api_hash, system_version="4.16.30-vxCUSTOM") client.start() client.run_until_disconnected() Python client = TelegramClient('telethon_session', api_id, api_hash, system_version="4.16.30-vxCUSTOM") client.start() client.run_until_disconnected() Как не потерять аккаунт Используя юзерботы, есть шанс того, что вы потеряете все сессии, но есть правила предосторожности, которые помогут избежать этого в 90% случаев: 1) Используйте аккаунт, к которому сможете запросить смс в случае вылета сессии 2) Мы указали параметр system_version, создающий кастомный клиент 3) На устройстве, на котором вы запустите программу, не должно быть других сессий этого аккаунта Запускаем программу >> вводим номер телефона >> вводим код подтверждения >> вводим пароль 2-фа, если он есть В папке, в которой у вас лежит исполняемый файл появился новый файл telethon_session.session. Не удаляйте его, чтобы в дальнейшем не проходить авторизацию заново. 3. СПАМЕР РЕАКЦИЯМИНачнем создание спамера реакциями. Для начала найдите чаты (открытые и закрытые), в которых будете спамить реакциями. Далее, запишите их id/username в список. Например, вот так: chats = [-1001980573325, "@bebra"] Python chats = [-1001980573325, "@bebra"] Далее создаем функцию - обработчик сообщений, написанных в чате. @client.on(events.NewMessage(chats=(chats))) async def reaction_handl(event): Python @client.on(events.NewMessage(chats=(chats))) async def reaction_handl(event): Для того, чтобы поставить реакцию - нам надо узнать id сообщения и peer_id. Узнаем в функции: peer_id = event.message.peer_id msg_id = event.message.id Python peer_id = event.message.peer_id msg_id = event.message.id И ставим реакцию: asyncio.sleep(10) await client(SendReactionRequest( peer=peer_id, msg_id=msg_id, reaction=[types.ReactionEmoji(emoticon="❤")] )) Python asyncio.sleep(10) await client(SendReactionRequest( peer=peer_id, msg_id=msg_id, reaction=[types.ReactionEmoji(emoticon="❤")] )) Вместо сердца подставьте любую реакцию, доступную в телеграм. Здесь я также поставил таймер на поспать, чтобы не словить ограничения (советую оставить такое же значение) Весь код сейчас: from telethon.sync import TelegramClient from telethon.tl.functions.messages import SendReactionRequest from telethon import types from telethon import events import time, json # Достаем все параметры из json with open("config.json", "r") as file: config = json.load(file) api_id = config["account"]["api_id"] api_hash = config["account"]["api_hash"] phone = config["account"]["phone"] client = TelegramClient('reactions_session2', api_id, api_hash, system_version="4.16.30-vxCUSTOM") client.start() chats = ["@brbrd"] # Обработчик всех поступающих сообщений @client.on(events.NewMessage(chats=(chats))) async def reaction_handl(event): peer_id = event.message.peer_id msg_id = event.message.id asyncio.sleep(10) await client(SendReactionRequest( peer=peer_id, msg_id=msg_id, reaction=[types.ReactionEmoji(emoticon="❤")] )) client.run_until_disconnected() Python from telethon.sync import TelegramClient from telethon.tl.functions.messages import SendReactionRequest from telethon import types from telethon import events import time, json # Достаем все параметры из json with open("config.json", "r") as file: config = json.load(file) api_id = config["account"]["api_id"] api_hash = config["account"]["api_hash"] phone = config["account"]["phone"] client = TelegramClient('reactions_session2', api_id, api_hash, system_version="4.16.30-vxCUSTOM") client.start() chats = ["@brbrd"] # Обработчик всех поступающих сообщений @client.on(events.NewMessage(chats=(chats))) async def reaction_handl(event): peer_id = event.message.peer_id msg_id = event.message.id asyncio.sleep(10) await client(SendReactionRequest( peer=peer_id, msg_id=msg_id, reaction=[types.ReactionEmoji(emoticon="❤")] )) client.run_until_disconnected() 4. СПАМЕР ПО ЧАТАМ Добавим спамер по чатам из списка chats: chats = ["@brbrd"] async def spammer(): while True: for chat in chats: client.send_message(chat, 'Ваше сообщение') asyncio.sleep(10) asyncio.create_task(spammer()) Python chats = ["@brbrd"] async def spammer(): while True: for chat in chats: client.send_message(chat, 'Ваше сообщение') asyncio.sleep(10) asyncio.create_task(spammer()) Спасибо за прочтение! Надеюсь новичкам понравилось - в следующей статье сделаю что-то поглобальнее. Свои мнения в комменты :)
Superillegal, честно, лучше не придумал. просто не было много времени, чтобы написать что-то большое. но это не последняя статья на телетон - там постараюсь сделать что-то уникальное
Спустя год собираюсь писать вторую и далее части. Что по вашему мнению стоит привести в пример (как со спамером реакций)? Поднято кнопкой