Sign inSign up

dddddluo/absboss

By dddddluo

•Updated 5 months ago

通过 Telegram 机器人管理 Audiobookshelf 用户。

Image
0

1.6K

dddddluo/absboss repository overview

通过 Telegram 机器人管理 Audiobookshelf 用户。

该机器人适合 Audiobookshelf 站点管理员使用,可提供用户自助面板、账号创建与绑定、签到积分、兑换码、续期、注册队列、换绑审批、管理员面板和数据库备份等能力。

⁠功能特性

  • Telegram 私聊用户面板:查看线路、个人信息、活跃时间、签到、兑换码、创建/重置/删除账号。
  • Audiobookshelf 用户管理:支持创建账号、绑定已有账号、账号换绑申请与管理员审批。
  • 管理员面板:管理员可通过 /pp 或 /pp tgid 管理指定用户。
  • 开放注册控制:支持注册名额,名额用完后自动关闭开放注册。
  • 兑换码系统:支持注册码、续期码、白名单码。
  • 定时任务:每日活跃保号、积分自动续期。
  • 数据备份:支持本地 SQL 备份与备份文件保留数量控制。
  • MySQL 存储:适合容器化长期运行。

⁠镜像

docker pull dddddluo/absboss:latest

⁠快速开始

推荐使用 Docker Compose 同时启动 MySQL 和机器人服务。

⁠1. 准备 .env

创建 .env 文件:

BOT_TOKEN=123456:replace_me
OWNER_TG_ID=123456789
ADMIN_TG_IDS=123456789,987654321

MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASE=audiobookshelf_bot
MYSQL_PORT=33306
MYSQL_DSN=mysql+aiomysql://root:123456@mysql:3306/audiobookshelf_bot?charset=utf8mb4

ABS_BASE_URL=https://abs.example.com
ABS_API_TOKEN=replace_me

BOT_TIMEZONE=Asia/Shanghai
LOG_LEVEL=INFO
LOG_FILE=logs/app.log
LOG_MAX_BYTES=10485760
LOG_BACKUP_COUNT=5
BACKUP_DIR=backups
BACKUP_KEEP_COUNT=7
REGISTRATION_QUEUE_DELAY_SECONDS=2
⁠2. 准备 docker-compose.yml
services:
  mysql:
    image: mysql:8.0
    container_name: absboos-db
    restart: unless-stopped
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
      MYSQL_DATABASE: ${MYSQL_DATABASE:-audiobookshelf_bot}
    ports:
      - "${MYSQL_PORT:-33306}:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$${MYSQL_ROOT_PASSWORD}"]
      interval: 10s
      timeout: 5s
      retries: 5

  absboss:
    image: dddddluo/absboss:latest
    container_name: absboss
    restart: unless-stopped
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      BOT_TOKEN: ${BOT_TOKEN:?set BOT_TOKEN in .env}
      OWNER_TG_ID: ${OWNER_TG_ID:-}
      ADMIN_TG_IDS: ${ADMIN_TG_IDS:?set ADMIN_TG_IDS in .env}
      ABS_BASE_URL: ${ABS_BASE_URL:?set ABS_BASE_URL in .env}
      ABS_API_TOKEN: ${ABS_API_TOKEN:?set ABS_API_TOKEN in .env}
      BOT_TIMEZONE: ${BOT_TIMEZONE:-Asia/Shanghai}
      LOG_LEVEL: ${LOG_LEVEL:-INFO}
      LOG_FILE: ${LOG_FILE:-logs/app.log}
      LOG_MAX_BYTES: ${LOG_MAX_BYTES:-10485760}
      LOG_BACKUP_COUNT: ${LOG_BACKUP_COUNT:-5}
      BACKUP_DIR: ${BACKUP_DIR:-backups}
      BACKUP_KEEP_COUNT: ${BACKUP_KEEP_COUNT:-7}
      REGISTRATION_QUEUE_DELAY_SECONDS: ${REGISTRATION_QUEUE_DELAY_SECONDS:-2}
      MYSQL_DSN: ${MYSQL_DSN:?set MYSQL_DSN in .env}
    volumes:
      - ./logs:/app/logs
      - ./backups:/app/backups

volumes:
  mysql_data:
⁠3. 启动
docker compose up -d

查看日志:

docker logs -f absboss

停止服务:

docker compose down

⁠首次初始化

首次启动后,请使用 OWNER_TG_ID 对应的 Telegram 用户向机器人私聊发送:

/setup

然后根据向导完成主群组、注册天数、签到积分等运行期配置。初始化完成后,机器人即可正常使用。

⁠环境变量

变量必填默认值说明
BOT_TOKEN是无BotFather 创建的 Telegram bot token。
OWNER_TG_ID建议空机器人所有者 Telegram ID,用于执行 /setup 初始化向导,也会被视为管理员。
ADMIN_TG_IDS是无管理员 Telegram ID,多个用英文逗号分隔。
MYSQL_DSN是无MySQL 连接串。Compose 内置 MySQL 时主机名通常为 mysql。
ABS_BASE_URL是无Audiobookshelf 服务地址,例如 https://abs.example.com。
ABS_API_TOKEN是无Audiobookshelf 管理员 API token。
BOT_TIMEZONE否Asia/Shanghai定时任务使用的时区。
LOG_LEVEL否INFO日志级别。
LOG_FILE否logs/app.log容器内日志文件路径。
LOG_MAX_BYTES否10485760单个日志文件最大字节数。
LOG_BACKUP_COUNT否5日志轮转保留数量。
BACKUP_DIR否backups容器内数据库备份目录。
BACKUP_KEEP_COUNT否7数据库备份保留数量。
REGISTRATION_QUEUE_DELAY_SECONDS否2注册队列处理延迟秒数。

⁠数据持久化

建议至少持久化以下数据:

  • MySQL 数据:mysql_data:/var/lib/mysql
  • 机器人日志:./logs:/app/logs
  • 数据库备份:./backups:/app/backups

如果使用外部 MySQL,可以删除 Compose 中的 mysql 服务,并将 MYSQL_DSN 改为外部数据库连接串。

连接宿主机 MySQL 时,通常可以使用:

MYSQL_DSN=mysql+aiomysql://absbot:[email protected]:3306/audiobookshelf_bot?charset=utf8mb4

⁠更新镜像

docker compose pull
docker compose down absboss
docker compose up -d

⁠常用命令

# 启动
docker compose up -d

# 查看运行状态
docker compose ps

# 查看机器人日志
docker logs -f absboss

# 重启机器人
docker compose restart absboss

# 停止全部服务
docker compose down

⁠注意事项

  • BOT_TOKEN 和 ABS_API_TOKEN 是敏感信息,请不要公开提交到仓库或截图中。
  • 如果机器人无法连接数据库,请确认 MYSQL_DSN 中的用户名、密码、数据库名和主机名是否与 Compose 配置一致。
  • 如果使用 Compose 内置 MySQL,MYSQL_DSN 中的主机名应使用服务名 mysql,不要使用 127.0.0.1。
  • 容器会在启动时连接数据库并运行所需表结构迁移。

Tag summary

Content type

Image

Digest

sha256:23ca7beaa…

Size

82.3 MB

Last updated

5 months ago

docker pull dddddluo/absboss