Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

features: 请求适配对接Lagrange.Core #117

Open
sangxiang1 opened this issue Feb 26, 2024 · 6 comments
Open

features: 请求适配对接Lagrange.Core #117

sangxiang1 opened this issue Feb 26, 2024 · 6 comments
Assignees
Labels
compatibility requirement This is a new compatibility requirement enhancement New feature or request
Milestone

Comments

@sangxiang1
Copy link

需求描述:使用ONEBOT11/HTTP连接Lagrange.Core,接受消息及事件正常,发送消息不兼容出现异常,请求兼容适配
问题截图:
image
问题日志:info: Lagrange.OneBot.Core.Network.Service.HttpService[0]
Receive(Conn: 814a00bd-af03-42b1-8d26-5bd633ac6dfe: {"action":"send_msg","params":{"message_type": "group", "user_id": -1, "group_id": "473625090", "message": "[桑相]掐指一算: 1D100=14", "auto_escape": false}})
warn: Lagrange.OneBot.Core.Operation.OperationService[0]
Unexpected error encountered while handling message.
System.Text.Json.JsonException: The JSON value could not be converted to System.Nullable1[System.UInt32]. Path: $.user_id | LineNumber: 0 | BytePositionInLine: 36. ---> System.FormatException: Either the JSON value is not in a supported format, or is out of bounds for a UInt32. at System.Text.Json.ThrowHelper.ThrowFormatException(NumericType numericType) at System.Text.Json.Utf8JsonReader.GetUInt32() at System.Text.Json.Serialization.Converters.NullableConverter1.ReadNumberWithCustomHandling(Utf8JsonReader& reader, JsonNumberHandling numberHandling, JsonSerializerOptions options)
at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) at System.Text.Json.Serialization.Metadata.JsonPropertyInfo1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue)
at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- End of inner exception stack trace --- at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, Utf8JsonReader& reader, Exception ex) at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.DeserializeAsObject(Utf8JsonReader& reader, ReadStack& state) at System.Text.Json.JsonSerializer.ReadAsObject(Utf8JsonReader& reader, JsonTypeInfo jsonTypeInfo) at Lagrange.OneBot.Core.Entity.Action.OneBotMessageConverter4.Read(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options)
at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan1 utf8Json, JsonTypeInfo1 jsonTypeInfo, Nullable1 actualByteCount) at System.Text.Json.JsonSerializer.ReadFromNode[TValue](JsonNode node, JsonTypeInfo1 jsonTypeInfo)
at Lagrange.OneBot.Core.Operation.Message.SendMessageOperation.HandleOperation(BotContext context, JsonNode payload)
at Lagrange.OneBot.Core.Operation.OperationService.HandleOperation(MsgRecvEventArgs e)

@kagangtuya-star
Copy link

对接Lagrange.Core时出现以下错误:

OlivOS 插件 [OlivaDiceCore] 调用 [group_message] 失败: 'list' object has no attribute 'lower'
Traceback (most recent call last):
  File "OlivOS\core\core\pluginAPI.py", line 304, in plugin_event_router
  File "C:\Users\Administrator\Desktop\dnd_starchen_dice\KOOK\OlivOS-Win\./plugin/tmp\OlivaDiceCore\main.py", line 31, in group_message
  File "C:\Users\Administrator\Desktop\dnd_starchen_dice\KOOK\OlivOS-Win\./plugin/tmp\OlivaDiceCore\msgReply.py", line 202, in unity_reply
  File "C:\Users\Administrator\Desktop\dnd_starchen_dice\KOOK\OlivOS-Win\./plugin/tmp\OlivaDiceCore\msgReply.py", line 5361, in isMatchWordStart
AttributeError: 'list' object has no attribute 'lower'

接受消息事件正常,但每一条消息都报出此错误。

@DragonMC233
Copy link

Lagrange那边给到的问题来源是[ "user_id": -1]这个参数导致的异常

@lunzhiPenxil
Copy link
Member

lunzhiPenxil commented Feb 16, 2025

Lagrange那边给到的问题来源是[ "user_id": -1]这个参数导致的异常

猜测

仅是猜测,理论上来说,依照 OnebotV11 的相关章节 onebot-11/api/public - send_msg - 发送消息 ,上述接口调用中负载的 Json 内容中当 "message_type": "group" 时不需要 user_id ,也就是说应当如下:

{
    "message_type": "group",
    "group_id": 114514,
    "message": "哼哼哼啊啊啊啊啊啊",
    "auto_escape": false
}

但以上述反馈中所观察到的 Lagrange.Core 日志来看,Lagrange.Core 似乎在这种情形下在尝试读取 Json 的流程中给予了 "user_id": -1 这样的缺省值,这样的缺省值逻辑有以下可能存在的问题:

  • 这不是一个符合 OnebotV11 标准的行为,可能导致包括但不限于本议题中所涉及的问题,以及类似的代码风格所实现的逻辑可能潜在存在的类似问题,进而引发包括但不限于本次的兼容性问题。
  • "user_id": -1 显然不是一个合适的缺省值,尤其是在可能没有为它所涉及的流程主动设置异常处理机制的前提下。

目前开发组决定进行推进以下措施来改善

目前推荐你进行的举措,优先级依次递减

  • 向 Lagrange.Core 的开发者反馈此事,以督促他们正确的实现符合 OnebotV11 标准所约定的程序逻辑行为。
  • 使用即时通讯与本开发组联络,以便实时交流你所遇到的问题,这里是邀请链接
  • 等待我们的适配完成。
  • 加入开发组(或许?),完善上述开发组计划事项。

@lunzhiPenxil lunzhiPenxil added enhancement New feature or request compatibility requirement This is a new compatibility requirement labels Feb 16, 2025
@lunzhiPenxil lunzhiPenxil self-assigned this Feb 16, 2025
@lunzhiPenxil lunzhiPenxil added this to the 0.12.0 milestone Feb 16, 2025
@DragonMC233
Copy link

Lagrange那边给到的问题来源是[ "user_id": -1]这个参数导致的异常

猜测

仅是猜测,理论上来说,依照 OnebotV11 的相关章节 onebot-11/api/public - send_msg - 发送消息 ,上述接口调用中负载的 Json 内容中当 "message_type": "group" 时不需要 user_id ,也就是说应当如下:

{
"message_type": "group",
"group_id": 114514,
"message": "哼哼哼啊啊啊啊啊啊",
"auto_escape": false
}
但以上述反馈中所观察到的 Lagrange.Core 日志来看,Lagrange.Core 似乎在这种情形下在尝试读取 Json 的流程中给予了 "user_id": -1 这样的缺省值,这样的缺省值逻辑有以下可能存在的问题:

  • 这不是一个符合 OnebotV11 标准的行为,可能导致包括但不限于本议题中所涉及的问题,以及类似的代码风格所实现的逻辑可能潜在存在的类似问题,进而引发包括但不限于本次的兼容性问题。
  • "user_id": -1 显然不是一个合适的缺省值,尤其是在可能没有为它所涉及的流程主动设置异常处理机制的前提下。

目前开发组决定进行推进以下措施来改善

目前推荐你进行的举措,优先级依次递减

  • 向 Lagrange.Core 的开发者反馈此事,以督促他们正确的实现符合 OnebotV11 标准所约定的程序逻辑行为。
  • 使用即时通讯与本开发组联络,以便实时交流你所遇到的问题,这里是邀请链接
  • 等待我们的适配完成。
  • 加入开发组(或许?),完善上述开发组计划事项。

我在测试后发现确实是OlivOS在发送消息时主动带上了user_id=-1的参数
我写了一段python脚本用来获取oliva发出的内容并转发给Lagrange
以下是OlivOS发送给python中转的信息:
Received message: {'message_type': 'group', 'user_id': -1, 'group_id': '90*******37', 'message': '星龙 抛出了1D100=18', 'auto_escape': False} 127.0.0.1 - - [16/Feb/2025 20:09:30] "POST /send_msg?access_token=*** HTTP/1.1" 200 -
在python将userid参数删去并转发给Lagrange之后,目前消息回复功能恢复正常

@lunzhiPenxil
Copy link
Member

Lagrange那边给到的问题来源是[ "user_id": -1]这个参数导致的异常

猜测

仅是猜测,理论上来说,依照 OnebotV11 的相关章节 onebot-11/api/public - send_msg - 发送消息 ,上述接口调用中负载的 Json 内容中当 "message_type": "group" 时不需要 user_id ,也就是说应当如下:
{
"message_type": "group",
"group_id": 114514,
"message": "哼哼哼啊啊啊啊啊啊",
"auto_escape": false
}
但以上述反馈中所观察到的 Lagrange.Core 日志来看,Lagrange.Core 似乎在这种情形下在尝试读取 Json 的流程中给予了 "user_id": -1 这样的缺省值,这样的缺省值逻辑有以下可能存在的问题:

  • 这不是一个符合 OnebotV11 标准的行为,可能导致包括但不限于本议题中所涉及的问题,以及类似的代码风格所实现的逻辑可能潜在存在的类似问题,进而引发包括但不限于本次的兼容性问题。
  • "user_id": -1 显然不是一个合适的缺省值,尤其是在可能没有为它所涉及的流程主动设置异常处理机制的前提下。

目前开发组决定进行推进以下措施来改善

目前推荐你进行的举措,优先级依次递减

  • 向 Lagrange.Core 的开发者反馈此事,以督促他们正确的实现符合 OnebotV11 标准所约定的程序逻辑行为。
  • 使用即时通讯与本开发组联络,以便实时交流你所遇到的问题,这里是邀请链接
  • 等待我们的适配完成。
  • 加入开发组(或许?),完善上述开发组计划事项。

我在测试后发现确实是OlivOS在发送消息时主动带上了user_id=-1的参数 我写了一段python脚本用来获取oliva发出的内容并转发给Lagrange 以下是OlivOS发送给python中转的信息: Received message: {'message_type': 'group', 'user_id': -1, 'group_id': '90*******37', 'message': '星龙 抛出了1D100=18', 'auto_escape': False} 127.0.0.1 - - [16/Feb/2025 20:09:30] "POST /send_msg?access_token=*** HTTP/1.1" 200 - 在python将userid参数删去并转发给Lagrange之后,目前消息回复功能恢复正常

我们将启动相关流程进行验证,感谢你的指出

@lunzhiPenxil lunzhiPenxil added the bug? Something maybe isn't working label Feb 17, 2025
@lunzhiPenxil
Copy link
Member

lunzhiPenxil commented Feb 17, 2025

Lagrange那边给到的问题来源是[ "user_id": -1]这个参数导致的异常

猜测

仅是猜测,理论上来说,依照 OnebotV11 的相关章节 onebot-11/api/public - send_msg - 发送消息 ,上述接口调用中负载的 Json 内容中当 "message_type": "group" 时不需要 user_id ,也就是说应当如下:
{
"message_type": "group",
"group_id": 114514,
"message": "哼哼哼啊啊啊啊啊啊",
"auto_escape": false
}
但以上述反馈中所观察到的 Lagrange.Core 日志来看,Lagrange.Core 似乎在这种情形下在尝试读取 Json 的流程中给予了 "user_id": -1 这样的缺省值,这样的缺省值逻辑有以下可能存在的问题:

  • 这不是一个符合 OnebotV11 标准的行为,可能导致包括但不限于本议题中所涉及的问题,以及类似的代码风格所实现的逻辑可能潜在存在的类似问题,进而引发包括但不限于本次的兼容性问题。
  • "user_id": -1 显然不是一个合适的缺省值,尤其是在可能没有为它所涉及的流程主动设置异常处理机制的前提下。

目前开发组决定进行推进以下措施来改善

目前推荐你进行的举措,优先级依次递减

  • 向 Lagrange.Core 的开发者反馈此事,以督促他们正确的实现符合 OnebotV11 标准所约定的程序逻辑行为。
  • 使用即时通讯与本开发组联络,以便实时交流你所遇到的问题,这里是邀请链接
  • 等待我们的适配完成。
  • 加入开发组(或许?),完善上述开发组计划事项。

我在测试后发现确实是OlivOS在发送消息时主动带上了user_id=-1的参数 我写了一段python脚本用来获取oliva发出的内容并转发给Lagrange 以下是OlivOS发送给python中转的信息: Received message: {'message_type': 'group', 'user_id': -1, 'group_id': '90*******37', 'message': '星龙 抛出了1D100=18', 'auto_escape': False} 127.0.0.1 - - [16/Feb/2025 20:09:30] "POST /send_msg?access_token=*** HTTP/1.1" 200 - 在python将userid参数删去并转发给Lagrange之后,目前消息回复功能恢复正常

问题分析

首先要感谢你所提供的新信息,我在查看最新的相关代码并进行测试验证后确认了你所反馈的情况属实。

前面的讨论以及反馈已经确认上述 "user_id": -1 确切的来源于 OlivOS ,这与我最初的设计不符,可能是在后续代码重构中进行过相关逻辑的修改导致的,这种应用端向协议端发送非必要参数的行为理论上来说已经属于 OnebotV11 标准的未定义行为了,并且有充足的证据证明这种参数提交在 go-cqhttp 等协议端中不会导致影响业务问题抛出。

尽管本问题反映了 Lagrange.Core 对于这种未定义行为目前看来存在一定的兼容性,但考虑到这属于一个程度更轻的由未定义行为引发的兼容性问题,而非某种明确不符合协议的性质,所以我认可由 OlivOS 侧主导本问题的修复对接。

不过在此基础上,我依旧认为 Lagrange.Core 在这种场景下抛出错误并影响业务并非合理设计,主要是因为它不符合向下兼容的设计哲学。

目前开发组决定进行推进以下措施来改善

目前推荐你进行的举措,优先级依次递减

  • 向 Lagrange.Core 的开发者反馈此事,以询问他们对符合 OnebotV11 标准所约定的未定义程序逻辑行为的兼容性支持的态度,并提及此问题(但无论其态度如何,我们都会进行前文所述的修复)。
  • 使用即时通讯与本开发组联络,以便实时交流你所遇到的问题,这里是邀请链接
  • 提供更多的参考信息或指出我们还未察觉的其它问题。
  • 等待我们的适配完成。
  • 加入开发组(或许?),完善上述开发组计划事项。

@lunzhiPenxil lunzhiPenxil removed the bug? Something maybe isn't working label Feb 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compatibility requirement This is a new compatibility requirement enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants