{"id":25183142,"url":"https://github.com/dan-sazonov/ab-global-bot","last_synced_at":"2025-09-11T12:37:42.767Z","repository":{"id":208861529,"uuid":"705433401","full_name":"dan-sazonov/ab-global-bot","owner":"dan-sazonov","description":"🤖🎯 (RU) Telegram bot for ab-testing","archived":false,"fork":false,"pushed_at":"2024-07-06T01:03:59.000Z","size":143,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-09T18:19:15.352Z","etag":null,"topics":["aiogram","peewee","sqlite3","telegram","telegram-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dan-sazonov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-16T01:50:50.000Z","updated_at":"2024-05-04T06:47:24.000Z","dependencies_parsed_at":"2023-11-27T03:03:56.775Z","dependency_job_id":null,"html_url":"https://github.com/dan-sazonov/ab-global-bot","commit_stats":null,"previous_names":["dan-sazonov/ab-global-bot"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dan-sazonov%2Fab-global-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dan-sazonov%2Fab-global-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dan-sazonov%2Fab-global-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dan-sazonov%2Fab-global-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dan-sazonov","download_url":"https://codeload.github.com/dan-sazonov/ab-global-bot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247135150,"owners_count":20889421,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiogram","peewee","sqlite3","telegram","telegram-bot"],"created_at":"2025-02-09T18:19:20.215Z","updated_at":"2025-04-04T07:13:24.993Z","avatar_url":"https://github.com/dan-sazonov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AB Global bot\n![OpenSource](https://img.shields.io/badge/Open%20Source-%E2%99%A5-red)\n![GPL-3.0 license ](https://img.shields.io/github/license/dan-sazonov/ab-global-bot)\n![Tested on linux, Win10](https://img.shields.io/badge/tested%20on-Linux%20|%20Win10-blue)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits\u0026logoColor=white)](https://conventionalcommits.org)\n\n**Телеграм-бот для проведения масштабных A/B тестирований названий или других текстовых данных** \n\n\u003e Данная версия - предрелизная. Код нуждается в серьезной доработке, более подробно - в разделе [Разработка](#Разработка)\n\n**Стэк:**\n- Python 3\n- SQLite 3 + Peewee\n- Aiogram 3\n\n## 📦 Установка и запуск\nВ качестве пакетного менеджера и виртуального окружения используется [Poetry](https://github.com/python-poetry/poetry). Требуемая версия python - 3.11.\n\nСклонируйте этот репозиторий, перейдите в новую директорию и установите нужные пакеты:\n```\n$ git clone https://github.com/dan-sazonov/ab-global-bot.git\n$ cd ab-global-bot\n$ poetry install\n```\nНастройте переменные окружения: в файл `.env.example` вставьте токен бота и телеграм-айди администратора, после чего сохраните данный файл под названием `.env`.\u003cbr\u003e\n\nДобавьте список тестируемых названий. Создайте файл `words.txt`, в который вставьте названия, разделив их переносом строки (каждое название на новой строке).\u003cbr\u003e\n\nОтредактируйте файл `messages.py`, заменив примеры на сообщения, которые должен отправлять бот в соответствии с вашей задачей.\u003cbr\u003e\n\nЗапустите файл с точкой входа:\n```\npoetry run python main.py \n```\n\nПрограмма протестирована на Windows 10 x64 и Ubuntu 20.04 x64.\n\n## ⚙ Использование\nБот работает следующим образом: пользователю, запустившего его, показываются два названия, которые рандомно вытаскиваются из файла `words.txt`. Задача пользователя - выбрать название, которое больше соответствует заданной цели. Показ пар будет бесконечным.\u003cbr\u003e\n\nЛица, проводящие A/B исследование, будут видеть статистику в таблице `words` в базе данных - в ней отображается список слов, а также показатели, сколько раз каждое слово было предложено для голосования, и сколько раз за него пользователи отдали голос.\u003cbr\u003e\n\nВ таблице `users` отображается список пользователей, количество отданных голосов, а также время регистрации и последней активности. По этим данным можно оценивать паттерн поведения пользователя, и вероятность слепой \"накрутки\" голосов.\u003cbr\u003e\n\n## 🎯 Разработка\nКод разрабатывался в соответствии с методологией \"х-х и в продакшн\", поэтому нуждается в рефакторинге. Ближайшие задачи:\n\n- [ ] Разделить работу с БД, бизнес-логику, отображение, конфигурацию aiogram на отдельные модули\n- [ ] Внедрить лучшие практики Aiogram 3\n- [ ] Прописать type hint для функций и классов\n- [ ] Улучшить логирование\n- [ ] Добавить обработку возможных исключений, EAFP\n- [ ] Написать тесты\n- [ ] Внедрить линтер и проверку типизации, настроить CI на гитхаб \n- [ ] Пересесть на Postgres\n\n**Баги и фичи:**\n- [ ] Добавить работу с изображениями\n- [ ] Обрабатывать и игнорировать механическое бездумное \"накручивание\" количества голосов от пользователя\n- [ ] Улучшить скорость отправки нового сообщения после получения голоса\n- [ ] Сохранять в БД ссылку на аккаунт пользователей\n- [ ] Рассылать раз в nный промежуток времени пользователям сообщение с приглашением продолжить опрос\n- [ ] Сообщать пользователю, сколько раз он уже проголосовал\n\nЕсли вы хотите внести свой вклад, откройте ишью, в котором опишите, над чем вы работаете и ваше видение реализации, сделайте форк репозитория, и после завершения работы предложите пулл-реквест в ветку `dev` с названием как у ишью. Для именования коммитов используйте английский язык и [Conventional Commits](https://github.com/conventional-commits/conventionalcommits.org).\n\n## 🛠 Исходники\nВесь исполняемый код бота расположен в директории `/bot`. Точка входа - файл `main.py`. В корневой директории лежат файлы, отвечающие за конфигурацию и прочее. Также в корне располагается файл `words.txt`, в котором должен находится контент для тестирования, а также файл базы данных `data.db`. Основная идея на данный момент по организации кодовой базы:\n- `main.py` - точка входа, обработчики действий пользователя. Также, логика отвечающая за отображение \n- `config.py` - обработка переменных окружения, объекты, используемые для хранения параметров\n- `models.py` - модели ORM\n- `db.py` - функционал по работе с БД, а также функции, отвечающие за обработку данных из моделей\n- `messages.py` - тексты сообщений, отправляемые ботом\n- `keyboards.py` - клавиатуры бота\n- `services.py` - вспомогательные функции\n\n## 👨‍💻 Автор\nАвтор этого репозитория, идеи и кода - [@dan-sazonov](https://github.com/dan-sazonov). \u003cbr\u003e\n**Связаться со мной:**\u003cbr\u003e\n[✈️ Telegram](https://t.me/dan_sazonov) \u003cbr\u003e\n[📧 Email](mailto:p-294803@yandex.com) \u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdan-sazonov%2Fab-global-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdan-sazonov%2Fab-global-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdan-sazonov%2Fab-global-bot/lists"}