1
0
Fork 0
mirror of https://github.com/EDeev/chatping_abobot.git synced 2026-10-07 20:49:45 +03:00
chatping_abobot/README.md
Egor Deev 9123f57968 Зависимости, тесты, CI, Docker, лицензия MIT и README на русском и английском
requirements.txt раньше не устанавливался (sqlite3, несуществующий enchant==1.6.6) и тянул
неиспользуемые asyncio-mqtt, pyaudio, pydub. README: распознавание — SpeechRecognition,
а не gTTS; число пользователей — по базе бота.
2026-10-06 01:10:52 +00:00

5.8 KiB
Raw Blame History

AboBot

Русский · English

CI Docker License

Telegram-бот для групповых чатов. Он:

  • зовёт участника, когда его имя звучит в сообщении или в голосовом;
  • ведёт статистику чата и каждого участника;
  • исправляет текст, набранный в неправильной раскладке;
  • распознаёт и озвучивает голосовые;
  • устраивает шуточные ивенты.

Статус: личный проект, работает с 2021 года · бот @chat_abobot · в базе бота больше 20 000 пользователей из 45 чатов (октябрь 2026)

Стек: Python 3.12 · aiogram 3 · pymorphy3 · pyenchant · SpeechRecognition · gTTS · SQLite · Docker

Возможности

  • Упоминания по имени. Слова сообщения приводятся к начальной форме (pymorphy3) и сравниваются с именами участников, поэтому участницу Машу позовут и «Маша», и «позови Машу», и «с Машей». Своё имя для упоминаний можно задать командой /edit. Имена ищутся и в голосовых до минуты.

  • /all — упомянуть всех участников.

  • Статистика за всё время и за месяц (/stat_group, /stat_user): сообщения, ответы, команды, ссылки, медиа, стикеры, голосовые и кружочки. Месячная обнуляется в начале месяца.

  • Неправильная раскладка. Сообщение вида ghbdtn бот повторит как «привет». Английские слова он отличает по словарю (pyenchant) и не трогает.

  • Голос. /recognize ответом на голосовое — расшифровка; «Озвучь - текст» — голосовое из текста.

  • Ивенты:

    • «Число от 1 до 100»;
    • «Переверни - …»;
    • «Переведи - …» — на кирпичный язык;
    • «Подраться с …»;
    • «Чмокнуть» и другие действия с картинками.

    Отключаются командой /stop_bot.

  • Удаление служебных сообщений (вход, выход, смена названия и фото) — если у бота права администратора.

Запуск

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

Готовый образ: docker pull ghcr.io/edeev/chatping_abobot или docker pull dcr.deev.su/edeev/chatping_abobot. Базы SQLite создаются при первом запуске.

Без Docker нужны Python 3.12, системная библиотека enchant и английский словарь (apt install libenchant-2-2 hunspell-en-us). Затем: pip install -r requirements.txt и cd code && BOT_TOKEN=… python bot.py.

Как устроено

code/bot.py        запуск и ежемесячное обнуление статистики
code/handlers.py   обработчики сообщений, команд, голосовых и ивентов
code/script.py     учёт статистики, поиск имён, раскладка, переворот текста
code/sql.py        четыре базы SQLite: группы, пользователи, статистика за всё время и за месяц
data/              картинки ивентов и приветствие

Статистика участников хранится в отдельной таблице на каждый чат — так устроены рабочие базы бота. Счётчики увеличиваются одним запросом, поэтому одновременные сообщения не теряются. Распознавание и синтез речи (Google Web Speech и gTTS) идут в отдельном потоке, чтобы бот не замирал.

Разработка

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

Что проверяют тесты:

  • счётчики статистики;
  • упоминания и /all;
  • обнуление месячной статистики;
  • раскладку, переворот и экранирование;
  • что обработчики бота загружаются.

Docker-образ собирается по тегу v* и публикуется в GitHub Packages и dcr.deev.su.

Лицензия

MIT — см. LICENSE.

Автор

Деев Егор Викторович — GitHub · Telegram · egor@deev.space


⭐ Если проект оказался полезным, поставьте звёздочку на GitHub!

Сделано с ❤️ — deev.space