5.6 KiB
5.6 KiB
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/<username>/*.jsonl— активные истории по пользователям;data/history/<username>/archive/*.jsonl— архивы после/new.
Локальный запуск
- Скопировать пример:
cp .env.example .env
- Заполнить секреты в
.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 символов.
- Запуск:
python3 SHiNE-agent-bot-coder/py_bot_service.py
Быстрый self-test Codex (без Telegram)
python3 SHiNE-agent-bot-coder/py_bot_service.py --selftest-codex "Ответь одной строкой: Codex работает"
Запуск как systemd-сервис
Файлы для установки:
scripts/systemd/shine-agent-bot-coder.servicescripts/systemd/install-local-systemd.sh
Установка:
bash SHiNE-agent-bot-coder/scripts/systemd/install-local-systemd.sh
Проверка:
systemctl --user status shine-agent-bot-coder --no-pagerjournalctl --user -u shine-agent-bot-coder -f
Перезапуск после изменений:
systemctl --user restart shine-agent-bot-coder
Telegram-команды
/status— активная задача и размер очереди./queue— список задач в очереди./stop— остановить текущую задачу./cancel <id|all>— удалить задачу по id/префиксу или очистить очередь./new— архивировать текущую историю и начать новый диалог./voice_on— включить озвучивание финальных ответов для текущего пользователя./voice_off— выключить озвучивание финальных ответов для текущего пользователя./voice_status— показать состояние озвучивания для текущего пользователя./restart_service— перезапустить сервис (только для Айдара); systemd должен поднять процесс заново.