Go to file
Flying Lamantine 7c7e4ba9ce
Компилируемый словарь
2024-06-01 15:21:51 +06:00
commands Обновления переименований 2024-05-30 15:46:27 +06:00
migrations Open source release 2024-05-17 23:10:19 +06:00
models Open source release 2024-05-17 23:10:19 +06:00
tracery Компилируемый словарь 2024-06-01 15:21:51 +06:00
.editorconfig Open source release 2024-05-17 23:10:19 +06:00
.env.example Open source release 2024-05-17 23:10:19 +06:00
.gitignore Компилируемый словарь 2024-06-01 15:21:51 +06:00
.pre-commit-config.yaml Open source release 2024-05-17 23:10:19 +06:00
1_set_webhook.php Open source release 2024-05-17 23:10:19 +06:00
3_bot.php Open source release 2024-05-17 23:10:19 +06:00
README.md Количество комбинаций всё же меньше 2024-05-30 16:08:56 +06:00
_functions.php Open source release 2024-05-17 23:10:19 +06:00
clear_webhook.php Open source release 2024-05-17 23:10:19 +06:00
composer.json Open source release 2024-05-17 23:10:19 +06:00
composer.lock Open source release 2024-05-17 23:10:19 +06:00
migrations-db.php Open source release 2024-05-17 23:10:19 +06:00
migrations.php Open source release 2024-05-17 23:10:19 +06:00
tracery.php Open source release 2024-05-17 23:10:19 +06:00

README.md

Бот анонимного комментирования для Telegram-групп

ВАЖНО: ЭТО НЕ СЕРЬЁЗНАЯ ПРОГРАММА. ЕСЛИ ВАМ ВАЖНА АНОНИМНОСТЬ - УХОДИТЕ ИЗ ТЕЛЕГРАМА. СМ. СЦЕНАРИЙ КАТАСТРОФЫ.

Никто не хочет писать посты и выкидывать их в бездну. Но в то же время иметь публичную группу обсуждения на определённые темы - это риск, прежде всего для комментаторов. По умолчанию Телеграм показывает профили всех комментаторов, и с этим ничего не поделать… или всё-таки?

Этот бот сидит в телеграм-чате и удаляет все комментарии, которые туда постят. После удаления он тут же постит содержимое комментария под своим именем. Чтобы не перепутать, но и не раскрывать комментаторов, он переименовывает их по словарю процедурной грамматики.

Пример:

  • Алиса: привет! (сообщение удалено ботом)
  • Бот-комментатор: Дикий зомби-медведь: привет!
  • Алиса: (стикер) (сообщение удалено ботом)
  • Бот-комментатор: Дикий зомби-медведь: (стикер)
  • Дамир: и тебе! (сообщение удалено ботом)
  • Бот-комментатор: Негромкая сирена: и тебе!

Важные нюансы

Если вы думаете это использовать, советую подумать ещё раз. Это заплатка на гигантской проблеме, и проблема прежде всего в том, что вы держите публичный чат телеграма.

  1. См. ниже "сценарий катастрофы".
  2. См. ниже про твинководство.
  3. Сообщения заменяются достаточно быстро чтобы быть незаметными для людей. Но любой бот, сидящий в чате, увидит всё.
  4. Если в чате включены реакции, Телеграм раскрывает всех кто их использует. Это нельзя исправить, можно только отключить реакции полностью.
  5. В комментариях групп Телеграм даёт два разных чата: комментарии, привязанные к конкретным постам и общий чат. В общий чат можно вступить отдельно и это очень легко сделать по ошибке. Общий чат полностью раскрывает всех участников. Есть два способа с этим справиться:
    • Выгнать всех из общего чата и выгонять каждый раз, когда кто-нибудь туда заходит.
    • Набрать 100+ человек и включить скрытие участников.
  6. Проверено только на малых оборотах. Если в чате начнётся бурное обсуждение на сотню человек одновременно, я не гарантирую что бот запостит сообщения в том же порядке что и получит. (Также см. сценарий катастрофы.)
  7. Телеграм в любой момент может получить обновление и поломать всё. Или ввести новые фичи. Вы всё ещё отдаёте свою анонимность на совесть людей, которые посмотрели на фичу "комментировать от имени канала" и сказали "ну там конечно 80% спама но мы просто закроем это за премиумом" (см. раздел про твинководство).

Присутствующие фичи

  1. Авторепост сообщений со случайными никами. Словарь ников составлен с расчётом на 2 000 000 комбинаций или чуть больше.
  2. Редактирование последнего сообщения.
  3. Замена ника, при этом переименовывать себя можно не более 20 раз.

Отсутствующие фичи

  1. Бот поддерживает репосты текста, стикеров, фото, видео, анимаций (GIF) и аудио. Другие типы сообщений (опросы, броски кубиков и так далее) пока не поддерживаются. Всё кроме текста и стикеров тестировалось слабо.
  2. Премиумные особые эмодзи заменяются на обычные.
  3. Если запостить стикер и команду /edit, то отредактировано будет только текстовое сообщение.

Сценарий катастрофы

Ни одна технология не будет работать вечно и без ошибок. Существует два вида катастрофы при использовании этого бота, которые полностью раскрывают личности новых комментаторов.

  1. Бот работает, но начинает тормозить по какой-то причине, например, высокой нагрузки сервера. Новые комментарии удаляются не моментально, и все сидящие в чате могут видеть авторов как обычно. Спустя какое-то время нагрузка спадает, и бот возвращается к обычной скорости.
  2. Бот падает. Все комментарии перестают удаляться до починки. Так как он использует Bot API телеграма, то Телеграм продолжает слать запросы какое-то время, и, если бот возвращается достаточно быстро, то он обработает сообщения, которые запостили пока его не было. Но теоретически, если во время падения он вышел за лимит запросов, то сообщения останутся.

Твинководство, или как на самом деле комментировать анонимно

Каждый человек с премиум-аккаунтом имеет возможность комментировать от имени любого из своих каналов.

Он может создать канал на одного и комментировать от его имени. Админы чата не видят, кому принадлежит канал и что это вообще коммент от лица канала. Если вы забаните такого комментатора, у него всё ещё останется основной акк, он может просто сделать другой канал. Это фича Телеграма, смиритесь.

В базе такие аккаунты помечены как isBot, но других признаков у них нет.

А как модерировать?

Все удалённые оригинальные сообщения видны админам.

В мобильной версии лог действий можно найти так:

канал -> название канала -> Недавние действия

На компьютере (Telegram Desktop):

канал -> название -> меню справа под тремя точками -> управление группой -> Недавние действия

Установка

Всё ещё здесь? Значит, вот что надо делать.

(Предполагается, что вы в курсе как получать токен бота и что такое MySQL.)

  1. Копируете файл .env.example в файл .env и редактируете. Там надо выставить путь и пароли к MySQL базе, ID чата, ID админов бота, токен бота и URL веб-хука. (DO_NOT_REPLACE это ID пользователей, чьи сообщения не удаляются - обычно админы.)
  2. Публикуете файлы на веб-хостинге. На локалке боты телеграма не работают.
  3. Заходите в папку tracery и выполняете скрипт compile.php
  4. Перемещаете animals.json в names.json
  5. Устанавливаете composer.
  6. Запускаете composer install --no-dev
  7. Запускаете скрипт ./vendor/bin/doctrine-migrations migrations:migrate
  8. Запускаете 1_set_webhook.php, этот скрипт выставит вебхук.

Готово.

После каждого обновления кода эти пункты следует повторить:

  1. Запускаете composer install --no-dev
  2. Запускаете скрипт ./vendor/bin/doctrine-migrations migrations:migrate

Лицензия

Код PHP: Общественное достояние, CC0.

Словарь прилагательных: не помню откуда, © чей-то.