revbot.js 0.0.7 → 0.0.9
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 +1 -1
- package/dist/index.d.mts +136 -4
- package/dist/index.d.ts +136 -4
- package/dist/index.js +273 -40
- package/dist/index.mjs +272 -40
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Note: this package is currently in the early stages of development and testing
|
|
4
4
|
|
|
5
5
|
`revbot.js` is a Node.js library for building bots on the Revolt platform. It provides an easy-to-use interface for interacting with Revolt's API, managing events, and handling various bot functionalities.
|
|
6
|
-
[revolt server](https://rvlt.gg/
|
|
6
|
+
[revolt server](https://rvlt.gg/2NcCgYZ0) [docs](https://jade3375.github.io/revbot.js/)
|
|
7
7
|
|
|
8
8
|
## Installation
|
|
9
9
|
|
package/dist/index.d.mts
CHANGED
|
@@ -73,29 +73,58 @@ declare class UUID extends null {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
type BitFieldResolvable = BitField | number | string | BitFieldResolvable[];
|
|
76
|
+
/**
|
|
77
|
+
* Represents a bitfield that can be used to manage flags or permissions.
|
|
78
|
+
*/
|
|
76
79
|
declare class BitField {
|
|
77
80
|
static FLAGS: Record<string, number>;
|
|
78
81
|
bitfield: number;
|
|
79
82
|
constructor(bits?: BitFieldResolvable);
|
|
83
|
+
/**
|
|
84
|
+
* Resolves a bitfield or an array of bitfields into a single number.
|
|
85
|
+
* @param bit The bitfield or array of bitfields to resolve.
|
|
86
|
+
* @returns The resolved bitfield as a number.
|
|
87
|
+
*/
|
|
80
88
|
static resolve(bit: BitFieldResolvable): number;
|
|
89
|
+
/**
|
|
90
|
+
* Returns the class that this instance belongs to.
|
|
91
|
+
* @returns The class of the bitfield.
|
|
92
|
+
*/
|
|
81
93
|
get self(): {
|
|
82
94
|
FLAGS: Record<string, number>;
|
|
83
95
|
resolve(bit: BitFieldResolvable): number;
|
|
84
96
|
new (bits?: BitFieldResolvable): BitField;
|
|
85
97
|
};
|
|
98
|
+
/**
|
|
99
|
+
* Checks if any of the bits in the bitfield are set.
|
|
100
|
+
* @param bit The bitfield or array of bitfields to check.
|
|
101
|
+
* @returns True if any bits are set, false otherwise.
|
|
102
|
+
*/
|
|
86
103
|
any(bit: BitFieldResolvable): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* checks if a specific permission is set.
|
|
106
|
+
*/
|
|
87
107
|
has(bit: BitFieldResolvable): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Returns an array of all the Permissions that are set in the bitfield.
|
|
110
|
+
* @returns An array of flag names.
|
|
111
|
+
*/
|
|
88
112
|
toArray(): string[];
|
|
89
113
|
add(...bits: BitFieldResolvable[]): this;
|
|
90
114
|
remove(...bits: BitFieldResolvable[]): this;
|
|
91
115
|
freeze(): Readonly<this>;
|
|
92
116
|
valueOf(): number;
|
|
117
|
+
/**
|
|
118
|
+
*
|
|
119
|
+
* @returns A record of all flags and their boolean values indicating whether they are set.
|
|
120
|
+
*/
|
|
93
121
|
serialize(): Record<string, boolean>;
|
|
94
122
|
[Symbol.iterator](): Iterable<string>;
|
|
95
123
|
}
|
|
96
124
|
|
|
97
125
|
declare class RestClient {
|
|
98
126
|
private readonly client;
|
|
127
|
+
private rateLimitQueue;
|
|
99
128
|
constructor(client: BaseClient);
|
|
100
129
|
/**
|
|
101
130
|
* Helper function to handle API requests.
|
|
@@ -148,6 +177,7 @@ declare class RestClient {
|
|
|
148
177
|
|
|
149
178
|
declare class CDNClient {
|
|
150
179
|
private readonly client;
|
|
180
|
+
private rateLimitQueue;
|
|
151
181
|
constructor(client: BaseClient);
|
|
152
182
|
/**
|
|
153
183
|
* Helper function to handle API requests.
|
|
@@ -465,6 +495,44 @@ declare class ServerPermissions extends BitField {
|
|
|
465
495
|
constructor(bits?: ServerPermissionsResolvable);
|
|
466
496
|
static resolve(bit: ServerPermissionsResolvable): number;
|
|
467
497
|
}
|
|
498
|
+
declare class FullPermissions extends BitField {
|
|
499
|
+
static readonly FLAGS: {
|
|
500
|
+
readonly ManageChannel: number;
|
|
501
|
+
readonly ManageServer: number;
|
|
502
|
+
readonly ManagePermissions: number;
|
|
503
|
+
readonly ManageRole: number;
|
|
504
|
+
readonly ManageCustomisation: number;
|
|
505
|
+
readonly KickMembers: number;
|
|
506
|
+
readonly BanMembers: number;
|
|
507
|
+
readonly TimeoutMembers: number;
|
|
508
|
+
readonly AssignRoles: number;
|
|
509
|
+
readonly ChangeNickname: number;
|
|
510
|
+
readonly ManageNicknames: number;
|
|
511
|
+
readonly ChangeAvatar: number;
|
|
512
|
+
readonly RemoveAvatars: number;
|
|
513
|
+
readonly ViewChannel: number;
|
|
514
|
+
readonly ReadMessageHistory: number;
|
|
515
|
+
readonly SendMessage: number;
|
|
516
|
+
readonly ManageMessages: number;
|
|
517
|
+
readonly ManageWebhooks: number;
|
|
518
|
+
readonly InviteOthers: number;
|
|
519
|
+
readonly SendEmbeds: number;
|
|
520
|
+
readonly UploadFiles: number;
|
|
521
|
+
readonly Masquerade: number;
|
|
522
|
+
readonly React: number;
|
|
523
|
+
readonly Connect: number;
|
|
524
|
+
readonly Speak: number;
|
|
525
|
+
readonly Video: number;
|
|
526
|
+
readonly MuteMembers: number;
|
|
527
|
+
readonly DeafenMembers: number;
|
|
528
|
+
readonly MoveMembers: number;
|
|
529
|
+
readonly MentionEveryone: number;
|
|
530
|
+
readonly MentionRoles: number;
|
|
531
|
+
readonly GrantAll: 4503599627370495;
|
|
532
|
+
};
|
|
533
|
+
constructor(bits?: number | string | FullPermissions | Array<number | string | FullPermissions>);
|
|
534
|
+
static resolve(bit: number | string | FullPermissions): number;
|
|
535
|
+
}
|
|
468
536
|
declare const DEFAULT_PERMISSION_DM: Readonly<ChannelPermissions>;
|
|
469
537
|
|
|
470
538
|
type BadgeString = keyof typeof Badges.FLAGS;
|
|
@@ -840,7 +908,7 @@ declare class Server extends Base {
|
|
|
840
908
|
/** Whether the server is marked as NSFW (Not Safe For Work). */
|
|
841
909
|
nsfw: boolean;
|
|
842
910
|
/** The default permissions for the server. */
|
|
843
|
-
permissions:
|
|
911
|
+
permissions: FullPermissions;
|
|
844
912
|
/** The categories in the server. */
|
|
845
913
|
categories: Map<string, Category>;
|
|
846
914
|
/** the emojies associated with the server */
|
|
@@ -893,6 +961,55 @@ declare class Server extends Base {
|
|
|
893
961
|
toString(): string;
|
|
894
962
|
}
|
|
895
963
|
|
|
964
|
+
/**
|
|
965
|
+
* Represents the permissions that can be set for a role.
|
|
966
|
+
*/
|
|
967
|
+
type editablePermissions = {
|
|
968
|
+
/**
|
|
969
|
+
* Permissions to allow for the role.
|
|
970
|
+
* Each key corresponds to a permission flag in FullPermissions.
|
|
971
|
+
*/
|
|
972
|
+
a?: Array<keyof (typeof FullPermissions)["FLAGS"]>;
|
|
973
|
+
/**
|
|
974
|
+
* Permissions to deny for the role.
|
|
975
|
+
* Each key corresponds to a permission flag in FullPermissions.
|
|
976
|
+
*/
|
|
977
|
+
d?: Array<keyof (typeof FullPermissions)["FLAGS"]>;
|
|
978
|
+
};
|
|
979
|
+
/**
|
|
980
|
+
* Represents a role that can be edited in a server.
|
|
981
|
+
*/
|
|
982
|
+
type editableRole = {
|
|
983
|
+
/**
|
|
984
|
+
* Name of the role.
|
|
985
|
+
*/
|
|
986
|
+
name?: string;
|
|
987
|
+
/**
|
|
988
|
+
* Colour of the role, or `null` if no colour is set.
|
|
989
|
+
*/
|
|
990
|
+
colour?: string | null;
|
|
991
|
+
/**
|
|
992
|
+
* Whether the role is displayed separately in the member list.
|
|
993
|
+
*/
|
|
994
|
+
hoist?: boolean;
|
|
995
|
+
/**
|
|
996
|
+
* Rank of the role, used for ordering.
|
|
997
|
+
*/
|
|
998
|
+
rank?: number;
|
|
999
|
+
/**
|
|
1000
|
+
* Permissions to set for the role.
|
|
1001
|
+
* Format: { a: allow, d: deny }
|
|
1002
|
+
*/
|
|
1003
|
+
permissions?: editablePermissions;
|
|
1004
|
+
/**
|
|
1005
|
+
* Fields to remove from the role.
|
|
1006
|
+
* Each key corresponds to a field in the Role type.
|
|
1007
|
+
*/
|
|
1008
|
+
remove?: Array<keyof Role$1 & {
|
|
1009
|
+
[key: string]: unknown;
|
|
1010
|
+
}>;
|
|
1011
|
+
};
|
|
1012
|
+
|
|
896
1013
|
/**
|
|
897
1014
|
* Represents a role in a server.
|
|
898
1015
|
*
|
|
@@ -960,6 +1077,7 @@ declare class Role extends Base {
|
|
|
960
1077
|
* ```
|
|
961
1078
|
*/
|
|
962
1079
|
delete(): Promise<void>;
|
|
1080
|
+
edit(data: editableRole): Promise<Role>;
|
|
963
1081
|
/**
|
|
964
1082
|
* Converts the role to a string representation.
|
|
965
1083
|
*
|
|
@@ -1532,8 +1650,8 @@ type APIServerChannel$1 = Extract<Channel$1, {
|
|
|
1532
1650
|
channel_type: "TextChannel" | "VoiceChannel";
|
|
1533
1651
|
}>;
|
|
1534
1652
|
interface Overwrite {
|
|
1535
|
-
allow:
|
|
1536
|
-
deny:
|
|
1653
|
+
allow: FullPermissions;
|
|
1654
|
+
deny: FullPermissions;
|
|
1537
1655
|
}
|
|
1538
1656
|
/**
|
|
1539
1657
|
* Represents a server channel, which can be a text or voice channel.
|
|
@@ -2397,6 +2515,20 @@ declare class RoleManager extends BaseManager<Role, Role$1 & {
|
|
|
2397
2515
|
* @returns A promise that resolves when the role is deleted
|
|
2398
2516
|
*/
|
|
2399
2517
|
delete(role: RoleResolvable): Promise<void>;
|
|
2518
|
+
/**
|
|
2519
|
+
*
|
|
2520
|
+
* @param role the role to edit
|
|
2521
|
+
* @param data data to edit the role with
|
|
2522
|
+
* @param data.permissions The permissions to set for the role, in the format { a: allow, d: deny }
|
|
2523
|
+
* @param data.name The name of the role
|
|
2524
|
+
* @param data.colour The color of the role, or `null` if no color is set
|
|
2525
|
+
* @param data.hoist Whether the role is displayed separately in the member list
|
|
2526
|
+
* @param data.rank The rank of the role, used for ordering
|
|
2527
|
+
* @param data.remove Fields to remove from the role
|
|
2528
|
+
* @returns Role
|
|
2529
|
+
* @throws {TypeError} If the role ID is invalid
|
|
2530
|
+
*/
|
|
2531
|
+
edit(role: RoleResolvable, data: editableRole): Promise<Role>;
|
|
2400
2532
|
}
|
|
2401
2533
|
|
|
2402
2534
|
type APIServerChannel = Extract<Channel$1, {
|
|
@@ -2487,4 +2619,4 @@ declare class ServerMemberManager extends BaseManager<ServerMember, Member> {
|
|
|
2487
2619
|
resolveId(member: ServerMemberResolvable): string | null;
|
|
2488
2620
|
}
|
|
2489
2621
|
|
|
2490
|
-
export { Attachment, type BadgeString, Badges, type BadgesResolvable, Base, BaseManager, BitField, type BitFieldResolvable, Category, Channel, ChannelManager, ChannelPermissions, type ChannelPermissionsResolvable, type ChannelPermissionsString, type ChannelResolvable, ChannelTypes, type CreateChannelOptions, DEFAULT_CLIENT_OPTIONS, DEFAULT_PERMISSION_DM, DMChannel, type EditServerMemberOptions, type EditServerOptions, type Embed, type EmbedImage, type EmbedSpecial, type EmbedVideo, Emoji, Events, GroupChannel, Invite, Mentions, Message, type MessageEditOptions, MessageEmbed, MessageManager, type MessageOptions, type MessageQueryOptions, type MessageReply, type MessageResolvable, type MessageSearchOptions, NotesChannel, type Overwrite, Presence, Role, RoleManager, type RoleResolvable, SYSTEM_USER_ID, Server, ServerChannel, ServerChannelManager, type ServerChannelResolvable, ServerManager, ServerMember, ServerMemberManager, type ServerMemberResolvable, ServerPermissions, type ServerPermissionsResolvable, type ServerPermissionsString, type ServerResolvable, Status, TextChannel, UUID, User, UserManager, UserPermissions, type UserPermissionsResolvable, type UserPermissionsString, type UserResolvable, VoiceChannel, WSEvents, apiUrl, cdnUrl, client, wsUrl };
|
|
2622
|
+
export { Attachment, type BadgeString, Badges, type BadgesResolvable, Base, BaseManager, BitField, type BitFieldResolvable, Category, Channel, ChannelManager, ChannelPermissions, type ChannelPermissionsResolvable, type ChannelPermissionsString, type ChannelResolvable, ChannelTypes, type CreateChannelOptions, DEFAULT_CLIENT_OPTIONS, DEFAULT_PERMISSION_DM, DMChannel, type EditServerMemberOptions, type EditServerOptions, type Embed, type EmbedImage, type EmbedSpecial, type EmbedVideo, Emoji, Events, FullPermissions, GroupChannel, Invite, Mentions, Message, type MessageEditOptions, MessageEmbed, MessageManager, type MessageOptions, type MessageQueryOptions, type MessageReply, type MessageResolvable, type MessageSearchOptions, NotesChannel, type Overwrite, Presence, Role, RoleManager, type RoleResolvable, SYSTEM_USER_ID, Server, ServerChannel, ServerChannelManager, type ServerChannelResolvable, ServerManager, ServerMember, ServerMemberManager, type ServerMemberResolvable, ServerPermissions, type ServerPermissionsResolvable, type ServerPermissionsString, type ServerResolvable, Status, TextChannel, UUID, User, UserManager, UserPermissions, type UserPermissionsResolvable, type UserPermissionsString, type UserResolvable, VoiceChannel, WSEvents, apiUrl, cdnUrl, client, wsUrl };
|
package/dist/index.d.ts
CHANGED
|
@@ -73,29 +73,58 @@ declare class UUID extends null {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
type BitFieldResolvable = BitField | number | string | BitFieldResolvable[];
|
|
76
|
+
/**
|
|
77
|
+
* Represents a bitfield that can be used to manage flags or permissions.
|
|
78
|
+
*/
|
|
76
79
|
declare class BitField {
|
|
77
80
|
static FLAGS: Record<string, number>;
|
|
78
81
|
bitfield: number;
|
|
79
82
|
constructor(bits?: BitFieldResolvable);
|
|
83
|
+
/**
|
|
84
|
+
* Resolves a bitfield or an array of bitfields into a single number.
|
|
85
|
+
* @param bit The bitfield or array of bitfields to resolve.
|
|
86
|
+
* @returns The resolved bitfield as a number.
|
|
87
|
+
*/
|
|
80
88
|
static resolve(bit: BitFieldResolvable): number;
|
|
89
|
+
/**
|
|
90
|
+
* Returns the class that this instance belongs to.
|
|
91
|
+
* @returns The class of the bitfield.
|
|
92
|
+
*/
|
|
81
93
|
get self(): {
|
|
82
94
|
FLAGS: Record<string, number>;
|
|
83
95
|
resolve(bit: BitFieldResolvable): number;
|
|
84
96
|
new (bits?: BitFieldResolvable): BitField;
|
|
85
97
|
};
|
|
98
|
+
/**
|
|
99
|
+
* Checks if any of the bits in the bitfield are set.
|
|
100
|
+
* @param bit The bitfield or array of bitfields to check.
|
|
101
|
+
* @returns True if any bits are set, false otherwise.
|
|
102
|
+
*/
|
|
86
103
|
any(bit: BitFieldResolvable): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* checks if a specific permission is set.
|
|
106
|
+
*/
|
|
87
107
|
has(bit: BitFieldResolvable): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Returns an array of all the Permissions that are set in the bitfield.
|
|
110
|
+
* @returns An array of flag names.
|
|
111
|
+
*/
|
|
88
112
|
toArray(): string[];
|
|
89
113
|
add(...bits: BitFieldResolvable[]): this;
|
|
90
114
|
remove(...bits: BitFieldResolvable[]): this;
|
|
91
115
|
freeze(): Readonly<this>;
|
|
92
116
|
valueOf(): number;
|
|
117
|
+
/**
|
|
118
|
+
*
|
|
119
|
+
* @returns A record of all flags and their boolean values indicating whether they are set.
|
|
120
|
+
*/
|
|
93
121
|
serialize(): Record<string, boolean>;
|
|
94
122
|
[Symbol.iterator](): Iterable<string>;
|
|
95
123
|
}
|
|
96
124
|
|
|
97
125
|
declare class RestClient {
|
|
98
126
|
private readonly client;
|
|
127
|
+
private rateLimitQueue;
|
|
99
128
|
constructor(client: BaseClient);
|
|
100
129
|
/**
|
|
101
130
|
* Helper function to handle API requests.
|
|
@@ -148,6 +177,7 @@ declare class RestClient {
|
|
|
148
177
|
|
|
149
178
|
declare class CDNClient {
|
|
150
179
|
private readonly client;
|
|
180
|
+
private rateLimitQueue;
|
|
151
181
|
constructor(client: BaseClient);
|
|
152
182
|
/**
|
|
153
183
|
* Helper function to handle API requests.
|
|
@@ -465,6 +495,44 @@ declare class ServerPermissions extends BitField {
|
|
|
465
495
|
constructor(bits?: ServerPermissionsResolvable);
|
|
466
496
|
static resolve(bit: ServerPermissionsResolvable): number;
|
|
467
497
|
}
|
|
498
|
+
declare class FullPermissions extends BitField {
|
|
499
|
+
static readonly FLAGS: {
|
|
500
|
+
readonly ManageChannel: number;
|
|
501
|
+
readonly ManageServer: number;
|
|
502
|
+
readonly ManagePermissions: number;
|
|
503
|
+
readonly ManageRole: number;
|
|
504
|
+
readonly ManageCustomisation: number;
|
|
505
|
+
readonly KickMembers: number;
|
|
506
|
+
readonly BanMembers: number;
|
|
507
|
+
readonly TimeoutMembers: number;
|
|
508
|
+
readonly AssignRoles: number;
|
|
509
|
+
readonly ChangeNickname: number;
|
|
510
|
+
readonly ManageNicknames: number;
|
|
511
|
+
readonly ChangeAvatar: number;
|
|
512
|
+
readonly RemoveAvatars: number;
|
|
513
|
+
readonly ViewChannel: number;
|
|
514
|
+
readonly ReadMessageHistory: number;
|
|
515
|
+
readonly SendMessage: number;
|
|
516
|
+
readonly ManageMessages: number;
|
|
517
|
+
readonly ManageWebhooks: number;
|
|
518
|
+
readonly InviteOthers: number;
|
|
519
|
+
readonly SendEmbeds: number;
|
|
520
|
+
readonly UploadFiles: number;
|
|
521
|
+
readonly Masquerade: number;
|
|
522
|
+
readonly React: number;
|
|
523
|
+
readonly Connect: number;
|
|
524
|
+
readonly Speak: number;
|
|
525
|
+
readonly Video: number;
|
|
526
|
+
readonly MuteMembers: number;
|
|
527
|
+
readonly DeafenMembers: number;
|
|
528
|
+
readonly MoveMembers: number;
|
|
529
|
+
readonly MentionEveryone: number;
|
|
530
|
+
readonly MentionRoles: number;
|
|
531
|
+
readonly GrantAll: 4503599627370495;
|
|
532
|
+
};
|
|
533
|
+
constructor(bits?: number | string | FullPermissions | Array<number | string | FullPermissions>);
|
|
534
|
+
static resolve(bit: number | string | FullPermissions): number;
|
|
535
|
+
}
|
|
468
536
|
declare const DEFAULT_PERMISSION_DM: Readonly<ChannelPermissions>;
|
|
469
537
|
|
|
470
538
|
type BadgeString = keyof typeof Badges.FLAGS;
|
|
@@ -840,7 +908,7 @@ declare class Server extends Base {
|
|
|
840
908
|
/** Whether the server is marked as NSFW (Not Safe For Work). */
|
|
841
909
|
nsfw: boolean;
|
|
842
910
|
/** The default permissions for the server. */
|
|
843
|
-
permissions:
|
|
911
|
+
permissions: FullPermissions;
|
|
844
912
|
/** The categories in the server. */
|
|
845
913
|
categories: Map<string, Category>;
|
|
846
914
|
/** the emojies associated with the server */
|
|
@@ -893,6 +961,55 @@ declare class Server extends Base {
|
|
|
893
961
|
toString(): string;
|
|
894
962
|
}
|
|
895
963
|
|
|
964
|
+
/**
|
|
965
|
+
* Represents the permissions that can be set for a role.
|
|
966
|
+
*/
|
|
967
|
+
type editablePermissions = {
|
|
968
|
+
/**
|
|
969
|
+
* Permissions to allow for the role.
|
|
970
|
+
* Each key corresponds to a permission flag in FullPermissions.
|
|
971
|
+
*/
|
|
972
|
+
a?: Array<keyof (typeof FullPermissions)["FLAGS"]>;
|
|
973
|
+
/**
|
|
974
|
+
* Permissions to deny for the role.
|
|
975
|
+
* Each key corresponds to a permission flag in FullPermissions.
|
|
976
|
+
*/
|
|
977
|
+
d?: Array<keyof (typeof FullPermissions)["FLAGS"]>;
|
|
978
|
+
};
|
|
979
|
+
/**
|
|
980
|
+
* Represents a role that can be edited in a server.
|
|
981
|
+
*/
|
|
982
|
+
type editableRole = {
|
|
983
|
+
/**
|
|
984
|
+
* Name of the role.
|
|
985
|
+
*/
|
|
986
|
+
name?: string;
|
|
987
|
+
/**
|
|
988
|
+
* Colour of the role, or `null` if no colour is set.
|
|
989
|
+
*/
|
|
990
|
+
colour?: string | null;
|
|
991
|
+
/**
|
|
992
|
+
* Whether the role is displayed separately in the member list.
|
|
993
|
+
*/
|
|
994
|
+
hoist?: boolean;
|
|
995
|
+
/**
|
|
996
|
+
* Rank of the role, used for ordering.
|
|
997
|
+
*/
|
|
998
|
+
rank?: number;
|
|
999
|
+
/**
|
|
1000
|
+
* Permissions to set for the role.
|
|
1001
|
+
* Format: { a: allow, d: deny }
|
|
1002
|
+
*/
|
|
1003
|
+
permissions?: editablePermissions;
|
|
1004
|
+
/**
|
|
1005
|
+
* Fields to remove from the role.
|
|
1006
|
+
* Each key corresponds to a field in the Role type.
|
|
1007
|
+
*/
|
|
1008
|
+
remove?: Array<keyof Role$1 & {
|
|
1009
|
+
[key: string]: unknown;
|
|
1010
|
+
}>;
|
|
1011
|
+
};
|
|
1012
|
+
|
|
896
1013
|
/**
|
|
897
1014
|
* Represents a role in a server.
|
|
898
1015
|
*
|
|
@@ -960,6 +1077,7 @@ declare class Role extends Base {
|
|
|
960
1077
|
* ```
|
|
961
1078
|
*/
|
|
962
1079
|
delete(): Promise<void>;
|
|
1080
|
+
edit(data: editableRole): Promise<Role>;
|
|
963
1081
|
/**
|
|
964
1082
|
* Converts the role to a string representation.
|
|
965
1083
|
*
|
|
@@ -1532,8 +1650,8 @@ type APIServerChannel$1 = Extract<Channel$1, {
|
|
|
1532
1650
|
channel_type: "TextChannel" | "VoiceChannel";
|
|
1533
1651
|
}>;
|
|
1534
1652
|
interface Overwrite {
|
|
1535
|
-
allow:
|
|
1536
|
-
deny:
|
|
1653
|
+
allow: FullPermissions;
|
|
1654
|
+
deny: FullPermissions;
|
|
1537
1655
|
}
|
|
1538
1656
|
/**
|
|
1539
1657
|
* Represents a server channel, which can be a text or voice channel.
|
|
@@ -2397,6 +2515,20 @@ declare class RoleManager extends BaseManager<Role, Role$1 & {
|
|
|
2397
2515
|
* @returns A promise that resolves when the role is deleted
|
|
2398
2516
|
*/
|
|
2399
2517
|
delete(role: RoleResolvable): Promise<void>;
|
|
2518
|
+
/**
|
|
2519
|
+
*
|
|
2520
|
+
* @param role the role to edit
|
|
2521
|
+
* @param data data to edit the role with
|
|
2522
|
+
* @param data.permissions The permissions to set for the role, in the format { a: allow, d: deny }
|
|
2523
|
+
* @param data.name The name of the role
|
|
2524
|
+
* @param data.colour The color of the role, or `null` if no color is set
|
|
2525
|
+
* @param data.hoist Whether the role is displayed separately in the member list
|
|
2526
|
+
* @param data.rank The rank of the role, used for ordering
|
|
2527
|
+
* @param data.remove Fields to remove from the role
|
|
2528
|
+
* @returns Role
|
|
2529
|
+
* @throws {TypeError} If the role ID is invalid
|
|
2530
|
+
*/
|
|
2531
|
+
edit(role: RoleResolvable, data: editableRole): Promise<Role>;
|
|
2400
2532
|
}
|
|
2401
2533
|
|
|
2402
2534
|
type APIServerChannel = Extract<Channel$1, {
|
|
@@ -2487,4 +2619,4 @@ declare class ServerMemberManager extends BaseManager<ServerMember, Member> {
|
|
|
2487
2619
|
resolveId(member: ServerMemberResolvable): string | null;
|
|
2488
2620
|
}
|
|
2489
2621
|
|
|
2490
|
-
export { Attachment, type BadgeString, Badges, type BadgesResolvable, Base, BaseManager, BitField, type BitFieldResolvable, Category, Channel, ChannelManager, ChannelPermissions, type ChannelPermissionsResolvable, type ChannelPermissionsString, type ChannelResolvable, ChannelTypes, type CreateChannelOptions, DEFAULT_CLIENT_OPTIONS, DEFAULT_PERMISSION_DM, DMChannel, type EditServerMemberOptions, type EditServerOptions, type Embed, type EmbedImage, type EmbedSpecial, type EmbedVideo, Emoji, Events, GroupChannel, Invite, Mentions, Message, type MessageEditOptions, MessageEmbed, MessageManager, type MessageOptions, type MessageQueryOptions, type MessageReply, type MessageResolvable, type MessageSearchOptions, NotesChannel, type Overwrite, Presence, Role, RoleManager, type RoleResolvable, SYSTEM_USER_ID, Server, ServerChannel, ServerChannelManager, type ServerChannelResolvable, ServerManager, ServerMember, ServerMemberManager, type ServerMemberResolvable, ServerPermissions, type ServerPermissionsResolvable, type ServerPermissionsString, type ServerResolvable, Status, TextChannel, UUID, User, UserManager, UserPermissions, type UserPermissionsResolvable, type UserPermissionsString, type UserResolvable, VoiceChannel, WSEvents, apiUrl, cdnUrl, client, wsUrl };
|
|
2622
|
+
export { Attachment, type BadgeString, Badges, type BadgesResolvable, Base, BaseManager, BitField, type BitFieldResolvable, Category, Channel, ChannelManager, ChannelPermissions, type ChannelPermissionsResolvable, type ChannelPermissionsString, type ChannelResolvable, ChannelTypes, type CreateChannelOptions, DEFAULT_CLIENT_OPTIONS, DEFAULT_PERMISSION_DM, DMChannel, type EditServerMemberOptions, type EditServerOptions, type Embed, type EmbedImage, type EmbedSpecial, type EmbedVideo, Emoji, Events, FullPermissions, GroupChannel, Invite, Mentions, Message, type MessageEditOptions, MessageEmbed, MessageManager, type MessageOptions, type MessageQueryOptions, type MessageReply, type MessageResolvable, type MessageSearchOptions, NotesChannel, type Overwrite, Presence, Role, RoleManager, type RoleResolvable, SYSTEM_USER_ID, Server, ServerChannel, ServerChannelManager, type ServerChannelResolvable, ServerManager, ServerMember, ServerMemberManager, type ServerMemberResolvable, ServerPermissions, type ServerPermissionsResolvable, type ServerPermissionsString, type ServerResolvable, Status, TextChannel, UUID, User, UserManager, UserPermissions, type UserPermissionsResolvable, type UserPermissionsString, type UserResolvable, VoiceChannel, WSEvents, apiUrl, cdnUrl, client, wsUrl };
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.
|
|
|
13
13
|
var __typeError = (msg) => {
|
|
14
14
|
throw TypeError(msg);
|
|
15
15
|
};
|
|
16
|
+
var __pow = Math.pow;
|
|
16
17
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
18
|
var __spreadValues = (a, b) => {
|
|
18
19
|
for (var prop in b || (b = {}))
|
|
@@ -122,6 +123,7 @@ __export(index_exports, {
|
|
|
122
123
|
DMChannel: () => DMChannel3,
|
|
123
124
|
Emoji: () => Emoji2,
|
|
124
125
|
Events: () => Events,
|
|
126
|
+
FullPermissions: () => FullPermissions,
|
|
125
127
|
GroupChannel: () => GroupChannel2,
|
|
126
128
|
Invite: () => Invite,
|
|
127
129
|
Mentions: () => Mentions,
|
|
@@ -197,6 +199,11 @@ var _BitField = class _BitField {
|
|
|
197
199
|
this.bitfield = DEFAULT_BIT;
|
|
198
200
|
this.bitfield = this.self.resolve(bits);
|
|
199
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Resolves a bitfield or an array of bitfields into a single number.
|
|
204
|
+
* @param bit The bitfield or array of bitfields to resolve.
|
|
205
|
+
* @returns The resolved bitfield as a number.
|
|
206
|
+
*/
|
|
200
207
|
static resolve(bit) {
|
|
201
208
|
if (bit instanceof _BitField) return bit.bitfield;
|
|
202
209
|
if (typeof bit === "number" && bit >= DEFAULT_BIT) return bit;
|
|
@@ -206,17 +213,33 @@ var _BitField = class _BitField {
|
|
|
206
213
|
if (typeof this.FLAGS[bit] !== "undefined") return this.FLAGS[bit];
|
|
207
214
|
throw new Error("BITFIELD_INVALID");
|
|
208
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Returns the class that this instance belongs to.
|
|
218
|
+
* @returns The class of the bitfield.
|
|
219
|
+
*/
|
|
209
220
|
get self() {
|
|
210
221
|
return this.constructor;
|
|
211
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Checks if any of the bits in the bitfield are set.
|
|
225
|
+
* @param bit The bitfield or array of bitfields to check.
|
|
226
|
+
* @returns True if any bits are set, false otherwise.
|
|
227
|
+
*/
|
|
212
228
|
any(bit) {
|
|
213
229
|
bit = this.self.resolve(bit);
|
|
214
230
|
return (this.bitfield & bit) !== DEFAULT_BIT;
|
|
215
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* checks if a specific permission is set.
|
|
234
|
+
*/
|
|
216
235
|
has(bit) {
|
|
217
236
|
bit = this.self.resolve(bit);
|
|
218
237
|
return (this.bitfield & bit) === bit;
|
|
219
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Returns an array of all the Permissions that are set in the bitfield.
|
|
241
|
+
* @returns An array of flag names.
|
|
242
|
+
*/
|
|
220
243
|
toArray() {
|
|
221
244
|
return Object.keys(this.self.FLAGS).filter((bit) => this.has(bit));
|
|
222
245
|
}
|
|
@@ -248,6 +271,10 @@ var _BitField = class _BitField {
|
|
|
248
271
|
valueOf() {
|
|
249
272
|
return this.bitfield;
|
|
250
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
*
|
|
276
|
+
* @returns A record of all flags and their boolean values indicating whether they are set.
|
|
277
|
+
*/
|
|
251
278
|
serialize() {
|
|
252
279
|
const serialized = {};
|
|
253
280
|
for (const [flag, bit] of Object.entries(this.self.FLAGS)) {
|
|
@@ -478,14 +505,14 @@ var ChannelPermissions = class extends BitField {
|
|
|
478
505
|
}
|
|
479
506
|
};
|
|
480
507
|
ChannelPermissions.FLAGS = {
|
|
481
|
-
VIEW_CHANNEL: 1
|
|
482
|
-
SEND_MESSAGE: 1
|
|
483
|
-
MANAGE_MESSAGE: 1
|
|
484
|
-
MANAGE_CHANNEL: 1
|
|
485
|
-
VOICE_CALL: 1
|
|
486
|
-
INVITE_OTHERS: 1
|
|
487
|
-
EMBED_LINKS: 1
|
|
488
|
-
UPLOAD_FILES: 1
|
|
508
|
+
VIEW_CHANNEL: __pow(1, 0),
|
|
509
|
+
SEND_MESSAGE: __pow(1, 22),
|
|
510
|
+
MANAGE_MESSAGE: __pow(1, 2),
|
|
511
|
+
MANAGE_CHANNEL: __pow(1, 3),
|
|
512
|
+
VOICE_CALL: __pow(1, 4),
|
|
513
|
+
INVITE_OTHERS: __pow(1, 5),
|
|
514
|
+
EMBED_LINKS: __pow(1, 6),
|
|
515
|
+
UPLOAD_FILES: __pow(1, 7)
|
|
489
516
|
};
|
|
490
517
|
var UserPermissions = class extends BitField {
|
|
491
518
|
constructor(bits) {
|
|
@@ -496,10 +523,10 @@ var UserPermissions = class extends BitField {
|
|
|
496
523
|
}
|
|
497
524
|
};
|
|
498
525
|
UserPermissions.FLAGS = {
|
|
499
|
-
ACCESS: 1
|
|
500
|
-
VIEW_PROFILE: 1
|
|
501
|
-
SEND_MESSAGES: 1
|
|
502
|
-
INVITE: 1
|
|
526
|
+
ACCESS: __pow(1, 0),
|
|
527
|
+
VIEW_PROFILE: __pow(1, 1),
|
|
528
|
+
SEND_MESSAGES: __pow(1, 2),
|
|
529
|
+
INVITE: __pow(1, 3)
|
|
503
530
|
};
|
|
504
531
|
var ServerPermissions = class extends BitField {
|
|
505
532
|
constructor(bits) {
|
|
@@ -510,16 +537,96 @@ var ServerPermissions = class extends BitField {
|
|
|
510
537
|
}
|
|
511
538
|
};
|
|
512
539
|
ServerPermissions.FLAGS = {
|
|
513
|
-
VIEW_SERVER: 1
|
|
514
|
-
MANAGE_ROLES: 1
|
|
515
|
-
MANAGE_CHANNELS: 1
|
|
516
|
-
MANAGE_SERVER: 1
|
|
517
|
-
KICK_MEMBERS: 1
|
|
518
|
-
BAN_MEMBERS: 1
|
|
519
|
-
CHANGE_NICKNAME: 1
|
|
520
|
-
MANAGE_NICKNAMES: 1
|
|
521
|
-
CHANGE_AVATAR: 1
|
|
522
|
-
REMOVE_AVATARS: 1
|
|
540
|
+
VIEW_SERVER: __pow(1, 0),
|
|
541
|
+
MANAGE_ROLES: __pow(1, 1),
|
|
542
|
+
MANAGE_CHANNELS: __pow(1, 2),
|
|
543
|
+
MANAGE_SERVER: __pow(1, 3),
|
|
544
|
+
KICK_MEMBERS: __pow(1, 4),
|
|
545
|
+
BAN_MEMBERS: __pow(1, 5),
|
|
546
|
+
CHANGE_NICKNAME: __pow(1, 12),
|
|
547
|
+
MANAGE_NICKNAMES: __pow(1, 13),
|
|
548
|
+
CHANGE_AVATAR: __pow(1, 14),
|
|
549
|
+
REMOVE_AVATARS: __pow(1, 15)
|
|
550
|
+
};
|
|
551
|
+
var FullPermissions = class extends BitField {
|
|
552
|
+
constructor(bits) {
|
|
553
|
+
super(bits);
|
|
554
|
+
}
|
|
555
|
+
static resolve(bit) {
|
|
556
|
+
return super.resolve(bit);
|
|
557
|
+
}
|
|
558
|
+
};
|
|
559
|
+
FullPermissions.FLAGS = {
|
|
560
|
+
// * Generic permissions
|
|
561
|
+
/// Manage the channel or channels on the server
|
|
562
|
+
ManageChannel: __pow(2, 0),
|
|
563
|
+
/// Manage the server
|
|
564
|
+
ManageServer: __pow(2, 1),
|
|
565
|
+
/// Manage permissions on servers or channels
|
|
566
|
+
ManagePermissions: __pow(2, 2),
|
|
567
|
+
/// Manage roles on server
|
|
568
|
+
ManageRole: __pow(2, 3),
|
|
569
|
+
/// Manage server customisation (includes emoji)
|
|
570
|
+
ManageCustomisation: __pow(2, 4),
|
|
571
|
+
// * Member permissions
|
|
572
|
+
/// Kick other members below their ranking
|
|
573
|
+
KickMembers: __pow(2, 6),
|
|
574
|
+
/// Ban other members below their ranking
|
|
575
|
+
BanMembers: __pow(2, 7),
|
|
576
|
+
/// Timeout other members below their ranking
|
|
577
|
+
TimeoutMembers: __pow(2, 8),
|
|
578
|
+
/// Assign roles to members below their ranking
|
|
579
|
+
AssignRoles: __pow(2, 9),
|
|
580
|
+
/// Change own nickname
|
|
581
|
+
ChangeNickname: __pow(2, 10),
|
|
582
|
+
/// Change or remove other's nicknames below their ranking
|
|
583
|
+
ManageNicknames: __pow(2, 11),
|
|
584
|
+
/// Change own avatar
|
|
585
|
+
ChangeAvatar: __pow(2, 12),
|
|
586
|
+
/// Remove other's avatars below their ranking
|
|
587
|
+
RemoveAvatars: __pow(2, 13),
|
|
588
|
+
// * Channel permissions
|
|
589
|
+
/// View a channel
|
|
590
|
+
ViewChannel: __pow(2, 20),
|
|
591
|
+
/// Read a channel's past message history
|
|
592
|
+
ReadMessageHistory: __pow(2, 21),
|
|
593
|
+
/// Send a message in a channel
|
|
594
|
+
SendMessage: __pow(2, 22),
|
|
595
|
+
/// Delete messages in a channel
|
|
596
|
+
ManageMessages: __pow(2, 23),
|
|
597
|
+
/// Manage webhook entries on a channel
|
|
598
|
+
ManageWebhooks: __pow(2, 24),
|
|
599
|
+
/// Create invites to this channel
|
|
600
|
+
InviteOthers: __pow(2, 25),
|
|
601
|
+
/// Send embedded content in this channel
|
|
602
|
+
SendEmbeds: __pow(2, 26),
|
|
603
|
+
/// Send attachments and media in this channel
|
|
604
|
+
UploadFiles: __pow(2, 27),
|
|
605
|
+
/// Masquerade messages using custom nickname and avatar
|
|
606
|
+
Masquerade: __pow(2, 28),
|
|
607
|
+
/// React to messages with emoji
|
|
608
|
+
React: __pow(2, 29),
|
|
609
|
+
// * Voice permissions
|
|
610
|
+
/// Connect to a voice channel
|
|
611
|
+
Connect: __pow(2, 30),
|
|
612
|
+
/// Speak in a voice call
|
|
613
|
+
Speak: __pow(2, 31),
|
|
614
|
+
/// Share video in a voice call
|
|
615
|
+
Video: __pow(2, 32),
|
|
616
|
+
/// Mute other members with lower ranking in a voice call
|
|
617
|
+
MuteMembers: __pow(2, 33),
|
|
618
|
+
/// Deafen other members with lower ranking in a voice call
|
|
619
|
+
DeafenMembers: __pow(2, 34),
|
|
620
|
+
/// Move members between voice channels
|
|
621
|
+
MoveMembers: __pow(2, 35),
|
|
622
|
+
// * Mention permissions
|
|
623
|
+
/// Mention @everyone or @online
|
|
624
|
+
MentionEveryone: __pow(2, 37),
|
|
625
|
+
/// Mention a role
|
|
626
|
+
MentionRoles: __pow(2, 38),
|
|
627
|
+
// * Grant all permissions
|
|
628
|
+
/// Safely grant all permissions
|
|
629
|
+
GrantAll: 4503599627370495
|
|
523
630
|
};
|
|
524
631
|
var DEFAULT_PERMISSION_DM = new ChannelPermissions([
|
|
525
632
|
"VIEW_CHANNEL",
|
|
@@ -1066,9 +1173,7 @@ var Server2 = class extends Base {
|
|
|
1066
1173
|
}
|
|
1067
1174
|
}
|
|
1068
1175
|
if (typeof data.default_permissions === "number") {
|
|
1069
|
-
this.permissions = new
|
|
1070
|
-
data.default_permissions
|
|
1071
|
-
).freeze();
|
|
1176
|
+
this.permissions = new FullPermissions(data.default_permissions).freeze();
|
|
1072
1177
|
}
|
|
1073
1178
|
if (typeof data.analytics === "boolean") this.analytics = data.analytics;
|
|
1074
1179
|
if (typeof data.discoverable === "boolean") {
|
|
@@ -1171,8 +1276,8 @@ var Role = class extends Base {
|
|
|
1171
1276
|
if (data.permissions) {
|
|
1172
1277
|
const { a, d } = data.permissions;
|
|
1173
1278
|
this.overwrite = {
|
|
1174
|
-
allow: new
|
|
1175
|
-
deny: new
|
|
1279
|
+
allow: new FullPermissions(a),
|
|
1280
|
+
deny: new FullPermissions(d)
|
|
1176
1281
|
};
|
|
1177
1282
|
}
|
|
1178
1283
|
for (const field of clear) {
|
|
@@ -1218,6 +1323,9 @@ var Role = class extends Base {
|
|
|
1218
1323
|
delete() {
|
|
1219
1324
|
return this.server.roles.delete(this);
|
|
1220
1325
|
}
|
|
1326
|
+
edit(data) {
|
|
1327
|
+
return this.server.roles.edit(this, data);
|
|
1328
|
+
}
|
|
1221
1329
|
/**
|
|
1222
1330
|
* Converts the role to a string representation.
|
|
1223
1331
|
*
|
|
@@ -1974,8 +2082,8 @@ var ServerChannel = class extends Channel {
|
|
|
1974
2082
|
this.overwrites.clear();
|
|
1975
2083
|
for (const [id, { a, d }] of Object.entries(data.role_permissions)) {
|
|
1976
2084
|
this.overwrites.set(id, {
|
|
1977
|
-
allow: new
|
|
1978
|
-
deny: new
|
|
2085
|
+
allow: new FullPermissions(a),
|
|
2086
|
+
deny: new FullPermissions(d)
|
|
1979
2087
|
});
|
|
1980
2088
|
}
|
|
1981
2089
|
}
|
|
@@ -2893,6 +3001,42 @@ var RoleManager = class extends BaseManager {
|
|
|
2893
3001
|
yield this.client.api.delete(`/servers/${this.server.id}/roles/${id}`);
|
|
2894
3002
|
});
|
|
2895
3003
|
}
|
|
3004
|
+
/**
|
|
3005
|
+
*
|
|
3006
|
+
* @param role the role to edit
|
|
3007
|
+
* @param data data to edit the role with
|
|
3008
|
+
* @param data.permissions The permissions to set for the role, in the format { a: allow, d: deny }
|
|
3009
|
+
* @param data.name The name of the role
|
|
3010
|
+
* @param data.colour The color of the role, or `null` if no color is set
|
|
3011
|
+
* @param data.hoist Whether the role is displayed separately in the member list
|
|
3012
|
+
* @param data.rank The rank of the role, used for ordering
|
|
3013
|
+
* @param data.remove Fields to remove from the role
|
|
3014
|
+
* @returns Role
|
|
3015
|
+
* @throws {TypeError} If the role ID is invalid
|
|
3016
|
+
*/
|
|
3017
|
+
edit(role, data) {
|
|
3018
|
+
return __async(this, null, function* () {
|
|
3019
|
+
var _a, _b;
|
|
3020
|
+
const id = this.resolveId(role);
|
|
3021
|
+
if (!id) throw new TypeError("INVALID_TYPE");
|
|
3022
|
+
if (data.permissions) {
|
|
3023
|
+
const permissions = {
|
|
3024
|
+
allow: new FullPermissions(((_a = data.permissions) == null ? void 0 : _a.a) || []).bitfield,
|
|
3025
|
+
deny: new FullPermissions(((_b = data.permissions) == null ? void 0 : _b.d) || []).bitfield
|
|
3026
|
+
};
|
|
3027
|
+
yield this.client.api.put(
|
|
3028
|
+
`/servers/${this.server.id}/permissions/${id}`,
|
|
3029
|
+
{ body: { permissions } }
|
|
3030
|
+
);
|
|
3031
|
+
}
|
|
3032
|
+
delete data.permissions;
|
|
3033
|
+
const updatedRole = yield this.client.api.patch(
|
|
3034
|
+
`/servers/${this.server.id}/roles/${id}`,
|
|
3035
|
+
{ body: data }
|
|
3036
|
+
);
|
|
3037
|
+
return this._add(Object.assign(updatedRole, { id }));
|
|
3038
|
+
});
|
|
3039
|
+
}
|
|
2896
3040
|
};
|
|
2897
3041
|
|
|
2898
3042
|
// src/managers/serverChannelManager.ts
|
|
@@ -3087,16 +3231,100 @@ var ServerMemberManager = class extends BaseManager {
|
|
|
3087
3231
|
// src/client/baseClient.ts
|
|
3088
3232
|
var import_node_events = require("events");
|
|
3089
3233
|
|
|
3090
|
-
// src/rest/restClient.ts
|
|
3091
|
-
var import_axios3 = __toESM(require("axios"));
|
|
3092
|
-
|
|
3093
3234
|
// package.json
|
|
3094
|
-
var version = "0.0.
|
|
3235
|
+
var version = "0.0.9";
|
|
3236
|
+
|
|
3237
|
+
// src/rest/restUtils/rateLimitQueue.ts
|
|
3238
|
+
var import_axios3 = __toESM(require("axios"));
|
|
3239
|
+
var RateLimitQueue = class {
|
|
3240
|
+
constructor() {
|
|
3241
|
+
this.bucketMap = /* @__PURE__ */ new Map();
|
|
3242
|
+
this.pathToBucket = /* @__PURE__ */ new Map();
|
|
3243
|
+
}
|
|
3244
|
+
request(config) {
|
|
3245
|
+
return __async(this, null, function* () {
|
|
3246
|
+
const path = config.url;
|
|
3247
|
+
const bucketId = this.pathToBucket.get(path);
|
|
3248
|
+
let bucket = bucketId ? this.bucketMap.get(bucketId) : void 0;
|
|
3249
|
+
if (bucket && bucket.remaining <= 0 && Date.now() < bucket.resetAfter) {
|
|
3250
|
+
return new Promise((resolve, reject) => {
|
|
3251
|
+
bucket.queue.push(() => __async(this, null, function* () {
|
|
3252
|
+
try {
|
|
3253
|
+
const res = yield this._doRequest(config, path);
|
|
3254
|
+
resolve(res);
|
|
3255
|
+
} catch (e) {
|
|
3256
|
+
reject(e);
|
|
3257
|
+
}
|
|
3258
|
+
}));
|
|
3259
|
+
});
|
|
3260
|
+
} else {
|
|
3261
|
+
return this._doRequest(config, path);
|
|
3262
|
+
}
|
|
3263
|
+
});
|
|
3264
|
+
}
|
|
3265
|
+
_doRequest(config, path) {
|
|
3266
|
+
return __async(this, null, function* () {
|
|
3267
|
+
const response = yield (0, import_axios3.default)(config);
|
|
3268
|
+
this._updateRateLimit(path, response);
|
|
3269
|
+
return response;
|
|
3270
|
+
});
|
|
3271
|
+
}
|
|
3272
|
+
_updateRateLimit(path, response) {
|
|
3273
|
+
const headers = response.headers;
|
|
3274
|
+
const limit = parseInt(headers["x-ratelimit-limit"]);
|
|
3275
|
+
const remaining = parseInt(headers["x-ratelimit-remaining"]);
|
|
3276
|
+
const resetAfter = parseFloat(headers["x-ratelimit-reset-after"]) * 1e3 + Date.now();
|
|
3277
|
+
const bucket = headers["x-ratelimit-bucket"];
|
|
3278
|
+
const resetIn = parseInt(headers["x-ratelimit-reset-after"]);
|
|
3279
|
+
if (!bucket) return;
|
|
3280
|
+
this.pathToBucket.set(path, bucket);
|
|
3281
|
+
let state = this.bucketMap.get(bucket);
|
|
3282
|
+
if (!state) {
|
|
3283
|
+
state = {
|
|
3284
|
+
limit,
|
|
3285
|
+
remaining,
|
|
3286
|
+
resetAfter,
|
|
3287
|
+
bucket,
|
|
3288
|
+
resetIn,
|
|
3289
|
+
queue: [],
|
|
3290
|
+
lastPath: path
|
|
3291
|
+
};
|
|
3292
|
+
this.bucketMap.set(bucket, state);
|
|
3293
|
+
} else {
|
|
3294
|
+
state.limit = limit;
|
|
3295
|
+
state.remaining = remaining;
|
|
3296
|
+
state.resetAfter = resetAfter;
|
|
3297
|
+
state.lastPath = path;
|
|
3298
|
+
}
|
|
3299
|
+
console.log(
|
|
3300
|
+
`Rate limit updated for bucket ${bucket} on path ${path}. Limit: ${limit}, Remaining: ${remaining}, Reset after: ${resetAfter} ms`
|
|
3301
|
+
);
|
|
3302
|
+
if (remaining <= 0) {
|
|
3303
|
+
console.warn(
|
|
3304
|
+
`Rate limit exceeded for bucket ${bucket} on path ${path}. Remaining: ${remaining}, Reset after: ${new Date(resetAfter).toISOString()}`
|
|
3305
|
+
);
|
|
3306
|
+
if (state.resetTimeout) clearTimeout(state.resetTimeout);
|
|
3307
|
+
const delay = resetIn;
|
|
3308
|
+
state.resetTimeout = setTimeout(() => {
|
|
3309
|
+
state.remaining = state.limit;
|
|
3310
|
+
state.resetTimeout = void 0;
|
|
3311
|
+
while (state.queue.length > 0 && state.remaining > 0) {
|
|
3312
|
+
const fn = state.queue.shift();
|
|
3313
|
+
if (fn) {
|
|
3314
|
+
state.remaining--;
|
|
3315
|
+
fn();
|
|
3316
|
+
}
|
|
3317
|
+
}
|
|
3318
|
+
}, delay);
|
|
3319
|
+
}
|
|
3320
|
+
}
|
|
3321
|
+
};
|
|
3095
3322
|
|
|
3096
3323
|
// src/rest/restClient.ts
|
|
3097
3324
|
var RestClient = class {
|
|
3098
3325
|
constructor(client3) {
|
|
3099
3326
|
this.client = client3;
|
|
3327
|
+
this.rateLimitQueue = new RateLimitQueue();
|
|
3100
3328
|
}
|
|
3101
3329
|
/**
|
|
3102
3330
|
* Helper function to handle API requests.
|
|
@@ -3111,7 +3339,7 @@ var RestClient = class {
|
|
|
3111
3339
|
try {
|
|
3112
3340
|
if (!this.client.token) throw new Error("Token is required");
|
|
3113
3341
|
const authHeader = this.client.bot ? "X-Bot-Token" : "X-Session-Token";
|
|
3114
|
-
const config = {
|
|
3342
|
+
const config = __spreadProps(__spreadValues({}, {
|
|
3115
3343
|
method,
|
|
3116
3344
|
url: `${apiUrl}${url}`,
|
|
3117
3345
|
params: query,
|
|
@@ -3120,8 +3348,10 @@ var RestClient = class {
|
|
|
3120
3348
|
[authHeader]: this.client.token,
|
|
3121
3349
|
"User-Agent": `RevBot.js/${version}`
|
|
3122
3350
|
}
|
|
3123
|
-
}
|
|
3124
|
-
|
|
3351
|
+
}), {
|
|
3352
|
+
url: `${apiUrl}${url}`
|
|
3353
|
+
});
|
|
3354
|
+
const response = yield this.rateLimitQueue.request(config);
|
|
3125
3355
|
return response.data;
|
|
3126
3356
|
} catch (error) {
|
|
3127
3357
|
console.error("API call failed:", error);
|
|
@@ -3190,10 +3420,10 @@ var RestClient = class {
|
|
|
3190
3420
|
};
|
|
3191
3421
|
|
|
3192
3422
|
// src/rest/CDNClient.ts
|
|
3193
|
-
var import_axios4 = __toESM(require("axios"));
|
|
3194
3423
|
var CDNClient = class {
|
|
3195
3424
|
constructor(client3) {
|
|
3196
3425
|
this.client = client3;
|
|
3426
|
+
this.rateLimitQueue = new RateLimitQueue();
|
|
3197
3427
|
}
|
|
3198
3428
|
/**
|
|
3199
3429
|
* Helper function to handle API requests.
|
|
@@ -3208,7 +3438,7 @@ var CDNClient = class {
|
|
|
3208
3438
|
try {
|
|
3209
3439
|
if (!this.client.token) throw new Error("Token is required");
|
|
3210
3440
|
const authHeader = this.client.bot ? "X-Bot-Token" : "X-Session-Token";
|
|
3211
|
-
const config = {
|
|
3441
|
+
const config = __spreadProps(__spreadValues({}, {
|
|
3212
3442
|
method,
|
|
3213
3443
|
url: `${cdnUrl}${url}`,
|
|
3214
3444
|
params: query,
|
|
@@ -3219,8 +3449,10 @@ var CDNClient = class {
|
|
|
3219
3449
|
"Content-Type": "multipart/form-data",
|
|
3220
3450
|
"User-Agent": `RevBot.js/${version}`
|
|
3221
3451
|
}, data.getHeaders())
|
|
3222
|
-
}
|
|
3223
|
-
|
|
3452
|
+
}), {
|
|
3453
|
+
url: `${cdnUrl}${url}`
|
|
3454
|
+
});
|
|
3455
|
+
const response = yield this.rateLimitQueue.request(config);
|
|
3224
3456
|
return response.data;
|
|
3225
3457
|
} catch (error) {
|
|
3226
3458
|
console.error("API call failed:", error);
|
|
@@ -4245,6 +4477,7 @@ var client2 = class extends BaseClient {
|
|
|
4245
4477
|
DMChannel,
|
|
4246
4478
|
Emoji,
|
|
4247
4479
|
Events,
|
|
4480
|
+
FullPermissions,
|
|
4248
4481
|
GroupChannel,
|
|
4249
4482
|
Invite,
|
|
4250
4483
|
Mentions,
|
package/dist/index.mjs
CHANGED
|
@@ -8,6 +8,7 @@ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.
|
|
|
8
8
|
var __typeError = (msg) => {
|
|
9
9
|
throw TypeError(msg);
|
|
10
10
|
};
|
|
11
|
+
var __pow = Math.pow;
|
|
11
12
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
13
|
var __spreadValues = (a, b) => {
|
|
13
14
|
for (var prop in b || (b = {}))
|
|
@@ -124,6 +125,11 @@ var _BitField = class _BitField {
|
|
|
124
125
|
this.bitfield = DEFAULT_BIT;
|
|
125
126
|
this.bitfield = this.self.resolve(bits);
|
|
126
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Resolves a bitfield or an array of bitfields into a single number.
|
|
130
|
+
* @param bit The bitfield or array of bitfields to resolve.
|
|
131
|
+
* @returns The resolved bitfield as a number.
|
|
132
|
+
*/
|
|
127
133
|
static resolve(bit) {
|
|
128
134
|
if (bit instanceof _BitField) return bit.bitfield;
|
|
129
135
|
if (typeof bit === "number" && bit >= DEFAULT_BIT) return bit;
|
|
@@ -133,17 +139,33 @@ var _BitField = class _BitField {
|
|
|
133
139
|
if (typeof this.FLAGS[bit] !== "undefined") return this.FLAGS[bit];
|
|
134
140
|
throw new Error("BITFIELD_INVALID");
|
|
135
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Returns the class that this instance belongs to.
|
|
144
|
+
* @returns The class of the bitfield.
|
|
145
|
+
*/
|
|
136
146
|
get self() {
|
|
137
147
|
return this.constructor;
|
|
138
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Checks if any of the bits in the bitfield are set.
|
|
151
|
+
* @param bit The bitfield or array of bitfields to check.
|
|
152
|
+
* @returns True if any bits are set, false otherwise.
|
|
153
|
+
*/
|
|
139
154
|
any(bit) {
|
|
140
155
|
bit = this.self.resolve(bit);
|
|
141
156
|
return (this.bitfield & bit) !== DEFAULT_BIT;
|
|
142
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* checks if a specific permission is set.
|
|
160
|
+
*/
|
|
143
161
|
has(bit) {
|
|
144
162
|
bit = this.self.resolve(bit);
|
|
145
163
|
return (this.bitfield & bit) === bit;
|
|
146
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Returns an array of all the Permissions that are set in the bitfield.
|
|
167
|
+
* @returns An array of flag names.
|
|
168
|
+
*/
|
|
147
169
|
toArray() {
|
|
148
170
|
return Object.keys(this.self.FLAGS).filter((bit) => this.has(bit));
|
|
149
171
|
}
|
|
@@ -175,6 +197,10 @@ var _BitField = class _BitField {
|
|
|
175
197
|
valueOf() {
|
|
176
198
|
return this.bitfield;
|
|
177
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
*
|
|
202
|
+
* @returns A record of all flags and their boolean values indicating whether they are set.
|
|
203
|
+
*/
|
|
178
204
|
serialize() {
|
|
179
205
|
const serialized = {};
|
|
180
206
|
for (const [flag, bit] of Object.entries(this.self.FLAGS)) {
|
|
@@ -405,14 +431,14 @@ var ChannelPermissions = class extends BitField {
|
|
|
405
431
|
}
|
|
406
432
|
};
|
|
407
433
|
ChannelPermissions.FLAGS = {
|
|
408
|
-
VIEW_CHANNEL: 1
|
|
409
|
-
SEND_MESSAGE: 1
|
|
410
|
-
MANAGE_MESSAGE: 1
|
|
411
|
-
MANAGE_CHANNEL: 1
|
|
412
|
-
VOICE_CALL: 1
|
|
413
|
-
INVITE_OTHERS: 1
|
|
414
|
-
EMBED_LINKS: 1
|
|
415
|
-
UPLOAD_FILES: 1
|
|
434
|
+
VIEW_CHANNEL: __pow(1, 0),
|
|
435
|
+
SEND_MESSAGE: __pow(1, 22),
|
|
436
|
+
MANAGE_MESSAGE: __pow(1, 2),
|
|
437
|
+
MANAGE_CHANNEL: __pow(1, 3),
|
|
438
|
+
VOICE_CALL: __pow(1, 4),
|
|
439
|
+
INVITE_OTHERS: __pow(1, 5),
|
|
440
|
+
EMBED_LINKS: __pow(1, 6),
|
|
441
|
+
UPLOAD_FILES: __pow(1, 7)
|
|
416
442
|
};
|
|
417
443
|
var UserPermissions = class extends BitField {
|
|
418
444
|
constructor(bits) {
|
|
@@ -423,10 +449,10 @@ var UserPermissions = class extends BitField {
|
|
|
423
449
|
}
|
|
424
450
|
};
|
|
425
451
|
UserPermissions.FLAGS = {
|
|
426
|
-
ACCESS: 1
|
|
427
|
-
VIEW_PROFILE: 1
|
|
428
|
-
SEND_MESSAGES: 1
|
|
429
|
-
INVITE: 1
|
|
452
|
+
ACCESS: __pow(1, 0),
|
|
453
|
+
VIEW_PROFILE: __pow(1, 1),
|
|
454
|
+
SEND_MESSAGES: __pow(1, 2),
|
|
455
|
+
INVITE: __pow(1, 3)
|
|
430
456
|
};
|
|
431
457
|
var ServerPermissions = class extends BitField {
|
|
432
458
|
constructor(bits) {
|
|
@@ -437,16 +463,96 @@ var ServerPermissions = class extends BitField {
|
|
|
437
463
|
}
|
|
438
464
|
};
|
|
439
465
|
ServerPermissions.FLAGS = {
|
|
440
|
-
VIEW_SERVER: 1
|
|
441
|
-
MANAGE_ROLES: 1
|
|
442
|
-
MANAGE_CHANNELS: 1
|
|
443
|
-
MANAGE_SERVER: 1
|
|
444
|
-
KICK_MEMBERS: 1
|
|
445
|
-
BAN_MEMBERS: 1
|
|
446
|
-
CHANGE_NICKNAME: 1
|
|
447
|
-
MANAGE_NICKNAMES: 1
|
|
448
|
-
CHANGE_AVATAR: 1
|
|
449
|
-
REMOVE_AVATARS: 1
|
|
466
|
+
VIEW_SERVER: __pow(1, 0),
|
|
467
|
+
MANAGE_ROLES: __pow(1, 1),
|
|
468
|
+
MANAGE_CHANNELS: __pow(1, 2),
|
|
469
|
+
MANAGE_SERVER: __pow(1, 3),
|
|
470
|
+
KICK_MEMBERS: __pow(1, 4),
|
|
471
|
+
BAN_MEMBERS: __pow(1, 5),
|
|
472
|
+
CHANGE_NICKNAME: __pow(1, 12),
|
|
473
|
+
MANAGE_NICKNAMES: __pow(1, 13),
|
|
474
|
+
CHANGE_AVATAR: __pow(1, 14),
|
|
475
|
+
REMOVE_AVATARS: __pow(1, 15)
|
|
476
|
+
};
|
|
477
|
+
var FullPermissions = class extends BitField {
|
|
478
|
+
constructor(bits) {
|
|
479
|
+
super(bits);
|
|
480
|
+
}
|
|
481
|
+
static resolve(bit) {
|
|
482
|
+
return super.resolve(bit);
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
FullPermissions.FLAGS = {
|
|
486
|
+
// * Generic permissions
|
|
487
|
+
/// Manage the channel or channels on the server
|
|
488
|
+
ManageChannel: __pow(2, 0),
|
|
489
|
+
/// Manage the server
|
|
490
|
+
ManageServer: __pow(2, 1),
|
|
491
|
+
/// Manage permissions on servers or channels
|
|
492
|
+
ManagePermissions: __pow(2, 2),
|
|
493
|
+
/// Manage roles on server
|
|
494
|
+
ManageRole: __pow(2, 3),
|
|
495
|
+
/// Manage server customisation (includes emoji)
|
|
496
|
+
ManageCustomisation: __pow(2, 4),
|
|
497
|
+
// * Member permissions
|
|
498
|
+
/// Kick other members below their ranking
|
|
499
|
+
KickMembers: __pow(2, 6),
|
|
500
|
+
/// Ban other members below their ranking
|
|
501
|
+
BanMembers: __pow(2, 7),
|
|
502
|
+
/// Timeout other members below their ranking
|
|
503
|
+
TimeoutMembers: __pow(2, 8),
|
|
504
|
+
/// Assign roles to members below their ranking
|
|
505
|
+
AssignRoles: __pow(2, 9),
|
|
506
|
+
/// Change own nickname
|
|
507
|
+
ChangeNickname: __pow(2, 10),
|
|
508
|
+
/// Change or remove other's nicknames below their ranking
|
|
509
|
+
ManageNicknames: __pow(2, 11),
|
|
510
|
+
/// Change own avatar
|
|
511
|
+
ChangeAvatar: __pow(2, 12),
|
|
512
|
+
/// Remove other's avatars below their ranking
|
|
513
|
+
RemoveAvatars: __pow(2, 13),
|
|
514
|
+
// * Channel permissions
|
|
515
|
+
/// View a channel
|
|
516
|
+
ViewChannel: __pow(2, 20),
|
|
517
|
+
/// Read a channel's past message history
|
|
518
|
+
ReadMessageHistory: __pow(2, 21),
|
|
519
|
+
/// Send a message in a channel
|
|
520
|
+
SendMessage: __pow(2, 22),
|
|
521
|
+
/// Delete messages in a channel
|
|
522
|
+
ManageMessages: __pow(2, 23),
|
|
523
|
+
/// Manage webhook entries on a channel
|
|
524
|
+
ManageWebhooks: __pow(2, 24),
|
|
525
|
+
/// Create invites to this channel
|
|
526
|
+
InviteOthers: __pow(2, 25),
|
|
527
|
+
/// Send embedded content in this channel
|
|
528
|
+
SendEmbeds: __pow(2, 26),
|
|
529
|
+
/// Send attachments and media in this channel
|
|
530
|
+
UploadFiles: __pow(2, 27),
|
|
531
|
+
/// Masquerade messages using custom nickname and avatar
|
|
532
|
+
Masquerade: __pow(2, 28),
|
|
533
|
+
/// React to messages with emoji
|
|
534
|
+
React: __pow(2, 29),
|
|
535
|
+
// * Voice permissions
|
|
536
|
+
/// Connect to a voice channel
|
|
537
|
+
Connect: __pow(2, 30),
|
|
538
|
+
/// Speak in a voice call
|
|
539
|
+
Speak: __pow(2, 31),
|
|
540
|
+
/// Share video in a voice call
|
|
541
|
+
Video: __pow(2, 32),
|
|
542
|
+
/// Mute other members with lower ranking in a voice call
|
|
543
|
+
MuteMembers: __pow(2, 33),
|
|
544
|
+
/// Deafen other members with lower ranking in a voice call
|
|
545
|
+
DeafenMembers: __pow(2, 34),
|
|
546
|
+
/// Move members between voice channels
|
|
547
|
+
MoveMembers: __pow(2, 35),
|
|
548
|
+
// * Mention permissions
|
|
549
|
+
/// Mention @everyone or @online
|
|
550
|
+
MentionEveryone: __pow(2, 37),
|
|
551
|
+
/// Mention a role
|
|
552
|
+
MentionRoles: __pow(2, 38),
|
|
553
|
+
// * Grant all permissions
|
|
554
|
+
/// Safely grant all permissions
|
|
555
|
+
GrantAll: 4503599627370495
|
|
450
556
|
};
|
|
451
557
|
var DEFAULT_PERMISSION_DM = new ChannelPermissions([
|
|
452
558
|
"VIEW_CHANNEL",
|
|
@@ -993,9 +1099,7 @@ var Server2 = class extends Base {
|
|
|
993
1099
|
}
|
|
994
1100
|
}
|
|
995
1101
|
if (typeof data.default_permissions === "number") {
|
|
996
|
-
this.permissions = new
|
|
997
|
-
data.default_permissions
|
|
998
|
-
).freeze();
|
|
1102
|
+
this.permissions = new FullPermissions(data.default_permissions).freeze();
|
|
999
1103
|
}
|
|
1000
1104
|
if (typeof data.analytics === "boolean") this.analytics = data.analytics;
|
|
1001
1105
|
if (typeof data.discoverable === "boolean") {
|
|
@@ -1098,8 +1202,8 @@ var Role = class extends Base {
|
|
|
1098
1202
|
if (data.permissions) {
|
|
1099
1203
|
const { a, d } = data.permissions;
|
|
1100
1204
|
this.overwrite = {
|
|
1101
|
-
allow: new
|
|
1102
|
-
deny: new
|
|
1205
|
+
allow: new FullPermissions(a),
|
|
1206
|
+
deny: new FullPermissions(d)
|
|
1103
1207
|
};
|
|
1104
1208
|
}
|
|
1105
1209
|
for (const field of clear) {
|
|
@@ -1145,6 +1249,9 @@ var Role = class extends Base {
|
|
|
1145
1249
|
delete() {
|
|
1146
1250
|
return this.server.roles.delete(this);
|
|
1147
1251
|
}
|
|
1252
|
+
edit(data) {
|
|
1253
|
+
return this.server.roles.edit(this, data);
|
|
1254
|
+
}
|
|
1148
1255
|
/**
|
|
1149
1256
|
* Converts the role to a string representation.
|
|
1150
1257
|
*
|
|
@@ -1901,8 +2008,8 @@ var ServerChannel = class extends Channel {
|
|
|
1901
2008
|
this.overwrites.clear();
|
|
1902
2009
|
for (const [id, { a, d }] of Object.entries(data.role_permissions)) {
|
|
1903
2010
|
this.overwrites.set(id, {
|
|
1904
|
-
allow: new
|
|
1905
|
-
deny: new
|
|
2011
|
+
allow: new FullPermissions(a),
|
|
2012
|
+
deny: new FullPermissions(d)
|
|
1906
2013
|
});
|
|
1907
2014
|
}
|
|
1908
2015
|
}
|
|
@@ -2820,6 +2927,42 @@ var RoleManager = class extends BaseManager {
|
|
|
2820
2927
|
yield this.client.api.delete(`/servers/${this.server.id}/roles/${id}`);
|
|
2821
2928
|
});
|
|
2822
2929
|
}
|
|
2930
|
+
/**
|
|
2931
|
+
*
|
|
2932
|
+
* @param role the role to edit
|
|
2933
|
+
* @param data data to edit the role with
|
|
2934
|
+
* @param data.permissions The permissions to set for the role, in the format { a: allow, d: deny }
|
|
2935
|
+
* @param data.name The name of the role
|
|
2936
|
+
* @param data.colour The color of the role, or `null` if no color is set
|
|
2937
|
+
* @param data.hoist Whether the role is displayed separately in the member list
|
|
2938
|
+
* @param data.rank The rank of the role, used for ordering
|
|
2939
|
+
* @param data.remove Fields to remove from the role
|
|
2940
|
+
* @returns Role
|
|
2941
|
+
* @throws {TypeError} If the role ID is invalid
|
|
2942
|
+
*/
|
|
2943
|
+
edit(role, data) {
|
|
2944
|
+
return __async(this, null, function* () {
|
|
2945
|
+
var _a, _b;
|
|
2946
|
+
const id = this.resolveId(role);
|
|
2947
|
+
if (!id) throw new TypeError("INVALID_TYPE");
|
|
2948
|
+
if (data.permissions) {
|
|
2949
|
+
const permissions = {
|
|
2950
|
+
allow: new FullPermissions(((_a = data.permissions) == null ? void 0 : _a.a) || []).bitfield,
|
|
2951
|
+
deny: new FullPermissions(((_b = data.permissions) == null ? void 0 : _b.d) || []).bitfield
|
|
2952
|
+
};
|
|
2953
|
+
yield this.client.api.put(
|
|
2954
|
+
`/servers/${this.server.id}/permissions/${id}`,
|
|
2955
|
+
{ body: { permissions } }
|
|
2956
|
+
);
|
|
2957
|
+
}
|
|
2958
|
+
delete data.permissions;
|
|
2959
|
+
const updatedRole = yield this.client.api.patch(
|
|
2960
|
+
`/servers/${this.server.id}/roles/${id}`,
|
|
2961
|
+
{ body: data }
|
|
2962
|
+
);
|
|
2963
|
+
return this._add(Object.assign(updatedRole, { id }));
|
|
2964
|
+
});
|
|
2965
|
+
}
|
|
2823
2966
|
};
|
|
2824
2967
|
|
|
2825
2968
|
// src/managers/serverChannelManager.ts
|
|
@@ -3014,16 +3157,100 @@ var ServerMemberManager = class extends BaseManager {
|
|
|
3014
3157
|
// src/client/baseClient.ts
|
|
3015
3158
|
import { EventEmitter } from "node:events";
|
|
3016
3159
|
|
|
3017
|
-
// src/rest/restClient.ts
|
|
3018
|
-
import axios3 from "axios";
|
|
3019
|
-
|
|
3020
3160
|
// package.json
|
|
3021
|
-
var version = "0.0.
|
|
3161
|
+
var version = "0.0.9";
|
|
3162
|
+
|
|
3163
|
+
// src/rest/restUtils/rateLimitQueue.ts
|
|
3164
|
+
import axios3 from "axios";
|
|
3165
|
+
var RateLimitQueue = class {
|
|
3166
|
+
constructor() {
|
|
3167
|
+
this.bucketMap = /* @__PURE__ */ new Map();
|
|
3168
|
+
this.pathToBucket = /* @__PURE__ */ new Map();
|
|
3169
|
+
}
|
|
3170
|
+
request(config) {
|
|
3171
|
+
return __async(this, null, function* () {
|
|
3172
|
+
const path = config.url;
|
|
3173
|
+
const bucketId = this.pathToBucket.get(path);
|
|
3174
|
+
let bucket = bucketId ? this.bucketMap.get(bucketId) : void 0;
|
|
3175
|
+
if (bucket && bucket.remaining <= 0 && Date.now() < bucket.resetAfter) {
|
|
3176
|
+
return new Promise((resolve, reject) => {
|
|
3177
|
+
bucket.queue.push(() => __async(this, null, function* () {
|
|
3178
|
+
try {
|
|
3179
|
+
const res = yield this._doRequest(config, path);
|
|
3180
|
+
resolve(res);
|
|
3181
|
+
} catch (e) {
|
|
3182
|
+
reject(e);
|
|
3183
|
+
}
|
|
3184
|
+
}));
|
|
3185
|
+
});
|
|
3186
|
+
} else {
|
|
3187
|
+
return this._doRequest(config, path);
|
|
3188
|
+
}
|
|
3189
|
+
});
|
|
3190
|
+
}
|
|
3191
|
+
_doRequest(config, path) {
|
|
3192
|
+
return __async(this, null, function* () {
|
|
3193
|
+
const response = yield axios3(config);
|
|
3194
|
+
this._updateRateLimit(path, response);
|
|
3195
|
+
return response;
|
|
3196
|
+
});
|
|
3197
|
+
}
|
|
3198
|
+
_updateRateLimit(path, response) {
|
|
3199
|
+
const headers = response.headers;
|
|
3200
|
+
const limit = parseInt(headers["x-ratelimit-limit"]);
|
|
3201
|
+
const remaining = parseInt(headers["x-ratelimit-remaining"]);
|
|
3202
|
+
const resetAfter = parseFloat(headers["x-ratelimit-reset-after"]) * 1e3 + Date.now();
|
|
3203
|
+
const bucket = headers["x-ratelimit-bucket"];
|
|
3204
|
+
const resetIn = parseInt(headers["x-ratelimit-reset-after"]);
|
|
3205
|
+
if (!bucket) return;
|
|
3206
|
+
this.pathToBucket.set(path, bucket);
|
|
3207
|
+
let state = this.bucketMap.get(bucket);
|
|
3208
|
+
if (!state) {
|
|
3209
|
+
state = {
|
|
3210
|
+
limit,
|
|
3211
|
+
remaining,
|
|
3212
|
+
resetAfter,
|
|
3213
|
+
bucket,
|
|
3214
|
+
resetIn,
|
|
3215
|
+
queue: [],
|
|
3216
|
+
lastPath: path
|
|
3217
|
+
};
|
|
3218
|
+
this.bucketMap.set(bucket, state);
|
|
3219
|
+
} else {
|
|
3220
|
+
state.limit = limit;
|
|
3221
|
+
state.remaining = remaining;
|
|
3222
|
+
state.resetAfter = resetAfter;
|
|
3223
|
+
state.lastPath = path;
|
|
3224
|
+
}
|
|
3225
|
+
console.log(
|
|
3226
|
+
`Rate limit updated for bucket ${bucket} on path ${path}. Limit: ${limit}, Remaining: ${remaining}, Reset after: ${resetAfter} ms`
|
|
3227
|
+
);
|
|
3228
|
+
if (remaining <= 0) {
|
|
3229
|
+
console.warn(
|
|
3230
|
+
`Rate limit exceeded for bucket ${bucket} on path ${path}. Remaining: ${remaining}, Reset after: ${new Date(resetAfter).toISOString()}`
|
|
3231
|
+
);
|
|
3232
|
+
if (state.resetTimeout) clearTimeout(state.resetTimeout);
|
|
3233
|
+
const delay = resetIn;
|
|
3234
|
+
state.resetTimeout = setTimeout(() => {
|
|
3235
|
+
state.remaining = state.limit;
|
|
3236
|
+
state.resetTimeout = void 0;
|
|
3237
|
+
while (state.queue.length > 0 && state.remaining > 0) {
|
|
3238
|
+
const fn = state.queue.shift();
|
|
3239
|
+
if (fn) {
|
|
3240
|
+
state.remaining--;
|
|
3241
|
+
fn();
|
|
3242
|
+
}
|
|
3243
|
+
}
|
|
3244
|
+
}, delay);
|
|
3245
|
+
}
|
|
3246
|
+
}
|
|
3247
|
+
};
|
|
3022
3248
|
|
|
3023
3249
|
// src/rest/restClient.ts
|
|
3024
3250
|
var RestClient = class {
|
|
3025
3251
|
constructor(client3) {
|
|
3026
3252
|
this.client = client3;
|
|
3253
|
+
this.rateLimitQueue = new RateLimitQueue();
|
|
3027
3254
|
}
|
|
3028
3255
|
/**
|
|
3029
3256
|
* Helper function to handle API requests.
|
|
@@ -3038,7 +3265,7 @@ var RestClient = class {
|
|
|
3038
3265
|
try {
|
|
3039
3266
|
if (!this.client.token) throw new Error("Token is required");
|
|
3040
3267
|
const authHeader = this.client.bot ? "X-Bot-Token" : "X-Session-Token";
|
|
3041
|
-
const config = {
|
|
3268
|
+
const config = __spreadProps(__spreadValues({}, {
|
|
3042
3269
|
method,
|
|
3043
3270
|
url: `${apiUrl}${url}`,
|
|
3044
3271
|
params: query,
|
|
@@ -3047,8 +3274,10 @@ var RestClient = class {
|
|
|
3047
3274
|
[authHeader]: this.client.token,
|
|
3048
3275
|
"User-Agent": `RevBot.js/${version}`
|
|
3049
3276
|
}
|
|
3050
|
-
}
|
|
3051
|
-
|
|
3277
|
+
}), {
|
|
3278
|
+
url: `${apiUrl}${url}`
|
|
3279
|
+
});
|
|
3280
|
+
const response = yield this.rateLimitQueue.request(config);
|
|
3052
3281
|
return response.data;
|
|
3053
3282
|
} catch (error) {
|
|
3054
3283
|
console.error("API call failed:", error);
|
|
@@ -3117,10 +3346,10 @@ var RestClient = class {
|
|
|
3117
3346
|
};
|
|
3118
3347
|
|
|
3119
3348
|
// src/rest/CDNClient.ts
|
|
3120
|
-
import axios4 from "axios";
|
|
3121
3349
|
var CDNClient = class {
|
|
3122
3350
|
constructor(client3) {
|
|
3123
3351
|
this.client = client3;
|
|
3352
|
+
this.rateLimitQueue = new RateLimitQueue();
|
|
3124
3353
|
}
|
|
3125
3354
|
/**
|
|
3126
3355
|
* Helper function to handle API requests.
|
|
@@ -3135,7 +3364,7 @@ var CDNClient = class {
|
|
|
3135
3364
|
try {
|
|
3136
3365
|
if (!this.client.token) throw new Error("Token is required");
|
|
3137
3366
|
const authHeader = this.client.bot ? "X-Bot-Token" : "X-Session-Token";
|
|
3138
|
-
const config = {
|
|
3367
|
+
const config = __spreadProps(__spreadValues({}, {
|
|
3139
3368
|
method,
|
|
3140
3369
|
url: `${cdnUrl}${url}`,
|
|
3141
3370
|
params: query,
|
|
@@ -3146,8 +3375,10 @@ var CDNClient = class {
|
|
|
3146
3375
|
"Content-Type": "multipart/form-data",
|
|
3147
3376
|
"User-Agent": `RevBot.js/${version}`
|
|
3148
3377
|
}, data.getHeaders())
|
|
3149
|
-
}
|
|
3150
|
-
|
|
3378
|
+
}), {
|
|
3379
|
+
url: `${cdnUrl}${url}`
|
|
3380
|
+
});
|
|
3381
|
+
const response = yield this.rateLimitQueue.request(config);
|
|
3151
3382
|
return response.data;
|
|
3152
3383
|
} catch (error) {
|
|
3153
3384
|
console.error("API call failed:", error);
|
|
@@ -4171,6 +4402,7 @@ export {
|
|
|
4171
4402
|
DMChannel3 as DMChannel,
|
|
4172
4403
|
Emoji2 as Emoji,
|
|
4173
4404
|
Events,
|
|
4405
|
+
FullPermissions,
|
|
4174
4406
|
GroupChannel2 as GroupChannel,
|
|
4175
4407
|
Invite,
|
|
4176
4408
|
Mentions,
|
package/package.json
CHANGED