Skip to content

llyl2q/MiraiAndroid

 
 

Repository files navigation

MiraiAndroid

GitHub Workflow Status

GitHub issues

GitHub pull requests

(实验性)在Android上运行Mirai-console

关于mirai项目的一切请点击这里

仅Android 8及以上可用

相比使用Termux或者是Linux Deploy等应用运行mirai的方案,该项目提供的方案具有更好的性能以及更少的资源占用,但可能存在兼容性问题

更多信息请加QQ群655057127了解

已实现的功能

  • 兼容mirai-console插件(实验性)
  • 带验证码的登录处理
  • 内置Google d8 dex编译器,可直接编译JVM的console插件在Android运行(实验性)
  • lua脚本接口(测试版)
  • 网络掉线提醒

安装脚本

目前MiraiAndroid已支持lua脚本,感谢lua-mirai项目

以下是一个简单的示例

Event.onLoad = function(bot)

    print("载入bot" .. bot:getId() .. "成功")

    -- 好友消息监听
    bot:subscribeFriendMsg(function(bot, msg, sender)
        if msg:find("夸我") then
            sender:sendMsg(Msg():setQuote(msg) ..
                               net.get("https://chp.shadiao.app/api.php"))
        end

        if msg:find("骂我") then
            sender:sendMsg(Msg():setQuote(msg) ..
                               net.get(
                                   "https://nmsl.shadiao.app/api.php?level=min&lang=zh_cn"))
        end

    end)

    -- 群消息监听
    bot:subscribeGroupMsg(function(bot, msg, group, sender)
        if msg:find("夸我") then
            group:sendMsg(Msg():setQuote(msg):appendAt(sender) +
                              net.get("https://chp.shadiao.app/api.php"))
        end

        if msg:find("骂我") then
            group:sendMsg(Msg():setQuote(msg):appendAt(sender) ..
                              net.get(
                                  "https://nmsl.shadiao.app/api.php?level=min&lang=zh_cn"))
        end

        if msg:find("骂他") then
            local at
            for k, v in pairs(msg:toTable()) do
                if v:find("mirai:at") then
                    at = v
                    break
                end
            end

            group:sendMsg(at ..
                              net.get(
                                  "https://nmsl.shadiao.app/api.php?lang=zh_cn"))
        end

        if msg:find("复读") then group:sendMsg(msg:setQuote(msg)) end

        if msg:find("撤回") then
            msg:recall()
            -- 或 msg:getSource():recall()
            -- 或 group:recall(msg)
        end

        if msg:find("hso") or msg:find("色图") or msg:find("不够色") then
            local hso = net.get("https://api.lolicon.app/setu/"):match(
                            '"url":"(.-)"'):gsub("\\", "")
            group:sendMsg(Msg():appendImage(hso, group))
        end

    end)

end

Event.onFinish = function() print("脚本被卸载!") end

--[[
    消息构造方式:使用Msg() 或 Msg("内容") 或 字符串 "纯文本消息"

    消息拼接方式:使用appendXXX 或 + 或 .. 进行拼接
        如 Msg("hello"):appendText("world") + "lua" .. Msg():appendImage("http://xxxxx",sender)

    消息处理:支持使用lua的所有标准字符串处理函数
        如:msg:find("pattern") --寻找文本
            或 string.find(msg,"pattern")

]]

这个脚本实现了最简单的回复和网络请求功能,更多功能请看lua-mirai项目介绍

你可以在脚本管理界面点击右上角直接添加脚本到MiraiAndroid

目前该功能仍在开发中

安装插件

你有两个办法安装插件

使用app直接打开jar文件安装

这是最简单的方式。app切换到插件管理点击右上角选择即可,你也可以使用系统文件选择器直接打开jar文件

使用pc转换后导入

请按照以下方法操作

  • 找到d8编译器的运行脚本

d8工具已在新版Android sdk中自带,它就在build-tools中对应版本的文件夹下。在Windows平台他是一个bat文件

  • 编译

打开终端,使用以下命令编译

d8.bat --output 输出文件.jar 源文件

输出文件扩展名必须是jar或者是zip

  • 复制资源

使用压缩软件打开源jar文件,将里面的plugin.ymlMETA-INF和其他资源文件(除存放class文件夹的其他文件)复制到新的jar文件内

  • 安装插件

将上一步的新的jar文件复制到手机的/sdcard/Android/data/io.github.mzdluo123.mirai.android/files/plugins/

重启即可使用插件,当然部分插件可能也会存在兼容性问题

Console插件兼容不完全列表

以下插件由群友测试未发现问题,你可以到群内下载

  • mirai-api-http
  • HsoSe
  • keywordReply
  • forward

About

QQ机器人 /(实验性)在Android上运行Mirai-console

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Kotlin 78.9%
  • Java 21.1%