@xmanrui/dsh-im 2.2.1 → 2.4.0

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 (31) hide show
  1. package/README.en.md +12 -3
  2. package/README.md +12 -3
  3. package/lib/client.js +95 -52
  4. package/lib/index.js +220 -191
  5. package/package.json +1 -1
  6. package/plugin-src/client/channels/feishu/index.js +37 -27
  7. package/plugin-src/client/channels/feishu/styles.js +26 -1
  8. package/plugin-src/client/i18n.js +27 -25
  9. package/src/channels/dingtalk/dingtalk-bridge.mjs +96 -3
  10. package/src/channels/discord/discord-runtime.mjs +3 -0
  11. package/src/channels/feishu/bridge.mjs +176 -31
  12. package/src/channels/feishu/feishu-cards.mjs +18 -6
  13. package/src/channels/feishu/feishu-runtime.mjs +0 -1
  14. package/src/channels/feishu/message-utils.mjs +1 -1
  15. package/src/channels/feishu/multi-bot-controller.mjs +1 -17
  16. package/src/channels/feishu/repair-manager.mjs +7 -2
  17. package/src/channels/qq/qq-bridge.mjs +99 -8
  18. package/src/channels/shared/batch-input.mjs +209 -0
  19. package/src/channels/shared/control-command.mjs +11 -1
  20. package/src/channels/shared/i18n-en/feishu.mjs +28 -25
  21. package/src/channels/shared/i18n-en/shared-a.mjs +1 -0
  22. package/src/channels/shared/i18n-en/shared-b.mjs +1 -0
  23. package/src/channels/shared/i18n-en/shared-c.mjs +49 -0
  24. package/src/channels/shared/i18n-en/telegram.mjs +1 -0
  25. package/src/channels/shared/text-harness-bridge.mjs +112 -2
  26. package/src/channels/slack/slack-runtime.mjs +1 -0
  27. package/src/channels/telegram/telegram-runtime.mjs +5 -0
  28. package/src/channels/wecom/wecom-bridge.mjs +102 -4
  29. package/src/channels/weixin/weixin-bridge.mjs +101 -3
  30. package/src/channels/weixin/weixin-runtime.mjs +18 -1
  31. package/src/channels/whatsapp/whatsapp-runtime.mjs +2 -0
@@ -73,6 +73,23 @@ function delay(ms, signal) {
73
73
  });
74
74
  }
75
75
 
76
+ export function orderWeixinMessages(messages) {
77
+ if (!Array.isArray(messages) || messages.length < 2) return Array.isArray(messages) ? messages : [];
78
+ const orderField = ['seq', 'create_time_ms'].find((field) => messages.every((message) => (
79
+ (typeof message?.[field] === 'number' && Number.isFinite(message[field]))
80
+ || (typeof message?.[field] === 'string'
81
+ && message[field].trim()
82
+ && Number.isFinite(Number(message[field])))
83
+ )));
84
+ if (!orderField) return messages;
85
+ return messages
86
+ .map((message, index) => ({ message, index, order: Number(message[orderField]) }))
87
+ .sort((left, right) => (
88
+ left.order - right.order || left.index - right.index
89
+ ))
90
+ .map(({ message }) => message);
91
+ }
92
+
76
93
  export function createWeixinRuntimeStatus() {
77
94
  return {
78
95
  startedAt: null,
@@ -234,7 +251,7 @@ export class WeixinRuntime {
234
251
  this.#status.lastCheckedAt = Date.now();
235
252
  this.#status.lastError = null;
236
253
 
237
- for (const message of response?.msgs ?? []) {
254
+ for (const message of orderWeixinMessages(response?.msgs)) {
238
255
  void this.#bridge.accept(message).catch((error) => {
239
256
  if (signal.aborted) return;
240
257
  this.#logger.error?.(
@@ -239,6 +239,8 @@ export function normalizeWhatsappMessage(message, accountJid, {
239
239
  kind: group ? 'group' : 'direct',
240
240
  conversationId: remoteJid,
241
241
  content: messageText(content),
242
+ plainText: typeof content?.conversation === 'string'
243
+ || typeof content?.extendedTextMessage?.text === 'string',
242
244
  images: image ? [image] : [],
243
245
  files: file ? [file] : [],
244
246
  addressed: !group || fromMe || mentioned || replyToSelf,