Skip to content

Latest commit

 

History

History
266 lines (205 loc) · 10.7 KB

README.md

File metadata and controls

266 lines (205 loc) · 10.7 KB

OrangeMilk-Bot

基于mirai实现,运行在JVM平台的机器人Orange-Milkmirai仓库地址

mirai 是一个在全平台下运行,提供 QQ 多种设备协议支持的高效率机器人库

目录

一、简介

懒得写,不写了

二、部署

  1. 开发环境:IntelliJ IDEA 越新越好

  2. 依赖环境:

序号 环境
1 Java 11+
2 node.js (最新LTS即可)
3 npm

(一) 通过源码:

1. clone本仓库源码

2. 新建SpringBoot配置文件

  1. /src/main/resources/下新建空白文件application.yml。或者在项目根目录下直接新建空白文件application.yml
    如果你了解过SpringBoot,也可以根据自己的了解放在其他合适的位置。
  2. 在这个文件中放入配置项目
# ====机器人账户配置====
bot:
  # QQ号、密码
  qq: 这里替换成机器人的QQ号
  password: 这里替换成密码
  # 机器人主人的账号(列表),若仅有一个则删去一个
  # master的作用是当机器人启动之后,为主人发一条消息
  # 并且用于测试的监听器只为主人绑定(当然你可以手动修改逻辑)
  masters: #可选
    - 主人1的QQ号
    - 主人2的QQ号 #可选

# ====机器人应用配置====
botapp:
#  help: "./helps" # 被注释时默认为./helps,存放帮助文本的目录
#  cacheDir: 这里放置缓存目录,此行被注释的时候默认为工作目录下的app_cache文件夹
#  如果你想指定其他位置,请去掉上一行的注释,填入你想要的位置,一般不用改动

# ====媒体====
media:
  sing: # 机器人唱歌功能所需的音频文件目录,此目录下或其子目录存放mp3,amr等格式的文件。详见下文
#    path: # 此行被注释时默认为./sings,若无会在机器人运行时自动创建

  music:
    kugou: # 请将signatureGetter替换成酷狗signature签名生成文件的执行命令,如node /path/to/kugou.js
      signatureGetter: "node 酷狗js文件" # 已为大家提供,在本仓库的/data/kugou.js。若不填,则无法使用酷狗搜歌
    netease: # 请将apiurl替换为网易云API的地址。搭建教程:https://github.com/Binaryify/NeteaseCloudMusicApi
      apiurl: "自己搭建的网易云API的URL地址" # 若不填,则无法使用网易云搜歌

# ====游戏====
game:
  idiom: # 一、成语接龙
    repo: "成语接龙成语库路径"
    repoCharset: "GBK" # 这里是成语库的字符集,如果你采用本项目提供的5万成语库,请填写GBK。注释此行默认为GBK

本项目所需的配置项就这些了,对于其他的配置比如SpringBoot的配置请参考SpringBoot相关文章

三、添加功能

自定义监听器,与mirai一致,请查阅 mirai-core文档

本项目中监听器均在listeners/

四、功能特色

1. 带文案的语音唱歌

注意上文yml中的media.sing,要求填入一个目录。下称“歌曲目录”
这个目录(或子目录)下应存放歌曲文件(Bot 只扫描 *.mp3*.amr)

提示:机器人启动的时候会遍历这个文件夹及其子文件夹下的所有文件, 因此放进去的歌曲只要后缀名为*.mp3*.amr都可以被扫描到。 使用者可以放心地分层整理你的歌曲文件

★注意: 如果你只需要Bot发语音唱歌不需要文案功能。则本小节中下方的内容可跳过。 您只需要根据上方的提示将歌曲文件放置好并配置好即可。

除此之外,如果你的歌曲想拥有文案功能,还需要两种配置文件:*.template*.json(或*.aps)

文件后缀 数量 要求位置 作用
*.template 只允许一个
若存在多个则只采用所找到的第一个
歌曲目录 根目录 Bot发送文件时的模板,
储存一个kotlin格式化字符串
*.json
(或*.aps)
数量不限
最终Bot会自动解析所有文件
歌曲目录下 任意位置 储存歌曲的信息和文案,供Bot解析

本功能中*.json*.aps是同样的含义,推荐采用*.json,因为多数编辑器会对*.json会有语法高亮。而对于Bot来说这两钟后缀名的效果是一样的

文件示例一:(*.json*.aps歌曲文案信息配置)

目前最外层json只需要一个"sings"字段,类型为列表,列表存歌曲信息

由于这个配置文件是不限数目和位置的,因此我建议您可以每类文件夹都放一个json。使文件夹变得有条理,易于管理和迭代。

{
    "sings": [
        {
            "name": "歌曲名",
            "file": ["歌曲.mp3"], // 表示这段配置对当前目录 ./歌曲.mp3 生效
            "tag": "歌曲TAG",
            "sg": "歌手",
            "appreciation": "歌曲赏析(文案)"
        },
        {
            "name": "鹿鸣呦呦",
            "file": ["../鹿鸣呦呦.mp3", "../鹿鸣呦呦2.mp3"], // 支持多段音乐采用相同的后缀名
            "tag": "新国风",
            "sg": "锦零",
            "appreciation": "1=G\n曾追夕阳的少年,三分醉意留心间。"
        },
        {
            "name": "一人皓月",
            "file": ["./path/锦零一人皓月.mp3"], // 同样是相对与当前配置文件的路径
            "tag": "新国风",
            "sg": "锦零",
            "appreciation": "1=♭E\n我见一人如皓月,婉转风姿两袖间。"
        }
    ]
}

文件示例二:(*.template文案模板)

【%1$s】SG.%2$s

%3$s%

其中: %1$s会被解析成*.json中的tag(歌曲标签TAG)

%2$s会被解析成*.json中的sg(歌手)

%3$s会被解析成*.json中的appreciation(歌曲赏析(文案))

例如,如果这么写,则会解析成下边这个样子:
——————————————————
【新国风】SG.锦零

1=♭E
我见一人如皓月,婉转风姿两袖间。
——————————————————

警告:*.template文件不支持注释,所有内容都是模板的一部分

2. 小游戏

(1)成语接龙

正确配置yml中的game.idiom即可使用

game:
  idiom:
    repo: "成语接龙成语库路径"
    repoCharset: "GBK" # 这里是成语库的字符集,如果你采用本项目提供的5万成语库,请填写GBK。注释此行默认为GBK

本项目为大家提供了一份包含近5万成语的库,格式为txt,会在Bot初始化的时候加载。(放心,经过优化了的,性能杠杠滴)

请在本仓库data文件夹下找idioms5w.txt
编码为GBK

3. MC风格指令

本项目对传统机器人“指令”调用方式进行了拓展,MC风格指令。 支持可变参数,多类型传参。因此用户不必纠结死板的指令调用格式。 换句话说:用户不需要关注怎么调,只需要关注要调用啥。

我们来看几个例子:

(1) 无序传参

如:酷狗音乐搜歌

对发送如下内容 均可正常识别和调用

序号 内容 备注
1 /kugou 迈兮 守城记 正常顺序
2 迈兮 守城记 /kugou 乱序
3 功夫 /kugou 茶 封茗 囧菌 乱序
4 闻韶
 音 社 /kugou
 老
戏 院
多行+乱序

(2) 多类型可变参数

如:/diu指令

在机器人所在群发送如下内容 均可正常识别和调用

序号 内容 备注
1 /diu @橘子奶 diu群友,支持At消息和QQ号
2 @橘子奶 /diu @小红 1234567890 同时diu三位群友
1234567890会被解释成QQ号

那么我们想加入自己的MC风格指令怎么办呢,也很简单。 本项目已经为大家编写了一套Kotlin DSL来完成这件事。

这个函数一共有5个重载,方便大家使用,请自行查阅源码中JavaDoc说明

// Kotlin
// 注意尖括号里的东西,此函数mcCommand,对应的是传入一个MessageEvent
@McCmd
val kgMusic = mcCommand<GroupMessageEvent> {
    name = "kugou music"  // 指令名字
    prefix = listOf("/music", "/kgmus", "/kugou", "/kgmusic", "/kg", "/酷狗") //指令的触发方式
    help = "用于酷狗音乐搜歌"
    needArgs = true  // 是否需要参数

    onCall {  // 指令触发时的动作,在里边写上指令的实现。方法同mirai

    }
}

五、接口概览

本部分为控制Bot行为,检查Bot状态的接口

1. 重新加载帮助文本

接口地址 /help/reload
请求方式 GET
返回格式 text/html
请求参数 是否必填 类型 描述
name String 用于通知哪个帮助更新
默认为“main”

其中name参数的含义

name取值 含义
"main" 重新加载主帮助
"games" 重新加载游戏列表帮助

2. 展示sing文案注入情况

接口地址 /media/sing/appreciations
请求方式 GET
返回格式 text/html

无需请求参数