@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.
- package/README.md +10 -0
- package/dist/assets/index.css +1 -0
- package/dist/assets/index.js +34 -0
- package/dist/index.html +15 -0
- package/lib/config.d.ts +14 -3
- package/lib/config.js +4 -5
- package/lib/desktop.d.ts +1 -3
- package/lib/desktop.js +4 -12
- package/lib/hook.d.ts +27 -0
- package/lib/hook.js +14 -0
- package/lib/index.d.ts +6 -6
- package/lib/index.js +275 -111
- package/lib/sdk/api.d.ts +7 -745
- package/lib/sdk/api.js +329 -1092
- package/lib/sdk/createPicFrom.d.ts +6 -0
- package/lib/sdk/createPicFrom.js +37 -0
- package/lib/sdk/instance.d.ts +3 -0
- package/lib/sdk/instance.js +93 -0
- package/lib/sdk/intents.d.ts +2 -0
- package/lib/sdk/intents.js +0 -121
- package/lib/sdk/message/CHANNEL_TOPIC_UPDATE.d.ts +5 -0
- package/lib/sdk/message/CHANNEL_TOPIC_UPDATE.js +1 -0
- package/lib/sdk/message/CHANNEL_UPDATE.d.ts +42 -0
- package/lib/sdk/message/CHANNEL_UPDATE.js +1 -0
- package/lib/sdk/message/GUILD_MEMBER_ADD.d.ts +23 -0
- package/lib/sdk/message/GUILD_MEMBER_ADD.js +1 -0
- package/lib/sdk/message/GUILD_MEMBER_REMOVE.d.ts +12 -0
- package/lib/sdk/message/GUILD_MEMBER_REMOVE.js +1 -0
- package/lib/sdk/message/GUILD_MEMBER_UPDATE.d.ts +27 -0
- package/lib/sdk/message/GUILD_MEMBER_UPDATE.js +1 -0
- package/lib/sdk/message/INTERACTION_CREATE.d.ts +125 -0
- package/lib/sdk/message/INTERACTION_CREATE.js +1 -0
- package/lib/sdk/message/MESSAGE_CREATE.d.ts +53 -0
- package/lib/sdk/message/MESSAGE_CREATE.js +1 -0
- package/lib/sdk/message/MESSAGE_DELETE.d.ts +5 -0
- package/lib/sdk/message/MESSAGE_DELETE.js +1 -0
- package/lib/sdk/message/MESSAGE_REACTION_ADD.d.ts +36 -0
- package/lib/sdk/message/MESSAGE_REACTION_ADD.js +1 -0
- package/lib/sdk/message/MESSAGE_UPDATE.d.ts +50 -0
- package/lib/sdk/message/MESSAGE_UPDATE.js +1 -0
- package/lib/sdk/message/PRESENCE_UPDATE.d.ts +57 -0
- package/lib/sdk/message/PRESENCE_UPDATE.js +1 -0
- package/lib/sdk/message/READY.d.ts +7 -0
- package/lib/sdk/message/READY.js +1 -0
- package/lib/sdk/message/TYPING_START.d.ts +29 -0
- package/lib/sdk/message/TYPING_START.js +1 -0
- package/lib/sdk/message/VOICE_CHANNEL_STATUS_UPDATE.d.ts +5 -0
- package/lib/sdk/message/VOICE_CHANNEL_STATUS_UPDATE.js +1 -0
- package/lib/sdk/message/VOICE_STATE_UPDATE.d.ts +36 -0
- package/lib/sdk/message/VOICE_STATE_UPDATE.js +1 -0
- package/lib/sdk/message.d.ts +93 -0
- package/lib/sdk/message.js +1 -0
- package/lib/sdk/types.d.ts +2 -0
- package/lib/sdk/types.js +25 -0
- package/lib/sdk/typings.d.ts +2 -33
- package/lib/sdk/typings.js +1 -0
- package/lib/sdk/wss.d.ts +8 -0
- package/lib/sdk/wss.js +106 -129
- package/lib/sdk/wss.types.d.ts +7 -0
- package/lib/sdk/wss.types.js +1 -0
- package/lib/send.d.ts +11 -0
- package/lib/send.js +118 -47
- package/package.json +16 -8
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
|
|
@@ -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 @@
|
|
|
1
|
+
|
|
@@ -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
|
+
|
package/lib/sdk/types.js
ADDED
|
@@ -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 };
|
package/lib/sdk/typings.d.ts
CHANGED
|
@@ -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
|
+
|
package/lib/sdk/wss.d.ts
ADDED
|
@@ -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 {
|
|
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 =
|
|
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
|
-
#
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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(
|
|
69
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
this.#events[
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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 @@
|
|
|
1
|
+
|