#!/usr/bin/env bash # register.sh — registra un nuevo bot en el servidor Matrix via Synapse admin API # # Uso: # ./dev-scripts/register.sh [displayname] [env-var-name] # # Ejemplos: # ./dev-scripts/register.sh assistant-bot "Assistant" MATRIX_TOKEN_ASSISTANT # ./dev-scripts/register.sh devops-bot "DevOps Agent" MATRIX_TOKEN_DEVOPS # # Requiere en .env: # MATRIX_ADMIN_TOKEN=syt_... # MATRIX_HOMESERVER=https://... source "$(dirname "$0")/_common.sh" load_env need_arg "${1:-}" USERNAME="$1" DISPLAYNAME="${2:-$USERNAME}" ENV_VAR="${3:-MATRIX_TOKEN_$(echo "$USERNAME" | tr '[:lower:]-' '[:upper:]_' | sed 's/_BOT$//')}" [[ -n "${MATRIX_ADMIN_TOKEN:-}" ]] || fail "MATRIX_ADMIN_TOKEN no está en .env" [[ -n "${MATRIX_HOMESERVER:-}" ]] || fail "MATRIX_HOMESERVER no está en .env" info "Registrando @${USERNAME}:${MATRIX_SERVER_NAME:-$MATRIX_HOMESERVER}..." echo "" # Ejecutar cmd/register y capturar su output completo OUTPUT=$("$GO" run ./cmd/register \ --homeserver "$MATRIX_HOMESERVER" \ --username "$USERNAME" \ --displayname "$DISPLAYNAME" \ --env-var "$ENV_VAR" 2>&1) || fail "cmd/register falló:\n$OUTPUT" echo "$OUTPUT" echo "" # Extraer la línea ENV_VAR=token del output TOKEN_LINE=$(echo "$OUTPUT" | grep "^${ENV_VAR}=") [[ -n "$TOKEN_LINE" ]] || fail "No se encontró '${ENV_VAR}=' en el output de cmd/register" TOKEN=$(echo "$TOKEN_LINE" | cut -d= -f2-) [[ -n "$TOKEN" ]] || fail "Token vacío para $ENV_VAR" # Actualizar .env — reemplazar si ya existe, añadir si no if grep -q "^${ENV_VAR}=" .env; then awk -v key="$ENV_VAR" -v val="$TOKEN" \ 'index($0, key "=") == 1 { print key "=" val; next } { print }' \ .env > /tmp/_env_tmp && mv /tmp/_env_tmp .env ok "$ENV_VAR actualizado en .env" else printf '\n%s=%s\n' "$ENV_VAR" "$TOKEN" >> .env ok "$ENV_VAR añadido a .env" fi echo "" dim " Arranca el bot con: ./dev-scripts/start.sh $USERNAME"