QQ机器人
酷Q机器人已经从叱诧风云的QQ机器人框架中消失,仅存的几款开源框架,不是效果不理想,就是自定义度不高。而Mirai就是这样一个框架,其内部的功能并不是很强大,但他对一些功能的封装并不严格,所以也就有机会能和底层进行交流。
必要的知识
首先你要保证你已经掌握了Java或者kotlin的语法规则,并且能够写出最基本的代码(Hello world)
安装MCL
自动安装
MCL Installer自动安装工具可以获取到所有系统的iTXTech MCL
手动安装
- 安装 Java 运行时(版本必须 >= 11)
- 从 Releases 下载最新版本的
MCL
- 解压到某处
- 在命令行中执行
.\mcl
以启动MCL
- 启动过程中或许会需要安装openjdk,不推荐安装(使用你自己安装的jdk就可以)
- 如果启动过程中出现类文件版本高低等问题,都可以通过修改jdk版本解决
下载Mirai
IDEA插件
打开IDEA,在文件->设置->插件
中搜索Mirai Console
安装完成后重启IDEA,然后就可以新建一个Mirai项目了
选择jdk版本,新版本使用11及以上
你可以选择Kotlin或者Java,希望使用什么语言就选择什么语言,我这里用Java举例
一些简单的基本信息
文件路径
开始编写
创建新项目的过程可能会有点慢,静静等待一会就好了
新项目创建好的主类应该含有下面这些代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public static final Plugin INSTANCE = new Plugin();
private Plugin() { super(new JvmPluginDescriptionBuilder("主类", "1.0") .name("插件名字") .author("作者名") .build()); } }
@Override public void onLoad(@NotNull PluginComponentStorage $this$onLoad) { }
@Override public void onEnable() { }
@Override public void onDisable() { }
|
加载配置文件
1 2 3 4
| @Override public void onLoad(@NotNull PluginComponentStorage $this$onLoad) { getConfigFolder(); }
|
默认代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @Override public void onEnable() { EventChannel<Event> eventChannel = GlobalEventChannel.INSTANCE.parentScope(this); eventChannel.subscribeAlways(GroupMessageEvent.class, g -> { System.out.println(g.getMessage().contentToString()); }); eventChannel.subscribeAlways(FriendMessageEvent.class, f -> { System.out.println(f.getMessage().contentToString()); }); }
|
常用事件
1 2 3 4 5
| EventChannel<Event> eventChannel = GlobalEventChannel.INSTANCE.parentScope(this);
eventChannel.subscribeAlways(事件种类.class, g -> { });
|
事件 | 功能 | 可供选择的操作 |
---|
GroupEvent | 群聊事件 | .getBot()获取机器人Bot对象 |
FriendEvent | 好友事件 | .getBot()获取机器人Bot对象 |
StrangerEvent | 陌生人事件 | .getBot()获取机器人Bot对象 |
下面就是一些细化事件 | —- | —- |
FriendAddEvent | 添加好友事件 | .getFriend()获取添加者的Friend对象 |
StrangerAddEvent | 陌生人添加事件 | .getStranger()获取Stranger对象(一般Stranger都是临时会话的对象) |
FriendAvatarChangedEvent | 好友头像改变事件 | .getBot()获取机器人Bot对象 |
MemberJoinEvent | 群聊新成员加入事件 | .getMember()获得成员对象 |
对象常用方法
GroupEvent:
1、getBot()获取机器人
2、getGroup()获取群聊对象:
Group:
1、contains(QQ号)判断是否在群聊内
2、getAvatarUrl()获取群头像链接
3、getBotAsMember()作为群成员对象获取机器人
4、getBotMuteRemaining()查看机器人被禁言的剩余时间
5、getBotPermission()获得机器人许可等级
6、getMembers()获得某个群成员
7、getName()获得机器人的群昵称
8、getSettings()获得群聊的设置
9、sendMessage()在群聊发消息
FriendEvent:
1、getFriend()获得朋友对象
Friend:
1、sendMessage()发送消息
2、delete()删除好友
Member:
1、getNameCard()获得名片
2、isMuted()判断是否禁言
3、unmute()解除禁言
更多的方法可以在IDEA中尝试,命名还是很好懂的
消息元素
在java中,一般这么构建消息链
1
| MessageChainBuilder builder = new MessageChainBuilder();
|
针对builder
对象,我们可以对他插入消息元素等
1 2 3
| AtAll.INSTANCE(@所有人) new Face(Face.表情名) new At(114514L) (@某个人,加QQ号)
|
图片:
1 2 3 4 5 6 7 8 9 10 11 12
| EventChannel<Event> eventChannel = GlobalEventChannel.INSTANCE.parentScope(this); eventChannel.subscribeAlways(FriendEvent.class, event->{ ExternalResource res = ExternalResource.create(new File("本地图片")); Image image = event.getFriend().uploadImage(res); res.close(); event.getFriend().sendMessage(image); });
|
也可以通过图片ID发送图片,不过图片ID一般看不到
1 2 3 4 5
| EventChannel<Event> eventChannel = GlobalEventChannel.INSTANCE.parentScope(this); eventChannel.subscribeAlways(FriendEvent.class, event->{ event.getFriend().sendMessage(Image.fromId("图片ID")); });
|
发出声音:
1 2 3 4 5 6 7 8 9 10
| EventChannel<Event> eventChannel = GlobalEventChannel.INSTANCE.parentScope(this); eventChannel.subscribeAlways(FriendEvent.class, event->{ ExternalResource res = ExternalResource.create(new File("声音文件.amr")); Audio audio = event.getFriend().uploadAudio(res); res.close(); event.getFriend().sendMessage(audio); });
|
指令
新建一个java文件,命名随意,我这里使用了echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class 指令类 extends JSimpleCommand {
public static final 指令类 INSTANCE = new 指令类();
private 指令类() { super(主类名.INSTANCE, "指令", "功能"); this.setDescription("描述"); }
@Handler public void handle(CommandSender sender, User target, String msg) { } }
|
然后在主类内进行注册指令
1 2 3 4 5
| @Override public void onEnable() { CommandManager.INSTANCE.registerCommand(指令类.INSTANCE, false); }
|
插件的编译
在项目构建工具的右侧,会有一条工具栏,侧边的Gradle中点击拉开build,找到jar工具,双击即可编译出jar文件
导出的jar文件在你的项目路径下build/libs/文件名.jar
将他拖入MCL启动器的plugins文件夹下
配置MCL
在上述操作完成后,可以打开MCL启动器的目录,找到config/Console/AutoLogin.yml
,向里面添加你的机器人QQ,方便之后进行自动登录,第一次登录可能会出现拦截,不过只需在一部手机上打开弹窗的链接,进行安全认证即可
MCL的其他文件夹或文件的功能我就不多赘述了,当你完成上述操作后,回到MCL的根路径下,就可以开启机器人了
(放一张正常运行的图片)
结语
如果有不会的可以查看大佬的非官方文档(虽然是kotlin,不过大体是相似的)
觉得不错就分享出去吧~
https://mirai.mamoe.net/topic/802