alemonjs 2.1.32 → 2.1.34

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.
@@ -13,5 +13,6 @@ export declare class SinglyLinkedList<T> {
13
13
  popNext(): ListNode<T> | null;
14
14
  removeCurrent(): void;
15
15
  getSize(): number;
16
+ forEach(callback: (node: ListNode<T>) => boolean | undefined): void;
16
17
  }
17
18
  export {};
@@ -63,13 +63,22 @@ class SinglyLinkedList {
63
63
  if (this.current === this.tail) {
64
64
  this.tail = previous;
65
65
  }
66
- this.current = null;
66
+ this.current = previous;
67
67
  this.size--;
68
68
  }
69
69
  }
70
70
  getSize() {
71
71
  return this.size;
72
72
  }
73
+ forEach(callback) {
74
+ let node = this.head;
75
+ while (node) {
76
+ if (callback(node) === true) {
77
+ break;
78
+ }
79
+ node = node.next;
80
+ }
81
+ }
73
82
  }
74
83
 
75
84
  export { SinglyLinkedList };
@@ -77,6 +77,7 @@ const createRouteProcessChildren = (valueEvent, select, nextCycle, callHandler)
77
77
  }
78
78
  const selects = Array.isArray(app.select) ? app.select : [app.select];
79
79
  if (!selects.includes(select)) {
80
+ middleware.pop();
80
81
  void nextNode();
81
82
  return;
82
83
  }
@@ -29,27 +29,23 @@ const expendSubscribe = (valueEvent, select, next, choose) => {
29
29
  const onActive = () => {
30
30
  for (const select of selects) {
31
31
  const subListVal = getSubscribeList(choose, select);
32
- let item = subListVal.popNext();
33
- while (item) {
34
- if (item.data.id === ID) {
35
- item.data.status = SubscribeStatus.active;
36
- break;
32
+ subListVal.forEach(node => {
33
+ if (node.data.id === ID) {
34
+ node.data.status = SubscribeStatus.active;
35
+ return true;
37
36
  }
38
- item = subListVal.popNext();
39
- }
37
+ });
40
38
  }
41
39
  };
42
40
  const onPaused = () => {
43
41
  for (const select of selects) {
44
42
  const subListVal = getSubscribeList(choose, select);
45
- let item = subListVal.popNext();
46
- while (item) {
47
- if (item.data.id === ID) {
48
- item.data.status = SubscribeStatus.paused;
49
- break;
43
+ subListVal.forEach(node => {
44
+ if (node.data.id === ID) {
45
+ node.data.status = SubscribeStatus.paused;
46
+ return true;
50
47
  }
51
- item = subListVal.popNext();
52
- }
48
+ });
53
49
  }
54
50
  };
55
51
  onPaused();
@@ -86,14 +86,16 @@ const onProcessor = (name, event, data) => {
86
86
  }
87
87
  }
88
88
  const mappingText = value?.mapping_text ?? [];
89
- for (const mapping of mappingText) {
90
- const { regular, target } = mapping ?? {};
91
- if (!regular) {
92
- continue;
93
- }
94
- const cachedReg = getCachedRegExp(regular);
95
- if (cachedReg.test(event['MessageText'])) {
96
- event['MessageText'] = event['MessageText'].replace(cachedReg, target);
89
+ if (event['MessageText']) {
90
+ for (const mapping of mappingText) {
91
+ const { regular, target } = mapping ?? {};
92
+ if (!regular) {
93
+ continue;
94
+ }
95
+ const cachedReg = getCachedRegExp(regular);
96
+ if (cachedReg.test(event['MessageText'])) {
97
+ event['MessageText'] = event['MessageText'].replace(cachedReg, target);
98
+ }
97
99
  }
98
100
  }
99
101
  const masterId = value?.master_id ?? {};
@@ -29,14 +29,12 @@ const useState = (name, defaultValue = true) => {
29
29
  cfg.value.core ??= {};
30
30
  cfg.value.core.state ??= [];
31
31
  const cfgState = cfg.value.core.state;
32
- const cur = cfgState.find((i) => i === name);
33
- if (cur !== value) {
34
- if (value) {
35
- cfg.value.core.state = cfg.value.core.state.filter((i) => i !== name);
36
- }
37
- else {
38
- cfg.value.core.state.push(name);
39
- }
32
+ const exists = cfgState.includes(name);
33
+ if (value && exists) {
34
+ cfg.value.core.state = cfg.value.core.state.filter((i) => i !== name);
35
+ }
36
+ else if (!value && !exists) {
37
+ cfg.value.core.state.push(name);
40
38
  }
41
39
  cfg.saveValue(cfg.value);
42
40
  };
@@ -22,11 +22,16 @@ const useSubscribe = (event, selects) => {
22
22
  const register = (callback, keys, choose) => {
23
23
  const curSelects = Array.isArray(selects) ? selects : [selects];
24
24
  const ID = Date.now().toString(36) + Math.random().toString(36).substring(2, 15);
25
+ if (keys.length === 0) {
26
+ logger.warn({
27
+ code: ResultCode.FailParams,
28
+ message: 'subscribe keys is empty',
29
+ data: null
30
+ });
31
+ return { selects: curSelects, choose, id: ID };
32
+ }
25
33
  for (const select of curSelects) {
26
34
  const subList = new SubscribeList(choose, select);
27
- if (keys.length === 0) {
28
- return;
29
- }
30
35
  const values = {};
31
36
  for (const key of keys) {
32
37
  if (typeof key === 'string' && (typeof event[key] === 'string' || typeof event[key] === 'number' || typeof event[key] === 'boolean')) {
@@ -69,18 +74,12 @@ const useSubscribe = (event, selects) => {
69
74
  const ID = value.id;
70
75
  for (const select of selects) {
71
76
  const subList = new SubscribeList(value.choose, select);
72
- const find = () => {
73
- const item = subList.value.popNext();
74
- if (!item) {
75
- return;
77
+ subList.value.forEach(node => {
78
+ if (node.data.id === ID) {
79
+ node.data.status = SubscribeStatus.paused;
80
+ return true;
76
81
  }
77
- if (item.data.id !== ID) {
78
- find();
79
- return;
80
- }
81
- item.data.status = SubscribeStatus.paused;
82
- };
83
- find();
82
+ });
84
83
  }
85
84
  };
86
85
  const subscribe = {
@@ -16,6 +16,7 @@ const cbpPlatformDirect = (sockPath, open) => {
16
16
  const pendingQueue = [];
17
17
  const send = (data) => {
18
18
  data.DeviceId = deviceId;
19
+ data.CreateAt = Date.now();
19
20
  if (channel) {
20
21
  channel.send(data);
21
22
  }
@@ -86,6 +87,7 @@ const cbpPlatformIPC = (open, existingActionReplys, existingApiReplys) => {
86
87
  const send = (data) => {
87
88
  if (typeof process.send === 'function') {
88
89
  data.DeviceId = deviceId;
90
+ data.CreateAt = Date.now();
89
91
  process.send({ type: 'ipc:data', data });
90
92
  }
91
93
  };
@@ -185,6 +187,7 @@ const cbpPlatform = (url, options = {
185
187
  const send = (data) => {
186
188
  if (global.chatbotPlatform && global.chatbotPlatform.readyState === WebSocket.OPEN) {
187
189
  data.DeviceId = deviceId;
190
+ data.CreateAt = Date.now();
188
191
  global.chatbotPlatform.send(flattedJSON.stringify(data));
189
192
  }
190
193
  };
@@ -43,9 +43,6 @@ class Result {
43
43
  if (this.#data[this.#currentIndex]) {
44
44
  this.#currentIndex++;
45
45
  }
46
- else {
47
- this.#currentIndex = 0;
48
- }
49
46
  return this;
50
47
  }
51
48
  updateMessage(msg) {
@@ -67,6 +64,7 @@ class Result {
67
64
  data: data
68
65
  };
69
66
  }
67
+ this.#data[this.#currentIndex].data = data;
70
68
  return this;
71
69
  }
72
70
  updateCode(callback) {
@@ -52,10 +52,14 @@ const createDirectServer = (sockPath, onMessage) => {
52
52
  const parser = createMessageParser(onMessage);
53
53
  socket.on('data', parser);
54
54
  socket.on('error', () => {
55
- connection = null;
55
+ if (connection === socket) {
56
+ connection = null;
57
+ }
56
58
  });
57
59
  socket.on('close', () => {
58
- connection = null;
60
+ if (connection === socket) {
61
+ connection = null;
62
+ }
59
63
  });
60
64
  });
61
65
  const cleanup = () => {
@@ -93,6 +97,9 @@ const createDirectClient = (sockPath, onMessage, maxRetries = 30, retryDelay = 1
93
97
  return new Promise((resolve, reject) => {
94
98
  const parser = createMessageParser(onMessage);
95
99
  const socket = net.createConnection(sockPath, () => {
100
+ socket.removeListener('error', reject);
101
+ socket.on('error', () => {
102
+ });
96
103
  resolve({
97
104
  send: (data) => {
98
105
  if (!socket.destroyed) {
@@ -0,0 +1,4 @@
1
+ export type AutoFields = {
2
+ CreateAt?: number;
3
+ DeviceId?: string;
4
+ };
@@ -0,0 +1 @@
1
+
@@ -1,8 +1,6 @@
1
1
  export type Message = {
2
2
  MessageId: string;
3
- CreateAt: number;
4
- DeviceId?: string;
5
- replyId?: string;
3
+ ReplyId?: string;
6
4
  };
7
5
  export type MessageText = {
8
6
  MessageText: string;
@@ -10,3 +8,14 @@ export type MessageText = {
10
8
  export type MessageOpen = {
11
9
  OpenId: string;
12
10
  };
11
+ export type MessageMediaItem = {
12
+ Type: 'image' | 'audio' | 'video' | 'file' | 'sticker' | 'animation';
13
+ Url?: string;
14
+ FileId?: string;
15
+ FileName?: string;
16
+ FileSize?: number;
17
+ MimeType?: string;
18
+ };
19
+ export type MessageMedia = {
20
+ MessageMedia?: MessageMediaItem[];
21
+ };
@@ -1,5 +1,5 @@
1
1
  export type platform = {
2
2
  Platform: string;
3
- tag: string;
4
3
  value: any;
4
+ BotId?: string;
5
5
  };
@@ -8,3 +8,6 @@ export type PublicEventChannelCreate = platform & Guild & Channel & Message & {
8
8
  export type PublicEventChannelDelete = platform & Guild & Channel & Message & {
9
9
  name: 'channel.delete';
10
10
  } & Expansion;
11
+ export type PublicEventChannelUpdate = platform & Guild & Channel & Message & {
12
+ name: 'channel.update';
13
+ } & Expansion;
@@ -1,10 +1,14 @@
1
1
  import { Expansion } from '../base/expansion';
2
- import { Guild } from '../base/guild';
2
+ import { Channel, Guild } from '../base/guild';
3
3
  import { Message } from '../base/message';
4
4
  import { platform } from '../base/platform';
5
- export type PublicEventGuildJoin = platform & Guild & Message & {
5
+ import { User } from '../base/user';
6
+ export type PublicEventGuildJoin = platform & Guild & Channel & Message & User & {
6
7
  name: 'guild.join';
7
8
  } & Expansion;
8
- export type PublicEventGuildExit = platform & Guild & Message & {
9
+ export type PublicEventGuildExit = platform & Guild & Channel & Message & User & {
9
10
  name: 'guild.exit';
10
11
  } & Expansion;
12
+ export type PublicEventGuildUpdate = platform & Guild & Channel & Message & {
13
+ name: 'guild.update';
14
+ } & Expansion;
@@ -2,7 +2,7 @@ import { ChildrenCycle, Next } from '../cycle';
2
2
  import { ClientAPI } from '../client';
3
3
  import { EventKeys, Events } from './map';
4
4
  import { DataEnums } from '../message';
5
- export type Current<T extends EventKeys> = (event: Events[T], next: Next) => void | boolean | Promise<void | boolean>;
5
+ export type Current<T extends EventKeys> = (event: Events[T], next: Next) => boolean | Promise<boolean> | undefined;
6
6
  export type OnResponseValue<C, T extends EventKeys> = {
7
7
  current: C;
8
8
  select: T | T[];
@@ -54,8 +54,8 @@ export type childrenCallbackRes = {
54
54
  middleware?: ReturnType<defineMiddlewareFunc>;
55
55
  responseRouter?: ReturnType<DefineRouterFunc>;
56
56
  middlewareRouter?: ReturnType<DefineRouterFunc>;
57
- } | void;
57
+ } | undefined;
58
58
  export type childrenCallback = ChildrenCycle & {
59
- register?: () => (childrenCallbackRes | void) | Promise<childrenCallbackRes | void>;
59
+ register?: () => (childrenCallbackRes | undefined) | Promise<childrenCallbackRes | undefined>;
60
60
  };
61
61
  export type DefineChildrenCallback = (() => Promise<childrenCallback> | childrenCallback) | childrenCallback;
@@ -1,33 +1,43 @@
1
- import { PublicEventChannelCreate, PublicEventChannelDelete } from './channel';
2
- import { PublicEventGuildExit, PublicEventGuildJoin } from './guild';
1
+ import { PublicEventChannelCreate, PublicEventChannelDelete, PublicEventChannelUpdate } from './channel';
2
+ import { PublicEventGuildExit, PublicEventGuildJoin, PublicEventGuildUpdate } from './guild';
3
3
  import { PrivateEventInteractionCreate, PublicEventInteractionCreate } from './interaction';
4
- import { PublicEventMemberAdd, PublicEventMemberRemove } from './member';
5
- import { PublicEventMessageCreate, PublicEventMessageDelete, PublicEventMessageReactionAdd, PublicEventMessageReactionRemove, PublicEventMessageUpdate } from './message/message';
4
+ import { PublicEventMemberAdd, PublicEventMemberBan, PublicEventMemberRemove, PublicEventMemberUnban } from './member';
5
+ import { PublicEventMessageCreate, PublicEventMessageDelete, PublicEventMessagePin, PublicEventMessageReactionAdd, PublicEventMessageReactionRemove, PublicEventMessageUpdate } from './message/message';
6
6
  import { PrivateEventMessageCreate, PrivateEventMessageDelete, PrivateEventMessageUpdate } from './message/private.message';
7
- import { PrivateEventRequestFriendAdd, PrivateEventRequestGuildAdd } from './request';
8
- export type EventsMessageCreate = {
7
+ import { PrivateEventRequestFriendAdd, PrivateEventRequestFriendRemove, PrivateEventRequestGuildAdd } from './request';
8
+ import { AutoFields } from './base/auto';
9
+ type RawEvents = {
9
10
  'message.create': PublicEventMessageCreate;
10
11
  'private.message.create': PrivateEventMessageCreate;
11
12
  'interaction.create': PublicEventInteractionCreate;
12
13
  'private.interaction.create': PrivateEventInteractionCreate;
13
- };
14
- export type EventsMessageCreateKeys = keyof EventsMessageCreate;
15
- export type EventsMessageCreateEnum = Events[EventsMessageCreateKeys];
16
- export type Events = {
17
14
  'message.update': PublicEventMessageUpdate;
18
15
  'message.delete': PublicEventMessageDelete;
19
16
  'message.reaction.add': PublicEventMessageReactionAdd;
20
17
  'message.reaction.remove': PublicEventMessageReactionRemove;
18
+ 'message.pin': PublicEventMessagePin;
21
19
  'channel.create': PublicEventChannelCreate;
22
20
  'channel.delete': PublicEventChannelDelete;
21
+ 'channel.update': PublicEventChannelUpdate;
23
22
  'guild.join': PublicEventGuildJoin;
24
23
  'guild.exit': PublicEventGuildExit;
24
+ 'guild.update': PublicEventGuildUpdate;
25
25
  'member.add': PublicEventMemberAdd;
26
26
  'member.remove': PublicEventMemberRemove;
27
+ 'member.ban': PublicEventMemberBan;
28
+ 'member.unban': PublicEventMemberUnban;
27
29
  'private.message.update': PrivateEventMessageUpdate;
28
30
  'private.message.delete': PrivateEventMessageDelete;
29
31
  'private.friend.add': PrivateEventRequestFriendAdd;
32
+ 'private.friend.remove': PrivateEventRequestFriendRemove;
30
33
  'private.guild.add': PrivateEventRequestGuildAdd;
31
- } & EventsMessageCreate;
34
+ };
35
+ export type Events = {
36
+ [K in keyof RawEvents]: RawEvents[K] & AutoFields;
37
+ };
38
+ export type EventsMessageCreate = Pick<Events, 'message.create' | 'private.message.create' | 'interaction.create' | 'private.interaction.create'>;
39
+ export type EventsMessageCreateKeys = keyof EventsMessageCreate;
40
+ export type EventsMessageCreateEnum = Events[EventsMessageCreateKeys];
32
41
  export type EventKeys = keyof Events;
33
42
  export type EventsEnum = Events[EventKeys];
43
+ export {};
@@ -4,8 +4,14 @@ import { User } from '../base/user';
4
4
  import { platform } from '../base/platform';
5
5
  import { Expansion } from '../base/expansion';
6
6
  export type PublicEventMemberAdd = platform & Guild & Channel & Message & User & {
7
- naem: 'member.add';
7
+ name: 'member.add';
8
8
  } & Expansion;
9
9
  export type PublicEventMemberRemove = platform & Guild & Channel & Message & User & {
10
10
  name: 'member.remove';
11
11
  } & Expansion;
12
+ export type PublicEventMemberBan = platform & Guild & Channel & Message & User & {
13
+ name: 'member.ban';
14
+ } & Expansion;
15
+ export type PublicEventMemberUnban = platform & Guild & Channel & Message & User & {
16
+ name: 'member.unban';
17
+ } & Expansion;
@@ -1,9 +1,9 @@
1
1
  import { Guild, Channel } from '../base/guild';
2
- import { Message, MessageOpen, MessageText } from '../base/message';
2
+ import { Message, MessageMedia, MessageOpen, MessageText } from '../base/message';
3
3
  import { User } from '../base/user';
4
4
  import { platform } from '../base/platform';
5
5
  import { Expansion } from '../base/expansion';
6
- export type PublicEventMessageCreate = MessageText & MessageOpen & platform & Guild & Channel & Message & User & {
6
+ export type PublicEventMessageCreate = MessageText & MessageMedia & MessageOpen & platform & Guild & Channel & Message & User & {
7
7
  name: 'message.create';
8
8
  } & Expansion;
9
9
  export type PublicEventMessageUpdate = platform & Guild & Channel & Message & User & {
@@ -18,3 +18,6 @@ export type PublicEventMessageReactionAdd = platform & Guild & Channel & Message
18
18
  export type PublicEventMessageReactionRemove = platform & Guild & Channel & Message & {
19
19
  name: 'message.reaction.remove';
20
20
  } & Expansion;
21
+ export type PublicEventMessagePin = platform & Guild & Channel & Message & {
22
+ name: 'message.pin';
23
+ } & Expansion;
@@ -1,8 +1,8 @@
1
1
  import { Expansion } from '../base/expansion';
2
- import { Message, MessageOpen, MessageText } from '../base/message';
2
+ import { Message, MessageMedia, MessageOpen, MessageText } from '../base/message';
3
3
  import { platform } from '../base/platform';
4
4
  import { User } from '../base/user';
5
- export type PrivateEventMessageCreate = MessageText & MessageOpen & platform & Message & User & {
5
+ export type PrivateEventMessageCreate = MessageText & MessageMedia & MessageOpen & platform & Message & User & {
6
6
  name: 'private.message.create';
7
7
  } & Expansion;
8
8
  export type PrivateEventMessageUpdate = platform & Message & User & {
@@ -3,8 +3,11 @@ import { Message } from '../base/message';
3
3
  import { platform } from '../base/platform';
4
4
  import { User } from '../base/user';
5
5
  export type PrivateEventRequestFriendAdd = platform & Message & User & {
6
- name: 'private.request.friend.add';
6
+ name: 'private.friend.add';
7
7
  } & Expansion;
8
8
  export type PrivateEventRequestGuildAdd = platform & Message & User & {
9
- name: 'private.request.guild.add';
9
+ name: 'private.guild.add';
10
+ } & Expansion;
11
+ export type PrivateEventRequestFriendRemove = platform & Message & User & {
12
+ name: 'private.friend.remove';
10
13
  } & Expansion;
@@ -4,6 +4,7 @@ export * from './event/base/guild';
4
4
  export * from './event/base/message';
5
5
  export * from './event/base/platform';
6
6
  export * from './event/base/user';
7
+ export * from './event/base/auto';
7
8
  export * from './event/channel/index';
8
9
  export * from './event/guild/index';
9
10
  export * from './event/interaction/index';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alemonjs",
3
- "version": "2.1.32",
3
+ "version": "2.1.34",
4
4
  "description": "bot script",
5
5
  "author": "lemonade",
6
6
  "license": "MIT",