1
0
Fork 0
mirror of https://github.com/EDeev/chatping_abobot.git synced 2026-10-07 20:49:45 +03:00
Telegram-бот для групповых чатов: упоминания по имени (в т. ч. в голосовых), статистика, исправление раскладки, распознавание и озвучка речи. aiogram 3, pymorphy3 https://t.me/chat_abobot
Find a file
Egor Deev a2a0adcf8e AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды
База — PostgreSQL (asyncpg) вместо четырёх файлов SQLite с таблицей на каждый чат:
chats, users, members, chat_stats и member_stats с полем «период» — месяцы хранятся, а не
обнуляются; счётчики растут одним запросом без блокировки бота. scripts/migrate_sqlite.py
переносит старые базы со сверкой сумм (проверено на копии рабочих баз: 20 694 пользователя,
45 чатов, 3 142 038 сообщений — совпадает).

Учёт бота в чатах: статус и права бота (событие my_chat_member и сверка с Telegram при
запуске и раз в 6 часов), история изменений в bot_status_history; из чатов, где бота
исключили, данные не удаляются — меняется только статус.

Большие чаты (больше 100 участников): /all — только для админов, раз в 5 минут и только
писавшие за 30 дней; упоминание одного человека по имени — не чаще раза в минуту. В любом
чате /all делится на сообщения до 4096 символов (раньше в чате на 14 тысяч падал).

Новое: /settings (упоминания, имена в голосовых, ивенты, удаление служебных сообщений —
меняют админы), /top, /month (итоги месяца по команде). /stop_bot раньше ничего не
выключал — флаг не проверялся; теперь работает. Участник, вышедший из чата, больше не
упоминается, но его статистика сохраняется. Ошибки — в технический чат DEBUG_CHAT_ID.

Код: handlers.py разбит на роутеры, Markdown заменён на HTML (экранирование через html.escape),
тесты на PostgreSQL (18), CI на Python 3.10 и 3.12.
2026-10-06 11:16:00 +00:00
.github/workflows AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
code AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
data Переводы строк приведены к LF, удалено чужое голосовое из data/voices 2026-10-06 00:51:37 +00:00
scripts AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
tests AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
.dockerignore Зависимости, тесты, CI, Docker, лицензия MIT и README на русском и английском 2026-10-06 01:10:52 +00:00
.env.example AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
.gitattributes Переводы строк приведены к LF, удалено чужое голосовое из data/voices 2026-10-06 00:51:37 +00:00
.gitignore AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
compose.yaml AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
Dockerfile AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
LICENSE Зависимости, тесты, CI, Docker, лицензия MIT и README на русском и английском 2026-10-06 01:10:52 +00:00
pytest.ini AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
README.en.md Зависимости, тесты, CI, Docker, лицензия MIT и README на русском и английском 2026-10-06 01:10:52 +00:00
README.md Зависимости, тесты, CI, Docker, лицензия MIT и README на русском и английском 2026-10-06 01:10:52 +00:00
requirements-dev.txt AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00
requirements.txt AboBot 4.0: PostgreSQL, обработчики по роутерам, HTML-разметка, новые команды 2026-10-06 11:16:00 +00:00

AboBot

Русский · English

CI Docker License

A Telegram bot for group chats. It:

  • pings a member when their name comes up in a message or a voice note;
  • keeps statistics for the chat and every member;
  • fixes text typed in the wrong keyboard layout;
  • transcribes and voices messages;
  • runs playful events.

The bot speaks Russian.

Status: personal project, running since 2021 · bot @chat_abobot · over 20,000 users from 45 chats in the bot's database (October 2026)

Stack: Python 3.12 · aiogram 3 · pymorphy3 · pyenchant · SpeechRecognition · gTTS · SQLite · Docker

Features

  • Name mentions. Words of a message are reduced to their base form (pymorphy3) and compared with members' names, so any grammatical case of a name mentions the right person. A custom name can be set with /edit. Names are also found in voice notes up to a minute long.

  • /all mentions every member.

  • All-time and monthly statistics (/stat_group, /stat_user): messages, replies, commands, links, media, stickers, voice and video notes. Monthly numbers reset at the start of each month.

  • Wrong keyboard layout. A message like ghbdtn is repeated as «привет». English words are recognized with a dictionary (pyenchant) and left alone.

  • Voice. /recognize as a reply to a voice note transcribes it; «Озвучь - текст» turns text into a voice note.

  • Events:

    • random numbers;
    • reversing text;
    • a language game;
    • mock fights;
    • picture reactions.

    Turned off with /stop_bot.

  • Deleting service messages (joins, leaves, title and photo changes) when the bot is an admin.

Running

git clone https://github.com/EDeev/chatping_abobot.git && cd chatping_abobot
cp .env.example .env      # BOT_TOKEN from @BotFather
docker compose up -d

Prebuilt image: docker pull ghcr.io/edeev/chatping_abobot or docker pull dcr.deev.su/edeev/chatping_abobot. The SQLite databases are created on first start.

Without Docker you need Python 3.12, the enchant system library and an English dictionary (apt install libenchant-2-2 hunspell-en-us). Then: pip install -r requirements.txt and cd code && BOT_TOKEN=… python bot.py.

How it works

code/bot.py        entry point and monthly statistics reset
code/handlers.py   message, command, voice and event handlers
code/script.py     statistics, name lookup, keyboard layout, text reversal
code/sql.py        four SQLite databases: groups, users, all-time and monthly statistics
data/              event pictures and the greeting

Member statistics live in a separate table per chat — that is how the bot's production databases are built. Counters are incremented in a single query, so simultaneous messages are not lost. Speech recognition and synthesis (Google Web Speech and gTTS) run in a separate thread, so the bot never freezes.

Development

pip install -r requirements-dev.txt
ruff check --select E9,F,B code tests && pytest

What the tests cover:

  • statistics counters;
  • mentions and /all;
  • the monthly reset;
  • keyboard layout, reversal and escaping;
  • loading of the bot's handlers.

The Docker image is built on v* tags and published to GitHub Packages and dcr.deev.su.

License

MIT — see LICENSE.

Author

Egor Deev — GitHub · Telegram · egor@deev.space


⭐ If you find this project useful, give it a star on GitHub!

Made with ❤️ — deev.space