yyuueexxiinngg / onebot-kotlin Goto Github PK
View Code? Open in Web Editor NEWOneBot标准的Kotlin实现及mirai插件 - 原cqhttp-mirai
License: GNU Affero General Public License v3.0
OneBot标准的Kotlin实现及mirai插件 - 原cqhttp-mirai
License: GNU Affero General Public License v3.0
挂在服务器上基本上每天都要重上一次,然后qq群发消息,刚开始几分钟能发,过几分钟后消息的编号总是返回-1,然后不能成功发送.
感谢大神开发的cqhttp转mirai的插件!
没有看到已发布的JAR包,自己在使用Gradle+JDK1.8编译的时候出了问题:
build.gradle.kts:81:30: Unresolved reference: transferTo
还请告知解决方法,谢谢!
环境信息
cqhttp-mirai版本: 0.2.1
运行环境: windows server 2012+miraiOK win 386
连接方式: 反向WS
bug内容
反向ws链接没有heartbeat,长时间无指令上报后容易断开,只有在重启miraiOK才开始尝试重连(有时候也会触发自动重连,但有时候不会),且这条指令不会被上报。
确定bot没有被屏蔽,没有掉线,其他插件运行正常。
[21:02:30.8037] I MiraiOK 20200629.160938 running at windows-amd64
[21:02:30.8037] I 此程序以Affero GPL3.0协议发布,使用时请遵守协议
[21:02:30.8037] I 代码库: github.com/LXY1226/MiraiOK gitee.com/LXY1226/MiraiOK
[21:02:31.0810] I JRE: java version "1.8.0_231"
[21:02:31.0810] I JRE: Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
[21:02:31.0810] I JRE: Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
[21:02:31.0820] I 删除.lastupdate来在下次强制检查更新
[21:02:31.0820] I 启动Mirai...
Using proxy: null
You are running Mirai-Console-Wrapper under D:\CQP\Mirai
All additional libraries are located at D:\CQP\Mirai\libraries
Starting Mirai Console Pure, reset by clear /content/
Starting version check...
Fetching Newest Core Version ..
Stay on current version.
Fetching Newest Console Version of Pure
Stay on current version.
Version check complete, starting Mirai
shadow-Protocol:D:\CQP\Mirai\content\mirai-core-qqandroid-1.2.0.jar
Console :D:\CQP\Mirai\content\mirai-console-0.5.2.jar
Root :D:\CQP\Mirai/
21:02:31 [INFO] [Mirai 0.5.2 Pkmon] Mirai-console now running under D:\CQP\Mirai
21:02:31 [INFO] [Mirai 0.5.2 Pkmon] Get news in github: https://github.com/mamoe/mirai
21:02:31 [INFO] [Mirai 0.5.2 Pkmon] Mirai为开源项目,请自觉遵守开源项目协议
21:02:31 [INFO] [Mirai 0.5.2 Pkmon] Powered by Mamoe Technologies and contributors
21:02:32 [INFO] [Plugin Manager] 开始加载D:\CQP\Mirai/plugins/下的插件
21:02:32 [INFO] [Plugin Manager] loading plugin CQHTTPMirai
21:02:32 [ERROR] [Plugin Manager] failed to load plugin CQHTTPMirai , dependent class not found.
21:02:32 [ERROR] [Plugin Manager] java.lang.NoClassDefFoundError: kotlinx/serialization/json/JsonException
at tech.mihoyo.mirai.web.HttpApiServices.<init>(HttpApiServices.kt:9)
at tech.mihoyo.mirai.PluginBase.<clinit>(PluginBase.kt:29)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:156)
at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
at java.lang.reflect.Field.get(Field.java:393)
at kotlin.reflect.jvm.internal.KClassImpl$Data$objectInstance$2.invoke(KClassImpl.kt:116)
at kotlin.reflect.jvm.internal.ReflectProperties$LazyVal.invoke(ReflectProperties.java:62)
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
at kotlin.reflect.jvm.internal.KClassImpl$Data.getObjectInstance(KClassImpl.kt)
at kotlin.reflect.jvm.internal.KClassImpl.getObjectInstance(KClassImpl.kt:241)
at net.mamoe.mirai.console.plugins.PluginManager$loadPluginsImpl$3.invoke(PluginManager.kt:268)
at net.mamoe.mirai.console.plugins.PluginManager.loadPluginsImpl$mirai_console(PluginManager.kt:295)
at net.mamoe.mirai.console.plugins.PluginManager.loadPlugins(PluginManager.kt:79)
at net.mamoe.mirai.console.plugins.PluginManager.loadPlugins$default(PluginManager.kt:79)
at net.mamoe.mirai.console.MiraiConsole.start(MiraiConsole.kt:131)
at net.mamoe.mirai.console.MiraiConsole.start$default(MiraiConsole.kt:113)
at net.mamoe.mirai.console.pure.MiraiConsolePureLoader$Companion.load(MiraiConsolePureLoader.kt:22)
at net.mamoe.mirai.console.pure.MiraiConsolePureLoader.load(MiraiConsolePureLoader.kt)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at net.mamoe.mirai.console.wrapper.WrapperMain.start$mirai_console_wrapper(WrapperMain.kt:236)
at net.mamoe.mirai.console.wrapper.WrapperMain.preStartInNonNative$mirai_console_wrapper(WrapperMain.kt:207)
at net.mamoe.mirai.console.wrapper.WrapperCli.run(WrapperMain.kt:143)
at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:154)
at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:14)
at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:252)
at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:249)
at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:267)
at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:290)
at net.mamoe.mirai.console.wrapper.WrapperMain.main(WrapperMain.kt:176)
Caused by: java.lang.ClassNotFoundException: kotlinx.serialization.json.JsonException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 35 more
21:02:32 [INFO] [Plugin Manager] 加载了0个插件
21:02:32 [INFO] [Mirai 0.5.2 Pkmon] Mirai-console 启动完成
21:02:32 [INFO] [Mirai 0.5.2 Pkmon] "login qqnumber qqpassword " to login a bot
21:02:32 [INFO] [Mirai 0.5.2 Pkmon] "login qq号 qq密码 " 来登录一个BOT
原版cqhttp同时支持Content type为application/json
和application/x-www-form-urlencoded
的POST请求,Python的requests库的POST类型默认使用后者,请问是否有可能让cqhttp-mirai也同时支持两种POST的解析?
RT
目前在尝试该版本,发现无法读取miraiOK的config.txt达到自动登录,可否考虑该功能?
日志如下:
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbSendMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Recv: MessageSvcPbSendMsg.Response.SUCCESS
[INFO] [BOT xxxxxx] Friend(470131799) <- 咕噜灵波~
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
[INFO] [BOT xxxxxx] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=)
[INFO] [NETWORK] Send: MessageSvc.PbGetMsg
[INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
在当前的0.2.1(embedded)版本中,使用CQHTTPMirai支持的多账户配置,配合mirai的多账户登录功能,可以成功使多个账号连接同一个反向WS插件,但对于正向WS则不行,第二个登录的账号会在登录成功后报错"Address already in use",无法与第一个账号登录时连接上的正向WS插件通信。考虑到多个账号的连接都是由同一个CQHTTPMirai插件进行处理的,请问是否有可能使多个账号同时连接同一个正向WS地址?
Exception in thread "DefaultDispatcher-worker-6" java.lang.IllegalStateException: Reader has not consumed the whole input: JsonReader(source='Oh hi there! How are you?', currentPosition=5, tokenClass=0, tokenPosition=3, offset=3)
at kotlinx.serialization.json.Json.parse(Json.kt:132)
at kotlinx.serialization.json.Json$Default.parse(Json.kt:210)
at kotlinx.serialization.json.Json$Default.parseJson(Json.kt:231)
at tech.mihoyo.mirai.web.http.ReportService.report(ReportService.kt:135)
at tech.mihoyo.mirai.web.http.ReportService$report$1.invokeSuspend(ReportService.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:238)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:194)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:144)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:238)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:194)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:144)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:238)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:194)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:144)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:238)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:194)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:144)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
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)
但是确实上报服务端收到了请求[PicqBotX] [DEBUG(java.lang.Thread.run:748)] Http Failed: INCORRECT_CHARSET: Not UTF-8
提示不是UTF-8
mirai不读取plugins下面的子目录,jar必须放在plugins内才能读取,和readme有出入
19:22:01 [WARNING] [CQHTTPMirai] Websocket连接出错, 未知错误, 请检查配置, 如配置错误请修正后重启mirai Server error(https://botapi.dead-war.cn/ws: 502 Bad Gateway.io.ktor.client.features.ServerResponseException
19:22:09 [WARNING] [CQHTTPMirai] Websocket连接出错, 未知错误, 请检查配置, 如配置错误请修正后重启mirai Server error(https://botapi.dead-war.cn/ws: 502 Bad Gateway.io.ktor.client.features.ServerResponseException
19:22:17 [WARNING] [CQHTTPMirai] Websocket连接出错, 未知错误, 请检查配置, 如配置错误请修正后重启mirai Server error(https://botapi.dead-war.cn/ws: 502 Bad Gateway.io.ktor.client.features.ServerResponseException
19:22:25 [WARNING] [CQHTTPMirai] Websocket连接出错, 未知错误, 请检查配置, 如配置错误请修正后重启mirai Server error(https://botapi.dead-war.cn/ws: 502 Bad Gateway.io.ktor.client.features.ServerResponseException
19:22:33 [WARNING] [CQHTTPMirai] Websocket连接出错, 未知错误, 请检查配置, 如配置错误请修正后重启mirai Server error(https://botapi.dead-war.cn/ws: 502 Bad Gateway.io.ktor.client.features.ServerResponseException
目前的配置文件如下:
ws_reverse:
# 可选,是否启用反向客户端,默认不启用
- enable: true
# 上报消息格式,string 为字符串格式,array 为数组格式
postMessageFormat: string
# 反向Websocket主机
reverseHost: botapi.dead-war.cn
# 反向Websocket端口
reversePort: 443
# 访问口令, 默认为空, 即不设置Token
accessToken: token
# 反向Websocket路径
reversePath: /ws
# 反向 WebSocket 客户端断线重连间隔,单位毫秒
reconnectInterval: 3000
" 04:01:50 [INFO] [CQHTTPMirai] Bot:3096679609 反向Websocket模块启用状态: false"
服务器上的反向监听端口已经开启,但登录qq后一直报错:反向监听端口未开启
server reeturned HTTP response cod:502 for URL: https://pan.jasonczc.cn/?/mirai/plugins/CQHTTPMirai/CQHTTPMirai-0.1.3.mp4
在CQHTTP的CQHTTP的api说明中,CQHTTP会同时监听/api /event 和 / 三个路径,而 / 路径可以处理event和api的所有请求。
但是经测试,cqhttp-mirai在 / 路径上请求时只能获得/event信息,/api会被原样返回无法执行,导致插件无法正常迁移。
希望能修复这个问题或提供一些解决方法。感谢!
�[0m 16:00:11 �[38;5;196m[WARNING]�[39;49m [CQHTTPMirai] Websocket连接已断开, 将在3秒后重试连接�[39;49m
�[0m 16:00:15 �[38;5;196m[WARNING]�[39;49m [CQHTTPMirai] Websocket连接出错, 未知错误, 放弃重试连接, 请检查配置正确后重启mirai Server error(ws://xn--v9x.net:80/ws: 502 Bad Gateway.io.ktor.client.features.ServerResponseException�[39;49m
你好,为了和cqhttp表现一致,群管理的role返回的应该是admin,实际使用过程中发现返回administrator。然后发现该问题修复其实已经早就修复,但是是在0.1.4release之后修复的,最新release的0.1.4的jar包还是旧的。请问何时release?
[DEBUG] [CQHTTPMirai] 收到上报响应 {"at_sender":false,"reply":[{"type":"share","data":{"url":"https://ff14.huijiwiki.com/wiki/ItemSearch?name=%E7%A5%9E%E9%BE%99","title":"\u795e\u9f99\u7684\u641c\u7d22\u7ed3\u679c","content":"\u5171\u6709 48 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7269\u54c1\u3002","image":"https://huiji-thumb.huijistatic.com/ff14/uploads/thumb/f/f2/Afaf712f5217a53fb07ed791cada1f9d4eb21e77.png/80px-Afaf712f5217a53fb07ed791cada1f9d4eb21e77.png"}}]}
实际未回复消息。
好友请求、群请求、群邀请在nonebot都无法收到。但是通过ws正向连接调试看到插件是可以正常处理这类消息的。
通过nonebot的MessageSegment.image(f'file:///{os.path.abspath(self.path)}')
转成CQ码发送后,静态图片JPG PNG都没问题,gif就变成静态的了。都是本地图片文件。
log:
[21:06:53.1464] I 此程序以Affero GPL3.0协议发布,使用时请遵守协议
[21:06:53.1464] I 代码库: github.com/LXY1226/MiraiOK gitee.com/LXY1226/MiraiOK
[21:06:53.4755] I JRE: java version "1.8.0_231"
[21:06:53.4755] I JRE: Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
[21:06:53.4755] I JRE: Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
[21:06:53.4755] I 删除.lastupdate来在下次强制检查更新
[21:06:53.4765] I 启动Mirai...
Using proxy: null
You are running Mirai-Console-Wrapper under D:\CQP\Mirai
All additional libraries are located at D:\CQP\Mirai\libraries
Starting Mirai Console Pure, reset by clear /content/
Starting version check...
Fetching Newest Core Version ..
Stay on current version.
Fetching Newest Console Version of Pure
Stay on current version.
Version check complete, starting Mirai
shadow-Protocol:D:\CQP\Mirai\content\mirai-core-qqandroid-1.1.3.jar
Console :D:\CQP\Mirai\content\mirai-console-0.5.2.jar
Root :D:\CQP\Mirai/
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] Mirai-console now running under D:\CQP\Mirai
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] Get news in github: https://github.com/mamoe/mirai
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] Mirai为开源项目,请自觉遵守开源项目协议
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] Powered by Mamoe Technologies and contributors
21:06:54 [INFO] [Plugin Manager] 开始加载D:\CQP\Mirai/plugins/下的插件
21:06:54 [INFO] [Plugin Manager] loading plugin CQHTTPMirai
21:06:54 [INFO] [Plugin Manager] successfully loaded plugin CQHTTPMirai version 0.1.8 by yyuueexxiinngg
21:06:54 [INFO] [Plugin Manager] Mirai to CoolQ HTTP API Plugin
21:06:54 [INFO] [CQHTTPMirai] Plugin loaded! 0.1.8
21:06:54 [INFO] [Plugin Manager] 加载了1个插件
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] Mirai-console 启动完成
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] "login qqnumber qqpassword " to login a bot
21:06:54 [INFO] [Mirai 0.5.2 Pkmon] "login qq号 qq密码 " 来登录一个BOT
21:06:54 [INFO] [Bot Login] login...
21:06:57 [INFO] [BOT 3173857429] Logging in...
21:06:57 [INFO] [NETWORK] Connected to server msfwifi.3g.qq.com:8080
21:06:57 [INFO] [NETWORK] Send: wtlogin.login
21:06:57 [INFO] [NETWORK] Recv: LoginPacketResponse.Success
21:06:57 [INFO] [NETWORK] Login successful
21:06:57 [INFO] [NETWORK] Send: StatSvc.register
21:06:57 [INFO] [NETWORK] Recv: Response(StatSvc.register)
21:06:57 [INFO] [NETWORK] 开始加载好友信息
21:06:57 [INFO] [NETWORK] 开始加载群组列表与群成员列表
21:06:57 [INFO] [NETWORK] Send: friendlist.getFriendGroupList
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopListReqV2
21:06:57 [INFO] [NETWORK] Recv: FriendList.GetFriendGroupList.Response
21:06:57 [INFO] [NETWORK] 正在加载好友列表 8/8
21:06:57 [INFO] [NETWORK] 好友列表加载完成, 共 8个
21:06:57 [INFO] [NETWORK] Recv: FriendList.GetFriendGroupList.Response
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:57 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:58 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:58 [INFO] [NETWORK] 群组列表与群成员加载完成, 共 13个
21:06:58 [INFO] [NETWORK] Awaiting ConfigPushSvc.PushReq
21:06:58 [INFO] [NETWORK] Syncing friend message history...
21:06:58 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:58 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:58 [INFO] [BOT 3173857429] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=<Iterable>))
21:06:58 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:59 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:59 [INFO] [BOT 3173857429] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=<Iterable>))
21:06:59 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:59 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:59 [INFO] [BOT 3173857429] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, messages=<Iterable>))
21:06:59 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:59 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:59 [INFO] [NETWORK] Syncing friend message history: Success
21:06:59 [INFO] [BOT 3173857429] [Maple Tavern ? Minecraft(330986863)] 萌 BadLee 新(1742594439) ->[mirai:source:1608076,80408718][mirai:quote:1608070,-965793259][mirai:at:564193464,@以Minecraft为载体的再演绎(cover)] [mirai:at:564193464,@以Minecraft为载体的再演绎(cover)] 建议直接武器A
21:06:59 [INFO] [BOT 3173857429] Event processing: An exception occurred but no CoroutineExceptionHandler found,
either in coroutineContext from Handler job, or in subscriberContext
21:06:59 [INFO] [NETWORK ERROR] java.util.NoSuchElementException: 3173857429
at net.mamoe.mirai.console.plugins.ConfigSection$DefaultImpls.getConfigSection(ConfigSection.kt:324)
at net.mamoe.mirai.console.plugins.FileConfigImpl.getConfigSection(ConfigSection.kt:482)
at tech.mihoyo.mirai.PluginBase$onEnable$1.invokeSuspend(PluginBase.kt:25)
at tech.mihoyo.mirai.PluginBase$onEnable$1.invoke(PluginBase.kt)
at net.mamoe.mirai.event.SubscriberKt__SubscriberKt$subscribeAlways$1.invokeSuspend(subscriber.kt:269)
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 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)
21:06:59 [INFO] [BOT 3173857429] Login successful
21:06:59 [INFO] [Command] 3173857429 login successes
21:07:00 [INFO] [NETWORK] Received unknown commandName: ConfigPushSvc.PushDomain
21:07:00 [INFO] [NETWORK] Recv: ConfigPushSvc.PushReq.PushReqResponse.Success
21:07:00 [INFO] [NETWORK] Send: ConfigPushSvc.PushResp
21:07:00 [INFO] [NETWORK] ConfigPushSvc.PushReq: Success
21:07:01 [INFO] [BOT 3173857429] [Maple Tavern ? Minecraft(330986863)] Lemon tree(1595862564) -> [mirai:source:1608077,1992608905]foreign fart
21:07:03 [INFO] [BOT 3173857429] [FTS||FTS's?Circuit for survival(1033662023)] xli9527(1172326686)-> [mirai:source:28443,355435764]??
21:07:10 [INFO] [NETWORK] Send: OnlinePush.RespPush
纯属看着不舒服()
测试了一下,在群里可以发送长消息,如果是私发给群友就发不出去了。请问这是mirai的限制还是插件的bug?有解决办法吗?
用的是yobot源码版,自己加了点搜图功能。使用CQ发送图片很容易出现这个情况。
下面是miraiOK里信息,貌似图片已经上传完成,但是cqhttp-mirai被阻塞了一样。最后图片依旧没发出来。要卡在这里好久等WebSocket API call timeout。期间miraiOK可以接收到qq的信息,yobot要等WebSocket API call timeout异常抛出后,才接收到miraiOK之前接收到的消息。
Send: ImgStore.GroupPicUp
17:35:39 [INFO] [NETWORK] Recv: RequireUpload(fileId=2903055332, uKey=[75, 37, -21, 88, 71, -22, 15, 10, -58, -43, 59, -120, -36, 112, 113, 112, -125, -56, -70, -45, -70, 12, -25, -101, -114, -78, -88, 116, -86, -108, 50, -1, 92, 54, 31, -100, -14, -2, -123, 105, 76, -99, -47, -110, 88, 106, 57, 12, 15, 114, -103, -5, -83, 54, -33, -108, 53, 117, -64, -114, 122, 0, 3, 1, -14, 123, -118, -105, 73, -34, -41, 126, 117, -72, 56, 7, 58, 58, 84, -63, 14, 7, 84, 91, -58, 65, 102, 66, -64, -34, 17, -7, -42, -16, 83, 57, -18, -35, -65, 12, -54, -81, 12, -4, 1, 125, -42, 16, 57, 7, 73, 122, -51, -51, 90, -102, -118, 9, 120, 46, 14, -102, 21, -55, 57, -80, -98, -102])
17:35:39 [INFO] [NETWORK] [Highway] Uploading group image to 203.205.236.76:8080, size=72.46 KiB
请问产生原因以及解决方法
试图用CQHTTP
的CQ码
发送图片时,出现了一系列问题:
使用file URI
格式发送图片,如[CQ:image,file=file:///xxx/xxx/xxx.jpg]
,Mirai
报如下错误:
17:41:29 [ERROR] [CQHTTPMirai] java.lang.IllegalArgumentException: message is empty at net.mamoe.mirai.qqandroid.contact.FriendImpl.sendMessage(FriendImpl.kt:89) ...
使用base64
发送图片,如来自CQHTTP
官方示例的[CQ:image,file=base64://iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAAKElEQVQ4EWPk5+RmIBcwkasRpG9UM4mhNxpgowFGMARGEwnBIEJVAAAdBgBNAZf+QAAAAABJRU5ErkJggg==]
,Mirai
未报错,但QQ不能正常显示(提示“图片已过期”)
使用HTTPS
链接发送图片,如[CQ:image,file=https://i.loli.net/2020/05/28/uKvIAWadFC3csPO.jpg]
,Mirai
报如下错误:
18:00:22 [ERROR] [CQHTTPMirai] java.io.IOException: Server returned HTTP response code: 403 for URL: https://i.loli.net/2020/05/28/uKvIAWadFC3csPO.jpg at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1900) ...
看了项目源码,感觉是支持CQ码
发送图片的,请问我哪里存在错误,应该如何使用?
提前感谢帮助!
这个与原版cqhttp有差异。
另(mirai-native-cqhttp中也没有,go-cqhttp中有,也许是mirai-core不支持)
使用koishi开发的程序,切换到miria后恰好没有http api或者正向websocket服务,头疼
您好,发现几个bug,plugins里的配置文件是这个
`# Debug日志输出选项
debug: false
'q号':
cacheImage: false
cacheRecord: false
heartbeat:
# 是否发送心跳包, 默认为否
enable: false
# 心跳包发送间隔, 默认为 15000毫秒
interval: 15000
http:
# 可选,是否启用HTTP API服务器, 默认为不启用, 此项开始与否跟postUrl无关
enable: true
# 可选,HTTP API服务器监听地址, 默认为0.0.0.0
host: 0.0.0.0
# 可选,HTTP API服务器监听端口, 5700
port: 5700
# 可选,访问口令, 默认为空, 即不设置Token
accessToken: ""
# 可选,事件及数据上报URL, 默认为空, 即不上报
postUrl: ""
# 可选,上报消息格式,string 为字符串格式,array 为数组格式, 默认为string
postMessageFormat: string
# 可选,上报数据签名密钥, 默认为空
secret: ""
ws_reverse:
# 可选,是否启用反向客户端,默认不启用
- enable: true
# 上报消息格式,string 为字符串格式,array 为数组格式
postMessageFormat: string
# 反向Websocket主机
reverseHost: 127.0.0.1
# 反向Websocket端口
reversePort: 9999
# 访问口令, 默认为空, 即不设置Token
accessToken: ""
# 反向Websocket路径
reversePath: /ws
# 可选, 反向Websocket Api路径, 默认为reversePath
reverseApiPath: /api
# 可选, 反向Websocket Event路径, 默认为reversePath
reverseEventPath: /event
# 是否使用Universal客户端 默认为true
useUniversal: true
# 反向 WebSocket 客户端断线重连间隔,单位毫秒
reconnectInterval: 3000
- enable: true # 这里是第二个连接, 相当于CQHTTP分身版
postMessageFormat: string
reverseHost: 127.0.0.1
reversePort: 9222
reversePath: /ws
useUniversal: true
reconnectInterval: 3000
ws:
# 可选,是否启用正向Websocket服务器,默认不启用
enable: true
# 可选,上报消息格式,string 为字符串格式,array 为数组格式, 默认为string
postMessageFormat: string
# 可选,访问口令, 默认为空, 即不设置Token
accessToken: ""
# 监听主机
wsHost: "0.0.0.0"
# 监听端口
wsPort: 8080
'0987654321': # 这里是第二个QQ Bot的配置
ws_reverse:
- enable: true
postMessageFormat: string
reverseHost:
reversePort:
reversePath: /ws
reconnectInterval: 3000`
我调用HTTP api
POST /send_group_msg HTTP/1.1
Content-Length: 54
Content-Type: application/json
Host: 127.0.0.1:5700
{
"group_id":1048307612,
"message":"我试下at"
}
HTTP/1.1 200 OK
Content-Length: 89
Content-Type: application/json; charset=UTF-8
Connection: keep-alive
{"status":"ok","retcode":0,"data":{"type":"MessageData","message_id":110144},"echo":null}
log:
[21:06:28.9287] I 启动Mirai...
Using proxy: null
You are running Mirai-Console-Wrapper under D:\CQP\Mirai
All additional libraries are located at D:\CQP\Mirai\libraries
Starting Mirai Console Pure, reset by clear /content/
Starting version check...
Fetching Newest Core Version ..
Stay on current version.
Fetching Newest Console Version of Pure
Stay on current version.
Version check complete, starting Mirai
shadow-Protocol:D:\CQP\Mirai\content\mirai-core-qqandroid-1.1.3.jar
Console :D:\CQP\Mirai\content\mirai-console-0.5.2.jar
Root :D:\CQP\Mirai/
21:06:29 [INFO] [Mirai 0.5.2 Pkmon] Mirai-console now running under D:\CQP\Mirai
21:06:29 [INFO] [Mirai 0.5.2 Pkmon] Get news in github: https://github.com/mamoe/mirai
21:06:29 [INFO] [Mirai 0.5.2 Pkmon] Mirai为开源项目,请自觉遵守开源项目协议
21:06:29 [INFO] [Mirai 0.5.2 Pkmon] Powered by Mamoe Technologies and contributors
21:06:29 [INFO] [Plugin Manager] 开始加载D:\CQP\Mirai/plugins/下的插件
21:06:30 [INFO] [Plugin Manager] loading plugin CQHTTPMirai
21:06:30 [INFO] [Plugin Manager] successfully loaded plugin CQHTTPMirai version 0.1.9 by yyuueexxii
nngg
21:06:30 [INFO] [Plugin Manager] Mirai to CoolQ HTTP API Plugin
21:06:30 [INFO] [CQHTTPMirai] Plugin loaded! 0.1.9
21:06:30 [INFO] [Plugin Manager] 加载了1个插件
21:06:30 [INFO] [Mirai 0.5.2 Pkmon] Mirai-console 启动完成
21:06:30 [INFO] [Mirai 0.5.2 Pkmon] "login qqnumber qqpassword " to login a bot
21:06:30 [INFO] [Mirai 0.5.2 Pkmon] "login qq号 qq密码 " 来登录一个BOT
21:06:30 [INFO] [Bot Login] login...
21:06:32 [INFO] [BOT 3173857429] Logging in...
21:06:32 [INFO] [NETWORK] Connected to server 42.81.172.81:80
21:06:33 [INFO] [NETWORK] Send: wtlogin.login
21:06:33 [INFO] [NETWORK] Recv: LoginPacketResponse.Success
21:06:33 [INFO] [NETWORK] Login successful
21:06:33 [INFO] [NETWORK] Send: StatSvc.register
21:06:33 [INFO] [NETWORK] Recv: Response(StatSvc.register)
21:06:33 [INFO] [NETWORK] 开始加载好友信息
21:06:33 [INFO] [NETWORK] 开始加载群组列表与群成员列表
21:06:33 [INFO] [NETWORK] Send: friendlist.getFriendGroupList
21:06:33 [INFO] [NETWORK] Send: friendlist.GetTroopListReqV2
21:06:33 [INFO] [NETWORK] Recv: FriendList.GetFriendGroupList.Response
21:06:33 [INFO] [NETWORK] 正在加载好友列表 8/8
21:06:33 [INFO] [NETWORK] 好友列表加载完成, 共 8个
21:06:33 [INFO] [NETWORK] Recv: FriendList.GetFriendGroupList.Response
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:33 [INFO] [NETWORK] Send: OidbSvc.0x88d_7
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:34 [INFO] [NETWORK] Send: friendlist.GetTroopMemberListReq
21:06:35 [INFO] [NETWORK] Recv: FriendList.GetTroopMemberList.Response
21:06:35 [INFO] [NETWORK] 群组列表与群成员加载完成, 共 13个
21:06:35 [INFO] [NETWORK] Awaiting ConfigPushSvc.PushReq
21:06:35 [INFO] [NETWORK] Syncing friend message history...
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:35 [INFO] [BOT 3173857429] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, me
ssages=<Iterable>))
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:35 [INFO] [BOT 3173857429] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, me
ssages=<Iterable>))
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:35 [INFO] [BOT 3173857429] Event: MessageSvcPbGetMsg.Response(syncFlagFromServer=CONTINUE, me
ssages=<Iterable>))
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
21:06:35 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
21:06:35 [INFO] [NETWORK] Syncing friend message history: Success
21:06:35 [INFO] [CQHTTPMirai] Bot: 3173857429 HTTP API服务端是否配置开启: true
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
21:06:35 [INFO] [CQHTTPMirai] Bot: 3173857429 正向Websocket服务端是否配置开启: true
21:06:35 [INFO] [BOT 3173857429] Login successful
21:06:35 [INFO] [Command] 3173857429 login successes
21:06:36 [INFO] [NETWORK] Recv: ConfigPushSvc.PushReq.PushReqResponse.Success
21:06:36 [INFO] [NETWORK] Recv: ConfigPushSvc.PushReq.PushReqResponse.Success
21:06:36 [INFO] [NETWORK] Send: ConfigPushSvc.PushResp
21:06:36 [INFO] [NETWORK] Send: ConfigPushSvc.PushResp
21:06:36 [INFO] [NETWORK] ConfigPushSvc.PushReq: Success
21:06:43 [INFO] [NETWORK] Send: MessageSvc.PbSendMsg
21:06:43 [INFO] [NETWORK] Recv: MessageSvcPbSendMsg.Response.SUCCESS
21:06:44 [INFO] [BOT 3173857429] Group(1048307612) <- ???è?????at
我想通过cqhttp-mirai来使用FFXIVBOT的服务。
FFXIVBOT也是个开源的项目,仓库位于:
https://github.com/Bluefissure/FFXIVBOT
但无论如何都连不上,经过排查发现是由于User-Agent导致访问被拒绝。
因为cqhttp-mirai是移植CQHTTP来开发的。
所以可以一起讨论一下,这个情况怎么解决比较好。
https://github.com/Bluefissure/FFXIVBOT/blob/22731629b15fa676ea8b9a1fb9784a3f095692b4/ffxivbot/consumers.py#L92-L109
来自其他仓库的引用似乎无法解析,不过可以手动点进去。
A和B指定同一个端口的反向Websocket后端, 都登陆后, A和B的消息后端都会收取到2次
18:35:28 [DEBUG] [CQHTTPMirai] 127.0.0.1:8011-Client-Universal 开始启动
18:35:29 [WARNING] [CQHTTPMirai] Websocket连接出错, 请检查服务器是否开启并确认正确监听端口, 将在3秒后重试连接, Host: 127.0.0.1:8011-Client-Universal Path: /ws
18:35:29 [INFO] [ConsoleAddition] [NETWORK] Received unknown commandName: ConfigPushSvc.PushDomain
18:35:30 [INFO] [ConsoleAddition] [NETWORK] Recv: ConfigPushSvc.PushReq.PushReqResponse.Success
18:35:30 [INFO] [ConsoleAddition] [NETWORK] Send: ConfigPushSvc.PushResp
18:35:30 [INFO] [ConsoleAddition] [NETWORK] ConfigPushSvc.PushReq: Success
18:35:32 [DEBUG] [CQHTTPMirai] 127.0.0.1:8011-Client-Universal 开始启动
18:35:32 [WARNING] [CQHTTPMirai] Websocket连接出错, 请检查服务器是否开启并确认正确监听端口, 将在3秒后重试连接, Host: 127.0.0.1:8011-Client-Universal Path: /ws
18:35:35 [DEBUG] [CQHTTPMirai] 127.0.0.1:8011-Client-Universal 开始启动
18:35:35 [WARNING] [CQHTTPMirai] Websocket连接出错, 请检查服务器是否开启并确认正确监听端口, 将在3秒后重试连接, Host: 127.0.0.1:8011-Client-Universal Path: /ws
[19,047s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
Exception in thread "DefaultDispatcher-worker-3" java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
at java.base/java.lang.Thread.start0(Native Method)
at java.base/java.lang.Thread.start(Thread.java:803)
at kotlinx.coroutines.scheduling.CoroutineScheduler.createNewWorker(CoroutineScheduler.kt:485)
at kotlinx.coroutines.scheduling.CoroutineScheduler.tryCreateWorker(CoroutineScheduler.kt:443)
at kotlinx.coroutines.scheduling.CoroutineScheduler.tryCreateWorker$default(CoroutineScheduler.kt:431)
at kotlinx.coroutines.scheduling.CoroutineScheduler.signalCpuWork$kotlinx_coroutines_core(CoroutineScheduler.kt:427)
at kotlinx.coroutines.scheduling.CoroutineScheduler.dispatch(CoroutineScheduler.kt:399)
at kotlinx.coroutines.scheduling.CoroutineScheduler.dispatch$default(CoroutineScheduler.kt:383)
at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.dispatch(Dispatcher.kt:61)
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.ktor.network.selector.ActorSelectorManager.(ActorSelectorManager.kt:40)
at io.ktor.client.engine.cio.CIOEngine$selectorManager$2.invoke(CIOEngine.kt:28)
at io.ktor.client.engine.cio.CIOEngine$selectorManager$2.invoke(CIOEngine.kt:19)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at io.ktor.client.engine.cio.CIOEngine.getSelectorManager(CIOEngine.kt)
at io.ktor.client.engine.cio.CIOEngine.(CIOEngine.kt:30)
at io.ktor.client.engine.cio.CIO.create(CIO.kt:20)
at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:39)
at io.ktor.client.HttpClientJvmKt.HttpClient(HttpClientJvm.kt:21)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient.startGeneralWebsocketClient(WebsocketReverseClient.kt:67)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient.startGeneralWebsocketClient(WebsocketReverseClient.kt:121)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient$startGeneralWebsocketClient$1.invokeSuspend(WebsocketReverseClient.kt)
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)
18:35:38 [DEBUG] [CQHTTPMirai] 127.0.0.1:8011-Client-Universal 开始启动
[19,067s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
Exception in thread "DefaultDispatcher-worker-3" java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
at java.base/java.lang.Thread.start0(Native Method)
at java.base/java.lang.Thread.start(Thread.java:803)
at kotlinx.coroutines.scheduling.CoroutineScheduler.createNewWorker(CoroutineScheduler.kt:485)
at kotlinx.coroutines.scheduling.CoroutineScheduler.tryCreateWorker(CoroutineScheduler.kt:440)
at kotlinx.coroutines.scheduling.CoroutineScheduler.tryCreateWorker$default(CoroutineScheduler.kt:431)
at kotlinx.coroutines.scheduling.CoroutineScheduler.signalCpuWork$kotlinx_coroutines_core(CoroutineScheduler.kt:427)
at kotlinx.coroutines.scheduling.CoroutineScheduler.dispatch(CoroutineScheduler.kt:399)
at kotlinx.coroutines.scheduling.CoroutineScheduler.dispatch$default(CoroutineScheduler.kt:383)
at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.dispatch(Dispatcher.kt:61)
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.async(Builders.common.kt:91)
at kotlinx.coroutines.BuildersKt.async(Unknown Source)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.async$default(Builders.common.kt:84)
at kotlinx.coroutines.BuildersKt.async$default(Unknown Source)
at io.ktor.client.engine.HttpClientEngine$DefaultImpls.executeWithinCallContext(HttpClientEngine.kt:78)
at io.ktor.client.engine.HttpClientEngine$install$1.invokeSuspend(HttpClientEngine.kt:65)
at io.ktor.client.engine.HttpClientEngine$install$1.invoke(HttpClientEngine.kt)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:318)
at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:163)
at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:183)
at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:27)
at io.ktor.client.features.HttpSend$DefaultSender.execute(HttpSend.kt:115)
at io.ktor.client.features.HttpSend$Feature$install$1.invokeSuspend(HttpSend.kt:79)
at io.ktor.client.features.HttpSend$Feature$install$1.invoke(HttpSend.kt)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:318)
at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:163)
at io.ktor.util.pipeline.SuspendFunctionGun.proceedWith(PipelineContext.kt:173)
at io.ktor.client.features.websocket.WebSockets$Feature$install$1.invokeSuspend(WebSockets.kt:37)
at io.ktor.client.features.websocket.WebSockets$Feature$install$1.invoke(WebSockets.kt)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:318)
at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:163)
at io.ktor.util.pipeline.SuspendFunctionGun.proceedWith(PipelineContext.kt:173)
at io.ktor.client.features.HttpCallValidator$Companion$install$1.invokeSuspend(HttpCallValidator.kt:89)
at io.ktor.client.features.HttpCallValidator$Companion$install$1.invoke(HttpCallValidator.kt)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:318)
at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:163)
at io.ktor.client.features.HttpRequestLifecycle$Feature$install$1.invokeSuspend(HttpRequestLifecycle.kt:34)
at io.ktor.client.features.HttpRequestLifecycle$Feature$install$1.invoke(HttpRequestLifecycle.kt)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:318)
at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:163)
at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:183)
at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:27)
at io.ktor.client.HttpClient.execute(HttpClient.kt:164)
at io.ktor.client.statement.HttpStatement.executeUnsafe(HttpStatement.kt:104)
at io.ktor.client.features.websocket.BuildersKt.webSocket(builders.kt:199)
at io.ktor.client.features.websocket.BuildersKt.webSocket(builders.kt:68)
at io.ktor.client.features.websocket.BuildersKt.ws(builders.kt:101)
at io.ktor.client.features.websocket.BuildersKt.ws$default(builders.kt:100)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient.startGeneralWebsocketClient(WebsocketReverseClient.kt:79)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient.startGeneralWebsocketClient(WebsocketReverseClient.kt:121)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient$startGeneralWebsocketClient$1.invokeSuspend(WebsocketReverseClient.kt)
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)
Exception in thread "ktor-cio-dispatcher-worker-1" kotlinx.coroutines.CoroutinesInternalError: Fatal exception in coroutines machinery for DispatchedContinuation[ExperimentalCoroutineDispatcher@5f6e1761[scheduler = ktor-cio-dispatcher@2cbdd198[Pool Size {core = 4, max = 4}, Worker States {CPU = 1, blocking = 0, parked = 0, dormant = 2, terminated = 0}, running workers queues = [0c], global CPU queue size = 1, global blocking queue size = 0, Control State {created workers= 3, blocking tasks = 0, CPUs acquired = 1}]], Continuation at io.ktor.network.selector.ActorSelectorManager$1.invokeSuspend(ActorSelectorManager.kt)@6fe576e3]. Please read KDoc to 'handleFatalException' method and report this incident to maintainers
at kotlinx.coroutines.DispatchedTask.handleFatalException$kotlinx_coroutines_core(DispatchedTask.kt:93)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:64)
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)
Caused by: java.lang.IllegalStateException: Job StandaloneCoroutine{Cancelled}@2c921518 is already complete or completing, but is being completed with CompletedExceptionally[kotlinx.coroutines.JobCancellationException: StandaloneCoroutine was cancelled; job=StandaloneCoroutine{Cancelled}@2c921518]
at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:828)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:111)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:172)
... 4 more
Caused by: kotlinx.coroutines.JobCancellationException: StandaloneCoroutine was cancelled; job=StandaloneCoroutine{Cancelled}@2c921518
Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
at java.base/java.lang.Thread.start0(Native Method)
at java.base/java.lang.Thread.start(Thread.java:803)
at kotlinx.coroutines.scheduling.CoroutineScheduler.createNewWorker(CoroutineScheduler.kt:485)
at kotlinx.coroutines.scheduling.CoroutineScheduler.tryCreateWorker(CoroutineScheduler.kt:443)
at kotlinx.coroutines.scheduling.CoroutineScheduler.tryCreateWorker$default(CoroutineScheduler.kt:431)
at kotlinx.coroutines.scheduling.CoroutineScheduler.signalCpuWork$kotlinx_coroutines_core(CoroutineScheduler.kt:427)
at kotlinx.coroutines.scheduling.CoroutineScheduler.dispatch(CoroutineScheduler.kt:399)
at kotlinx.coroutines.scheduling.CoroutineScheduler.dispatch$default(CoroutineScheduler.kt:383)
at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.dispatch(Dispatcher.kt:61)
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.ktor.network.selector.ActorSelectorManager.(ActorSelectorManager.kt:40)
at io.ktor.client.engine.cio.CIOEngine$selectorManager$2.invoke(CIOEngine.kt:28)
at io.ktor.client.engine.cio.CIOEngine$selectorManager$2.invoke(CIOEngine.kt:19)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at io.ktor.client.engine.cio.CIOEngine.getSelectorManager(CIOEngine.kt)
at io.ktor.client.engine.cio.CIOEngine.(CIOEngine.kt:30)
at io.ktor.client.engine.cio.CIO.create(CIO.kt:20)
at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:39)
at io.ktor.client.HttpClientJvmKt.HttpClient(HttpClientJvm.kt:21)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient.startGeneralWebsocketClient(WebsocketReverseClient.kt:67)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient.startGeneralWebsocketClient(WebsocketReverseClient.kt:121)
at tech.mihoyo.mirai.web.websocket.WebSocketReverseClient$startGeneralWebsocketClient$1.invokeSuspend(WebsocketReverseClient.kt)
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)
一开始认为是Mirai的问题,因此在mamoe/mirai提了issue:
https://github.com/mamoe/mirai/issues/492
现经提示,可能是CQHTTPMirai的问题(或我的问题)
限于个人水平不能完全看懂源码……
现在主要想请教发送失败情况下"message_id":-1
的含义以及可能的原因
以及另一位用户 @ls148478 提及的
我是用kt写的 我看了你的那个问题 原因是开头service不对 他不是60 他应该和下面的xml代码中的serviceID相同 所以他应该=2 我不清楚cqhttp应该怎么写 但是问题应该就是这个 因为当初我也遇到过
是否与这相关
发送消息时报错
[ERROR] [CQHTTPMirai] java.lang.IllegalStateException: Send temp message failed: MessageSvcPbSendMsg.Response.Failed(resultType=10, errorCode=0, errorMessage=)
at net.mamoe.mirai.qqandroid.contact.UtilKt.sendMessageImpl(util.kt:63)
at net.mamoe.mirai.qqandroid.contact.UtilKt$sendMessageImpl$1.invokeSuspend(util.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.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)
发送的String 为:
[喵萌奶茶屋&LoliHouse] 魔王学院的不适任者 / Maou Gakuin no Futekigousha - 06 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]
【363.27 MB】| magnet:?xt=urn:btih:55baf2a5a25ddc9d608cb0064bf2c6ed42c87e10
[星空字幕组][魔王学院的不适合者~史上最强的魔王始祖,转生就读子孙们的学校~][05][简日双语][1080P][WEBrip][MP4](急招翻译、校对)
【409.5MB】| magnet:?xt=urn:btih:4c8fb74d3374b3babd724a6cffebd17eca7203ec
[星空字幕组][魔王学院的不适合者~史上最强的魔王始祖,转生就读子孙们的学校~][05][繁日双语][1080P][WEBrip][MP4](急招翻译、校对)
【409.5MB】| magnet:?xt=urn:btih:749e5935484fbc840858e10b220b08e48cc85754
【喵萌奶茶屋】★07月新番★[魔王学院的不适任者/Maou Gakuin no Futekigousha][06][1080p][繁体][招募翻译]
【425.22 MB】| magnet:?xt=urn:btih:153853a7847e997b1cf02b9ed5ec0f5c6cf6b065
同样的代码可以发送成功的String:
[Snow-Raws] 魔王勇者/Maoyuu Maou Yuusha/まおゆう魔王勇者 (BD 1920x1080 HEVC-YUV420P10 FLACx2)
【17.9GB】| magnet:?xt=urn:btih:3ca391337274bd405c1cb7c2fcadd741503379d4
[GM-Team][国漫][超兽武装 第2季 勇者无惧][Ultra Beast Force Ⅱ][2011][01-33 Fin][AVC][GB][1080P]
【15.4GB】| magnet:?xt=urn:btih:bc129563453bffac832c5f58f987db17d882863f
[Lilith-Raws] LAIDBACKERS:勇者的尼特族生活 / LAIDBACKERS [Baha][WEB-DL][1080p][AVC AAC][CHT][MKV]
【2.0GB】| magnet:?xt=urn:btih:4a904c313fce042f08b05254669a0e0dec6a2c7f
[SAIO-Raws] 盾之勇者成名录 第一季 Tate no Yuusha no Nariagari 1-25 [BD 1920x1080 HEVC-10bit OPUS][简繁内封字幕]
【13.6GB】| magnet:?xt=urn:btih:85c058bc4d385965d2ac78f5915219a6f6c64cc5
以及正常的返回信息:
[INFO] [BOT xxxxxxxx] Friend(xxxxxxxxx) <- [Snow-Raws] 魔王勇者/Maoyuu Maou Yuusha/まおゆう魔王勇者 (BD 1920x1080 HEVC-YUV420P10 FLACx2)\n【17.9GB】| magnet:?xt=urn:btih:3ca391337274bd405c1cb7c2fcadd741503379d4\n\n[GM-Team][国漫][超兽武装 第2季 勇者无惧][Ultra Beast Force Ⅱ][2011][01-33 Fin][AVC][GB][1080P]\n【15.4GB】| magnet:?xt=urn:btih:bc129563453bffac832c5f58f987db17d882863f\n\n[Lilith-Raws] LAIDBACKERS:勇者的尼特族生活 / LAIDBACKERS [Baha][WEB-DL][1080p][AVC AAC][CHT][MKV]\n【2.0GB】| magnet:?xt=urn:btih:4a904c313fce042f08b05254669a0e0dec6a2c7f\n\n[SAIO-Raws] 盾之勇者成名录 第一季 Tate no Yuusha no Nariagari 1-25 [BD 1920x1080 HEVC-10bit OPUS][简繁内封字幕]\n【13.6GB】| magnet:?xt=urn:btih:85c058bc4d385965d2ac78f5915219a6f6c64cc5
content
可能包含 [
, ]
, ,
等字符,cqhttp客户端解析时会出现一些问题(比如 QQ 的小程序传来的就是一个 json,里面的逗号会干扰 CQ 码解析)
修复建议:转义
同时建议排查处理 Message.toCQString()
中其他类型的消息,同样可能包含需要转义的字符
Event processing: An exception occurred but no CoroutineExceptionHandler found,
either in coroutineContext from Handler job, or in subscriberContext
18:30:56 [INFO] [NETWORK ERROR] java.lang.NoSuchMethodError: kotlin.jvm.internal.PropertyReference1Impl.(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
at tech.mihoyo.mirai.web.http.HttpApiServerServiceConfig.(HttpApiServerConfig.kt)
at tech.mihoyo.mirai.web.http.HttpApiServer.(HttpApiServer.kt:20)
at tech.mihoyo.mirai.BotSession.(Session.kt:62)
at tech.mihoyo.mirai.SessionManager.createBotSession(Session.kt:29)
at tech.mihoyo.mirai.PluginBase$onEnable$2.invokeSuspend(PluginBase.kt:60)
at tech.mihoyo.mirai.PluginBase$onEnable$2.invoke(PluginBase.kt)
at net.mamoe.mirai.event.SubscriberKt__SubscriberKt$subscribeAlways$1.invokeSuspend(subscriber.kt:269)
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 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)
日志如下
17:26:28 [INFO] [NETWORK] Send: OnlinePush.RespPush
17:26:31 [INFO] [NETWORK] unknown group 528 type 0x0000000000000115, data: 08 DB DA 9D D3 03 10 F8 B8 F8 8F 08 1A 14 08 00 10 05 18 C8 A5 C4 F9 05 20 02 28 FF FF FF FF 0F 32 00
17:26:31 [INFO] [NETWORK] Send: OnlinePush.RespPush
17:26:31 [INFO] [NETWORK] Send: MessageSvc.PbGetMsg
17:26:31 [INFO] [NETWORK] Send: MessageSvc.PbDeleteMsg
17:26:31 [INFO] [BOT 2180914296] (≧?≦)/(979856731) -> [mirai:source:42056,1955906449]/waifu
17:26:32 [DEBUG] [CQHTTPMirai] {"action": "send_private_msg_async", "params": {"user_id": 979856731, "message": [{"type": "image", "data": {"file": "https://www.thiswaifudoesnotexist.net/example-21261.jpg"}}]}}
17:26:32 [DEBUG] [CQHTTPMirai] {"status":"async","retcode":1,"data":null,"echo":null}
17:26:34 [INFO] [NETWORK] Send: MessageSvc.PbSendMsg
17:26:34 [INFO] [NETWORK] Recv: MessageSvcPbSendMsg.Response.SUCCESS
17:26:34 [INFO] [BOT 2180914296] Friend(979856731) <- Bot发了一张图片, 但是插件获取不到, 它心累了不想尝试, 并给出了原图链接: https://www.thiswaifudoesnotexist.net/example-21261.jpg```
Docker使用更方便
docker run -it -e ACCOUNT=xxx -e PASSWORD=xxx -e WS_URL="ws://1.2.3.4:8081/ws/universal/" lz1998/spring-cq-client
bash脚本更方便
mycli -u用户名 -p密码
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.