Бывает, что, заходя в тот или иной чат, хочется почитать, что же, собственно, в этом чате писалось, но вместо этого приходится разглядывать ленту из кружков. При этом, так как чаты — место публичное, то добавление отправителей кружков в ЧС ничем не помогает, если только вы не админ. К счастью, можно просто сделать бот, который удалит все кружки. Как? Об этом мы и расскажем сегодня.
Какие задачи решает бот для удаления кружков
Казалось бы, бот для удаления кружков решает одну-единственную задачу — удаляет кружки. Каких-либо маркетинговых задач, в отличие от большинства других наших ботов, этот бот не решает и решать не может, даже если упороться и попытаться их выдумать. Более того, он также не решает задачи администрирования — так как является чистым user-ботом.
Однако даже в этом случае все не так просто, ибо вместо одной-единственной задачи — удаление кружков, их на самом деле две, а именно:
автоматическое удаление всех новых кружков,
полуавтоматическое удаление старых кружков.
Почему бы удаление старых кружков не автоматизировать? Если вкратце — потому что взаимодействие с новым и старым в Телеге реализовано по-разному, и автоматизация удаления старых кружков мало того что сильно снизила бы быстродействие, так еще и регулярно провоцировала бы если не бан, то выход на лимит. Короче говоря, потому, что это невозможно.
Принцип работы бота для удаления кружков
Алгоритмически же все просто:
- Бот проходит авторизацию и сохраняет сессию.
- Бот прослушивает эфир.
- При появлении события «новое сообщение» — проверяет его на наличие кружка.
- Если кружок есть и отправитель не мы — удаляет его.
- Если кружок есть и отправитель мы — игнорирует.
- Если кружка нет и сообщение «драсти» — перебирает последние 1000 сообщения чата, где было написано «драсти», и удаляет среди них те, где есть кружки.
- Если кружка нет и сообщение не «драсти» — игнорирует.
Как видите, ничего сложного.
Пошаговая инструкция, как сделать бот для удаления кружков
Несложной получилась и техническая реализация, бот занял всего 26 строк кода (37 с правильным форматированием). Впрочем, сначала нужно настроить сервер. Подразумевается, что сам сервер у вас уже есть и что он подходит для работы с Python. В этом случает вводим в консоль:
pip install telethon
Если же сервера у вас нет — здесь расписано, как развернуть его на домашнем ПК.
После этого получаем реквизиты для авторизации. Делается это так:
- Заходим в веб-версию.
- Жмем «API development tools».
- Заполняем форму.
- Копируем api_id и api_hash.
Далее:
- Создаем на сервере файл bot.py.
- С помощью текстового редактора вносим в него:
from telethon import TelegramClient, events
from telethon.tl.types import MessageMediaDocument
api_id = ваш api_id
api_hash = "ваш api_hash"
client = TelegramClient("session_name", api_id, api_hash)
def is_round_video(msg):
if isinstance(msg.media, MessageMediaDocument):
attributes = msg.media.document.attributes
return any(getattr(attr, "round_message", False) for attr in attributes)
return False
@client.on(events.NewMessage(incoming=True))
async def handler(event):
if event.out:
return
if is_round_video(event.message):
await event.message.delete()
@client.on(events.NewMessage(outgoing=True, pattern=r"^драсти$"))
async def cleanup(event):
chat = await event.get_input_chat()
async for msg in client.iter_messages(chat, limit=1000):
if is_round_video(msg):
await msg.delete()
print("Очистка завершена.")
print("Запуск клиента...")
client.start()
client.run_until_disconnected() - Заменяем ваш api_id и ваш api_hash на свои.
- Сохраняем.
- Запускаем командой python bot.py и проверяем, все ли работает.
Демонстрация работы
Подводя итоги
Вот такой простой и изящный бот получился в этот раз. Кстати, символично. Ведь после его использования и ваши чаты станут такими же.