requirements.txt раньше не устанавливался (sqlite3, несуществующий enchant==1.6.6) и тянул неиспользуемые asyncio-mqtt, pyaudio, pydub. README: распознавание — SpeechRecognition, а не gTTS; число пользователей — по базе бота.
5.8 KiB
AboBot
Русский · English
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
Сделано с ❤️ — deev.space