Fix voice join against LiveKit 0.13+ and tidy up command messages
revoice.js reads `room.isConnected()`, but @livekit/rtc-node turned that into a getter, so every join threw "this.room.isConnected is not a function" before the bot ever reached the channel. The player no longer touches that getter: readiness comes from the connection's own join / roomfetched events and is cleared when it reports the offline state. Also delete the invoking chat message once a command is recognised (DELETE_COMMAND_MESSAGES, on by default) so channels stay readable; failures are non-fatal since it needs ManageMessages. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2b999bf2a0
commit
d4880e757e
+61
-58
@@ -1,58 +1,61 @@
|
||||
# ---------------------------------------------------------------- Stoat ----
|
||||
# Публичный адрес API вашего инстанса (тот же, что в клиенте).
|
||||
# Бот ходит по нему как обычный клиент; домен резолвится в хост через
|
||||
# extra_hosts в compose.yml, поэтому TLS валидный и NAT loopback не нужен.
|
||||
STOAT_API_URL=https://chat.example.com/api
|
||||
|
||||
# Токен бота: Settings → My Bots → создать бота → скопировать токен.
|
||||
STOAT_BOT_TOKEN=
|
||||
|
||||
# Префикс команд в чате.
|
||||
COMMAND_PREFIX=!
|
||||
|
||||
# ------------------------------------------------------------- Веб-панель ---
|
||||
PORT=3005
|
||||
HOST=0.0.0.0
|
||||
|
||||
# Адрес, по которому панель открывается в браузере (без слэша в конце).
|
||||
PUBLIC_URL=https://music.example.com
|
||||
|
||||
# Секрет для подписи сессионных cookie. Сгенерируйте: openssl rand -hex 32
|
||||
JWT_SECRET=
|
||||
|
||||
# Срок жизни сессии панели, часов.
|
||||
SESSION_TTL_HOURS=168
|
||||
|
||||
# ---------------------------------------------------------------- Аудио ----
|
||||
# Путь к yt-dlp. В docker-образе он уже установлен.
|
||||
YTDLP_PATH=yt-dlp
|
||||
|
||||
# Необязательно: cookies.txt аккаунта YouTube — снимает возрастные ограничения,
|
||||
# «Sign in to confirm you're not a bot» и открывает приватные/платные видео.
|
||||
# Файл должен быть доступен на ЗАПИСЬ: yt-dlp обновляет в нём ротируемые куки.
|
||||
# Подробности — в README, раздел «Учётка YouTube (cookies)».
|
||||
# YTDLP_COOKIES=/data/cookies.txt
|
||||
|
||||
# Необязательно: дополнительные --extractor-args, через ";".
|
||||
# Помогает, когда YouTube не отдаёт форматы серверному IP:
|
||||
# YTDLP_EXTRACTOR_ARGS=youtube:player_client=default,web_safari
|
||||
|
||||
# Необязательно: каталог с локальной медиатекой (смонтируйте том).
|
||||
# LOCAL_MEDIA_DIR=/media/music
|
||||
|
||||
DEFAULT_VOLUME=60
|
||||
MAX_QUEUE_SIZE=500
|
||||
SEARCH_RESULT_LIMIT=10
|
||||
|
||||
# Через сколько секунд простоя бот выходит из голосового канала (0 — никогда).
|
||||
IDLE_TIMEOUT_SECONDS=300
|
||||
|
||||
# --------------------------------------------------------------- Доступ ----
|
||||
# false — управлять может любой участник сервера.
|
||||
# true — только владелец, ManageServer или роль DJ_ROLE_NAME.
|
||||
REQUIRE_DJ_ROLE=false
|
||||
DJ_ROLE_NAME=DJ
|
||||
|
||||
# ----------------------------------------------------------------- Прочее ---
|
||||
LOG_LEVEL=info
|
||||
NODE_ENV=production
|
||||
# ---------------------------------------------------------------- Stoat ----
|
||||
# Публичный адрес API вашего инстанса (тот же, что в клиенте).
|
||||
# Бот ходит по нему как обычный клиент; домен резолвится в хост через
|
||||
# extra_hosts в compose.yml, поэтому TLS валидный и NAT loopback не нужен.
|
||||
STOAT_API_URL=https://chat.example.com/api
|
||||
|
||||
# Токен бота: Settings → My Bots → создать бота → скопировать токен.
|
||||
STOAT_BOT_TOKEN=
|
||||
|
||||
# Префикс команд в чате.
|
||||
COMMAND_PREFIX=!
|
||||
|
||||
# Удалять сообщение с командой после её распознавания (нужно право ManageMessages).
|
||||
DELETE_COMMAND_MESSAGES=true
|
||||
|
||||
# ------------------------------------------------------------- Веб-панель ---
|
||||
PORT=3005
|
||||
HOST=0.0.0.0
|
||||
|
||||
# Адрес, по которому панель открывается в браузере (без слэша в конце).
|
||||
PUBLIC_URL=https://music.example.com
|
||||
|
||||
# Секрет для подписи сессионных cookie. Сгенерируйте: openssl rand -hex 32
|
||||
JWT_SECRET=
|
||||
|
||||
# Срок жизни сессии панели, часов.
|
||||
SESSION_TTL_HOURS=168
|
||||
|
||||
# ---------------------------------------------------------------- Аудио ----
|
||||
# Путь к yt-dlp. В docker-образе он уже установлен.
|
||||
YTDLP_PATH=yt-dlp
|
||||
|
||||
# Необязательно: cookies.txt аккаунта YouTube — снимает возрастные ограничения,
|
||||
# «Sign in to confirm you're not a bot» и открывает приватные/платные видео.
|
||||
# Файл должен быть доступен на ЗАПИСЬ: yt-dlp обновляет в нём ротируемые куки.
|
||||
# Подробности — в README, раздел «Учётка YouTube (cookies)».
|
||||
# YTDLP_COOKIES=/data/cookies.txt
|
||||
|
||||
# Необязательно: дополнительные --extractor-args, через ";".
|
||||
# Помогает, когда YouTube не отдаёт форматы серверному IP:
|
||||
# YTDLP_EXTRACTOR_ARGS=youtube:player_client=default,web_safari
|
||||
|
||||
# Необязательно: каталог с локальной медиатекой (смонтируйте том).
|
||||
# LOCAL_MEDIA_DIR=/media/music
|
||||
|
||||
DEFAULT_VOLUME=60
|
||||
MAX_QUEUE_SIZE=500
|
||||
SEARCH_RESULT_LIMIT=10
|
||||
|
||||
# Через сколько секунд простоя бот выходит из голосового канала (0 — никогда).
|
||||
IDLE_TIMEOUT_SECONDS=300
|
||||
|
||||
# --------------------------------------------------------------- Доступ ----
|
||||
# false — управлять может любой участник сервера.
|
||||
# true — только владелец, ManageServer или роль DJ_ROLE_NAME.
|
||||
REQUIRE_DJ_ROLE=false
|
||||
DJ_ROLE_NAME=DJ
|
||||
|
||||
# ----------------------------------------------------------------- Прочее ---
|
||||
LOG_LEVEL=info
|
||||
NODE_ENV=production
|
||||
|
||||
Reference in New Issue
Block a user