获取聊天信息原json数据
动机
目前,ChatTools模组的Responder功能允许用户对特定的聊天内容自动回复特定的信息,但它的功能仅限于基于文本的简单匹配和回复。这限制了其在处理复杂或结构化数据时的灵活性和实用性 在许多Minecraft服务器中,聊天信息可能包含丰富的JSON数据,这些数据携带着重要的上下文信息,如玩家状态、物品详情、事件数据等。现有的Responder功能无法解析这些JSON数据,因此无法根据这些数据进行智能回复,这限制了自动回复的智能化和个性化 通过增强Responder功能,使其能够解析聊天信息的原始JSON数据,并允许用户在回复消息中引用JSON数据中的键或索引获取的值或列表等数据,可以极大地提升自动回复的智能化水平。这将使得自动回复不仅限于简单的文本匹配,还能基于聊天信息中的具体数据进行动态生成,从而提供更加精准和有用的回复
描述
修改Responder模块,使其在接收到聊天信息时,首先尝试解析该信息的原始JSON数据
如果解析成功,将JSON数据存储在一个临时变量中,供后续回复使用
在Responder的规则设置中,增加一个新的字段,允许用户输入JSON路径表达式(如$.player.name或$.items[0].id),用于从解析后的JSON数据中提取特定的值或列表
可以在回复消息中引用这些JSON路径表达式,系统将自动替换为对应的值或列表
假设聊天信息包含以下JSON数据:{"player": {"name": "Alice"}, "items": [{"id": 1, "name": "Sword"}, {"id": 2, "name": "Shield"}],clickEvent:{"action":"run_command","value":"/litesignup click 2025-9-20"}}
可以设置一个Responder规则,当检测到特定关键词时,回复消息为:Hello, $.player.name!, you have the following items: $.items[0].name and $.items[1].name.
自动解析JSON数据,并将回复消息替换为:Hello, Alice!, you have the following items: Sword and Shield.
其他信息
使用场景例如 BSHongBao插件 聊天栏领取红包 { "extra": [ { "insertion": "1758370263809", "text": "" }, { "extra": [ { "bold": true, "color": "green", "clickEvent": { "action": "run_command", "value": "/bshongbao_claim 2ab0678c-6cc6-4c02-a749-62afd230406f" }, "hoverEvent": { "action": "show_text", "contents": XXX, "text": "[点击领取]" }, "text": “Name 发了一个【拼手气红包】红包,[点击领取]” } ], "text": "" } ], "text": "" } 这里的点击动作有UUID 首先匹配聊天中的.*\s(发了一个\s【拼手气红包】红包,[点击领取]),§a[点击领取]使用extra.[1].extra.[0].clickEvent.value获取需要回复的命令
对了,这样可能会影响用户y之前的配置,或者会让配置变得更繁琐,可以在每个responder里面设置是否使用json
可以用 json_get() 占位符,或者 request() 网络请求来把文本搬出游戏而调用自定义API