MiraiBot简介

logo
title

GitterMiraiForum

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

这个项目的名字来源于

京都动画作品《境界的彼方》栗山未来(Kuriyama mirai)


CRYPTON初音未来为代表的创作与活动(Magical mirai)


图标以及形象由画师DazeCake绘制

Mairi 消息类型

各类型消息元素及其 contentToString() 如下表格所示。

MessageContent 类型 解释 contentToString() 最低支持的版本
PlainText 纯文本 $content 2.0
Image 自定义图片 [图片] 2.0
At 提及某人 @$target 2.0
AtAll 提及全体成员 @全体成员 2.0
Face 原生表情 [表情对应的中文名] 2.0
FlashImage 闪照 [闪照] 2.0
PokeMessage 戳一戳消息(消息非动作) [戳一戳] 2.0
VipFace VIP 表情 [${kind.name}]x$count 2.0
LightApp 小程序 $content 2.0
Voice 语音(已弃用) [语音消息] 2.0 (3)
MarketFace 商城表情 [表情对应的中文名] 2.0
ForwardMessage 合并转发 [转发消息] 2.0 (1)
SimpleServiceMessage (不稳定)服务消息 $content 2.0
MusicShare 音乐分享 [分享]曲名 2.1
Dice 魔法表情骰子 [骰子:$value] 2.5
RockPaperScissors 魔法表情猜拳 [石头]/[剪刀]/[布] 2.14
FileMessage 文件消息 [文件]文件名称 2.5
Audio 语音 [语音消息] 2.7

PlainText示例

1
2
3
4
5
6
7
8
9
10
11
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
"-test1" {
val newMessages = "这是一个实列的文本消息,支持\n \t 来进行文字排版,空格在这里 \t 似乎不太好用"
subject.sendMessage(newMessages)
}
// mirai的sendMessage方法可以直接放入一个String的字符串来进行文本发送如上,也可以使用 PlainText("Hello!")来构建一个 MessageContent
"文本信息" {
subject.sendMessage(PlainText("Hello!"))
}
}

Image示例

1
2
3
4
5
6
7
8
9
10
11
12
13
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
// 发送图片 有两种方式
// 1.使用图片的MiraiCode;MiraiCode的获取可以从Bot的消息日志中,查看到图片消息的原始消息,其中包含图片的MiraiCode
"Image1" {
subject.sendMessage(Image.fromId("{E9A7782B-9F53-5F4A-9E41-FA53AA122707}.gif"))
}
// 2.本地上传并发送图片
"Image2" {
val imageFile = File("src/main/resources/mirai.png")
subject.sendImage(imageFile)
}
}

AT示例

1
2
3
4
5
6
7
8
9
10
11
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
"At"{
//这是AT@所有人,遵循QQ规则,每天只能10次
subject.sendMessage(AtAll + "起床啦!")
//AT@一个指定的QQ号
subject.sendMessage(At(98347293478L) + "睡觉啦!")
//AT@发送指令的人
subject.sendMessage(At(sender.id) + "是你在召唤我?!")
}
}

Face示例

1
2
3
4
5
6
7
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
// 表情ID:5是流泪的意思,更多ID对应的表情可以点进Face查看源码
"表情"{
subject.sendMessage(Face(5) + "哭哭")
}
}

FlashImage示例

1
2
3
4
5
6
7
8
9
10
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
// 发送闪照和发送图片一样的
"闪照"{
//subject.sendMessage(FlashImage(Image.fromId("{E9A7782B-9F53-5F4A-9E41-FA53AA122707}.gif")))
val imageFile = File("src/main/resources/mirai.png")
val uploadImage = subject.uploadImage(imageFile.toExternalResource())
subject.sendMessage(FlashImage(uploadImage))
}
}

PokeMessage示例

1
2
3
4
5
6
7
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
//似乎没什么用,有一个拍了拍的事件
"戳一戳"{
subject.sendMessage(PokeMessage("比心",2,-1))
}
}

LightApp示例

1
2
3
4
5
6
7
8
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
//LightApp 目前只会天气应用这一种。
"小程序"{
val json = "{\"app\":\"com.tencent.weather\",\"desc\":\"天气\",\"view\":\"RichInfoView\",\"ver\":\"0.0.0.1\",\"prompt\":\"[应用]天气\",\"meta\":{\"richinfo\":{\"adcode\":\"\",\"air\":\"151\",\"city\":\"成都 \",\"date\":\" 2023-05-12 \",\"max\":\"26\",\"min\":\"18\",\"ts\":\"15158613\",\"type\":\"201\",\"wind\":\"\"}}}"
subject.sendMessage(LightApp(json))
}
}

MusicShare示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
"点歌514"{
val musicShare = MusicShare(
kind = MusicKind.NeteaseCloudMusic,
title = "514",
summary = "Maritumix",
brief = "",
jumpUrl = "http://music.163.com/song/72709841",
pictureUrl = "https://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
musicUrl = "http://music.163.com/song/media/outer/url?id=72709841"
)
subject.sendMessage(musicShare)
}
}

Audio示例

1
2
3
4
5
6
7
8
//基础监听消息示例 subscribeGroupMessages 监听群消息
bot.eventChannel.subscribeGroupMessages {
"语音"{
val audioFile = File("src/main/resources/mirai.amr")
val audio = group.uploadAudio(audioFile.toExternalResource())
subject.sendMessage(audio)
}
}