A MaiMaiDX Telegram Bot
  • Go 88.9%
  • Python 8.9%
  • Shell 1.1%
  • Dockerfile 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Bingxin aaeaebb64b feat: 新增群管插件(/ban /mute /unban /unmute)
- /ban 封禁成员,默认永久;/mute 禁言成员,默认永久
- mute/ban 后可跟时长参数,支持 1d12h30m 组合或纯数字(分钟)
- 目标可通过回复消息或用户 ID 指定
- 双轨授权:Bot 管理员或本群管理员/群主均可使用
- 拒绝操作机器人自己、群管理员/群主及匿名管理员

Co-Authored-By: Claude <[email protected]>
2026-08-21 08:08:57 +00:00
.github/workflows ci: 迁移到 GitHub Actions,Docker 镜像推送到 GHCR 2026-08-04 10:20:29 +00:00
checkai feat: checkai 移除文本检测,只保留图片检测 2026-08-04 13:48:57 +00:00
data debug: 添加 unpin 插件调试日志 2026-04-26 01:52:44 +08:00
docs feat: 权限系统增强(黑名单/命令级 ACL/运行时 /perm) 2026-08-20 04:48:42 +00:00
internal feat: 新增群管插件(/ban /mute /unban /unmute) 2026-08-21 08:08:57 +00:00
vendor feat: 完善 Webhook 模式(HTTP 服务器 + secret token + HTTPS 支持) 2026-08-04 11:20:42 +00:00
.dockerignore feat: 添加 /checkai AI 生成检测插件(C2PA / SynthID / 文本水印) 2026-08-04 07:46:29 +00:00
.gitignore feat: 添加 /checkai AI 生成检测插件(C2PA / SynthID / 文本水印) 2026-08-04 07:46:29 +00:00
config.example.yaml feat: 权限系统增强(黑名单/命令级 ACL/运行时 /perm) 2026-08-20 04:48:42 +00:00
docker-compose.yml feat: 完善 Webhook 模式(HTTP 服务器 + secret token + HTTPS 支持) 2026-08-04 11:20:42 +00:00
Dockerfile feat: checkai 移除文本检测,只保留图片检测 2026-08-04 13:48:57 +00:00
go.mod feat: add JM PDF plugin 2026-06-26 13:10:38 +00:00
go.sum feat: add JM PDF plugin 2026-06-26 13:10:38 +00:00
main.go feat: 新增群管插件(/ban /mute /unban /unmute) 2026-08-21 08:08:57 +00:00
main_test.go feat: 完善 Webhook 模式(HTTP 服务器 + secret token + HTTPS 支持) 2026-08-04 11:20:42 +00:00
README.md feat: 新增群管插件(/ban /mute /unban /unmute) 2026-08-21 08:08:57 +00:00

BAKABOT

BAKABOT 是一个 Telegram Bot。所有功能均以内置插件实现当前包含 JM PDF 下载、二维码获取、群组置顶管理、群组管理和随机烂梗。

功能

  • JM PDF 下载 (/jm <id>):下载 JM album解码图片并返回 PDF 文件
  • 二维码获取 (/maicode):获取舞萌 DX / 中二节奏登录二维码
  • 群组置顶管理 (/unpin):管理群置顶,并可自动取消绑定频道自动转发消息的置顶
    • /unpin on - 开启自动取消置顶(会尽量删除置顶通知服务消息)
    • /unpin off - 关闭自动取消置顶
    • /unpin all - 取消所有历史置顶消息(仅群主)
  • 随机烂梗 (/6657):获取随机烂梗
  • 群组管理 (/ban /mute /unban /unmute):封禁/禁言群成员,支持回复消息或指定用户 ID时长可省略默认永久
    • /mute 30m/mute 1d12h - 支持组合时长;纯数字按分钟计
  • Guest Mode (@Bot /指令):未加入的聊天中也可用 @Bot 召唤 Bot以 guest 消息回复,与普通指令保持一致
  • AI 生成检测 (/checkai):对图片并行运行 C2PA、Meta Content Seal、OpenAI Content Provenance 检测器,汇总判定结果
  • 权限管理:支持管理员和用户/群组白名单配置

Guest Mode

Guest Mode 允许 Bot 在未加入的私聊、群组或超群中,被用户通过 @Bot用户名 召唤后直接以 guest 消息形式回复,而无需加入该聊天。

开启方式:

  1. 在 Telegram 中找到 @BotFather → 打开 Bot 设置 MiniApp → 在设置中开启 Guest Mode
  2. 重启本 Bot启动日志会显示 Guest Mode 已启用 或提示尚未开启。

行为说明:

  • 用户在任何受支持聊天中用 @Bot用户名 召唤(或回复 Bot 的 guest 消息Bot 会收到 guest_message 更新并按插件逻辑回复。
  • 带命令时(@Bot /checkai@Bot /6657)按注册表路由到对应插件,与普通指令保持一致;仅 @Bot 无命令时回复随机烂梗。
  • /unpin/maicode 不适用于 Guest Mode前者依赖机器人成为群成员后者需以图片回复。
  • guest 回复内容与普通命令共享插件的权限配置(permission.allowed_users / permission.allowed_groups),无权限时不会回复内容。
  • 目前支持 Guest Mode 的插件:随机烂梗sb6657)、AI 生成检测checkai)。

快速开始

Docker Compose

git clone https://git.origami.pub/Bingxin/maimaibot.git
cd maimaibot
cp config.example.yaml config.yaml
# 编辑 config.yaml填入 Telegram Bot Token 和插件配置
docker-compose up -d

手动运行

环境要求:

  • Go 1.23 或更高版本
go mod download
go build -o bakabot .
./bakabot config.yaml

配置

配置文件使用 YAML 格式,参考 config.example.yaml

telegram:
  token: "YOUR_BOT_TOKEN_HERE"
  use_webhook: false

permission:
  admins:
    - 123456789
  allowed_users: []
  allowed_groups: []

plugins:
  jm:
    work_dir: "data/jm"
    domains: []
    timeout_seconds: 600
    request_timeout_seconds: 30
    max_concurrency: 4
    retry_times: 2
    max_pages: 300

  maicode:
    api_url: "http://127.0.0.1:5000"
    token: "maiqr"
    conflict_window_minutes: 10

  unpin:
    state_file: "data/unpin.yaml"

plugins.jm.domains 留空时,插件会尝试从 JM 永久在线入口解析当前网页端域名,并使用内置域名兜底。如果你的网络环境需要固定域名或代理网关,可以在这里填写域名列表。

Webhook 模式

默认使用 polling 模式(机器人主动向 Telegram 拉取更新)。需要改用 webhook 模式Telegram 主动把更新推送到你的服务器)时,按以下步骤配置。

1. 配置 config.yaml

telegram:
  token: "YOUR_BOT_TOKEN_HERE"
  use_webhook: true
  webhook_url: "https://your-domain.com/webhook"  # 公网 HTTPS 地址
  webhook_listen: "0.0.0.0:8080"                  # 本地监听地址,默认 :8080
  webhook_path: "/webhook"                        # 本地路径,默认 /webhook需与 webhook_url 路径一致
  webhook_secret: "一个足够长的随机字符串"         # 强烈建议配置,防止伪造更新请求

可选字段:

  • webhook_cert_file / webhook_key_file:两者都配置时 Bot 直接以 HTTPS 对外服务;自签证书会一并上传给 Telegram 用于校验。
  • 两者留空时 Bot 以 HTTP 监听本地端口,需要由 nginx / Caddy 等反向代理提供 HTTPS。

2. 对外提供 HTTPS

Telegram 只接受 HTTPS 的 webhook 地址(127.0.0.1localhost 等本机地址除外)。两种常见方式任选其一:

方式 A反向代理推荐使用 Let's Encrypt 等免费证书)

nginx 示例:

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location /webhook {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

方式 BBot 直接监听 HTTPS自签证书

openssl req -x509 -newkey rsa:2048 -nodes -keyout bot.key -out bot.crt -days 365 -subj "/CN=your-domain.com"

webhook_cert_file / webhook_key_file 指向生成的 bot.crt / bot.key 后重启即可,证书会在设置 webhook 时自动上传给 Telegram 校验。

3. Docker

Docker 部署时需映射 webhook 端口(如需要证书则挂载证书文件),参考 docker-compose.yml。启动后可用 curl https://your-domain.com/healthz 验证服务是否在线。

提示:从 webhook 模式切换回 polling 模式时,机器人会自动调用 deleteWebhook 清理配置,无需手动操作。

使用

JM PDF 下载

向机器人发送:

/jm 123456

机器人会下载对应 album 的所有章节图片,按 JM 的分图规则还原图片顺序,生成 PDF 后以文件形式回复。

二维码获取

向机器人发送:

/maicode

机器人会返回舞萌 DX / 中二节奏登录二维码,并在短时间内被不同用户重复获取时提示冲突风险。

群组置顶管理

在群组中使用:

/unpin on
/unpin off
/unpin all

权限要求:

  • /unpin on/off:需要群管理员权限
  • /unpin all:仅群主可用

开发

内置插件统一放在 internal/plugin/ 下,并实现统一的插件接口:

type Plugin interface {
    Name() string
    Commands() []string
    Handle(bot *tgbotapi.BotAPI, update tgbotapi.Update)
}

新增插件后,在 main.go 中注册即可。

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

AI 生成检测

只检测图片:

/checkai                  + 回复图片或附带图片   —— 检测图片

机器人会并行运行以下检测器并汇总结果:

检测器 类型 说明
C2PA 标准库 图片 读取并验证 C2PA / Content Credentials 元数据,检查 AI 生成声明
Meta Content Seal内容凭证 图片 基于 C2PA 内容凭证验证签名与 AI 声明
OpenAI Content Provenance 图片 调用 OpenAI 官方 Content Provenance API 检测 C2PA / SynthID 信号(需配置 openai_api_key

注意:

  • C2PA / 内容凭证只能检出携带了元数据的图片。
  • OpenAI Content Provenance 只能识别 OpenAI 自家生成的信号;not_detected 不代表内容一定是真人创作(可能来自其他公司的模型,或元数据/水印被剥离)。

⚙️ 并发控制:同时最多允许 max_concurrent(默认 2个检测任务在跑超出时会立即回复"当前已有检测任务在运行,请稍后再试",避免连续 /checkai 时多个 Python 子进程叠加大幅拖慢服务器。仍嫌慢可调小该值。

安装检测环境

插件通过 Python 脚本调用检测库,需要先安装:

./checkai/install.sh

然后在 config.yaml 中启用:

plugins:
  checkai:
    venv_python: "checkai/venv/bin/python"
    openai_api_key: "sk-..."   # OpenAI Content Provenance 检测;留空则显示"未配置"

完整配置项见 config.example.yaml 中的 plugins.checkai 段。

Docker

Dockerfile 已内置 Python 检测环境:

docker compose build
docker compose up -d

config.yaml 中把 venv_python 设为 checkai/venv/bin/python 即可。

权限管理

支持管理员、用户/群组白名单、黑名单、命令级 ACL 和运行时热更新(/perm)。详细说明见 docs/permission.md

permission:
  admins:
    - 123456789
  allowed_users: []
  allowed_groups: []
  deny_users: []
  deny_groups: []
  command_acl:
    jm:
      - 123456789