Телеграм-бот для проведения масштабных A/B тестирований названий или других текстовых данных
Данная версия - предрелизная. Код нуждается в серьезной доработке, более подробно - в разделе Разработка
Стэк:
- Python 3
- SQLite 3 + Peewee
- Aiogram 3
В качестве пакетного менеджера и виртуального окружения используется 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.
Весь исполняемый код бота расположен в директории /bot
. Точка входа - файл main.py
. В корневой директории лежат файлы, отвечающие за конфигурацию и прочее. Также в корне располагается файл words.txt
, в котором должен находится контент для тестирования, а также файл базы данных data.db
. Основная идея на данный момент по организации кодовой базы:
main.py
- точка входа, обработчики действий пользователя. Также, логика отвечающая за отображениеconfig.py
- обработка переменных окружения, объекты, используемые для хранения параметровmodels.py
- модели ORMdb.py
- функционал по работе с БД, а также функции, отвечающие за обработку данных из моделейmessages.py
- тексты сообщений, отправляемые ботомkeyboards.py
- клавиатуры ботаservices.py
- вспомогательные функции
Автор этого репозитория, идеи и кода - @dan-sazonov.
Связаться со мной:
📧 Email