https://github.com/dan-sazonov/ab-global-bot
🤖🎯 (RU) Telegram bot for ab-testing
https://github.com/dan-sazonov/ab-global-bot
aiogram peewee sqlite3 telegram telegram-bot
Last synced: 26 days ago
JSON representation
🤖🎯 (RU) Telegram bot for ab-testing
- Host: GitHub
- URL: https://github.com/dan-sazonov/ab-global-bot
- Owner: dan-sazonov
- License: gpl-3.0
- Created: 2023-10-16T01:50:50.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-06T01:03:59.000Z (over 1 year ago)
- Last Synced: 2025-02-09T18:19:15.352Z (8 months ago)
- Topics: aiogram, peewee, sqlite3, telegram, telegram-bot
- Language: Python
- Homepage:
- Size: 140 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# AB Global bot



[](https://conventionalcommits.org)**Телеграм-бот для проведения масштабных A/B тестирований названий или других текстовых данных**
> Данная версия - предрелизная. Код нуждается в серьезной доработке, более подробно - в разделе [Разработка](#Разработка)
**Стэк:**
- Python 3
- SQLite 3 + Peewee
- Aiogram 3## 📦 Установка и запуск
В качестве пакетного менеджера и виртуального окружения используется [Poetry](https://github.com/python-poetry/poetry). Требуемая версия python - 3.11.Склонируйте этот репозиторий, перейдите в новую директорию и установите нужные пакеты:
```
$ git clone https://github.com/dan-sazonov/ab-global-bot.git
$ cd ab-global-bot
$ poetry install
```
Настройте переменные окружения: в файл `.env.example` вставьте токен бота и телеграм-айди администратора, после чего сохраните данный файл под названием `.env`.Добавьте список тестируемых названий. Создайте файл `words.txt`, в который вставьте названия, разделив их переносом строки (каждое название на новой строке).
Отредактируйте файл `messages.py`, заменив примеры на сообщения, которые должен отправлять бот в соответствии с вашей задачей.
Запустите файл с точкой входа:
```
poetry run python main.py
```Программа протестирована на Windows 10 x64 и Ubuntu 20.04 x64.
## ⚙ Использование
Бот работает следующим образом: пользователю, запустившего его, показываются два названия, которые рандомно вытаскиваются из файла `words.txt`. Задача пользователя - выбрать название, которое больше соответствует заданной цели. Показ пар будет бесконечным.Лица, проводящие A/B исследование, будут видеть статистику в таблице `words` в базе данных - в ней отображается список слов, а также показатели, сколько раз каждое слово было предложено для голосования, и сколько раз за него пользователи отдали голос.
В таблице `users` отображается список пользователей, количество отданных голосов, а также время регистрации и последней активности. По этим данным можно оценивать паттерн поведения пользователя, и вероятность слепой "накрутки" голосов.
## 🎯 Разработка
Код разрабатывался в соответствии с методологией "х-х и в продакшн", поэтому нуждается в рефакторинге. Ближайшие задачи:- [ ] Разделить работу с БД, бизнес-логику, отображение, конфигурацию aiogram на отдельные модули
- [ ] Внедрить лучшие практики Aiogram 3
- [ ] Прописать type hint для функций и классов
- [ ] Улучшить логирование
- [ ] Добавить обработку возможных исключений, EAFP
- [ ] Написать тесты
- [ ] Внедрить линтер и проверку типизации, настроить CI на гитхаб
- [ ] Пересесть на Postgres**Баги и фичи:**
- [ ] Добавить работу с изображениями
- [ ] Обрабатывать и игнорировать механическое бездумное "накручивание" количества голосов от пользователя
- [ ] Улучшить скорость отправки нового сообщения после получения голоса
- [ ] Сохранять в БД ссылку на аккаунт пользователей
- [ ] Рассылать раз в nный промежуток времени пользователям сообщение с приглашением продолжить опрос
- [ ] Сообщать пользователю, сколько раз он уже проголосовалЕсли вы хотите внести свой вклад, откройте ишью, в котором опишите, над чем вы работаете и ваше видение реализации, сделайте форк репозитория, и после завершения работы предложите пулл-реквест в ветку `dev` с названием как у ишью. Для именования коммитов используйте английский язык и [Conventional Commits](https://github.com/conventional-commits/conventionalcommits.org).
## 🛠 Исходники
Весь исполняемый код бота расположен в директории `/bot`. Точка входа - файл `main.py`. В корневой директории лежат файлы, отвечающие за конфигурацию и прочее. Также в корне располагается файл `words.txt`, в котором должен находится контент для тестирования, а также файл базы данных `data.db`. Основная идея на данный момент по организации кодовой базы:
- `main.py` - точка входа, обработчики действий пользователя. Также, логика отвечающая за отображение
- `config.py` - обработка переменных окружения, объекты, используемые для хранения параметров
- `models.py` - модели ORM
- `db.py` - функционал по работе с БД, а также функции, отвечающие за обработку данных из моделей
- `messages.py` - тексты сообщений, отправляемые ботом
- `keyboards.py` - клавиатуры бота
- `services.py` - вспомогательные функции## 👨💻 Автор
Автор этого репозитория, идеи и кода - [@dan-sazonov](https://github.com/dan-sazonov).
**Связаться со мной:**
[✈️ Telegram](https://t.me/dan_sazonov)
[📧 Email](mailto:p-294803@yandex.com)