Telegram бот для генерации изображений с использованием OpenAI API.
- Генерация изображений по текстовому описанию
- Редактирование и комбинирование загруженных фотографий
- Система пакетов генераций со скидками (3, 5, 10 генераций)
- Управление балансом пользователей
- Оплата через Telegram Stars
- Автоматический возврат средств при ошибках
- Rate limiting для защиты от спама (30 запросов в минуту)
- Система очередей при превышении лимита OpenAI API
- SQLite база данных для хранения сессий и платежей
- Клонируйте репозиторий:
git clone https://github.com/RuKapSan/OpenAITGBot.git
cd OpenAITGBot- Установите зависимости используя uv:
uv pip install -e .Или с pip:
pip install -e .- Создайте файл
.envв корне проекта:
BOT_TOKEN=ваш_токен_бота
OPENAI_API_KEY=ваш_ключ_openai
TEST_MODE=false
ADMIN_ID=ваш_telegram_id
# Настройки генерации (опционально)
GENERATION_PRICE=20
MAX_IMAGES_PER_REQUEST=3
MAX_PROMPT_LENGTH=1000
OPENAI_CONCURRENT_LIMIT=5
SESSION_EXPIRE_MINUTES=60
# Настройки пакетов (опционально)
PACKAGE_1_SIZE=1
PACKAGE_1_PRICE=20
PACKAGE_2_SIZE=5
PACKAGE_2_PRICE=90
PACKAGE_3_SIZE=10
PACKAGE_3_PRICE=160
PACKAGE_4_SIZE=20
PACKAGE_4_PRICE=280
# URL изображения для инвойса (опционально)
INVOICE_PHOTO_URL=https://cdn-icons-png.flaticon.com/512/2779/2779775.png- Bot Token: Создайте бота через @BotFather
- OpenAI API Key: Получите на platform.openai.com
- Admin ID: Узнайте свой ID через @userinfobot
Для работы платежей через Telegram Stars:
- Включите платежи в настройках бота через BotFather
- Выберите провайдера "Telegram Stars"
- Установите цену в
.envфайле (переменнаяGENERATION_PRICE, по умолчанию 20 Stars)
Все основные параметры можно настроить через переменные окружения в .env:
GENERATION_PRICE- цена за генерацию в Telegram Stars (по умолчанию: 20)MAX_IMAGES_PER_REQUEST- максимальное количество изображений для редактирования (по умолчанию: 3)MAX_PROMPT_LENGTH- максимальная длина промпта в символах (по умолчанию: 1000)OPENAI_CONCURRENT_LIMIT- лимит одновременных запросов к OpenAI API (по умолчанию: 5)SESSION_EXPIRE_MINUTES- время жизни сессии оплаты в минутах (по умолчанию: 60)INVOICE_PHOTO_URL- URL изображения для отображения в инвойсе (опционально)
Бот поддерживает 4 настраиваемых пакета генераций. Каждый пакет конфигурируется через переменные окружения:
PACKAGE_1_SIZE- количество генераций в пакете 1 (по умолчанию: 1)PACKAGE_1_PRICE- цена пакета 1 в Stars (по умолчанию: 20)PACKAGE_2_SIZE- количество генераций в пакете 2 (по умолчанию: 5)PACKAGE_2_PRICE- цена пакета 2 в Stars (по умолчанию: 90)PACKAGE_3_SIZE- количество генераций в пакете 3 (по умолчанию: 10)PACKAGE_3_PRICE- цена пакета 3 в Stars (по умолчанию: 160)PACKAGE_4_SIZE- количество генераций в пакете 4 (по умолчанию: 20)PACKAGE_4_PRICE- цена пакета 4 в Stars (по умолчанию: 280)
OpenAI API имеет лимит на количество одновременных запросов. Бот автоматически:
- Ограничивает количество параллельных генераций через
OPENAI_CONCURRENT_LIMIT - Показывает позицию в очереди пользователям
- Обрабатывает ошибки превышения лимита
Для изменения лимита установите OPENAI_CONCURRENT_LIMIT в .env файле.
С помощью uv
uv run main.pyили нативно
python main.py/start- Приветствие и информация о боте/help- Подробная инструкция/generate- Начать генерацию изображения/balance- Проверить баланс генераций/paysupport- Поддержка по платежам/refund- Ручной возврат платежа (только для админа)
OpenAITGBot/
├── main.py # Точка входа приложения
├── README.md # Документация проекта
├── pyproject.toml # Конфигурация Python проекта и зависимости
├── uv.lock # Lock файл для UV package manager
├── manage_migrations.py # CLI утилита для управления миграциями БД
├── .env # Конфигурация окружения (не в git)
├── .gitignore # Настройки Git
├── bot_data.db # SQLite база данных (создается автоматически)
├── logs/
│ └── payments.log # Логи платежных транзакций
├── bot/
│ ├── __init__.py # Инициализация бота, роутеров и middleware
│ ├── config.py # Загрузка конфигурации и настроек
│ ├── database.py # Инициализация БД и миграций
│ ├── models.py # Pydantic модели для валидации данных
│ ├── states.py # FSM состояния для управления диалогами
│ ├── messages.py # Текстовые сообщения и шаблоны
│ ├── handlers/ # Обработчики запросов
│ │ ├── __init__.py # Экспорт всех роутеров
│ │ ├── command_handlers.py # Команды (/start, /help, /balance)
│ │ ├── generation_handlers.py # Процесс генерации изображений
│ │ ├── image_handlers.py # Обработка загруженных изображений
│ │ └── payment_handlers.py # Обработка платежей и покупок
│ ├── services/ # Бизнес-логика
│ │ ├── __init__.py # Инициализация сервисов
│ │ ├── balance_service.py # Управление балансом пользователей
│ │ ├── openai_service.py # Интеграция с OpenAI API
│ │ ├── payment_service.py # Обработка платежей и возвратов
│ │ ├── queue_service.py # Очередь генераций с rate limiting
│ │ └── telegram_service.py # Telegram-специфичные операции
│ ├── repositories/ # Слой доступа к данным
│ │ ├── __init__.py # Инициализация репозиториев
│ │ ├── base.py # Абстрактные базовые классы
│ │ └── sqlite.py # SQLite реализации репозиториев
│ ├── middleware/ # Промежуточное ПО
│ │ ├── __init__.py # Инициализация middleware
│ │ └── rate_limit.py # Rate limiting для защиты от спама
│ ├── keyboards/ # Telegram клавиатуры
│ │ ├── __init__.py # Инициализация клавиатур
│ │ └── package_keyboards.py # Inline клавиатуры для пакетов
│ └── migrations/ # Миграции базы данных
│ ├── __init__.py # Инициализация миграций
│ ├── migration_system.py # Система управления миграциями
│ ├── m_001_initial_schema.py # Начальная схема БД
│ ├── m_002_add_generation_stats.py # Статистика генераций
│ ├── m_003_user_balances.py # Система балансов пользователей
│ ├── m_004_generation_queue.py # Таблицы очереди генераций
│ └── m_005_optimize_queue_indices.py # Оптимизация индексов БД
└── .claude/ # Конфигурация Claude AI (локальная)
├── settings.local.json # Локальные настройки Claude
└── agents/ # Конфигурации AI агентов
├── code-reviewer.md # Инструкции для code review агента
└── debugger.md # Инструкции для debugging агента
Бот предлагает настраиваемые пакеты генераций со скидками. По умолчанию:
- 1 генерация - 20 Stars
- 5 генераций - 90 Stars (скидка 10%)
- 10 генераций - 160 Stars (скидка 20%)
- 20 генераций - 280 Stars (скидка 30%)
Купленные генерации сохраняются на балансе пользователя и используются автоматически при новых запросах.
Пакеты можно настроить через переменные окружения (см. раздел "Настройка пакетов генераций").
Для тестирования без оплаты установите в .env:
TEST_MODE=true- Храните токены в
.envфайле - Не коммитьте
.envв репозиторий - Регулярно очищайте старые сессии из БД
- Мониторьте логи на предмет подозрительной активности
При запуске бот автоматически применяет все новые миграции. Никаких дополнительных действий не требуется.
Для управления миграциями используйте скрипт manage_migrations.py:
# Показать статус миграций
python manage_migrations.py status
# Применить все новые миграции
python manage_migrations.py migrate
# Откатить последнюю миграцию
python manage_migrations.py rollback
# Откатить до конкретной версии
python manage_migrations.py rollback 001-
Создайте файл в
bot/migrations/с именемm_XXX_description.pyгде XXX - номер версии (например, 003) -
Создайте класс миграции:
from .migration_system import Migration
class YourMigration(Migration):
def __init__(self):
super().__init__(
version="003",
description="Описание изменений"
)
async def up(self, db):
# Применить изменения
await db.execute("ALTER TABLE ...")
async def down(self, db):
# Откатить изменения
await db.execute("ALTER TABLE ...")Если вы использовали версию без БД:
- Остановите бота
- Обновите код
- Запустите бота - БД и все миграции применятся автоматически
- Старые сессии в памяти будут потеряны
uv pip syncПри возникновении проблем:
- Проверьте логи бота
- Убедитесь что все токены правильные
- Проверьте наличие файла
bot_data.db - Создайте issue в репозитории