# MiraiSongPlugin
**Repository Path**: khjxiaogu/MiraiSongPlugin
## Basic Information
- **Project Name**: MiraiSongPlugin
- **Description**: 用mirai机器人搜索音乐并以卡片的形式分享
- **Primary Language**: Unknown
- **License**: LGPL-2.1
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2020-09-26
- **Last Updated**: 2022-06-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Mirai点歌插件
用mirai搜索音乐平台并分享音乐卡片。
如果没有你常用的音乐平台或者你喜欢的音乐外观,欢迎发issue或者pr。
如果有什么新的功能建议或者bug,也可以发issue,我会尽快查看更新。
目前支持1.0+和0.5.2的API。旧版源代码在分支[console-0.5.2](https://github.com/khjxiaogu/MiraiSongPlugin/tree/console-0.5.2)



# 注意
- 由于tx有某种风控机制,新注册的账号发送XML卡片可能出现发不出去的情况,请用电脑QQ之类的登录几天再发,具体时间取决于TX机制,与程序无关,望周知。
- 本插件均用新旧版本的Mirai测试过,如果不能运行请先确认你mirai为最新版本。
- 语音功能需要调用命令行,可能有一些问题。
- 由于各大音乐平台随时可能更新API,导致API失效,所以不保证所有API拿到手的时候均能正常使用。
- 本插件不会提供账户登录Cookie的功能,也不会设法跳过音乐平台的VIP限制。
# 声明
- 本插件仅作为学习交流等使用,请勿用于盈利,否则法律后果自负。
- 本插件提供的所有API均来源于公开资料,如有侵权请发邮件或者issue联系进行删除。
- 使用该插件带来的任何后果均由使用者承担,作者概不负责。
- 如果遇到本插件任何问题,请发issue询问,其他平台概不受理。
### 测试可用的mirai-console版本
#### 0.5.2版本
- 0.5.2
#### 1.0版本
- 1.0-M3
- 1.0-M4
- 1.0-M4-dev3
- 1.1.0
#### 2.0版本
- 2.0-M2-1-dev-1
- 2.7-M1-dev-5
### 测试可用的mirai-core版本
- 1.2.1-2.7(每个发行版本都测试过)
# 特色
- 支持各大国内音乐平台
- 在非语音模式下,网络和性能占用极低
- 支持通过配置文件添加自定义的指令和覆盖现有指令 [传送门](#自定义指令)
- 支持高度自定义,采用MVC模式,添加音乐源和外观成本极低 [javadoc](https://khjxiaogu.github.io/MiraiSongPlugin/)
# 基本使用方法
0. 从[Release](https://github.com/khjxiaogu/MiraiSongPlugin/releases)下载
1. 放置于plugins文件夹
2. 安装ffmpeg(如果不需要用语音功能可以跳过这步):
Windows:下载[ffmpeg](https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z),解压后把ffmpeg.exe放置于mirai同一目录
Linux:
```
sudo apt install ffmpeg
sudo apt install libavcodec-extra
```
3. 运行mirai,登录机器人
4. 在机器人所在群聊发送“#音乐 test”,机器人返回分享标签即为安装成功。
# 默认指令列表
“#音乐 关键词”
-----
自动搜索所有源以找出来找最佳音频来源
“#语音 关键词”
-----
自动搜索所有源,以语音信息的形式发出
“#外链 关键词”
-----
自动搜索所有源,以外链信息的形式发出
“#QQ 关键词”
-----
搜索QQ音乐
“#网易 关键词”
-----
搜索网易云音乐
“#网易电台 关键词”
-----
搜索网易云电台,一般来说是直接选择找到的第一个节目,但是关键词可以以 “电台名称|节目名称”的格式指定电台节目
“#酷狗 关键词”
-----
搜索酷狗音乐
“#千千 关键词”
-----
搜索千千音乐(百度音乐)
“#点歌 来源 外观 关键词”
-----
实验性API
高度自定义的点歌方法
|参数|值范围|用途|
|------|------|------|
|来源|QQ音乐
酷狗
千千
网易
网易HQ
网易电台
网易电台节目
Bilibili
本地|设定搜索歌曲的来源|
|外观|LightApp:小程序分享
Mirai:采用Mirai的MusicShare卡片,如果不存在则fallback为XML卡片
XML:卡片分享
Share:普通分享(不能播放)
Message:以纯信息形式分享,可以很方便取得音乐的各种链接。
AMR:AMR语音,需要配置好`ffmpeg_path`
Silk:SILK语音,需要同时配置好`silkenc_path`和`ffmpeg_path`,由于tx限流,质量可能很差(不推荐使用)|设定分享出来的音乐的外观|
# 歌曲API说明
- 网易电台和网易电台节目的区别是网易电台不能用“电台名称|节目名称”的格式。
- 网易HQ的API和QQ音乐API均可能有时间限制,长时间后播放链接会失效。
- bilibili的API由于有请求校验,所以只支持语音播放,卡片分享只支持点击卡片打开网页进行播放。
# 配置项
配置文件位于`data/点歌插件`
|名称|介绍|
|-----|-----|
|`silkenc_path`|silk编码器文件位置[windows二进制](https://github.com/khjxiaogu/MiraiSongPlugin/blob/master/silk_v3_encoder.exe)|
|`ffmpeg_path`|ffmpeg编码器文件位置[ffmpeg github](https://github.com/FFmpeg/FFmpeg)|
|`amrqualityshift`|如果语音文件过大时进行的处理,缺省默认为false。
设置值:true/不断降低码率直到刚好能够发送,比较消耗性能 false/直接裁剪音频文件大小为1M|
|`amrwb`|是否启用amr_wb模式,缺省默认为true。
设置值:true/启用amr_wb,音质会比较好,但是电脑qq可能不能正常播放,手机qq进度条显示异常。 false/关闭amr_wb,此时`amrqualityshift`强制为false,音质会比较差,但是显示和播放都正常。|
|`use_custom_ffmpeg_command`|是否启用自定义ffmpeg指令,如果启用,上述的amr配置和ffmpeg路径配置将被忽略。|
|`custom_ffmpeg_command`|自定义ffmpeg命令,会把%input%替换为输入文件绝对路径,%output%替换为输出文件绝对路径。|
|`enable_local`|全部搜索时是否包含本地搜索,默认不包含。|
|`verbose`|是否启用命令执行输出,缺省默认为true。
设置值:true/执行语音操作时在控制台输出详细信息 false/不输出信息,直接执行|
|`adddefault`|是否添加默认指令,缺省默认为true。
设置值:true/添加readme所述的指令列表 false/不添加任何指令|
|`extracommands`|通过配置添加新指令的列表,可以完全自定义指令。详见[后文](#自定义指令)|
# 自定义指令
范例:
```
extracommands:
"#语音": #指令名称
source: all #搜索来源
card: AMR #分享外观
"#分享":
source: QQ音乐 #搜索来源
card: Share #分享外观
```
|参数|值范围|用途|
|------|------|------|
|source|QQ音乐
网易
网易HQ
酷狗
千千
本地
Bilibili
all|设定搜索歌曲的来源
注意:all为搜索全部平台。|
|card|LightApp:小程序分享
Mirai:采用Mirai的MusicShare卡片,如果不存在则fallback为XML卡片
XML:卡片分享
Share:普通分享(不能播放)
Message:以纯信息形式分享,可以很方便取得音乐的各种链接。
AMR:AMR语音,需要配置好`ffmpeg_path`
Silk:SILK语音,需要同时配置好`silkenc_path`和`ffmpeg_path`,由于tx限流,质量可能很差(不推荐使用)|设定分享出来的音乐的外观|
如果不需要原版的指令,可以设置配置项`adddefault`为false。
原版的指令设置,仅供参考。__#点歌是特殊程序实现的,无法通过配置实现!__
```
"#音乐":
source: all
card: Mirai
"#语音": #指令名称
source: all #搜索来源
card: AMR #分享外观
"#外链":
source: all
card: Message
"#QQ":
source: QQ音乐
card: Mirai
"#网易":
source: 网易
card: Mirai
"#酷狗":
source: 酷狗
card: Mirai
"#千千":
source: 千千
card: XML
"#网易电台":
source: 网易电台节目
card: Mirai
```
# 关于本地搜索(实验性)
本地搜索要在配置里面启用,否则搜索全部源不会搜索此项!
插件运行之后会在mirai目录下产生`SongPluginLocal.json`文件,打开它就可以看到编辑范例为:
```
[
{"title":"标题",
"desc":"副标题",
"previewUrl":"专辑图片url",
"musicUrl":"音乐播放url",
"jumpUrl":"点击跳转url",
"source":"本地"
}
]
```
格式为json数组,每个成员都必须是对象,最后不能有多余的,。如果指定了本地搜索或者全部搜索,那么就会通过标题的相似度筛选出要搜索的歌,并把所有参数填入分享卡片中分享。
__#注意!这里的url必须是可以从外部访问的,请自备服务器或者云盘等,不能直接指定本地文件路径!__