@stoatx/client 0.1.1 → 0.2.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/dist/index.d.cts CHANGED
@@ -26,8 +26,8 @@ declare class StoatAPIError extends Error {
26
26
  apiType: string;
27
27
  location: string;
28
28
  rawData: any;
29
- method?: string;
30
- path?: string;
29
+ method?: string | undefined;
30
+ path?: string | undefined;
31
31
  constructor(statusCode: number, data: any, method?: string, path?: string);
32
32
  }
33
33
  declare class RESTManager {
@@ -217,9 +217,9 @@ declare class Collection<K, V> extends Map<K, V> {
217
217
  * @template Holds The type of the Structure this manager holds
218
218
  */
219
219
  declare abstract class BaseManager<K, Holds> {
220
- client: Client;
221
220
  cache: Collection<K, Holds>;
222
- constructor(client: Client, limit?: number);
221
+ protected readonly client: Client;
222
+ protected constructor(client: Client, limit?: number);
223
223
  /**
224
224
  * Defines how to extract the unique ID from a raw API payload.
225
225
  * @internal
@@ -264,8 +264,32 @@ declare class MemberManager extends BaseManager<string, Member> {
264
264
  * @internal
265
265
  */
266
266
  protected construct(data: any): Member;
267
+ /**
268
+ * Resolve a string or mention to Member
269
+ * @param member The MemberResolvable to resolve
270
+ * @returns The resolved Member or undefined if not found
271
+ */
267
272
  resolve(member: MemberResolvable): Member | undefined;
273
+ /**
274
+ * Resolve a Member to their ID string.
275
+ * @param member The MemberResolvable to resolve
276
+ * @returns The resolved ID string
277
+ * @throws {TypeError} If the provided resolvable is invalid
278
+ */
268
279
  resolveId(member: MemberResolvable): string;
280
+ /**
281
+ * Fetches a member from the server, or returns the cached version if available and not forced.
282
+ * @param member The MemberResolvable to fetch
283
+ * @param force Whether to bypass the cache and fetch fresh data from the API
284
+ * @returns A promise that resolves to the fetched Member
285
+ * @throws {Error} If the API request fails or the member is not found
286
+ * @example
287
+ * // Fetch a member by ID, using cache if available
288
+ * const member = await server.members.fetch("1234567890");
289
+ *
290
+ * // Fetch a member by mention, bypassing cache
291
+ * const member = await server.members.fetch("<@1234567890>", true);
292
+ */
269
293
  fetch(member: MemberResolvable, force?: boolean): Promise<Member>;
270
294
  /**
271
295
  * Fetches multiple members from the server.
@@ -284,24 +308,50 @@ declare class MemberManager extends BaseManager<string, Member> {
284
308
  * Edits a member in the server.
285
309
  * @param member The MemberResolvable to edit.
286
310
  * @param options The fields to update (nickname, roles, timeout, etc.).
311
+ * @returns A promise that resolves to the updated Member.
312
+ * @throws {Error} If the API request fails or the member is not found.
313
+ * @example
314
+ * // Change a member's nickname and add a role
315
+ * const updatedMember = await server.members.edit("1234567890", {
316
+ * nickname: "New Nickname",
317
+ * roles: ["roleId1", "roleId2"],
318
+ * });
287
319
  */
288
320
  edit(member: MemberResolvable, options: MemberEditOptions): Promise<Member>;
289
321
  /**
290
322
  * Kicks a member from the server.
291
323
  * @param member The MemberResolvable to kick.
324
+ * @example
325
+ * // Kick a member by ID
326
+ * await server.members.kick("1234567890");
292
327
  */
293
328
  kick(member: MemberResolvable): Promise<void>;
294
329
  /**
295
330
  * Bans a member from the server.
296
331
  * @param member The MemberResolvable to ban.
297
332
  * @param options The ban options
333
+ * @example
334
+ * // Ban a member by ID
335
+ * await server.members.ban("1234567890", { reason: "Spamming", deleteMessageSeconds: 3600 });
298
336
  */
299
337
  ban(member: MemberResolvable, options?: MemberBanOptions): Promise<void>;
300
338
  /**
301
339
  * Unbans a user from the server
302
340
  * @param member The MemberResolvable to unban
341
+ * @example
342
+ * // Unban a member by ID
343
+ * await server.members.unban("1234567890");
303
344
  */
304
345
  unban(member: MemberResolvable): Promise<void>;
346
+ /**
347
+ * Timeouts a member in the server for a specified duration.
348
+ * @param member The MemberResolvable to timeout
349
+ * @param duration The duration of the timeout in milliseconds
350
+ * @example
351
+ * // Timeout a member for 10 minutes
352
+ * await server.members.setTimeout("1234567890", 10 * 60 * 1000);
353
+ */
354
+ setTimeout(member: MemberResolvable, duration: number): Promise<void>;
305
355
  [util.inspect.custom](): Collection<string, Member>;
306
356
  }
307
357
 
@@ -356,7 +406,7 @@ declare class Permissions {
356
406
 
357
407
  declare class DMChannel extends BaseChannel {
358
408
  active: boolean;
359
- recipients: DMChannel[];
409
+ recipients: string[];
360
410
  lastMessageId: string | null;
361
411
  constructor(client: any, data: any);
362
412
  _patch(data: any): void;
@@ -860,7 +910,7 @@ declare class RoleManager extends BaseManager<string, Role> {
860
910
  * console.log("Role deleted successfully.");
861
911
  *
862
912
  * // Delete a role using a Role object
863
- * const role = await server.roles.fetch("01JE2MM759J5D7CHJF084R7MJ2");
913
+ * const role = await server.roles.fetch("01JE2MM759J5D7CHJF084R7");
864
914
  * await server.roles.delete(role);
865
915
  * console.log("Role deleted successfully.");
866
916
  *
@@ -1057,11 +1107,17 @@ declare class MemberRoleManager {
1057
1107
  set(roles: RoleResolvable[]): Promise<Member>;
1058
1108
  }
1059
1109
 
1110
+ /**
1111
+ * Represents a member of a server on Stoat
1112
+ *
1113
+ * @extends {Base}
1114
+ */
1060
1115
  declare class Member extends Base {
1061
1116
  serverId: string;
1062
1117
  nickname: string | null;
1063
- avatar: string | null;
1064
- roleIds: string[];
1118
+ avatar: Attachment | null;
1119
+ /** @internal */
1120
+ private _roles;
1065
1121
  joinedAt: Date;
1066
1122
  timeout: Date | null;
1067
1123
  canPublish: boolean;
@@ -1069,30 +1125,63 @@ declare class Member extends Base {
1069
1125
  roles: MemberRoleManager;
1070
1126
  constructor(client: Client, data: any);
1071
1127
  _patch(data: any): void;
1128
+ /**
1129
+ * Get member role IDs
1130
+ */
1131
+ get roleIds(): string[];
1072
1132
  /** Gets the global User object for this member */
1073
1133
  get user(): User | undefined;
1074
1134
  /** Gets the Server object this member belongs to */
1075
1135
  get server(): Server | undefined;
1076
- /** Resolves the array of role strings into actual Role objects */
1077
- get roleObjects(): Role[];
1078
1136
  /** Calculates the member's total permissions using BigInt */
1079
1137
  get permissions(): bigint;
1138
+ /** Get avatar URL for this member, or null if they don't have one.
1139
+ * @example
1140
+ * // Get a member's avatar URL
1141
+ * const avatarURL = member.avatarURL;
1142
+ * console.log(avatarURL); // https://cdn.stoat.chat/attachments/avatars/1234567890/avatar.png
1143
+ */
1144
+ get avatarURL(): string | null;
1145
+ /**
1146
+ * Ban this member from the server.
1147
+ * @param options The options for this ban
1148
+ * @example
1149
+ * // Ban a member with a reason and delete their messages from the last hour
1150
+ * await member.ban({ reason: "Spamming", deleteMessageSeconds: 3600 });
1151
+ */
1152
+ ban(options?: MemberBanOptions): Promise<void>;
1153
+ /**
1154
+ * Creates a DM channel between the client's user and this member.
1155
+ * @param force If true, forces the creation of a new DM channel even if one already exists.
1156
+ * @returns A promise that resolves to the created DMChannel object.
1157
+ * @throws {Error} If the API request fails.
1158
+ * @example
1159
+ * // Create a DM with this member
1160
+ * const dm = await member.createDM();
1161
+ * console.log(`DM channel ID: ${dm.id}`);
1162
+ */
1163
+ createDM(force?: boolean): Promise<void>;
1164
+ /**
1165
+ * Timeout this member for a specified duration.
1166
+ * @param duration The duration of the timeout in milliseconds.
1167
+ * @example
1168
+ * // Timeout a member for 10 minutes (600,000 milliseconds)
1169
+ * await member.setTimeout(600000);
1170
+ */
1171
+ setTimeout(duration: number): Promise<void>;
1080
1172
  /** Checks if the member has a specific permission */
1081
1173
  hasPermission(permission: PermissionResolvable): boolean;
1082
1174
  /**
1083
- * Edits this member's nickname, avatar, roles, or timeout.
1175
+ * Edit this member.
1176
+ * @param options The options to edit the member with (nickname, roles, timeout, etc.)
1177
+ * @returns A promise that resolves to the updated Member.
1084
1178
  */
1085
1179
  edit(options: MemberEditOptions): Promise<this>;
1086
1180
  /**
1087
- * Kicks this member from the server.
1181
+ * Kick this member from the server.
1088
1182
  */
1089
1183
  kick(): Promise<void>;
1090
- /**
1091
- * Bans this member from the server.
1092
- * @param options The options for this ban
1093
- */
1094
- ban(options?: MemberBanOptions): Promise<void>;
1095
- unban(): Promise<void>;
1184
+ /** @internal */
1096
1185
  [util.inspect.custom](depth: number, options: util.InspectOptions, inspect: typeof util.inspect): string;
1097
1186
  }
1098
1187
 
@@ -1267,6 +1356,30 @@ declare class UserManager extends BaseManager<string, User> {
1267
1356
  * await client.users.editMe({ avatar: null, displayName: null });
1268
1357
  */
1269
1358
  editMe(options: UserEditOptions): Promise<User>;
1359
+ /**
1360
+ * The DM between the client's user and a user
1361
+ *
1362
+ * @param {string} userId The user id
1363
+ * @returns {?DMChannel}
1364
+ * @private
1365
+ */
1366
+ dmChannel(userId: string): DMChannel | null;
1367
+ /**
1368
+ * Creates a DM channel between the client's user and another user.
1369
+ * @param user The UserResolvable to create a DM with.
1370
+ * @param options Additional options for DM creation.
1371
+ * @param options.force If true, forces the creation of a new DM channel even if one already exists.
1372
+ * @returns A promise that resolves to the created DMChannel object.
1373
+ * @throws {TypeError} If an invalid UserResolvable is provided.
1374
+ * @throws {Error} If the API request fails.
1375
+ * @example
1376
+ * // Create a DM with a user by ID
1377
+ * const dm = await client.users.createDM("1234567890");
1378
+ * console.log(`DM channel ID: ${dm.id}`);
1379
+ */
1380
+ createDM(user: UserResolvable, { force }?: {
1381
+ force?: boolean | undefined;
1382
+ }): Promise<DMChannel>;
1270
1383
  }
1271
1384
 
1272
1385
  /**
package/dist/index.d.ts CHANGED
@@ -26,8 +26,8 @@ declare class StoatAPIError extends Error {
26
26
  apiType: string;
27
27
  location: string;
28
28
  rawData: any;
29
- method?: string;
30
- path?: string;
29
+ method?: string | undefined;
30
+ path?: string | undefined;
31
31
  constructor(statusCode: number, data: any, method?: string, path?: string);
32
32
  }
33
33
  declare class RESTManager {
@@ -217,9 +217,9 @@ declare class Collection<K, V> extends Map<K, V> {
217
217
  * @template Holds The type of the Structure this manager holds
218
218
  */
219
219
  declare abstract class BaseManager<K, Holds> {
220
- client: Client;
221
220
  cache: Collection<K, Holds>;
222
- constructor(client: Client, limit?: number);
221
+ protected readonly client: Client;
222
+ protected constructor(client: Client, limit?: number);
223
223
  /**
224
224
  * Defines how to extract the unique ID from a raw API payload.
225
225
  * @internal
@@ -264,8 +264,32 @@ declare class MemberManager extends BaseManager<string, Member> {
264
264
  * @internal
265
265
  */
266
266
  protected construct(data: any): Member;
267
+ /**
268
+ * Resolve a string or mention to Member
269
+ * @param member The MemberResolvable to resolve
270
+ * @returns The resolved Member or undefined if not found
271
+ */
267
272
  resolve(member: MemberResolvable): Member | undefined;
273
+ /**
274
+ * Resolve a Member to their ID string.
275
+ * @param member The MemberResolvable to resolve
276
+ * @returns The resolved ID string
277
+ * @throws {TypeError} If the provided resolvable is invalid
278
+ */
268
279
  resolveId(member: MemberResolvable): string;
280
+ /**
281
+ * Fetches a member from the server, or returns the cached version if available and not forced.
282
+ * @param member The MemberResolvable to fetch
283
+ * @param force Whether to bypass the cache and fetch fresh data from the API
284
+ * @returns A promise that resolves to the fetched Member
285
+ * @throws {Error} If the API request fails or the member is not found
286
+ * @example
287
+ * // Fetch a member by ID, using cache if available
288
+ * const member = await server.members.fetch("1234567890");
289
+ *
290
+ * // Fetch a member by mention, bypassing cache
291
+ * const member = await server.members.fetch("<@1234567890>", true);
292
+ */
269
293
  fetch(member: MemberResolvable, force?: boolean): Promise<Member>;
270
294
  /**
271
295
  * Fetches multiple members from the server.
@@ -284,24 +308,50 @@ declare class MemberManager extends BaseManager<string, Member> {
284
308
  * Edits a member in the server.
285
309
  * @param member The MemberResolvable to edit.
286
310
  * @param options The fields to update (nickname, roles, timeout, etc.).
311
+ * @returns A promise that resolves to the updated Member.
312
+ * @throws {Error} If the API request fails or the member is not found.
313
+ * @example
314
+ * // Change a member's nickname and add a role
315
+ * const updatedMember = await server.members.edit("1234567890", {
316
+ * nickname: "New Nickname",
317
+ * roles: ["roleId1", "roleId2"],
318
+ * });
287
319
  */
288
320
  edit(member: MemberResolvable, options: MemberEditOptions): Promise<Member>;
289
321
  /**
290
322
  * Kicks a member from the server.
291
323
  * @param member The MemberResolvable to kick.
324
+ * @example
325
+ * // Kick a member by ID
326
+ * await server.members.kick("1234567890");
292
327
  */
293
328
  kick(member: MemberResolvable): Promise<void>;
294
329
  /**
295
330
  * Bans a member from the server.
296
331
  * @param member The MemberResolvable to ban.
297
332
  * @param options The ban options
333
+ * @example
334
+ * // Ban a member by ID
335
+ * await server.members.ban("1234567890", { reason: "Spamming", deleteMessageSeconds: 3600 });
298
336
  */
299
337
  ban(member: MemberResolvable, options?: MemberBanOptions): Promise<void>;
300
338
  /**
301
339
  * Unbans a user from the server
302
340
  * @param member The MemberResolvable to unban
341
+ * @example
342
+ * // Unban a member by ID
343
+ * await server.members.unban("1234567890");
303
344
  */
304
345
  unban(member: MemberResolvable): Promise<void>;
346
+ /**
347
+ * Timeouts a member in the server for a specified duration.
348
+ * @param member The MemberResolvable to timeout
349
+ * @param duration The duration of the timeout in milliseconds
350
+ * @example
351
+ * // Timeout a member for 10 minutes
352
+ * await server.members.setTimeout("1234567890", 10 * 60 * 1000);
353
+ */
354
+ setTimeout(member: MemberResolvable, duration: number): Promise<void>;
305
355
  [util.inspect.custom](): Collection<string, Member>;
306
356
  }
307
357
 
@@ -356,7 +406,7 @@ declare class Permissions {
356
406
 
357
407
  declare class DMChannel extends BaseChannel {
358
408
  active: boolean;
359
- recipients: DMChannel[];
409
+ recipients: string[];
360
410
  lastMessageId: string | null;
361
411
  constructor(client: any, data: any);
362
412
  _patch(data: any): void;
@@ -860,7 +910,7 @@ declare class RoleManager extends BaseManager<string, Role> {
860
910
  * console.log("Role deleted successfully.");
861
911
  *
862
912
  * // Delete a role using a Role object
863
- * const role = await server.roles.fetch("01JE2MM759J5D7CHJF084R7MJ2");
913
+ * const role = await server.roles.fetch("01JE2MM759J5D7CHJF084R7");
864
914
  * await server.roles.delete(role);
865
915
  * console.log("Role deleted successfully.");
866
916
  *
@@ -1057,11 +1107,17 @@ declare class MemberRoleManager {
1057
1107
  set(roles: RoleResolvable[]): Promise<Member>;
1058
1108
  }
1059
1109
 
1110
+ /**
1111
+ * Represents a member of a server on Stoat
1112
+ *
1113
+ * @extends {Base}
1114
+ */
1060
1115
  declare class Member extends Base {
1061
1116
  serverId: string;
1062
1117
  nickname: string | null;
1063
- avatar: string | null;
1064
- roleIds: string[];
1118
+ avatar: Attachment | null;
1119
+ /** @internal */
1120
+ private _roles;
1065
1121
  joinedAt: Date;
1066
1122
  timeout: Date | null;
1067
1123
  canPublish: boolean;
@@ -1069,30 +1125,63 @@ declare class Member extends Base {
1069
1125
  roles: MemberRoleManager;
1070
1126
  constructor(client: Client, data: any);
1071
1127
  _patch(data: any): void;
1128
+ /**
1129
+ * Get member role IDs
1130
+ */
1131
+ get roleIds(): string[];
1072
1132
  /** Gets the global User object for this member */
1073
1133
  get user(): User | undefined;
1074
1134
  /** Gets the Server object this member belongs to */
1075
1135
  get server(): Server | undefined;
1076
- /** Resolves the array of role strings into actual Role objects */
1077
- get roleObjects(): Role[];
1078
1136
  /** Calculates the member's total permissions using BigInt */
1079
1137
  get permissions(): bigint;
1138
+ /** Get avatar URL for this member, or null if they don't have one.
1139
+ * @example
1140
+ * // Get a member's avatar URL
1141
+ * const avatarURL = member.avatarURL;
1142
+ * console.log(avatarURL); // https://cdn.stoat.chat/attachments/avatars/1234567890/avatar.png
1143
+ */
1144
+ get avatarURL(): string | null;
1145
+ /**
1146
+ * Ban this member from the server.
1147
+ * @param options The options for this ban
1148
+ * @example
1149
+ * // Ban a member with a reason and delete their messages from the last hour
1150
+ * await member.ban({ reason: "Spamming", deleteMessageSeconds: 3600 });
1151
+ */
1152
+ ban(options?: MemberBanOptions): Promise<void>;
1153
+ /**
1154
+ * Creates a DM channel between the client's user and this member.
1155
+ * @param force If true, forces the creation of a new DM channel even if one already exists.
1156
+ * @returns A promise that resolves to the created DMChannel object.
1157
+ * @throws {Error} If the API request fails.
1158
+ * @example
1159
+ * // Create a DM with this member
1160
+ * const dm = await member.createDM();
1161
+ * console.log(`DM channel ID: ${dm.id}`);
1162
+ */
1163
+ createDM(force?: boolean): Promise<void>;
1164
+ /**
1165
+ * Timeout this member for a specified duration.
1166
+ * @param duration The duration of the timeout in milliseconds.
1167
+ * @example
1168
+ * // Timeout a member for 10 minutes (600,000 milliseconds)
1169
+ * await member.setTimeout(600000);
1170
+ */
1171
+ setTimeout(duration: number): Promise<void>;
1080
1172
  /** Checks if the member has a specific permission */
1081
1173
  hasPermission(permission: PermissionResolvable): boolean;
1082
1174
  /**
1083
- * Edits this member's nickname, avatar, roles, or timeout.
1175
+ * Edit this member.
1176
+ * @param options The options to edit the member with (nickname, roles, timeout, etc.)
1177
+ * @returns A promise that resolves to the updated Member.
1084
1178
  */
1085
1179
  edit(options: MemberEditOptions): Promise<this>;
1086
1180
  /**
1087
- * Kicks this member from the server.
1181
+ * Kick this member from the server.
1088
1182
  */
1089
1183
  kick(): Promise<void>;
1090
- /**
1091
- * Bans this member from the server.
1092
- * @param options The options for this ban
1093
- */
1094
- ban(options?: MemberBanOptions): Promise<void>;
1095
- unban(): Promise<void>;
1184
+ /** @internal */
1096
1185
  [util.inspect.custom](depth: number, options: util.InspectOptions, inspect: typeof util.inspect): string;
1097
1186
  }
1098
1187
 
@@ -1267,6 +1356,30 @@ declare class UserManager extends BaseManager<string, User> {
1267
1356
  * await client.users.editMe({ avatar: null, displayName: null });
1268
1357
  */
1269
1358
  editMe(options: UserEditOptions): Promise<User>;
1359
+ /**
1360
+ * The DM between the client's user and a user
1361
+ *
1362
+ * @param {string} userId The user id
1363
+ * @returns {?DMChannel}
1364
+ * @private
1365
+ */
1366
+ dmChannel(userId: string): DMChannel | null;
1367
+ /**
1368
+ * Creates a DM channel between the client's user and another user.
1369
+ * @param user The UserResolvable to create a DM with.
1370
+ * @param options Additional options for DM creation.
1371
+ * @param options.force If true, forces the creation of a new DM channel even if one already exists.
1372
+ * @returns A promise that resolves to the created DMChannel object.
1373
+ * @throws {TypeError} If an invalid UserResolvable is provided.
1374
+ * @throws {Error} If the API request fails.
1375
+ * @example
1376
+ * // Create a DM with a user by ID
1377
+ * const dm = await client.users.createDM("1234567890");
1378
+ * console.log(`DM channel ID: ${dm.id}`);
1379
+ */
1380
+ createDM(user: UserResolvable, { force }?: {
1381
+ force?: boolean | undefined;
1382
+ }): Promise<DMChannel>;
1270
1383
  }
1271
1384
 
1272
1385
  /**