一个基于 Mirai 的 Java QQ 机器人类库
继承原来的 PicqBotX。现在使用 Mirai 核心框架。
将会有一些不同之处:
现在的 config
变成了单例,配置需要使用
PicqConfig.modifyConfig((it) -> {
it.setXXX();
// ...
});
创建机器人对象:
PicqBotX bot = new PicqBotX();
现在只支持单账户了。如果要多账户就需要使用不同的 bot 实例。设置账户:
bot.setAccount(qq, password);
完整代码:
public class TestBot {
public static void main(String[] args) {
// 配置
PicqConfig.modifyConfig((it) -> {
it
.setDeviceInfoFile("device.json")
.setDebug(true);
// ...
});
// 创建机器人对象
PicqBotX bot = new PicqBotX();
// 添加一个机器人账户 ( qq号, 密码 )
bot.setAccount(123L, "123");
// 注册事件监听器, 可以注册多个监听器
bot.getEventManager().registerListeners(
new TestListener(),
new ExceptionListener()
);
// 启用指令管理器
// 这些字符串是指令前缀, 比如指令"!help"的前缀就是"!"
bot.enableCommandManager("!", "/");
// 注册指令, 可以注册多个指令
bot.getCommandManager().registerCommands(
new CommandSay(),
new CommandTest()
);
// 启动机器人, 不会占用主线程
bot.startBot();
}
}
现在所有 API 迁移到了 cc.moecraft.icq.core.MiraiApi
中,并且建议使用该类发送消息,而非使用 Mirai 提供的方法,因为这样会在框架内创建一个发送消息的事件。
使用 event.getBot().getMiraiApi()
或从别处获取 Bot 对象来获取 API 对象。
有一些标注了 @Deprecated
的名称,替代方案写在了文档里,保留是为了保留与上一版本的兼容性。
重要的是,原有的表示用户、群组等的类全部删除,改为使用 Mirai 内置的类。但是,所有事件的字段全部都与原来一样,使用时只需要修改关于原有 User
或 Group
类的相关方法即可。Event
不需要作任何调整。
也就是以前的 CQ 码的简化版。event.getMessage()
返回的即是消息模板。
消息模板中非文本对象(图片、At 等)的格式是 %<id>%
,其中 id
是自动生成的字符串。它存在一张哈希表中,并且值是那个非文本对象的 WeakReference
。这个表会定时清理,时间的设置在 PicqConfig.setScheduledClearWeakRefTimeInterval(long)
。消息模板中的 %
会变成 \%
,\
会变成 \\
。例如:
这是一个图片: %1ufD9Ca0%, 这是一个百分号: \%, 这是一个反斜杠和另一个图片: \\%mRs3a8qV%
其中,%1ufD9Ca0%
和 %mRs3a8qV%
都是图片。
想要将 MessageChain
(Mirai 中的消息链)变成消息模板,使用 PicqMessageTemplate.toMessageTemplate
。想要把消息模板变成 MessageChain
,使用 PicqMessageTemplate.messageTemplateToChain
。想要去除转义,使用 PicqMessageTemplate.toSimpleString
。
在所有发送消息的方法中,默认全部将传入的字符串消息作为消息模板发送(也就是会转成一个消息链,而不是单纯的一个 PlainText
)。可以在配置中设置 defaultSendUseMessageTemplate
字段修改这个配置。
没有添加 JitPack 的 Repo 的话首先添加 Repo, 在 pom 里面把这些粘贴进去:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
然后添加这个库:
<dependency>
<groupId>com.github.Shimogawa</groupId>
<artifactId>PicqBotX-Mirai</artifactId>
<version>0.2.1</version> <!-- 这里换成最新版本 -->
</dependency>
然后 Reimport 之后就导入好了!
没有添加 JitPack 的 Repo 的话首先添加 Repo, 在 pom 里面把这些粘贴进去:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
然后添加这个库:
dependencies {
implementation 'com.github.Shimogawa:PicqBotX-Mirai:0.2.0'
}
开源条款: AGPLv3
Mirai
使用 AGPLv3
协议,强烈建议一切接触到 Mirai 或者一切使用 PicqBotX-Mirai
的软件使用 AGPLv3
开源。