Thanks to visit codestin.com
Credit goes to github.com

Skip to content

RuKapSan/OpenAITGBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenAI Telegram Bot

Telegram бот для генерации изображений с использованием OpenAI API.

Возможности

  • Генерация изображений по текстовому описанию
  • Редактирование и комбинирование загруженных фотографий
  • Система пакетов генераций со скидками (3, 5, 10 генераций)
  • Управление балансом пользователей
  • Оплата через Telegram Stars
  • Автоматический возврат средств при ошибках
  • Rate limiting для защиты от спама (30 запросов в минуту)
  • Система очередей при превышении лимита OpenAI API
  • SQLite база данных для хранения сессий и платежей

Установка

  1. Клонируйте репозиторий:
git clone https://github.com/RuKapSan/OpenAITGBot.git
cd OpenAITGBot
  1. Установите зависимости используя uv:
uv pip install -e .

Или с pip:

pip install -e .
  1. Создайте файл .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

Настройка

Получение токенов

  1. Bot Token: Создайте бота через @BotFather
  2. OpenAI API Key: Получите на platform.openai.com
  3. Admin ID: Узнайте свой ID через @userinfobot

Настройка платежей

Для работы платежей через Telegram Stars:

  1. Включите платежи в настройках бота через BotFather
  2. Выберите провайдера "Telegram Stars"
  3. Установите цену в .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 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

Создание новой миграции

  1. Создайте файл в bot/migrations/ с именем m_XXX_description.py где XXX - номер версии (например, 003)

  2. Создайте класс миграции:

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 ...")

Миграция со старой версии без БД

Если вы использовали версию без БД:

  1. Остановите бота
  2. Обновите код
  3. Запустите бота - БД и все миграции применятся автоматически
  4. Старые сессии в памяти будут потеряны

Обновление зависимостей

uv pip sync

Поддержка

При возникновении проблем:

  1. Проверьте логи бота
  2. Убедитесь что все токены правильные
  3. Проверьте наличие файла bot_data.db
  4. Создайте issue в репозитории

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages