Так хотелось получить мерч, что понаподписывался и теперь не понимаешь, где важные каналы, а где нет? Что ж, чудес не бывает — в этот раз тебе придется выходить из них вручную. Но вот если запустить бот из этой статьи перед следующей конфой, а потом еще и после нее, то отписываться руками не нужно будет. Бот сам все сделает. А как его создать — рассказываем ниже.
Какие задачи решает бот для отписки от каналов после конфы
Пожалуй, это будет самое скудное описание задач, которые решает бот, за все время существования рубрики «Боты для арбитража». Ведь единственная задача, которую он решает, уже записана в названии, и это автоматизация отписки от каналов. Все, больше никаких других задач он не решает. Единственное, что можно уточнить, — не только после конфы. Скорее, между запусками. Но об этом мы расскажем в разделе ниже.
Принцип работы бота для отписки от каналов после конфы
Алгоритмически бот не то что прост — в кои-то веки тривиален! И это не окраска эмоциями ради окраски — он действительно до ужаса простой. Весь алгоритм сводится к:
- Проверке, есть ли файл before_channels.json
- Созданию его, если его нет, и записыванию в него всех каналов, на которые подписан профиль.
- Считыванию каналов из файла, если он есть, и выходу из всех каналов, которые в файле не записаны, с последующим удалением самого файла.
И все! Как видите, всего 3 шага. Если даже это не простота — что вообще есть простота? Впрочем, полезности данного бота простота создания не отнимает. Скорее, даже наоборот. Впрочем, перейдем к созданию.
Пошаговая инструкция, как сделать бот отписки от каналов после конфы
Начинаем с базы — развертывания сервера и получения реквизитов для авторизации.
В целом вы можете развернуть любой сервак, который поддерживает Python, и залить на него бот. Но так как данный бот работает сессионно и не предусматривает постоянного нахождения онлайн, то как будто бы проще развернуть все прямо на своей машине. Но дело ваше. Если решите разворачивать на своем железе, но не знаете как — вот вам гайд, как развернуть сервер на домашнем ПК.
Теперь нам нужны реквизиты. Для этого:
- Открываем веб-версию.
- Ищем «API development tools».
- Заполняем каждое поле формы.
- Копипастим api_id api_hash. Куда? Дело ваше.
После этого:
1. Создаем bot.py на серваке.
2. Текстовым редактором добавляем в пустой файл код:
from telethon import TelegramClient
import json
import os
API_ID = ваш api_id
API_HASH = "ваш api_hash"
FILE = "before_channels.json"
SESSION = "auto_leave_channels"
client = TelegramClient(SESSION, API_ID, API_HASH)
async def save_current_channels():
dialogs = await client.get_dialogs()
channels = {d.id: d.name for d in dialogs if d.is_channel and not d.is_group}
with open(FILE, "w", encoding="utf-8") as f:
json.dump(channels, f, ensure_ascii=False, indent=2)
print(f"[+] Сохранено {len(channels)} каналов — это состояние ДО конференции.")
print("Теперь иди подписывайся на всё подряд — потом просто запусти этот же скрипт снова.")
async def leave_new_channels():
with open(FILE, "r", encoding="utf-8") as f:
before = json.load(f)
dialogs = await client.get_dialogs()
after = {d.id: d.name for d in dialogs if d.is_channel and not d.is_group}
new_channels = {cid: name for cid, name in after.items() if str(cid) not in before}
if not new_channels:
print("[=] Новых каналов не найдено — всё чисто.")
return
print(f"[!] Найдено {len(new_channels)} новых каналов. Начинаю отписку...\n")
for cid, name in new_channels.items():
try:
await client.delete_dialog(int(cid))
print(f"[-] Отписался от: {name}")
except Exception as e:
print(f"[x] Ошибка при отписке от {name}: {e}")
os.remove(FILE)
print("\n[✔] Готово! Все новые каналы покинут. Файл состояния удалён.")
async def main():
if not os.path.exists(FILE):
await save_current_channels()
else:
await leave_new_channels()
with client:
client.loop.run_until_complete(main())
3. Меняем API_ID = ваш api_id и API_HASH = "ваш api_hash" на свои.
4. Сохраняем.
5. Проверяем, все ли работает, инициируя выполнение команды python bot.py в консоли сервера.
Демонстрация работы
Подводя итоги
Как видите, столь раздражающего действия, как ручная отписка от каналов после конкурсов, вполне можно избежать, если быть подписанным на нас!