@alemonjs/discord 2.1.0-alpha.8 → 2.1.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 (64) hide show
  1. package/README.md +10 -0
  2. package/dist/assets/index.css +1 -0
  3. package/dist/assets/index.js +34 -0
  4. package/dist/index.html +15 -0
  5. package/lib/config.d.ts +14 -3
  6. package/lib/config.js +4 -5
  7. package/lib/desktop.d.ts +1 -3
  8. package/lib/desktop.js +4 -12
  9. package/lib/hook.d.ts +27 -0
  10. package/lib/hook.js +14 -0
  11. package/lib/index.d.ts +6 -6
  12. package/lib/index.js +275 -111
  13. package/lib/sdk/api.d.ts +7 -745
  14. package/lib/sdk/api.js +329 -1092
  15. package/lib/sdk/createPicFrom.d.ts +6 -0
  16. package/lib/sdk/createPicFrom.js +37 -0
  17. package/lib/sdk/instance.d.ts +3 -0
  18. package/lib/sdk/instance.js +93 -0
  19. package/lib/sdk/intents.d.ts +2 -0
  20. package/lib/sdk/intents.js +0 -121
  21. package/lib/sdk/message/CHANNEL_TOPIC_UPDATE.d.ts +5 -0
  22. package/lib/sdk/message/CHANNEL_TOPIC_UPDATE.js +1 -0
  23. package/lib/sdk/message/CHANNEL_UPDATE.d.ts +42 -0
  24. package/lib/sdk/message/CHANNEL_UPDATE.js +1 -0
  25. package/lib/sdk/message/GUILD_MEMBER_ADD.d.ts +23 -0
  26. package/lib/sdk/message/GUILD_MEMBER_ADD.js +1 -0
  27. package/lib/sdk/message/GUILD_MEMBER_REMOVE.d.ts +12 -0
  28. package/lib/sdk/message/GUILD_MEMBER_REMOVE.js +1 -0
  29. package/lib/sdk/message/GUILD_MEMBER_UPDATE.d.ts +27 -0
  30. package/lib/sdk/message/GUILD_MEMBER_UPDATE.js +1 -0
  31. package/lib/sdk/message/INTERACTION_CREATE.d.ts +125 -0
  32. package/lib/sdk/message/INTERACTION_CREATE.js +1 -0
  33. package/lib/sdk/message/MESSAGE_CREATE.d.ts +53 -0
  34. package/lib/sdk/message/MESSAGE_CREATE.js +1 -0
  35. package/lib/sdk/message/MESSAGE_DELETE.d.ts +5 -0
  36. package/lib/sdk/message/MESSAGE_DELETE.js +1 -0
  37. package/lib/sdk/message/MESSAGE_REACTION_ADD.d.ts +36 -0
  38. package/lib/sdk/message/MESSAGE_REACTION_ADD.js +1 -0
  39. package/lib/sdk/message/MESSAGE_UPDATE.d.ts +50 -0
  40. package/lib/sdk/message/MESSAGE_UPDATE.js +1 -0
  41. package/lib/sdk/message/PRESENCE_UPDATE.d.ts +57 -0
  42. package/lib/sdk/message/PRESENCE_UPDATE.js +1 -0
  43. package/lib/sdk/message/READY.d.ts +7 -0
  44. package/lib/sdk/message/READY.js +1 -0
  45. package/lib/sdk/message/TYPING_START.d.ts +29 -0
  46. package/lib/sdk/message/TYPING_START.js +1 -0
  47. package/lib/sdk/message/VOICE_CHANNEL_STATUS_UPDATE.d.ts +5 -0
  48. package/lib/sdk/message/VOICE_CHANNEL_STATUS_UPDATE.js +1 -0
  49. package/lib/sdk/message/VOICE_STATE_UPDATE.d.ts +36 -0
  50. package/lib/sdk/message/VOICE_STATE_UPDATE.js +1 -0
  51. package/lib/sdk/message.d.ts +93 -0
  52. package/lib/sdk/message.js +1 -0
  53. package/lib/sdk/types.d.ts +2 -0
  54. package/lib/sdk/types.js +25 -0
  55. package/lib/sdk/typings.d.ts +2 -33
  56. package/lib/sdk/typings.js +1 -0
  57. package/lib/sdk/wss.d.ts +8 -0
  58. package/lib/sdk/wss.js +106 -129
  59. package/lib/sdk/wss.types.d.ts +7 -0
  60. package/lib/sdk/wss.types.js +1 -0
  61. package/lib/send.d.ts +11 -0
  62. package/lib/send.js +118 -47
  63. package/package.json +16 -8
  64. package/lib/env.js +0 -1
@@ -0,0 +1,57 @@
1
+ export type PRESENCE_UPDATE_TYPE = {
2
+ user: {
3
+ id: number;
4
+ } | {
5
+ username: string;
6
+ public_flags: number;
7
+ id: string;
8
+ global_name: string;
9
+ discriminator: string;
10
+ avatar_decoration_data: {
11
+ sku_id: string;
12
+ asset: string;
13
+ };
14
+ avatar: string;
15
+ };
16
+ status: string;
17
+ guild_id: string;
18
+ client_status: {
19
+ desktop: string;
20
+ };
21
+ broadcast: null;
22
+ activities: {
23
+ type: number;
24
+ timestamps: any;
25
+ state: string;
26
+ name: string;
27
+ id: string;
28
+ details: string;
29
+ created_at: number;
30
+ assets: any;
31
+ application_id: string;
32
+ }[] | {
33
+ type: number;
34
+ state: string;
35
+ name: string;
36
+ id: string;
37
+ emoji: any;
38
+ created_at: number;
39
+ }[] | {
40
+ type: number;
41
+ name: string;
42
+ id: string;
43
+ created_at: number;
44
+ }[] | {
45
+ type: number;
46
+ timestamps: any;
47
+ state: string;
48
+ session_id: string;
49
+ name: string;
50
+ id: string;
51
+ details: string;
52
+ created_at: number;
53
+ buttons: any[];
54
+ assets: any;
55
+ application_id: string;
56
+ }[];
57
+ };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,7 @@
1
+ export type READY_TYPE = {
2
+ user: {
3
+ id: any;
4
+ avatar: string;
5
+ username: string;
6
+ };
7
+ };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,29 @@
1
+ export type TYPING_START_TYPE = {
2
+ user_id: string;
3
+ timestamp: number;
4
+ member: {
5
+ user: {
6
+ username: string;
7
+ public_flags: number;
8
+ id: string;
9
+ global_name: string;
10
+ display_name: string;
11
+ discriminator: string;
12
+ bot: boolean;
13
+ avatar_decoration_data: null;
14
+ avatar: string;
15
+ };
16
+ roles: string[];
17
+ premium_since: string;
18
+ pending: boolean;
19
+ nick: string;
20
+ mute: boolean;
21
+ joined_at: string;
22
+ flags: number;
23
+ deaf: boolean;
24
+ communication_disabled_until: null;
25
+ avatar: null;
26
+ };
27
+ channel_id: string;
28
+ guild_id: string;
29
+ };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,5 @@
1
+ export type VOICE_CHANNEL_STATUS_UPDATE_TYPE = {
2
+ status: null;
3
+ id: string;
4
+ guild_id: string;
5
+ };
@@ -0,0 +1,36 @@
1
+ export type VOICE_STATE_UPDATE_TYPE = {
2
+ member: {
3
+ user: {
4
+ username: string;
5
+ public_flags: number;
6
+ id: string;
7
+ global_name: string;
8
+ display_name: string;
9
+ discriminator: string;
10
+ bot: boolean;
11
+ avatar_decoration_data: any;
12
+ avatar: string;
13
+ };
14
+ roles: string[];
15
+ premium_since: null;
16
+ pending: boolean;
17
+ nick: null;
18
+ mute: boolean;
19
+ joined_at: string;
20
+ flags: number;
21
+ deaf: boolean;
22
+ communication_disabled_until: null;
23
+ avatar: string;
24
+ };
25
+ user_id: string;
26
+ suppress: boolean;
27
+ session_id: string;
28
+ self_video: boolean;
29
+ self_mute: true;
30
+ self_deaf: boolean;
31
+ request_to_speak_timestamp: null;
32
+ mute: boolean;
33
+ guild_id: string;
34
+ deaf: boolean;
35
+ channel_id: string;
36
+ };
@@ -0,0 +1,93 @@
1
+ import { CHANNEL_TOPIC_UPDATE_TYPE } from './message/CHANNEL_TOPIC_UPDATE';
2
+ import { CHANNEL_UPDATE_TYPE } from './message/CHANNEL_UPDATE';
3
+ import { GUILD_MEMBER_ADD_TYPE } from './message/GUILD_MEMBER_ADD';
4
+ import { GUILD_MEMBER_REMOVE_TYPE } from './message/GUILD_MEMBER_REMOVE';
5
+ import { GUILD_MEMBER_UPDATE_TYPE } from './message/GUILD_MEMBER_UPDATE';
6
+ import { INTERACTION_CREATE_TYPE } from './message/INTERACTION_CREATE';
7
+ import { MESSAGE_CREATE_TYPE } from './message/MESSAGE_CREATE';
8
+ import { MESSAGE_DELETE_TYPE } from './message/MESSAGE_DELETE';
9
+ import { MESSAGE_REACTION_ADD_TYPE } from './message/MESSAGE_REACTION_ADD';
10
+ import { MESSAGE_UPDATE_TYPE } from './message/MESSAGE_UPDATE';
11
+ import { PRESENCE_UPDATE_TYPE } from './message/PRESENCE_UPDATE';
12
+ import { READY_TYPE } from './message/READY';
13
+ import { TYPING_START_TYPE } from './message/TYPING_START';
14
+ import { VOICE_CHANNEL_STATUS_UPDATE_TYPE } from './message/VOICE_CHANNEL_STATUS_UPDATE';
15
+ import { VOICE_STATE_UPDATE_TYPE } from './message/VOICE_STATE_UPDATE';
16
+ export type DCEventMap = {
17
+ GUILD_CREATE: any;
18
+ GUILD_UPDATE: any;
19
+ GUILD_DELETE: any;
20
+ GUILD_ROLE_CREATE: any;
21
+ GUILD_ROLE_UPDATE: any;
22
+ GUILD_ROLE_DELETE: any;
23
+ CHANNEL_CREATE: any;
24
+ CHANNEL_UPDATE: CHANNEL_UPDATE_TYPE;
25
+ CHANNEL_DELETE: any;
26
+ CHANNEL_PINS_UPDATE: any;
27
+ CHANNEL_TOPIC_UPDATE: CHANNEL_TOPIC_UPDATE_TYPE;
28
+ THREAD_CREATE: any;
29
+ THREAD_UPDATE: any;
30
+ THREAD_DELETE: any;
31
+ THREAD_LIST_SYNC: any;
32
+ THREAD_MEMBER_UPDATE: any;
33
+ THREAD_MEMBERS_UPDATE: any;
34
+ STAGE_INSTANCE_CREATE: any;
35
+ STAGE_INSTANCE_UPDATE: any;
36
+ STAGE_INSTANCE_DELETE: any;
37
+ GUILD_MEMBER_ADD: GUILD_MEMBER_ADD_TYPE;
38
+ GUILD_MEMBER_UPDATE: GUILD_MEMBER_UPDATE_TYPE;
39
+ GUILD_MEMBER_REMOVE: GUILD_MEMBER_REMOVE_TYPE;
40
+ GUILD_AUDIT_LOG_ENTRY_CREATE: any;
41
+ GUILD_BAN_ADD: any;
42
+ GUILD_BAN_REMOVE: any;
43
+ GUILD_EMOJIS_UPDATE: any;
44
+ GUILD_STICKERS_UPDATE: any;
45
+ GUILD_SOUNDBOARD_SOUND_CREATE: any;
46
+ GUILD_SOUNDBOARD_SOUND_UPDATE: any;
47
+ GUILD_SOUNDBOARD_SOUND_DELETE: any;
48
+ GUILD_SOUNDBOARD_SOUNDS_UPDATE: any;
49
+ GUILD_INTEGRATIONS_UPDATE: any;
50
+ INTEGRATION_CREATE: any;
51
+ INTEGRATION_UPDATE: any;
52
+ INTEGRATION_DELETE: any;
53
+ WEBHOOKS_UPDATE: any;
54
+ INVITE_CREATE: any;
55
+ INVITE_DELETE: any;
56
+ VOICE_STATE_UPDATE: VOICE_STATE_UPDATE_TYPE;
57
+ VOICE_CHANNEL_STATUS_UPDATE: VOICE_CHANNEL_STATUS_UPDATE_TYPE;
58
+ VOICE_CHANNEL_EFFECT_SEND: any;
59
+ PRESENCE_UPDATE: PRESENCE_UPDATE_TYPE;
60
+ MESSAGE_CREATE: MESSAGE_CREATE_TYPE;
61
+ MESSAGE_UPDATE: MESSAGE_UPDATE_TYPE;
62
+ MESSAGE_DELETE: MESSAGE_DELETE_TYPE;
63
+ MESSAGE_DELETE_BULK: any;
64
+ MESSAGE_REACTION_ADD: MESSAGE_REACTION_ADD_TYPE;
65
+ MESSAGE_REACTION_REMOVE: any;
66
+ MESSAGE_REACTION_REMOVE_ALL: any;
67
+ MESSAGE_REACTION_REMOVE_EMOJI: any;
68
+ TYPING_START: TYPING_START_TYPE;
69
+ DIRECT_MESSAGE_CREATE: any;
70
+ DIRECT_MESSAGE_UPDATE: any;
71
+ DIRECT_MESSAGE_DELETE: any;
72
+ DIRECT_MESSAGE_PINS_UPDATE: any;
73
+ DIRECT_MESSAGE_REACTION_ADD: any;
74
+ DIRECT_MESSAGE_REACTION_REMOVE: any;
75
+ DIRECT_MESSAGE_REACTION_REMOVE_ALL: any;
76
+ DIRECT_MESSAGE_REACTION_REMOVE_EMOJI: any;
77
+ DIRECT_MESSAGE_TYPING_START: any;
78
+ GUILD_SCHEDULED_EVENT_CREATE: any;
79
+ GUILD_SCHEDULED_EVENT_UPDATE: any;
80
+ GUILD_SCHEDULED_EVENT_DELETE: any;
81
+ GUILD_SCHEDULED_EVENT_USER_ADD: any;
82
+ GUILD_SCHEDULED_EVENT_USER_REMOVE: any;
83
+ AUTO_MODERATION_RULE_CREATE: any;
84
+ AUTO_MODERATION_RULE_UPDATE: any;
85
+ AUTO_MODERATION_RULE_DELETE: any;
86
+ AUTO_MODERATION_ACTION_EXECUTION: any;
87
+ MESSAGE_POLL_VOTE_ADD: any;
88
+ MESSAGE_POLL_VOTE_REMOVE: any;
89
+ DIRECT_MESSAGE_POLL_VOTE_ADD: any;
90
+ DIRECT_MESSAGE_POLL_VOTE_REMOVE: any;
91
+ READY: READY_TYPE;
92
+ INTERACTION_CREATE: INTERACTION_CREATE_TYPE;
93
+ };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,2 @@
1
+ export declare const AvailableIntentsEventsEnum: string[];
2
+ export type DCIntentsEnum = (typeof AvailableIntentsEventsEnum)[number];
@@ -0,0 +1,25 @@
1
+ const AvailableIntentsEventsEnum = [
2
+ 'GUILDS',
3
+ 'GUILD_MEMBERS',
4
+ 'GUILD_MODERATION',
5
+ 'GUILD_EXPRESSIONS',
6
+ 'GUILD_INTEGRATIONS',
7
+ 'GUILD_WEBHOOKS',
8
+ 'GUILD_INVITES',
9
+ 'GUILD_VOICE_STATES',
10
+ 'GUILD_PRESENCES',
11
+ 'GUILD_MESSAGES',
12
+ 'GUILD_MESSAGE_REACTIONS',
13
+ 'GUILD_MESSAGE_TYPING',
14
+ 'DIRECT_MESSAGES',
15
+ 'DIRECT_MESSAGE_REACTIONS',
16
+ 'DIRECT_MESSAGE_TYPING',
17
+ 'MESSAGE_CONTENT',
18
+ 'GUILD_SCHEDULED_EVENTS',
19
+ 'AUTO_MODERATION_CONFIGURATION',
20
+ 'AUTO_MODERATION_EXECUTION',
21
+ 'GUILD_MESSAGE_POLLS',
22
+ 'DIRECT_MESSAGE_POLLS'
23
+ ];
24
+
25
+ export { AvailableIntentsEventsEnum };
@@ -1,6 +1,3 @@
1
- /**
2
- * buttons start
3
- */
4
1
  type ComponentButton = {
5
2
  type: number;
6
3
  style: 2;
@@ -15,12 +12,6 @@ type ComponentButtons = {
15
12
  type: 1;
16
13
  components: ComponentButton[];
17
14
  };
18
- /**
19
- * buttons end
20
- */
21
- /**
22
- * select start
23
- */
24
15
  type ComponentSelectsOption = {
25
16
  label: string;
26
17
  value: string;
@@ -64,12 +55,6 @@ type ComponentSelects = {
64
55
  type: 1;
65
56
  components: (ComponentSelect | ComponentUserSelect | ComponentRuleSelect | ComponentMentionSelect | ComponentChannelSelect)[];
66
57
  };
67
- /**
68
- * select end
69
- */
70
- /**
71
- * input start
72
- */
73
58
  type ComponentInput = {
74
59
  id?: number;
75
60
  type: 4;
@@ -89,12 +74,6 @@ type ComponentModal = {
89
74
  components: ComponentInput[];
90
75
  }[];
91
76
  };
92
- /**
93
- * input end
94
- */
95
- /**
96
- * section start
97
- */
98
77
  type ComponentText = {
99
78
  type: 10;
100
79
  content: string;
@@ -109,9 +88,6 @@ type ComponentSection = {
109
88
  };
110
89
  };
111
90
  };
112
- /**
113
- * section end
114
- */
115
91
  type ComponentMedia = {
116
92
  type: 12;
117
93
  items: {
@@ -137,12 +113,9 @@ type ComponentContainer = {
137
113
  accent_color: number;
138
114
  components: (ComponentButtons | ComponentSelects | ComponentMedia | ComponentFile | ComponentText | ComponentSection | ComponentSeparator)[];
139
115
  };
140
- type MessageData = {
116
+ export type MessageData = {
141
117
  content?: string;
142
118
  tts?: boolean;
143
- /**
144
- * 嵌入
145
- */
146
119
  embeds?: {
147
120
  title?: string;
148
121
  type?: string;
@@ -191,9 +164,6 @@ type MessageData = {
191
164
  }[];
192
165
  allowed_mentions?: any;
193
166
  message_reference?: any;
194
- /**
195
- * 组件
196
- */
197
167
  components?: (ComponentButtons | ComponentSelects | ComponentModal | ComponentMedia | ComponentFile | ComponentText | ComponentSection | ComponentSeparator | ComponentContainer)[];
198
168
  sticker_ids?: any;
199
169
  files?: any[];
@@ -217,5 +187,4 @@ type MessageData = {
217
187
  enforce_nonce?: boolean;
218
188
  poll?: any;
219
189
  };
220
-
221
- export type { MessageData };
190
+ export {};
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,8 @@
1
+ import { DCAPI } from './api.js';
2
+ import { DCEventMap } from './message.js';
3
+ export declare class DCClient extends DCAPI {
4
+ #private;
5
+ constructor();
6
+ on<T extends keyof DCEventMap>(key: T, val: (event: DCEventMap[T]) => any): this;
7
+ connect(): Promise<void>;
8
+ }
package/lib/sdk/wss.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import WebSocket from 'ws';
2
2
  import { DCAPI } from './api.js';
3
3
  import { getIntents } from './intents.js';
4
- import { getDiscordConfigValue } from '../config.js';
4
+ import { getDiscordConfig } from '../config.js';
5
+ import { HttpsProxyAgent } from 'https-proxy-agent';
6
+ import { AvailableIntentsEventsEnum } from './types.js';
7
+ import dayjs from 'dayjs';
5
8
 
6
9
  class DCClient extends DCAPI {
7
10
  #heartbeat_interval = 0;
@@ -10,24 +13,21 @@ class DCClient extends DCAPI {
10
13
  #timeout_id = null;
11
14
  #seq = null;
12
15
  #ws;
16
+ #count = 0;
17
+ #events = {};
13
18
  constructor() {
14
19
  super();
15
20
  return this;
16
21
  }
17
- /**
18
- * 连接确认
19
- * @returns
20
- */
21
22
  #aut() {
22
- const value = getDiscordConfigValue();
23
+ const value = getDiscordConfig();
23
24
  const token = value.token;
24
- const intent = value.intent || [];
25
+ const intent = value.intent || AvailableIntentsEventsEnum;
25
26
  const shard = value.shard || [0, 1];
26
27
  return {
27
28
  op: 2,
28
29
  d: {
29
30
  shard: shard,
30
- // 验证token
31
31
  token: `Bot ${token}`,
32
32
  intents: getIntents(intent),
33
33
  properties: {
@@ -38,142 +38,119 @@ class DCClient extends DCAPI {
38
38
  }
39
39
  };
40
40
  }
41
- #events = {};
42
- /**
43
- * 注册事件处理程序
44
- * @param key 事件名称
45
- * @param val 事件处理函数
46
- */
41
+ #getReConnectTime() {
42
+ const time = this.#count > 3 ? 1000 * 6 : 1000 * 1;
43
+ const curTime = this.#count > 6 ? 1000 * this.#count * 2 : time;
44
+ logger.info(`[ws-discord] 等待 ${dayjs(curTime).format('mm:ss')} 后重新连接`);
45
+ return curTime;
46
+ }
47
47
  on(key, val) {
48
48
  this.#events[key] = val;
49
49
  return this;
50
50
  }
51
- /**
52
- * 创建ws监听
53
- * @param conversation
54
- * @param shard
55
- * @returns
56
- */
57
51
  async connect() {
58
- const value = getDiscordConfigValue();
52
+ this.#count++;
53
+ const value = getDiscordConfig();
59
54
  const gatewayURL = value.gatewayURL;
60
- // 清除序列号
61
55
  this.#seq = null;
62
- // 清除心跳
63
56
  clearTimeout(this.#timeout_id);
64
- // 获取网关
65
- const url = gatewayURL ??
66
- (await this.gateway()
57
+ const gateway = async () => {
58
+ if (gatewayURL) {
59
+ return gatewayURL;
60
+ }
61
+ const currentGateway = await this.gateway()
67
62
  .then(res => res?.url)
68
- .catch(err => {
69
- if (this.#events['ERROR'])
70
- this.#events['ERROR'](err?.message ?? err);
71
- }));
72
- // 没有网关
73
- if (!url) {
74
- console.error('[ws] 无法获取网关');
75
- return;
76
- }
77
- /**
78
- * 心跳恢复
79
- */
80
- const call = async () => {
81
- this.#ws.send(JSON.stringify({
82
- op: 1, // op = 1
83
- d: this.#seq // 如果是第一次连接,传null
84
- }));
85
- // 确保清除
86
- clearTimeout(this.#timeout_id);
87
- // 开始心跳
88
- this.#timeout_id = setTimeout(call, this.#heartbeat_interval);
63
+ .catch(() => null);
64
+ return currentGateway;
89
65
  };
90
- const map = {
91
- /**
92
- * 事件接收到
93
- * @param param0
94
- */
95
- 0: async ({ d, t, s }) => {
96
- if (s) {
97
- // 序列号
98
- this.#seq = s;
99
- }
100
- // 准备
101
- if (t == 'READY') {
102
- if (d?.resume_gateway_url) {
103
- this.#gateway_url = d?.resume_gateway_url;
104
- console.log('[ws] gateway_url', this.#gateway_url);
105
- }
106
- if (d?.session_id) {
107
- this.#session_id = d?.session_id;
108
- console.log('[ws] session_id', this.#session_id);
66
+ try {
67
+ const url = gatewayURL ?? (await gateway());
68
+ if (!url) {
69
+ logger.error('[ws-discord] 获取网关失败~');
70
+ const curTime = this.#getReConnectTime();
71
+ setTimeout(() => {
72
+ void this.connect();
73
+ }, curTime);
74
+ return;
75
+ }
76
+ const call = () => {
77
+ this.#ws.send(JSON.stringify({
78
+ op: 1,
79
+ d: this.#seq
80
+ }));
81
+ clearTimeout(this.#timeout_id);
82
+ this.#timeout_id = setTimeout(call, this.#heartbeat_interval);
83
+ };
84
+ const map = {
85
+ 0: ({ d, t, s }) => {
86
+ if (s) {
87
+ this.#seq = s;
109
88
  }
110
- }
111
- // 事件处理
112
- if (this.#events[t]) {
113
- try {
114
- await this.#events[t](d);
89
+ if (t === 'READY') {
90
+ if (d?.resume_gateway_url) {
91
+ this.#gateway_url = d?.resume_gateway_url;
92
+ logger.info('[ws-discord] gateway_url', this.#gateway_url);
93
+ }
94
+ if (d?.session_id) {
95
+ this.#session_id = d?.session_id;
96
+ logger.info('[ws-discord] session_id', this.#session_id);
97
+ }
115
98
  }
116
- catch (err) {
117
- if (this.#events['ERROR'])
118
- this.#events['ERROR'](err);
99
+ if (this.#events[t]) {
100
+ try {
101
+ this.#events[t](d);
102
+ }
103
+ catch (err) {
104
+ logger.error('[ws-discord] 事件处理错误', err);
105
+ }
119
106
  }
107
+ },
108
+ 7: () => {
109
+ logger.info('[ws-discord] 重新连接');
110
+ clearTimeout(this.#timeout_id);
111
+ this.#ws.close();
112
+ },
113
+ 9: ({ d }) => {
114
+ logger.error('[ws-discord] 无效会话', d);
115
+ },
116
+ 10: ({ d }) => {
117
+ this.#heartbeat_interval = d.heartbeat_interval;
118
+ call();
119
+ this.#ws.send(JSON.stringify(this.#aut()));
120
+ },
121
+ 11: () => {
122
+ logger.debug('[ws-discord] 心跳确认');
120
123
  }
121
- //
122
- },
123
- /**
124
- * 重新连接
125
- */
126
- 7: () => {
127
- console.info('[ws] 重新连接');
128
- // this.#ws.send(JSON.stringify(this.#reAut()))
129
- },
130
- /**
131
- * 无效会话
132
- * @param message
133
- */
134
- 9: ({ d }) => {
135
- console.error('[ws] 无效会话 ', d);
136
- },
137
- /**
138
- * 你好
139
- * @param param0
140
- */
141
- 10: ({ d }) => {
142
- // 得到心跳间隔
143
- this.#heartbeat_interval = d.heartbeat_interval;
144
- // 开始心跳
145
- call();
146
- // 开启会话
147
- this.#ws.send(JSON.stringify(this.#aut()));
148
- },
149
- /**
150
- * 心跳确认
151
- */
152
- 11: () => {
153
- console.info('[ws] 心跳确认');
124
+ };
125
+ const ClientOptions = value.websocket_options || {};
126
+ if (value.websocket_proxy) {
127
+ ClientOptions.agent = new HttpsProxyAgent(value.websocket_proxy);
154
128
  }
155
- };
156
- this.#ws = new WebSocket(`${url}?v=10&encoding=json`);
157
- this.#ws.on('open', async () => {
158
- console.info('[ws] open');
159
- });
160
- // 消息
161
- this.#ws.on('message', data => {
162
- const message = JSON.parse(data.toString());
163
- if (map[message.op])
164
- map[message.op](message);
165
- });
166
- // 关闭
167
- this.#ws.on('close', err => {
168
- console.error('[ws] 连接已关闭', err);
169
- console.log('[ws] 等待重连');
170
- this.connect();
171
- });
172
- // 出错
173
- this.#ws.on('error', err => {
174
- console.error('[ws] error:', err);
175
- });
176
- ///
129
+ this.#ws = new WebSocket(`${url}?v=10&encoding=json`, ClientOptions);
130
+ this.#ws.on('open', () => {
131
+ logger.info('[ws-discord] 打开连接');
132
+ this.#count = 0;
133
+ });
134
+ this.#ws.on('message', data => {
135
+ const message = JSON.parse(data.toString());
136
+ if (map[message.op]) {
137
+ map[message.op](message);
138
+ }
139
+ });
140
+ this.#ws.on('close', err => {
141
+ logger.info('[ws-discord] 连接关闭', err);
142
+ const curTime = this.#getReConnectTime();
143
+ setTimeout(() => {
144
+ void this.connect();
145
+ }, curTime);
146
+ });
147
+ this.#ws.on('error', err => {
148
+ logger.error('[ws-discord] 出错', err?.message || err);
149
+ });
150
+ }
151
+ catch (err) {
152
+ logger.error('[ws-discord] 内部错误', err);
153
+ }
177
154
  }
178
155
  }
179
156
 
@@ -0,0 +1,7 @@
1
+ import { DCIntentsEnum } from './types.js';
2
+ export interface DISOCRDOptions {
3
+ gatewayURL?: string;
4
+ token: string;
5
+ intent?: DCIntentsEnum[];
6
+ shard?: number[];
7
+ }
@@ -0,0 +1 @@
1
+