Skip to content

g1331/xiaomai-bot

Repository files navigation

xiaomai-bot

一个以Graia Ariadne框架为基础的 QQ 机器人

若您在使用过程中发现了bug或有一些建议,欢迎提出ISSUE、PR或加入 QQ交流群:749094683


状态

Alt

功能简览:

注意!当前BOT还有许多不完善的地方,处于持续开发更新的状态~

  • 目前主要维护的功能:

    • 战地一 战绩查询
    • 战地一 服务器管理
    • 其余功能请查看modules文件夹
  • TODO:

    • 分群组的alias自定义指令前缀处理
    • 抄其他bot的功能

简易搭建:

  1. python3.10+环境, Mirai:MCL2.1.0 + 配置MAH

  2. 安装环境依赖(请用推荐方式安装poetry )

    使用poetry的虚拟环境请直接在bot根目录终端执行:

    poetry install
    

    或者其他虚拟环境(关闭poetry的创建虚拟环境:poetry config virtualenvs.create false)

  3. 打开config_demo.yaml文件填写配置信息,填写好后请改名为config.yaml再启动

  4. 启动bot在bot根目录下使用poetry run python main.py

  5. 根据报错缺啥弄啥吧(

使用环境变量初始化

变量名称 解释 示例
bot_accounts bot所使用的账户使用,做分割 1111111111,222222222
default_account 默认bot账户 1111111111
Master bot管理者账户 3333333333
mirai_host mah服务器 http://localhost:8080
verify_key mah服务器验证token 123456789
test_group 发送调试信息的群组 5555555555
db_link sqlite3数据位置 sqlite+aiosqlite:///data.db
docker 及 docker-compose 请使用环境变量进行配置

使用Docker部署

请先安装docker 如使用环境变量控制sqlite3位置请同时修改部署文件或指令的映射路径

git clone https://github.com/g1331/xiaomai-bot                                                          # 下载项目
cd xiaomai-bot                                                                                          # 进入项目目录
docker build -t xiaomai-bot .                                                                           # 构建docker镜像
mv config_demo.yaml config.yaml                                                                         # 请修改配置文件
sqlite3 /xiaomai-bot/config/data.db                                                                     # 创建sqlite数据库
sqlite> .database                                                                                       # 查看数据库
sqlite> .quit                                                                                           # 退出sqlite
docker run -d --name xiaomai-bot\                                                                       # 容器名
      --net=host \                                                                                      # 使用主机网络
      -v /xiaomai-bot/config/config.yaml:/xiaomai-bot/config.yaml \                                     # 挂载配置文件
      -v /xiaomai-bot/config/data.db:/xiaomai-bot/data.db \                                             # 挂载数据库
      -v /xiaomai-bot/data/battlefield:/xiaomai-bot/data/battlefield/ \                                 # 挂载战地一机器人资源
      -v /xiaomai-bot/imgs/random_picture:/xiaomai-bot/modules/self_contained/random_picture/imgs/ \    # 挂载随机图片
      -v /xiaomai-bot/imgs/random_wife:xiaomai-bot/modules/self_contained/random_wife/imgs/ \           # 挂载随机老婆图片
      -v /xiaomai-bot/imgs/random_dragon:xiaomai-bot/modules/self_contained/random_dragon/imgs/ \       # 挂载随机龙图图片
#      -e bot_accounts=bot所使用的账户使用,做分割
#      -e default_account=默认bot账户
#      -e Master=bot管理者账户
#      -e mirai_host=mah服务器
#      -e verify_key=mah服务器验证token
#      -e test_group=发送调试信息的群组
#      -e db_link=sqlite3数据位置
      xiaomai-bot                                                                                       # 运行容器

使用docker-compose部署

请先安装docker与docker-compose 如使用环境变量控制sqlite3位置请同时修改部署文件或指令的映射路径

git clone https://github.com/g1331/xiaomai-bot                                                          # 下载项目
cd xiaomai-bot                                                                                          # 进入项目目录
sqlite3 /xiaomai-bot/config/data.db                                                                     # 创建sqlite数据库
sqlite> .database                                                                                       # 查看数据库
sqlite> .quit                                                                                           # 退出
mv config_demo.yaml config.yaml                                                                         # 请修改配置文件,以及docker-compose.yml中的挂载路径
docker-compose up -d                                                                                    # 构建并运行容器

V3项目结构与核心内容

项目结构:


XiaoMaiBot

├─── core               核心-机器人配置/信息

│  ├─── orm             对象关系映射-进行数据库处理

│  │  ├─── __init__.py

│  │  └─── tables.py    内置表

│  ├─── models          辅助控制组件

│  │  └─── ...

│  ├─── bot.py          机器人核心代码-负责统一调度资源

│  ├─── config.py       机器人配置访问接口

│  ├─── control.py      控制组件-鉴权、开关前置、冷却

│  └─── ...

├─── data               存放数据文件

│  └─── ...

├─── resources          存放项目资源

│  └─── ...

├─── utils              存放运行工具

│  └─── ...

├─── log                机器人日志目录

│  ├─── xxxx-xx-xx

│  │  ├─── common.log   常规日志

│  │  └─── error.log    错误日志

│  └─── ...

├─── modules            机器人插件目录

│  ├─── required        必须插件

│  │  └─── ...

│  ├─── self_contained  内置插件

│  │  └─── ...

│  └─── ...

├─── config.yaml        机器人主配置文件

├─── main.py            应用执行入口

├─── pyproject.toml     项目依赖关系和打包信息

├─── poetry.lock        项目依赖

├─── README.md          项目说明文件

└─── ...  

可视化图表

核心(core):

orm:

  • AsyncORM

配置:

bot基础配置:

  • bot_accounts:[]
  • default_account
  • master_qq
  • admins:[]
  • host_url
  • verify_key

控制组件(control):

Permission 权限判断:

  • 成员权限判断
  • 群权限判断

Frequency频率限制:

  • current_weight/total_weight

Config配置判断:

  • require(需要的配置信息)

Distribute多账户消息分发:

  • 分发require

    多账户响应模式:

    • 随机响应(默认)
    • 指定bot响应(指定模式)

Function功能开关:

  • 开关判断->Function.require("模组名")

插件结构:

metadata.json:

{
    "level": "插件等级1/2/3",
    "name": "文件名",
    "display_name": "显示名字",
    "version": "0.0.1",
    "authors": ["作者"],
    "description": "描述",
    "usage": ["用法"],
    "example": ["例子"],
    "default_switch": true,
    "default_notice": false
}

modules:

modules = {
    "module_name": {
        "groups": {
            "group_id": {
                "switch": bool,
                "notice": bool
            }
        },
        "available": bool
    }
}

内置插件(modules.required):

auto_upgrade(自动检测更新):

  • 自动检测Github仓库的更新
  • 手动指令执行git pull

saya_manager(插件管理):

  • 插件列表
  • 已加载插件
  • 未加载插件
  • 加载插件
  • 卸载插件
  • 重载插件
  • 开启插件
  • 关闭插件

perm_manager(权限管理):

管理/查询权限

  • 更改用户权限
  • 查询用户权限
  • 更改群权限
  • 查询群权限
  • 增删BOT管理

response_manager(响应管理):

管理/查询多账户响应模式

  • 查询BOT列表
  • 查询指定群的BOT
  • 设定多账户响应模式 随机/指定bot
  • 设定指定响应bot

helper(帮助菜单/功能管理):

生成帮助菜单,打开/关闭群功能

  • 帮助
  • 开启功能
  • 关闭功能

status(运行状态):

  • 查询bot运行状态

鸣谢 & 相关项目

  • mirai & mirai-console: 一个在全平台下运行,提供 QQ Android 和 TIM PC 协议支持的高效率机器人框架

感谢 GraiaProject 带来的这些项目:

  • Broadcast Control: 高性能, 高可扩展性,设计简洁,基于 asyncio 的事件系统
  • Ariadne: 一个设计精巧, 协议实现完备的, 基于 mirai-api-http v2 的即时聊天软件自动化框架
  • Saya 简洁的模块管理系统
  • Scheduler: 简洁的基于 asyncio 的定时任务实现
  • Application: Ariadne 的前身,一个设计精巧, 协议实现完备的, 基于 mirai-api-http 的即时聊天软件自动化框架

本BOT在开发中参考了如下项目:

Stargazers over time

Stargazers over time