ErisPulse-OneBot11Adapter 4.3.0__tar.gz → 4.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (16) hide show
  1. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/ErisPulse_OneBot11Adapter.egg-info/PKG-INFO +1 -1
  2. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/OneBotAdapter/Converter.py +2 -0
  3. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/OneBotAdapter/Core.py +46 -1
  4. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/PKG-INFO +1 -1
  5. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/pyproject.toml +1 -1
  6. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/ErisPulse_OneBot11Adapter.egg-info/SOURCES.txt +0 -0
  7. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/ErisPulse_OneBot11Adapter.egg-info/dependency_links.txt +0 -0
  8. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/ErisPulse_OneBot11Adapter.egg-info/entry_points.txt +0 -0
  9. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/ErisPulse_OneBot11Adapter.egg-info/requires.txt +0 -0
  10. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/ErisPulse_OneBot11Adapter.egg-info/top_level.txt +0 -0
  11. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/LICENSE +0 -0
  12. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/OneBotAdapter/__init__.py +0 -0
  13. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/OneBotAdapter/i18n.py +0 -0
  14. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/README.md +0 -0
  15. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/setup.cfg +0 -0
  16. {erispulse_onebot11adapter-4.3.0 → erispulse_onebot11adapter-4.4.0}/test/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse-OneBot11Adapter
3
- Version: 4.3.0
3
+ Version: 4.4.0
4
4
  Summary: ErisPulse的OneBotV11协议适配模块,异步的OneBot触发器
5
5
  Author-email: wsu2059q <wsu2059@qq.com>
6
6
  License: MIT License
@@ -396,6 +396,8 @@ class OneBot11Converter(BaseConverter):
396
396
  parts.append(f"[表情:{seg['data'].get('id', '')}]")
397
397
  elif seg["type"] == "reply":
398
398
  parts.append("[回复]")
399
+ elif seg["type"] == "onebot11_forward":
400
+ parts.append("[合并转发消息]")
399
401
  elif seg["type"].startswith("onebot11_"):
400
402
  parts.append(f"[{seg['type'][9:]}]")
401
403
  return "".join(parts)
@@ -33,7 +33,7 @@ try:
33
33
  except ImportError: # pragma: no cover
34
34
  spawn_background = None
35
35
 
36
- __version__ = "4.3.0"
36
+ __version__ = "4.4.0"
37
37
 
38
38
  # 软依赖的框架最低版本(运行时检测,仅提示不强制)
39
39
  MIN_FRAMEWORK_VERSION = (2, 7, 1)
@@ -438,6 +438,13 @@ class OneBotAdapter(BaseAdapter):
438
438
  if isinstance(message, dict):
439
439
  message = [message]
440
440
 
441
+ # 全部为 node 段 → 合并转发。NapCat 等实现会拒绝 send_msg 携带的 node 段
442
+ # (retcode 1400),必须走 send_group/private_forward_msg;不支持该端点的
443
+ # 实现返回 failed 后自动回退 send_msg 直发 node 段。
444
+ segments = [seg for seg in message if isinstance(seg, dict)]
445
+ if segments and all(str(seg.get("type")) == "node" for seg in segments):
446
+ return asyncio.create_task(self._do_send_forward(segments, **kwargs))
447
+
441
448
  ob11_message = self._build_ob11_message(message)
442
449
 
443
450
  async def _do_send():
@@ -453,6 +460,40 @@ class OneBotAdapter(BaseAdapter):
453
460
 
454
461
  return asyncio.create_task(_do_send())
455
462
 
463
+ async def _do_send_forward(self, nodes, **kwargs):
464
+ forward_endpoint = (
465
+ "send_group_forward_msg" if self._target_type == "group" else "send_private_forward_msg"
466
+ )
467
+ target_params = (
468
+ {"group_id": int(self._target_id)} if self._target_type == "group" else {"user_id": int(self._target_id)}
469
+ )
470
+ try:
471
+ result = await self._adapter.call_api(
472
+ endpoint=forward_endpoint,
473
+ _account_id=self._account_id,
474
+ messages=nodes,
475
+ **target_params,
476
+ )
477
+ if not (isinstance(result, dict) and str(result.get("status") or "") == "failed"):
478
+ return result
479
+ except Exception:
480
+ pass
481
+ return await self._adapter.call_api(
482
+ endpoint="send_msg",
483
+ _account_id=self._account_id,
484
+ message_type="private" if self._target_type == "user" else "group",
485
+ user_id=int(self._target_id) if self._target_type == "user" else None,
486
+ group_id=int(self._target_id) if self._target_type == "group" else None,
487
+ message=nodes,
488
+ **kwargs,
489
+ )
490
+
491
+ def MergeForward(self, nodes):
492
+ if isinstance(nodes, dict):
493
+ nodes = [nodes]
494
+ segments = [seg for seg in nodes if isinstance(seg, dict)]
495
+ return asyncio.create_task(self._do_send_forward(segments))
496
+
456
497
  def Recall(self, message_id: Union[str, int]):
457
498
  """撤回消息"""
458
499
  return asyncio.create_task(
@@ -850,6 +891,10 @@ class OneBotAdapter(BaseAdapter):
850
891
  account_name, account = self._resolve_account(_account_id)
851
892
  # 吸收 ApiDSL._merge_context 传入的 account_id
852
893
  params.pop("account_id", None)
894
+ # 剥离 None 参数——OneBot 11 约定缺省参数应省略而非传 null,
895
+ # OneBot实现的参数校验会拒绝 null 值(如私聊 send_msg 携带 group_id: null
896
+ # 报 retcode 1400 "expected a positive integer"),导致消息静默未送达
897
+ params = {key: value for key, value in params.items() if value is not None}
853
898
 
854
899
  connection = self.connections.get(account_name)
855
900
  if not connection:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse-OneBot11Adapter
3
- Version: 4.3.0
3
+ Version: 4.4.0
4
4
  Summary: ErisPulse的OneBotV11协议适配模块,异步的OneBot触发器
5
5
  Author-email: wsu2059q <wsu2059@qq.com>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ErisPulse-OneBot11Adapter"
3
- version = "4.3.0"
3
+ version = "4.4.0"
4
4
  description = "ErisPulse的OneBotV11协议适配模块,异步的OneBot触发器"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"