设为首页收藏本站
查看: 4430|回复: 4

[高级语言] QQ机器人开发 Mirai Java栈

[复制链接]
  • TA的每日心情
    难过
    2022-9-23 12:52
  • 签到天数: 201 天

    [LV.7]常住居民III

    发表于 2022-2-13 20:47:27 | 显示全部楼层 |阅读模式
    QQ机器人开发,基于 Mirai

    本文会介绍两种机器人开发方式,一种是基于 Mirai Console启动器系列的插件
    另一种是将 Mirai-Core 嵌入到程序中,这样就可以驱动一个机器人



    方式一, Mirai插件开发

    为了加载我们的插件,使用官方的 Mirai Console启动器 MCL
    首先将它下载下来。

    https://github.com/iTXTech/mirai-console-loader/releases

    启动mcl.cmd。可以看到自动下载了一些核心lib。

    创建了一些目录,我们开发的插件存放的目录就在plugin目录

    打开IDEA,我们本文使用它来开发Mirai插件。

    首先,安装idea的Mirai 开发插件



    然后,新建项目,选择Mirai





    等待IDE完成对项目的自动配置



    我们来编写一个测试的插件



    代码如下:
    1. public void onEnable() {
    2.         getLogger().info("Plugin 测试插件 loaded!"); //调用日志组件
    3.         GlobalEventChannel.INSTANCE.subscribeAlways(FriendMessageEvent.class,event->{
    4.             //注册了一个FriendMessage事件的监听器 好友消息事件
    5.             MessageChain message = event.getMessage(); //取出传入的收到的消息
    6.             if(message.contentToString().equals("hello"))
    7.             {
    8.                 //如果消息是hello,那么就发送消息:插件运行正常
    9.                 event.getSubject().sendMessage("插件运行正常!");
    10.             }
    11.         });
    12.         GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessageEvent.class,event->{
    13.             //注册了一个GroupMessage事件的监听器 群消息事件
    14.             MessageChain message = event.getMessage(); //同上
    15.             if(message.contentToString().equals("hello"))
    16.             {
    17.                 //标记消息为回复消息,回复收到的这条消息,即:hello
    18.                 event.getSubject().sendMessage(new QuoteReply(message).plus("插件运行正常"));
    19.             }
    20.         });
    21.         GlobalEventChannel.INSTANCE.subscribeAlways(BotOnlineEvent.class,event->{
    22.             //event.getBot().getNick()获取机器人昵称
    23.            getLogger().info("机器人"+event.getBot().getNick()+"登录成功!");
    24.         });
    25.     }
    复制代码


    编译出插件


    插件在目录\build\mirai下

    复制到plugin目录

    启动mcl



    使用指令login 账号 密码    来登录一个机器人实例



    下面是正常工作状态的截图





    群消息测试,私聊消息测试均成功。

    更多开发文档:https://docs.mirai.mamoe.net/CoreAPI.html




    方法二,内嵌

    首先新建一个maven项目,并在src目录创建main函数入口



    引入Mirai-core依赖

    1. <dependencies>
    2.         <dependency>
    3.             <groupId>net.mamoe</groupId>
    4.             <artifactId>mirai-core-jvm</artifactId>
    5.             <version>2.10.0</version>
    6.         </dependency>
    7.     </dependencies>
    复制代码


    开始写代码



    具体代码如下

    1. import net.mamoe.mirai.Bot;
    2. import net.mamoe.mirai.BotFactory;
    3. import net.mamoe.mirai.event.events.FriendMessageEvent;
    4. import net.mamoe.mirai.message.data.MessageChain;
    5. import net.mamoe.mirai.utils.BotConfiguration;

    6. public class Main {
    7.     public static void main(String[] args) {
    8.         Bot bot = BotFactory.INSTANCE.newBot(3582683469L,"dbb76820618",new BotConfiguration(){{
    9.             fileBasedDeviceInfo(); //创建device.json保存登录设备信息
    10.             setProtocol(MiraiProtocol.ANDROID_PHONE); //使用安卓协议
    11.         }});
    12.         //创建一个新的机器人
    13.         bot.login(); //登录
    14.         bot.getLogger().info("登录成功!"); //调用内置日志组件
    15.         bot.getEventChannel().subscribeAlways(FriendMessageEvent.class,event->{
    16.            //同方式一,注册好友消息事件
    17.             MessageChain message = event.getMessage();
    18.             if(message.contentToString().equals("hello"))
    19.             {
    20.                 event.getSubject().sendMessage("机器人运行正常");
    21.             }
    22.         });
    23.         //这里只写了好友消息事件,具体同方式一一样
    24.     }
    25. }
    复制代码


    运行



    登录成功。

    发送好友消息测试一下



    ok,一切正常。

    通过方式二,就可以不再依赖Mirai Console。内嵌进自己的java程序中。





    Mirai官方地址:https://github.com/mamoe/mirai

    公开群机器人实现方式:Go语言链接go-cqhttp(修改版 by me)
    感兴趣的可以了解一下
    go-cqhttp: https://github.com/Mrs4s/go-cqhttp

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
  • TA的每日心情
    难过
    2022-9-23 12:52
  • 签到天数: 201 天

    [LV.7]常住居民III

     楼主| 发表于 2022-2-13 20:52:52 | 显示全部楼层
    顺便一提,我是与spring boot一起用的,这样就可以在web上配置,但是spring boot内置的Kotlin 版本是与mirai冲突的,解决方法如下

    mirai 使用的 Kotlin 1.5 可能与你的项目使用的其他库依赖的 Kotlin 版本冲突,Maven 有时候无法正确处理这种冲突。此时请手动添加 Kotlin 标准库依赖。

    1. <properties>
    2.     <kotlin.version>1.5.10</kotlin.version>
    3. </properties>
    复制代码

    1. <dependencies>
    2.     <dependency>
    3.         <groupId>org.jetbrains.kotlin</groupId>
    4.         <artifactId>kotlin-stdlib-jdk8</artifactId>
    5.         <version>${kotlin.version}</version>
    6.     </dependency>
    7. </dependencies>
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2022-9-23 12:52
  • 签到天数: 201 天

    [LV.7]常住居民III

     楼主| 发表于 2022-2-14 16:49:13 | 显示全部楼层
    MiraiManager,欢迎围观
    机器人统一管理登录。SpringBoot+Mirai-Core
    https://gitee.com/dinglz/miria-manager
    https://dinglz.gitee.io/miria-manager
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2022-5-12 15:50
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2022-2-18 09:34:44 | 显示全部楼层
    本帖和源码已围观
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-26 08:32
  • 签到天数: 428 天

    [LV.9]以坛为家II

    发表于 2022-2-25 09:51:49 | 显示全部楼层
    源码已围观,谢谢楼主分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    红盟社区--红客联盟 

    Processed in 0.061442 second(s), 24 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    备案号:冀ICP备20006029号-1 Powered by HUC © 2001-2021 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表