支持lua语言的qq bot快速开发框架,使用lua轻松创造qq bot。
LuaMiraiForAndroid 是lua-mirai在Android端的运行方案,具有高度可操作性,提供了强大的多Bot管理及构建参数完全控制和脚本可视化管理功能,强烈建议使用LuaMiraiForAndroid 作为Android端的运行环境。
本项目仅供学习参考,禁止用于任何商业用途。任何单位或个人认为本项目可能涉嫌侵犯其合法权益,应该及时提出反馈,我们将会第一时间对违规内容给予删除等相关处理。
Mirai机器人的lua扩展支持
Home Page: https://only52607.github.io/lua-mirai/
License: GNU Affero General Public License v3.0
支持lua语言的qq bot快速开发框架,使用lua轻松创造qq bot。
LuaMiraiForAndroid 是lua-mirai在Android端的运行方案,具有高度可操作性,提供了强大的多Bot管理及构建参数完全控制和脚本可视化管理功能,强烈建议使用LuaMiraiForAndroid 作为Android端的运行环境。
本项目仅供学习参考,禁止用于任何商业用途。任何单位或个人认为本项目可能涉嫌侵犯其合法权益,应该及时提出反馈,我们将会第一时间对违规内容给予删除等相关处理。
一个 Message 对象不能正常使用 toTable 转换成 table,报错
vm error: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
以前用酷q的时候写了个命令让群员自定义头衔, 现在改用lua-mirai之后发现没有这个功能
比如我想提取消息中的图片url:
for i, v in ipairs(event.message) do
str_msg = tostring(v)
if str_msg:find(":image:") then
local url = v.queryUrl
print("url: " .. url)
end
end
如果有图片的话,会抛出异常:
org.luaj.vm2.LuaError: x:/script/path/file_name.lua:line [mirai:image:{01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.ext] is not a MessageChain.
at com.ooooonly.luaMirai.lua.lib.mirai.LuaMiraiMessage.getMessageElement(LuaMiraiMessage.kt:34)
at com.ooooonly.luaMirai.lua.lib.mirai.LuaMiraiMessage.get(LuaMiraiMessage.kt:39)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:240)
at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:369)
at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:369)
at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invokeSuspend(EventLib.kt:64)
at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invoke(EventLib.kt)
...
你好!发现2个bug:
1.在lma上 对于Event的方法cancel()没有效果 。这个身边没电脑暂时不能测试mcl上的效果,目前只在安卓上测试无效。
2.电脑上mcl最新版mirai上开启chat-command,lua-mirai部分命令无法在聊天中正确识别格式。如/lua source list 这样会提示参数错误。其他插件正常
启动时自动导入&启用脚本
两种思路:
setting.yml
scripts:
-
path: /home/mirai/test1.lua
enable: true
-
path: /home/mirai/test2.lua
enable: false
miraiAndroid
的脚本导入功能,在 data/com.ooooonly.luaMirai/
目录下创建脚本文件夹,自动导入文件夹内所有文件.
├── bots
├── config
│ ├── com.ooooonly.luaMirai
│ │ └── setting.yml
│ ├── Console
│ │ ├── Command.yml
│ │ └── PermissionService.yml
│ └── net.mamoe.mirai-api-http
│ └── setting.yml
├── data
│ ├── com.ooooonly.luaMirai
│ │ ├── data
│ │ └── scripts
│ └── net.mamoe.mirai-api-http
│ ├── images
│ └── voices
mirai中改protocol可以以手机端登录(mamoe/mirai#488),请问lua-mirai有没有修改方法?
没有绑定设备信息的方法,每次重新登录都需要重新链接验证
Image ("/02DFDEDA-E46D-AB0B-7066-3D10A5527167")
必须得在这一串 UUID 前面加上一个正斜杠才能构造 Image 消息(另外第二个也要加 /)
TempMessageEvent希望尽快加上,爱O老师
我尝试使用ImageUrl函数来构建消息, 但调用函数后, 出现'Can't find match method "sendMessage"'的错误
执行web时,无法创建config.json
手动创建之后会有错误
`9月 20, 2020 10:18:40 上午 io.vertx.core.impl.BlockedThreadChecker
警告: Thread Thread[vert.x-eventloop-thread-0,5,main]=Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 2190 ms, time limit is 2000 ms
9月 20, 2020 10:18:41 上午 io.vertx.core.impl.BlockedThreadChecker
警告: Thread Thread[vert.x-eventloop-thread-0,5,main]=Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 3191 ms, time limit is 2000 ms
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.ooooonly.luaMirai.frontend.web.Config$Deploy.getPORT(Config.kt:44)
at com.ooooonly.luaMirai.frontend.web.verticals.LuaMiraiVertical.start(LuaMiraiVertical.kt:89)
at io.vertx.kotlin.coroutines.CoroutineVerticle$start$1.invokeSuspend(CoroutineVerticle.kt:53)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at io.vertx.kotlin.coroutines.VertxCoroutineExecutor.execute(VertxCoroutine.kt:214)
at kotlinx.coroutines.ExecutorCoroutineDispatcherBase.dispatch(Executors.kt:82)
at kotlinx.coroutines.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:288)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:109)
at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:49)
at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source)
at io.vertx.kotlin.coroutines.CoroutineVerticle.start(CoroutineVerticle.kt:51)
at io.vertx.core.Verticle.start(Verticle.java:66)
at io.vertx.core.impl.DeploymentManager.lambda$doDeploy$9(DeploymentManager.java:556)
at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)
at io.vertx.core.impl.EventLoopContext.lambda$executeAsync$0(EventLoopContext.java:38)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: io.vertx.core.json.DecodeException: Failed to decode:No content to map due to end-of-input
at [Source: (String)""; line: 1, column: 0]
at io.vertx.core.json.jackson.JacksonCodec.fromParser(JacksonCodec.java:100)
at io.vertx.core.json.jackson.JacksonCodec.fromString(JacksonCodec.java:58)
at io.vertx.core.json.JsonObject.fromJson(JsonObject.java:999)
at io.vertx.core.json.JsonObject.(JsonObject.java:54)
at com.ooooonly.luaMirai.frontend.web.Config.(Config.kt:65)
... 27 more
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
at [Source: (String)""; line: 1, column: 0]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4344)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4160)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2467)
at io.vertx.core.json.jackson.JacksonCodec.fromParser(JacksonCodec.java:97)
... 31 more
`
也无法打开管理界面
管理员权限 win server .12及之前版本未测试
报错信息如下:
/lua load ai.lua
2021-08-08 10:46:24 E/lua-mirai: load C:\bot\mcl-1.2.2\ai.lua: org.luaj.vm2.LuaError: load @C:\bot\mcl-1.2.2\ai.lua: java.lang.NullPointerException: Cannot invoke "java.io.InputStream.markSupported()" because "is" is null
疑似 is.mardSupported() 方法时 is 为null对象
我尝试输出了一下 msg:table,结果就是 msg 本身,并不是 table
我所写的代码
bot:subscribe(
"GroupMessageEvent",function(event)
if event.message:find("/pii") then
pii_jtt = {}
pii_value1 = event.message:gsub("/pii","")
pii_value = pii_value1:gsub(" ","")
pii_json = ("https://kspixivapi.herokuapp.com/v1/illust/detail/" .. pii_value)
pii_get_json = Http.get(pii_json)
pii_jtt = Json.parseJson(pii_get_json)
pii_title = pii_jtt["title"]
pii_painter = pii_jtt["user"]["name"]
pii_id = pii_jtt["id"]
--pii_create_date = pii_jtt["create_date"]
pii_o_pic = pii_jtt["meta_single_page"]["original_image_url"]
pii_pic = pii_o_pic:gsub("i.pximg.net","i.pixiv.cat")
--pii_pic = ([["]] .. pii_pic_1 .. [["]])
event.group:sendMessage( ImageUrl(pii_pic,group) .. "名称:" .. pii_title .. "," .. "画师名称:" .. pii_painter .. "," .. "图画ID:" .. pii_id) --这行报错
end
end)
但是会报错,错误log如下:
2020-10-22 20:42:25 E/Bot 1654723334: An exception was thrown under a coroutine of Bot
org.luaj.vm2.LuaError: @aio.lua:133 vm error: java.lang.Exception: Could not convert LuaValue to Any!
照理来说,subscribeMemberInvitedEvent 应该还有个是谁邀请的(?)否则和 subscribeMemberJoinEvent 不是被包含的关系么?
如果是插件的话,并不能插啊,
如果是一个独立的程序,什么参数可以运行啊
编译我也搞不来啊,从来没接触过 java,用的都是 c++ 那一套,java 真的不懂啊 QAQ
event.message.MessageSource:recall()
报下列错误
org.luaj.vm2.LuaError: @/data/luabot/ai.lua:11 attempt to call nil
at org.luaj.vm2.LuaValue.checkmetatag(LuaValue.java:3365)
at org.luaj.vm2.LuaValue.callmt(LuaValue.java:1997)
at org.luaj.vm2.LuaValue.call(LuaValue.java:1450)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:359)
at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invokeSuspend(EventLib.kt:69)
at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invoke(EventLib.kt)
at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invokeSuspend(EventChannel.kt:431)
at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invokeSuspend(EventChannel.kt:145)
at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invoke(EventChannel.kt)
at net.mamoe.mirai.internal.event.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:49)
at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
at net.mamoe.mirai.internal.event.Handler.onEvent(InternalEventListeners.kt:49)
at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:226)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler$handlePacket$7.invokeSuspend(QQAndroidBotNetworkHandler.kt:655)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler$handlePacket$7.invoke(QQAndroidBotNetworkHandler.kt)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler.handlePacket(QQAndroidBotNetworkHandler.kt:648)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invokeSuspend(QQAndroidBotNetworkHandler.kt:602)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invoke(QQAndroidBotNetworkHandler.kt)
at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.handleIncomingPacket$mirai_core(PacketFactory.kt:291)
at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.parseIncomingPacket(PacketFactory.kt:247)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler.generifiedParsePacket(QQAndroidBotNetworkHandler.kt:593)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler.parsePacket(QQAndroidBotNetworkHandler.kt:588)
at net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler$parsePacketAsync$1.invokeSuspend(QQAndroidBotNetworkHandler.kt:570)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
在使用中,我想解析一段json,我使用了文档中的json支持库中的函数,代码片段如下:
local a =232313 local msg = Http.get("http://api.qingyunke.com/api.php?key=free&appid=0&msg=" ..a) local t = Json.parseJson(msg) local status = t["content"] group:sendMessgae(status)
显示最后一行请求了nil,也尝试过将status给tostring但仍然出错,不知该如何结果
还有就是这里支持cjson嘛
主要就是想要基于代码点的 sub 函数
发现新版本message对象获取有亿点点麻烦
如果只是纯文本的话还要tostring才能匹配到
如旧版api event.message:find("test")
必须写为 tostring(event.message):find("test")
否则会报错
2021-02-11 02:27:50 W/stderr: org.luaj.vm2.LuaError: @mirai-scripts/events/MessageEvent.lua:37 bad argument: string expected, got table
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.LuaValue.argerror(LuaValue.java:1058)
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.LuaValue.checkjstring(LuaValue.java:966)
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.Varargs.checkjstring(Varargs.java:337)
2021-02-11 02:27:50 W/stderr: at com.ooooonly.luaMirai.lua.lib.HttpLib$call$$inlined$edit$lambda$1.invoke(LuaFunctionBuilder.kt:87)
2021-02-11 02:27:50 W/stderr: at com.ooooonly.luaMirai.lua.lib.HttpLib$call$$inlined$edit$lambda$1.invoke(LuaFunctionBuilder.kt)
2021-02-11 02:27:50 W/stderr: at com.ooooonly.luakt.LuaFunctionBuilderKt$varArgFunctionOf$1.onInvoke(LuaFunctionBuilder.kt:11)
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.lib.VarArgFunction.invoke(VarArgFunction.java:77)
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:369)
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
2021-02-11 02:27:50 W/stderr: at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
2021-02-11 02:27:50 W/stderr: at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invokeSuspend(EventLib.kt:64)
2021-02-11 02:27:50 W/stderr: at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invoke(EventLib.kt)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invokeSuspend(EventChannel.kt:431)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invokeSuspend(EventChannel.kt:145)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invoke(EventChannel.kt)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.event.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:49)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.event.Handler.onEvent(InternalEventListeners.kt:49)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:226)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$handlePacket$7.invokeSuspend(QQAndroidBotNetworkHandler.kt:676)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$handlePacket$7.invoke(QQAndroidBotNetworkHandler.kt)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.handlePacket(QQAndroidBotNetworkHandler.kt:669)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invokeSuspend(QQAndroidBotNetworkHandler.kt:626)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invoke(QQAndroidBotNetworkHandler.kt)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.handleIncomingPacket$mirai_core(PacketFactory.kt:289)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.parseIncomingPacket(PacketFactory.kt:245)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.generifiedParsePacket(QQAndroidBotNetworkHandler.kt:617)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.parsePacket(QQAndroidBotNetworkHandler.kt:612)
2021-02-11 02:27:50 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$parsePacketAsync$1.invokeSuspend(QQAndroidBotNetworkHandler.kt:594)
2021-02-11 02:27:50 W/stderr: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
2021-02-11 02:27:50 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
组合消息还没测试
另:
使用
for k,v in pairs(msg.__properties) do
print(k..":"..tostring(v))
end
查看 message 对象内的成员时报错
2021-02-11 02:17:08 W/stderr: org.luaj.vm2.LuaError: @mirai-scripts/events/MessageEvent.lua:36 bad argument: table expected, got nil
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.LuaValue.argerror(LuaValue.java:1058)
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.LuaValue.checktable(LuaValue.java:991)
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.Varargs.checktable(Varargs.java:351)
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.lib.BaseLib$pairs.invoke(BaseLib.java:402)
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:369)
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
2021-02-11 02:17:08 W/stderr: at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
2021-02-11 02:17:08 W/stderr: at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invokeSuspend(EventLib.kt:64)
2021-02-11 02:17:08 W/stderr: at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invoke(EventLib.kt)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invokeSuspend(EventChannel.kt:431)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invokeSuspend(EventChannel.kt:145)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invoke(EventChannel.kt)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.event.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:49)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.event.Handler.onEvent(InternalEventListeners.kt:49)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:226)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$handlePacket$7.invokeSuspend(QQAndroidBotNetworkHandler.kt:676)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$handlePacket$7.invoke(QQAndroidBotNetworkHandler.kt)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.handlePacket(QQAndroidBotNetworkHandler.kt:669)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invokeSuspend(QQAndroidBotNetworkHandler.kt:626)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invoke(QQAndroidBotNetworkHandler.kt)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.handleIncomingPacket$mirai_core(PacketFactory.kt:289)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.parseIncomingPacket(PacketFactory.kt:245)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.generifiedParsePacket(QQAndroidBotNetworkHandler.kt:617)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.parsePacket(QQAndroidBotNetworkHandler.kt:612)
2021-02-11 02:17:08 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$parsePacketAsync$1.invokeSuspend(QQAndroidBotNetworkHandler.kt:594)
2021-02-11 02:17:08 W/stderr: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
2021-02-11 02:17:08 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
但是 print(msg) 正常输出
想发送语音和视频但没法发送
既然有戳一戳的事件,我本以为是有被@的事件的,结果发现并没有
虽然可以用其他方法来替代,但是总归没有那么方面
后续有没有可能加上这个事件呢
1 按照文档使用
每次构造bot对象均需验证设备
2 考虑到登陆后本地未检索到device.json文件
分别尝试传入使用带有\和/的绝对路径 如"D:\\material\\mirai\\device.json"
依旧
3 传入带有fileBasedDeviceInfo成员的table 依旧如此
4 尝试使用console登录 登录成功并获取到对应device.json
在脚本中构造bot对象依旧需要验证
5 尝试在脚本中遍历bot对象
输出如下
lua-mirai版本为2.0.2
console和core版本为2.4
string.urlEncode = function (srcURL)
str = srcURL:gsub ("([^%w%-%. ])", function (c)
return string.format ("%%%02X", string.byte (c))
end):gsub(" ", "+")
-- print ("str", str)
return str
end
miraiAndroid上怎么用卡片呀?
应该是 getFriend?
请问该如何用image()发送手机内置存储中的图片?我尝试过图片uri和绝对路径都不行,只能用termux建立局域网服务器曲线救国…
使用示例脚本
Event.subscribe("GroupMessageEvent", function(event)
local group = event.group
local msg = event.message
if tostring(msg) == "一言" then
group:sendMessage(Http.get("https://v1.hitokoto.cn/?encode=text"))
end
end)
报错如下
2021-02-11 02:33:16 W/stderr: org.luaj.vm2.LuaError: @mirai-scripts/events/MessageEvent.lua:38 vm error: com.ooooonly.luakt.mapper.userdata.ParameterNotMatchException: 2 overload function has been tried as follow,but failed to match the corresponding overloaded function.Please check for incorrect use '.' Operator instead of ':' operator.
2021-02-11 02:33:16 W/stderr: sendMessage(null:GroupImpl,message:Message) Parameter not match:argument type mismatch
2021-02-11 02:33:16 W/stderr: sendMessage(null:GroupImpl,message:String) Parameter not match:argument type mismatch
2021-02-11 02:33:16 W/stderr:
2021-02-11 02:33:16 W/stderr: at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:506)
2021-02-11 02:33:16 W/stderr: at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
2021-02-11 02:33:16 W/stderr: at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
2021-02-11 02:33:16 W/stderr: at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invokeSuspend(EventLib.kt:64)
2021-02-11 02:33:16 W/stderr: at com.ooooonly.luaMirai.lua.lib.mirai.EventLib$subscriber$1$3.invoke(EventLib.kt)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invokeSuspend(EventChannel.kt:431)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invokeSuspend(EventChannel.kt:145)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.event.EventChannel$filter$1$intercepted$thisIntercepted$1.invoke(EventChannel.kt)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.event.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:49)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.event.Handler.onEvent(InternalEventListeners.kt:49)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:226)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$handlePacket$7.invokeSuspend(QQAndroidBotNetworkHandler.kt:676)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$handlePacket$7.invoke(QQAndroidBotNetworkHandler.kt)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.handlePacket(QQAndroidBotNetworkHandler.kt:669)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invokeSuspend(QQAndroidBotNetworkHandler.kt:626)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invoke(QQAndroidBotNetworkHandler.kt)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.handleIncomingPacket$mirai_core(PacketFactory.kt:289)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.protocol.packet.KnownPacketFactories.parseIncomingPacket(PacketFactory.kt:245)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.generifiedParsePacket(QQAndroidBotNetworkHandler.kt:617)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler.parsePacket(QQAndroidBotNetworkHandler.kt:612)
2021-02-11 02:33:16 W/stderr: at net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler$parsePacketAsync$1.invokeSuspend(QQAndroidBotNetworkHandler.kt:594)
2021-02-11 02:33:16 W/stderr: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
2021-02-11 02:33:16 W/stderr: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
2021-02-11 02:33:16 W/stderr: Caused by: com.ooooonly.luakt.mapper.userdata.ParameterNotMatchException: 2 overload function has been tried as follow,but failed to match the corresponding overloaded function.Please check for incorrect use '.' Operator instead of ':' operator.
2021-02-11 02:33:16 W/stderr: sendMessage(null:GroupImpl,message:Message) Parameter not match:argument type mismatch
2021-02-11 02:33:16 W/stderr: sendMessage(null:GroupImpl,message:String) Parameter not match:argument type mismatch
2021-02-11 02:33:16 W/stderr:
2021-02-11 02:33:16 W/stderr: at com.ooooonly.luakt.mapper.userdata.KotlinOverloadFunctionWrapper.onInvoke(KotlinOverloadFunctionWrapper.kt:29)
2021-02-11 02:33:16 W/stderr: at org.luaj.vm2.lib.VarArgFunction.invoke(VarArgFunction.java:77)
2021-02-11 02:33:16 W/stderr: at org.luaj.vm2.lib.VarArgFunction.call(VarArgFunction.java:62)
2021-02-11 02:33:16 W/stderr: at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:360)
2021-02-11 02:33:16 W/stderr: ... 34 more
以及body,isSuccessful,code,message= Http.get(URL)
body类型为ArrayVarargs
?
而且type(Http.get(URL))
也是ArrayVarargs
[root@host5979f72101 bot]# java -jar lua-mirai.jar web
Exception in thread "main" java.lang.Exception: 未知的运行参数!
at com.ooooonly.luaMirai.MainKt.main(main.kt:16)
at com.ooooonly.luaMirai.MainKt$$$main.invoke(Unknown Source)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at com.ooooonly.luaMirai.MainKt.main(main.kt)
另外该如何指定 lua-mirai 的运行端口?
RT,feature request
对于该问题,在http.post的示例中,请求头该如何填写呢。
RT
不知道如果不依赖 toTable 应该如何下载所有图片?(可能吗?)
在文档里面写到
Forward { -- 可省略括号
title = "群聊的聊天记录",
brief = "[聊天记录]",
source = "聊天记录",
preview = {
"消息概览1",
"消息概览2"
}, -- 可省略
summary = "查看 1 条转发消息" -- 可省略,
content = {
{
senderId = 123456789, -- 发送者 qq 号
time = 987654, -- 发送的时间戳
senderName = "发送者昵称1",
message = Message("消息1") .. Face(0) -- 显示的消息内容
},
{
senderId = 123456789,
time = 987654,
senderName = "发送者昵称2",
message = Message("消息2") .. Face(0) -- 显示的消息内容
},
}
}
会报错
2020-11-03 13:27:06 E/Bot 1654723334: An exception was thrown under a coroutine of Bot
org.luaj.vm2.LuaError: @aio.lua:339 attempt to call nil
如果按照event.group:sendMessage()
则会报错
2020-11-03 18:56:57 E/Bot 1654723334: An exception was thrown under a coroutine of Bot
org.luaj.vm2.LuaError: @aio.lua:327 vm error: java.lang.IllegalArgumentException: Forward nodeList mustn't be empty
请修复这个bug并更新文档,TKS
function onLoad(bot)
print("载入AIO bot"..bot.getId().."成功")
_aks = "737780365f656c04b4c405" --请在""中输入apikey
_apikey = "32d97878cf0e765e1e9d382a3b30b08e3f7b460d"
master = {1240188105} --请改为你的QQ,多管理员用,隔开
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/help") then
group:sendMsg("/p站搜图 - 以文字在P站搜索图片,但无法过滤R18 \n/一言 - 获取一言\n/二次元 - 获取二次元图片\n/menhera - 获取menhera图片\n/涩图 - 获取一张随机的涩图\n/st+关键字 - 搜索一张涩图\n/网抑云 - 获取网抑云语录\n/壁纸 - 获取一张壁纸\n/以图搜图 - 以一张图片获取一张图片")
end
end)
--p站搜图
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/p站搜图") then
group:sendMsg("正在搜索")
api_value = msg.gsub("/p站搜图","")
api_value = api_value.gsub(" ","")
function Table_Rand(t)
if t == nil then
return
end
local tRet = {}
local Total = #t
while Total > 0 do
local i = math.random(1,Total)
table.insert(tRet,t[i])
t[i] = t[Total]
Total = Total -1
end
return tRet
end
local urls = {}
local count = 0
while true do
count = count+1
api_json = ("https.//api.imjad.cn/pixiv/v2/?type=search&word=" .. api_value .. "&page=" ..count)
html = net.get(api_json)
if html.find('next_url".null') then
break
end
for i in html.gmatch('"original_image_url"."(.-)"') do
url1 = i.gsub("\\","")
url = url1.gsub("i.pximg.net","i.pixiv.cat")
table.insert(urls,url)
end
if count>10 then
break
end
end
group:sendMsg("解析完成")
local list = Table_Rand(urls)
local x = 0
for j,k in pairs(list) do
if x>5 then
break
end
x = x+1
group:sendMsg(FlashImage(Image(k,group)))
end
end
end)
--一言
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/一言") then
group:sendMsg( Msg().setQuote(msg)+"你要的一言来了.\n"+net.get("https.//api.ixiaowai.cn/ylapi/index.php"))
end
end)
--回复
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("中二") then
group:sendMsg(Msg().setQuote(msg)+"吾乃赤电魔教之教主,吾即是真理。\n来吧!吾等赤众们啊!\n今晚是嗜血之夜,血红之月乃我们前进的指标。\n吾封印之右手,觉醒吧!破坏吧!\n吞噬吾之敌人!欧 洲 之 魔 手!!!(学miru讲话")
end
end)
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("夸我") then
group:sendMsg(Msg().setQuote(msg)+net.get("https.//chp.shadiao.app/api.php"))
end
end)
bot:subscribe("GroupMessageEvent",function(event)
if event.message == "骂我" then
event.group:sendMessage(Quote(msg) + At(sender) + Http.get("https://nmsl.shadiao.app/api.php?level=min&lang=zh_cn"))
elseif event.message:find("骂他") then
local at
for k, v in pairs(event.message:toTable()) do
if v:find("mirai:at") then
at = v
break
end
end
event.group:sendMessage(at .. Http.get("https://nmsl.shadiao.app/api.php?lang=zh_cn"))
end
end)
--二次元
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/二次元") then
local erciyuan = ("https.//api.ixiaowai.cn/api/api.php")
group:sendMsg(Msg().setQuote(msg)+Msg().appendImage(erciyuan, group) )
end
end)
--menhare
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/menhera") then
local menhera = ("https.//api.ixiaowai.cn/mcapi/mcapi.php")
group:sendMsg(Msg().appendImage(menhera, group) )
end
end)
--涩图
bot:subscribeGroupMsg("GroupMessageEvent",function(event)
if event.message:find("/涩图") then
group:sendMsg(FlashImage(Image(Net.get("https.//api.lolicon.app/setu/").match('"url"."(.-)"').gsub("\\", ""), group)))
end
end)
--搜索涩图
_r18 = 0
bot:subscribeGroupMsg("GroupMessageEvent",function(event)
if event.message:find("/开启r18") then
function isInArray(t, val)
for _, v in ipairs(t) do
if v == val then
return true
end
end
return false
end
local TF = isInArray(master,sender.id)
if TF == true then
_r18 = 1
group:sendMsg("r18开启成功")
else
group:sendMsg("请联系bot主人授权")
end
end
if event.message:find("/关闭r18") then
_r18 = 0
group:sendMsg("r18已关闭")
end
if event.message:find("/st") then
group:sendMsg(FlashImage(Image("/096708CE-21F8-3AAD-B8E5-2223D679DAE4",group)))
api_value = msg.gsub("/st","")
if api_value.find(" ",-3)==nil then
api_value = api_value .. " 1"
end
api_num = api_value.match("%d",-2)
api_value = api_value.sub(1,-3)
if api_value == nil then
api_value = ''
end
if api_num == nil then
api_num = 1
end
api_json = ("https.//api.lolicon.app/setu/?apikey=" .. _aks .. "&r18=" .. _r18 .. "&num=" .. api_num .."&keyword=" ..api_value)
html = net.get(api_json)
if html.find("没有符合条件的色图") then
group:sendMsg("没有符合条件的色图")
end
--local m = Msg()
for i in html.gmatch('"url"."(.-)"') do
url = i.gsub("\\","")
--m = m+Image(url,group)
group:sendMsg(Image(url,group)) --一次发一张
end
--group.sendgroup:sendMsg(m) --一次发多张
end
end)
--网抑云
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/网抑云") then
api_json = net.get("http.//api.heerdev.top.4995/nemusic/random")
api_msg = api_json.match([["text"."(.-)"}]])
group:sendMsg(Quote(msg)+api_msg)
end
end)
--壁纸
bot:subscribeGroupMsg(
"GroupMessageEvent",function(event)
if event.message:find("/壁纸") then
group:sendMsg(Image(Net.get("https.//api.ixiaowai.cn/gqapi/gqapi.php"), group) )
end
end)
end
local bot = Bot(x,"x",{
protocol = "ANDROID_PHONE", --使用手表协议登录
fileBasedDeviceInfo = "config/device.json", --指定设备信息路径
noNetworkLog = true --不显示网络日志
})
bot:login()
local group = bot:getGroup(306713737)
onLoad(bot)
登陆好了之后就崩溃
Exception in thread "main" org.luaj.vm2.LuaError: @aio.lua:2 attempt to call nil
at org.luaj.vm2.LuaValue.checkmetatag(LuaValue.java:3365)
at org.luaj.vm2.LuaValue.callmt(LuaValue.java:1997)
at org.luaj.vm2.LuaValue.call(LuaValue.java:1512)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:359)
at org.luaj.vm2.LuaClosure.call(LuaClosure.java:142)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:357)
at org.luaj.vm2.LuaClosure.call(LuaClosure.java:133)
at com.ooooonly.luakt.LuaCodeRunnerKt.runLuaFile(LuaCodeRunner.kt:14)
at com.ooooonly.luaMirai.MainKt.execFile(main.kt:21)
at com.ooooonly.luaMirai.MainKt.main(main.kt:14)
at com.ooooonly.luaMirai.MainKt$$$main.invoke(Unknown Source)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:199)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:114)
at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at com.ooooonly.luaMirai.MainKt.main(main.kt)
如果不加onLoad(bot)
机器人只登陆,不会做任何动作
Exception in thread "main" org.luaj.vm2.LuaError: @aio.lua:357 index expected, got nil
at org.luaj.vm2.LuaValue.typerror(LuaValue.java:1073)
at org.luaj.vm2.LuaValue.settable(LuaValue.java:3329)
at org.luaj.vm2.LuaValue.set(LuaValue.java:1165)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:250)
at org.luaj.vm2.LuaClosure.call(LuaClosure.java:133)
at com.ooooonly.luakt.LuaCodeRunnerKt.runLuaFile(LuaCodeRunner.kt:14)
at com.ooooonly.luaMirai.MainKt.execFile(main.kt:21)
at com.ooooonly.luaMirai.MainKt.main(main.kt:14)
at com.ooooonly.luaMirai.MainKt$$$main.invoke(Unknown Source)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:199)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:114)
at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at com.ooooonly.luaMirai.MainKt.main(main.kt)
在我写的脚本中,我一直发现一下API一直报错,我写的和文档的一模一样也报错
message:find("xxx")
group:sendMessage("xxxx")
报错
2020-09-22 21:04:35 E/Bot 1654723334: An exception was thrown under a coroutine of Bot
org.luaj.vm2.LuaError: @aio.lua:18 attempt to index ? (a nil value)
at org.luaj.vm2.LuaValue.error(LuaValue.java:1041)
at org.luaj.vm2.LuaValue.indexerror(LuaValue.java:3393)
at org.luaj.vm2.LuaValue.gettable(LuaValue.java:3301)
at org.luaj.vm2.LuaValue.get(LuaValue.java:1136)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:259)
at org.luaj.vm2.LuaClosure.onInvoke(LuaClosure.java:178)
at org.luaj.vm2.LuaClosure.invoke(LuaClosure.java:171)
at org.luaj.vm2.LuaValue.invoke(LuaValue.java:1789)
at com.ooooonly.luakt.LuaValueExKt.invoke(LuaValueEx.kt:96)
at com.ooooonly.luaMirai.lua.bridge.coreimpl.BotCoreImpl$subscribe$job$1.invokeSuspend(BotCoreImpl.kt:141)
at com.ooooonly.luaMirai.lua.bridge.coreimpl.BotCoreImpl$subscribe$job$1.invoke(BotCoreImpl.kt)
at net.mamoe.mirai.event.SubscriberKt__SubscriberKt$subscribeAlways$1.invokeSuspend(subscriber.kt:271)
at net.mamoe.mirai.event.SubscriberKt__SubscriberKt$subscribeAlways$1.invoke(subscriber.kt)
at net.mamoe.mirai.event.internal.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:89)
at net.mamoe.mirai.event.internal.Handler$onEvent$2.invoke(InternalEventListeners.kt)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:160)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
at net.mamoe.mirai.event.internal.Handler.onEvent(InternalEventListeners.kt:89)
at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:248)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler.handlePacket(QQAndroidBotNetworkHandler.kt:520)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invokeSuspend(QQAndroidBotNetworkHandler.kt:476)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler$generifiedParsePacket$2.invoke(QQAndroidBotNetworkHandler.kt)
at net.mamoe.mirai.qqandroid.network.protocol.packet.KnownPacketFactories.handleIncomingPacket$mirai_core_qqandroid(PacketFactory.kt:279)
at net.mamoe.mirai.qqandroid.network.protocol.packet.KnownPacketFactories.parseIncomingPacket(PacketFactory.kt:235)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler.generifiedParsePacket(QQAndroidBotNetworkHandler.kt:467)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler.parsePacket(QQAndroidBotNetworkHandler.kt:462)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler$parsePacketAsync$1.invokeSuspend(QQAndroidBotNetworkHandler.kt:445)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
请问是有新写法了吗,如果是有,请更新文档
(PS. 可不可以出一份友好一点的文档?没有实例和构建方式就不知道应该怎么构建message函数)
万分感谢
aio.zip
Describe the bug
如题
To Reproduce
function test_json()
local s='{"n":"abc","m":[301,302],"p":123456.78}'
local j=Json.parseJson(s)
for k,v in pairs(j) do
print(k,v)
if type(v)=="table" then
for k1,v1 in pairs(v) do
print(k1,v1)
end
end
end
end
test_json()
Expected behavior
输出应该为:
m table: 597f48df
1 301
2 302
p 123456.78
n abc
实际输出:
m table: 58a120b0
n abc
Lua-Mirai 版本 1.1
r = UploadImage ("./test.png",nowGroup):1 vm error: java.net.MalformedURLException: no protocol: ./test.png
Trying:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113)
at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108)
at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:159)
at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112)
at com.ooooonly.luakt.LuaFunctionBuilderKt$luaFunctionOfKFunctions$1.onInvoke(LuaFunctionBuilder.kt:76)
at org.luaj.vm2.lib.VarArgFunction.invoke(VarArgFunction.java:77)
at org.luaj.vm2.lib.VarArgFunction.call(VarArgFunction.java:58)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:357)
at org.luaj.vm2.LuaClosure.call(LuaClosure.java:133)
at com.ooooonly.luakt.LuaCodeRunnerKt.runLuaFile(LuaCodeRunner.kt:14)
at com.ooooonly.luaMirai.MainKt.execFile(main.kt:21)
at com.ooooonly.luaMirai.MainKt.main(main.kt:14)
at com.ooooonly.luaMirai.MainKt$$$main.invoke(Unknown Source)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at com.ooooonly.luaMirai.MainKt.main(main.kt)
Caused by: net.mamoe.mirai.network.WrongPasswordException: Error(title=温馨提示, message=当前版本过低,请升级到QQ最新版 本。, errorInfo= )
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler.closeEverythingAndRelogin(QQAndroidBotNetworkHandler.kt:186)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler$closeEverythingAndRelogin$1.invokeSuspend(QQAndroidBotNetworkHandler.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:32)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:113)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:274)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:84)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at com.ooooonly.luaMirai.lua.bridge.coreimpl.BotCoreImpl.login(BotCoreImpl.kt:44)
... 23 more
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113)
at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108)
at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:159)
at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112)
at com.ooooonly.luakt.LuaFunctionBuilderKt$luaFunctionOfKFunctions$1.onInvoke(LuaFunctionBuilder.kt:76)
at org.luaj.vm2.lib.VarArgFunction.invoke(VarArgFunction.java:77)
at org.luaj.vm2.lib.VarArgFunction.call(VarArgFunction.java:58)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:357)
at org.luaj.vm2.LuaClosure.call(LuaClosure.java:133)
at com.ooooonly.luakt.LuaCodeRunnerKt.runLuaFile(LuaCodeRunner.kt:14)
at com.ooooonly.luaMirai.MainKt.execFile(main.kt:21)
at com.ooooonly.luaMirai.MainKt.main(main.kt:14)
at com.ooooonly.luaMirai.MainKt$$$main.invoke(Unknown Source)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at com.ooooonly.luaMirai.MainKt.main(main.kt)
Caused by: net.mamoe.mirai.network.WrongPasswordException: Error(title=温馨提示, message=当前版本过低,请升级到QQ最新版 本。, errorInfo= )
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler.closeEverythingAndRelogin(QQAndroidBotNetworkHandler.kt:186)
at net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler$closeEverythingAndRelogin$1.invokeSuspend(QQAndroidBotNetworkHandler.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:32)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:113)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:274)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:84)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at com.ooooonly.luaMirai.lua.bridge.coreimpl.BotCoreImpl.login(BotCoreImpl.kt:44)
at com.ooooonly.luaMirai.lua.bridge.coreimpl.BotCoreImpl.login(BotCoreImpl.kt:21)
... 23 more
Exception in thread "main" org.luaj.vm2.LuaError: @.\aio.lua:536 No matching method "login" could be found
at com.ooooonly.luakt.LuaFunctionBuilderKt$luaFunctionOfKFunctions$1.onInvoke(LuaFunctionBuilder.kt:87)
at org.luaj.vm2.lib.VarArgFunction.invoke(VarArgFunction.java:77)
at org.luaj.vm2.lib.VarArgFunction.call(VarArgFunction.java:58)
at org.luaj.vm2.LuaClosure.execute(LuaClosure.java:357)
at org.luaj.vm2.LuaClosure.call(LuaClosure.java:133)
at com.ooooonly.luakt.LuaCodeRunnerKt.runLuaFile(LuaCodeRunner.kt:14)
at com.ooooonly.luaMirai.MainKt.execFile(main.kt:21)
at com.ooooonly.luaMirai.MainKt.main(main.kt:14)
at com.ooooonly.luaMirai.MainKt$$$main.invoke(Unknown Source)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at com.ooooonly.luaMirai.MainKt.main(main.kt)
内核太低辣
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.