/Amiya-Bot

《明日方舟》QQ聊天机器人

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Amiya-Bot

基于 mirai-consolemirai-api-http 的QQ聊天机器人
本质为一个 websocket 客户端

名字源于游戏 《明日方舟》 的女主角"阿米娅",其主题与核心功能也和游戏相关。

「博士,能再见到您……真是太好了。今后我们同行的路还很长,所以,请您多多关照!」 -- 阿米娅

共生项目

声明

  • Amiya-Bot 是在《明日方舟》爱好者群体中诞生的以便捷功能为主的聊天机器人
  • 本项目拒绝加入与金钱相关的功能,并在遵守法律法规且符合社会主义核心价值观的前提下使用
  • 创建者需承诺不得使用本项目进行任何形式的盈利行为
  • 本项目不承担因违反上述所带来的一切后果

鸣谢

部分功能的信息需要从各大渠道获取,特鸣谢以下网站和项目

准备

  • 想要创建自己的 Amiya,建议拥有一定编程基础,否则以下说明将难以理解
  • 建议先了解 mirai-console 以及其插件 mirai-api-http 以便理解源码
  • 需要 python 3.7 ~ 3.8
  • 需要 Mysql 8.0+

基础群组功能

Amiya 的基础功能可以通过在群组里向 Amiya 发送Amiya有什么功能来获得功能指引

  • 群管理员功能
  • 信赖值与心情系统
  • 查询干员资料
    • 基础资料
    • 精英化材料
    • 技能专精材料
    • 技能数据
    • 档案
    • 语音资料
    • 皮肤资料
  • 查询敌方单位资料
  • 查询材料怎么获得
  • 理智恢复提醒
  • 合成玉计算
  • 公招查询
    • 普通标签查询
    • 图像识别
  • 模拟抽卡
    • 详情模式
    • 略缩模式
  • 查看明日方舟微博动态
    • 查询微博
    • 自动推送新微博

管理员功能

Amiya 的管理功能仅限私聊,且只有管理员能够使用 Amiya 的私聊

  • 发送重启关键字,Amiya 将会重启
  • 发送更新全部关键字,Amiya 即开始自动更新数据
  • 发送更新图片关键字,Amiya 即开始自动更新图片资源
  • 群发公告
    • 发送公告关键字,待 Amiya 回复确认后,再发送完整的文字公告,此后 Amiya 将向所有群组发送该公告
  • 屏蔽用户
    • 发送屏蔽 + QQ号,Amiya 会屏蔽该用户,此后 Amiya 将不会再回应该用户的消息

注意

本项目代码含有以下特点

  • 注释较少(会慢慢补充)
  • 通过遍历文件的类加载方法
  • 通过线程而非协程的异步实现方式
  • 强制重启进程

开始使用

  1. 必须先前往仓库 Amiya-Bot-resource 并根据说明完成数据导入和前序工作
  2. 安装 python 依赖
pip install -r requirements.txt
  1. 配置config.json
{
  // 机器人 QQ 号
  "self_id": 1515361402,
  // 管理员 QQ 号
  "admin_id": 826197021,
  "server": {
    // mirai-api-http 服务配置
    "server_ip": "127.0.0.1",
    "server_port": 8060,
    "auth_key": "AMIYARESTART"
  },
  "database": {
    // 数据库配置
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "amiya520",
    "db": "amiya"
  },
  "baidu_cloud": {
    // 百度智能云配置
    "enable": true,
    "app_id": "2152****",
    "api_key": "MM5pPVBBj***************",
    "secret_key": "XRfGzEZufj1MdNKyz***************"
  },
  "message": {
    // 消息指令的频率限制
    "limit": {
      "seconds": 10,
      "max_count": 3
    },
    // 文字回复的最大字符长度,超出则会转为图片发送
    "reply_text_max_length": 100
  },
  "close_beta": {
    // 是否启用封闭测试
    "enable": false,
    "group_id": 852191455
  }
}
  1. 执行首次更新,导入所有数据和资源(重要)
    • 更新会扫描所有未保存的数据,首次更新视网速情况需要一定的耗时
    • updateAllData.py会删除所有历史数据并重新执行更新,后续视需要也可以重复执行
python updateData.py
  1. 启动 Amiya 入口程序
python amiya.py
  1. 短暂的启动过程后,若控制台显示了 websocket 连接成功,表示 Amiya 启动成功
...
websocket connecting success
  1. 现在,唤醒你的 Amiya 吧!

功能测试方式

  • 快速启动
    • 不需要启动mirai-console
    • 直接运行脚本quickStart.py并带上参数Test
    • 然后在控制台模拟交互
python quickStart.py Test
  • 实际环境的封闭测试
    • 配置config.json里的封闭测试相关项
    • 再通过上述步骤启动 Amiya
    • 之后,Amiya 仅会回应封闭测试指定的群
{
  "close_beta": {
    // 启用封闭测试
    "enable": true,
    // 指定测试群号
    "group_id": 852191455
  }
}

功能使用注意

  • 禁言会导致 Amiya 退群!!!
  • 要使用抽卡功能,请在更新数据后,在数据表t_pool内维护卡池信息
    • 亦可导入资源文件t_pool.sql快速获取历史卡池
  • 自然语言处理方法和公招图像识别需要调用 百度智能云 的接口,如需使用需要自行申请并配置config.json
{
  "baidu_cloud": {
    // 是否启用百度智能云接口
    "enable": false,
    // APP ID
    "app_id": "",
    // API KEY
    "api_key": "",
    // SECRET KEY
    "secret_key": ""
  }
}
  • 为了防止打招呼时同时唤起了其他机器人回复,而其他机器人又触发了 Amiya 的回复导致循环发生,造成不可控的局面,请务必设置消息限制,在被其他机器人触发循环时及时制止
{
  "message": {
    // 此处示例为 10 秒内不能超过 3 次指令
    "limit": {
      "seconds": 10,
      "max_count": 3
    }
  }
}

如何维护

推荐搭建 Amiya-Bot-console 获得更好的可视化维护界面
否则部分数据维护可能需要自行到数据库修改

  • Amiya 带有自动维护功能,会在每天凌晨4点执行以下操作:
    • 重置签到和心情值
    • 清空消息及图片记录
    • 清除图片缓存
  • 干员数据请使用管理员功能执行更新
  • 卡池目前需要手动到数据表t_pool维护,维护好的卡池可以通过 Amiya 切换卡池的功能进行更换
    • Tips: Pickup 的干员可以是虚构的不存在的干员,因为抽卡命中 Pickup 时,是直接使用 Pickup 字段的干员而非从干员表获取
-- 新卡池数据插入语句示例
INSERT INTO t_pool (pool_name, pickup_6, pickup_5, pickup_4, limit_pool)
VALUES ('银灰色的荣耀',
        '银灰',
        '初雪,崖心',
        '角峰',
        0)
  • 在有干员增加的版本,Amiya 在执行更新前,需手动配置数据表t_operator_gacha_config添加无法通过抽卡获得的干员,否则更新新数据后,干员可能会被归类到可获取的干员,造成抽卡异常产出
  • 部分配置改动后需重启 Amiya 后生效,手动重启 Amiya 只需要重新运行amiya.py即可
    • 或者使用管理员命令重启

贡献

  • 本项目欢迎 dalao 加入,拯救萌新,刻不容缓!
  • 如果有更多的建议或 BUG 反馈,请提交到issue或官方QQ群362165038
  • 如果你遇到项目部署问题,可以加入开发群852191455反馈
  • 你的star将会成为 Amiya 成长的经验值

TODO

  • TODO
  • 与明日方舟主题不相关的功能