# SHiNE-agent-bot-coder Локальный Telegram-бот-сервис для пользователя `ai`: - принимает сообщения от `@AidarKC`; - поддерживает whitelist игроков (`ALLOWED_TELEGRAM_PLAYERS`) с отдельными историями; - ведёт историю диалога в `JSONL`; - ставит задачи в файловую очередь; - обрабатывает задачи строго последовательно; - поддерживает текстовые и голосовые сообщения (voice/audio через OpenAI transcription); - вызывает Codex CLI и отправляет ответ в Telegram; - умеет персонально для каждого пользователя озвучивать финальный ответ через OpenAI TTS; - при рестарте восстанавливает незавершённые задачи; - отправляет аварийный статус только если Codex молчит 2 минуты подряд во время активной задачи; - принимает сообщения из канала/группы `@shine_writing`, выполняет команды только от `@AidarKC`; - учитывает миграцию обычной Telegram-группы в supergroup и перенаправляет ответы на новый `chat_id`. Рабочая реализация сервиса — только `py_bot_service.py`. Старая Java-реализация удалена, потому что не заработала и больше не используется. ## Структура - `.env` — локальные секреты и параметры запуска (не коммитится); - `data/py_queue.jsonl` — очередь Python-сервиса; - `data/py_state.json` — текущее состояние Python-сервиса; - `data/py_processed_updates.log` — дедуп входящих update; - `data/history//*.jsonl` — активные истории по пользователям; - `data/history//archive/*.jsonl` — архивы после `/new`. ## Локальный запуск 1. Скопировать пример: - `cp .env.example .env` 2. Заполнить секреты в `.env`. - `TELEGRAM_BOT_TOKEN` — токен рабочего Telegram-бота. - `ALLOWED_TELEGRAM_USERNAME` — пользователь, чьи сообщения выполняются как команды. - `ALLOWED_TELEGRAM_PLAYERS` — whitelist игроков в формате `username:Имя,username2:Имя2`. - `ALLOWED_TELEGRAM_CHANNEL_USERNAME` — канал, из которого принимаются `channel_post`; обычные group/supergroup-сообщения обрабатываются как `message`. - `TELEGRAM_FILE_DOWNLOAD_TIMEOUT_SECONDS` — тайм-аут скачивания voice/audio из Telegram, по умолчанию 300 секунд. - `OPENAI_TRANSCRIBE_TIMEOUT_SECONDS` — тайм-аут распознавания voice/audio в OpenAI, по умолчанию 900 секунд. - `OPENAI_TTS_MODEL` — модель синтеза речи, по умолчанию `gpt-4o-mini-tts`. - `OPENAI_TTS_VOICE` — голос синтеза речи, по умолчанию `alloy`. - `OPENAI_TTS_RESPONSE_FORMAT` — аудиоформат для Telegram voice, по умолчанию `opus`. - `OPENAI_TTS_TIMEOUT_SECONDS` — тайм-аут генерации одного фрагмента речи, по умолчанию 180 секунд. - `OPENAI_TTS_CHUNK_CHARS` — максимальный размер одного фрагмента озвучки, по умолчанию 3500 символов. 3. Запуск: - `python3 SHiNE-agent-bot-coder/py_bot_service.py` ## Быстрый self-test Codex (без Telegram) ```bash python3 SHiNE-agent-bot-coder/py_bot_service.py --selftest-codex "Ответь одной строкой: Codex работает" ``` ## Запуск как systemd-сервис Файлы для установки: - `scripts/systemd/shine-agent-bot-coder.service` - `scripts/systemd/install-local-systemd.sh` Установка: - `bash SHiNE-agent-bot-coder/scripts/systemd/install-local-systemd.sh` Проверка: - `systemctl --user status shine-agent-bot-coder --no-pager` - `journalctl --user -u shine-agent-bot-coder -f` Перезапуск после изменений: - `systemctl --user restart shine-agent-bot-coder` ## Telegram-команды - `/status` — активная задача и размер очереди. - `/queue` — список задач в очереди. - `/stop` — остановить текущую задачу. - `/cancel ` — удалить задачу по id/префиксу или очистить очередь. - `/new` — архивировать текущую историю и начать новый диалог. - `/voice_on` — включить озвучивание финальных ответов для текущего пользователя. - `/voice_off` — выключить озвучивание финальных ответов для текущего пользователя. - `/voice_status` — показать состояние озвучивания для текущего пользователя. - `/restart_service` — перезапустить сервис (только для Айдара); systemd должен поднять процесс заново.