开发入门篇 /02/ Hello Mirai!
Hello Mirai
在上一章中,你学会了如何搭建开发环境,现在,让我们先让插件在测试环境跑起来吧!
测试
启动 mirai-console 实例
提示
该部分仅适用于 gradle 项目,且 mirai-console-gradle 版本在 2.12.0 以上
使用命令行 /gradlew runConsole
或者在 idea 中使用 Gradle 的 Task Configuration 点击后会自动生成 Run/Debug Configuration
启动 mirai-console 实例 (旧)
提示
该部分适用于 maven 或其他无法使用 runConsole 的环境,但是模拟效果不好。
首先,在 src/kotlin/test
目录 (不存在就创建) 新建一个 kotlin 类 RunTerminal.kt
,代码如下,请复制并按照注释提示自行替换插件主类和补充 import。
@OptIn(ConsoleExperimentalApi::class)
suspend fun main() {
// 设置工作目录为 ./run/
val runDir = File("run")
if (!runDir.exists()) runDir.mkdirs()
MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleImplementationTerminal(runDir.toPath()))
// 举个例子,假如你的主类叫做 ExamplePlugin
// kotlin: ExamplePlugin
// java: ExamplePlugin.INSTANCE
val pluginInstance = /*将此处替换为插件主类*/
pluginInstance.load() // 主动加载插件, Console 会调用 插件主类.onLoad
pluginInstance.enable() // 主动启用插件, Console 会调用 插件主类.onEnable
//val bot = MiraiConsole.addBot(123456, "").alsoLogin() // 登录一个测试环境的 Bot
MiraiConsole.job.join()
}
点击 suspend fun main()
左边绿色的 ▶ 图标,点击运行或调试均可启动测试,请记住启动测试的方法,按需使用。
你好,世界
你已经能进行测试了,接下来编写代码让你的机器人回复你吧!
提示
若使用 mirai-console,写到 onEnable 里
若单纯使用 mirai-core,爱写哪里写哪里 (你觉得什么时候该注册监听器就什么时候执行),保证在机器人登录之前执行就行
// kotlin
// 获取当前携程的事件频道,用于注册监听器
// 如果是在 mirai-core,请使用 GlobalEventChannel.context(携程)
// 一般来说除非实在没办法,否则必须指定携程上下文
val channel = globalEventChannel()
// 监听好友消息
channel.subscribeAlways<FriendMessageEvent> {
// do sth you want like this
if (message.content.contains("hello")) {
sender.sendMessage("Hello Mirai :)");
}
}
// java
// 获取当前携程的事件频道,用于注册监听器
// 如果是在 mirai-core,请使用 GlobalEventChannel.INSTANCE
// 一般来说除非实在没办法,否则必须指定携程上下文
EventChannel<Event> channel = GlobalEventChannel.INSTANCE.context(this.getCoroutineContext());
channel.subscribeAlways(FriendMessageEvent.class, event -> {
// do sth you want like this
if (event.getMessage().contentToString().contains("hello")) {
event.getSender().sendMessage("Hello Mirai :)");
}
});
你不需要深究这些代码是什么意思,你只需要知道这样写可以实现这个功能就好。详细的解读将在以后的章节中呈现,稍安勿躁。
写好之后,运行测试,登录机器人,并使用你的 QQ 客户端向机器人发送好友消息 hello
来检验成果吧!
最后,请尝试修改其中的数值,并尝试利用 IDEA 的代码补全修改代码,获取收到的消息来自的 QQ 号、昵称等信息发送回去,实现比较简单的功能。
构建插件
提示
该部分仅适用于 mirai-console,且仅适用于已安装 mirai-console 的 Gradle 插件的项目
在 IDEA 右侧你可以看到 Gradle 选项卡,在里面展开 项目名→Tasks→mirai
即可找到构建插件的两个任务
运行 buildPlugin
任务,将构建适用于 mirai-console 2.11 及以上的插件,使用的依赖将不会被打包进插件 jar,而是生成一个列表放入 /META-INF/mirai-console-plugin/
里的 dependencies-private.txt
和 dependencies-shared.txt
。加载插件时 mirai-console 会读这个列表自动帮你下载并链接依赖库。这样构建的插件,后缀名为 .mirai2.jar
。
运行 buildPluginLegacy
任务,将构建适用于 mirai-console 2.11 以下的插件,使用的依赖将会被 shadowJar 打包进插件 jar 里。这样构建的插件,后缀名为 .mirai.jar
。
构建的插件文件将会在 /build/mirai/
目录出现。
使用代码登录机器人
提示
在仅使用 mirai-core 的开发中,使用代码登录机器人是非常重要的。如果使用 mirai-console,除非有特殊需求。请使用自带的自动登录。
以下是登录QQ号 114514
密码 1919810
的示例。
一目了然,不言而喻。
// kotlin
val bot = BotFactory.newBot(114514L, "1919810") {
// 这里是机器人配置
// 比如使用文件储存设备信息
fileBasedDeviceInfo()
}
// java
Bot bot = BotFactory.INSTANCE.newBot(114514L, "1919810", new BotConiguration() {{
// 这里是机器人配置
// 比如使用文件储存设备信息
fileBasedDeviceInfo()
}}};
需要注意的是,执行 fileBasedDeviceInfo()
或者 fileBasedDeviceInfo("device_114514.json")
之类在 BotConfiguration 里的方法,只是修改了某个设置,这些设置大多是在机器人登录时使用,并不是说执行了这个方法就具体执行了某些功能,有的人说了他十遍甚至九遍还不懂。(恼)
完成
你已经掌握 mirai 最简单的用法了,接下来通过了解事件系统,一步一步前进吧。