@stoatx/client 0.7.0 → 0.9.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
@@ -1,9 +1,12 @@
1
1
  import { EventEmitter } from 'events';
2
- import { APIRoutes, File, User as User$1, Member as Member$1, Channel, Message as Message$1, Role as Role$1, Invite, ServerBan as ServerBan$1, Server as Server$1, Emoji as Emoji$1, Category, Embed } from 'stoat-api';
2
+ import { APIRoutes, File, User as User$1, FieldsUser, Member as Member$1, Channel, FieldsChannel, Message as Message$1, Role as Role$1, FieldsRole, Invite, ServerBan as ServerBan$1, Server as Server$1, Emoji as Emoji$1, AuditLogEntryAction, AuditLogEntry as AuditLogEntry$1, Category, FieldsServer, FieldsMember, Embed } from 'stoat-api';
3
3
  import * as stoatApi from 'stoat-api';
4
4
  export { stoatApi as API };
5
5
  import * as util from 'node:util';
6
6
  import util__default from 'node:util';
7
+ import { Readable } from 'node:stream';
8
+ import { EventEmitter as EventEmitter$1 } from 'node:events';
9
+ export { decodeTime } from 'ulid';
7
10
 
8
11
  declare class GatewayManager {
9
12
  private client;
@@ -184,8 +187,11 @@ declare class User extends Base {
184
187
  flags?: number;
185
188
  privileged?: boolean;
186
189
  status?: UserStatus | null;
190
+ createdAt: Date;
191
+ createdTimestamp: number;
192
+ pronouns?: string | null;
187
193
  constructor(client: Client, data: User$1);
188
- _patch(data: User$1, clear?: string[]): void;
194
+ _patch(data: User$1, clear?: FieldsUser[]): void;
189
195
  /**
190
196
  * Convenience getter to return the user's tag (username#discriminator)
191
197
  */
@@ -241,8 +247,9 @@ declare class Collection<K, V> extends Map<K, V> {
241
247
  /**
242
248
  * @template K The type of the cache keys (usually string)
243
249
  * @template Holds The type of the Structure this manager holds
250
+ * @template RawData The raw API/gateway payload shape used to construct/patch `Holds`
244
251
  */
245
- declare abstract class BaseManager<K, Holds> {
252
+ declare abstract class BaseManager<K, Holds, RawData = unknown> {
246
253
  cache: Collection<K, Holds>;
247
254
  client: Client;
248
255
  protected constructor(client: Client, limit?: number);
@@ -250,17 +257,18 @@ declare abstract class BaseManager<K, Holds> {
250
257
  * Defines how to extract the unique ID from a raw API payload.
251
258
  * @internal
252
259
  */
253
- protected abstract extractId(data: any): K;
260
+ protected abstract extractId(data: RawData): K;
254
261
  /**
255
262
  * Defines how to construct a new instance of the Structure.
256
263
  * @internal
257
264
  */
258
- protected abstract construct(data: any): Holds;
265
+ protected abstract construct(data: RawData): Holds;
259
266
  /**
260
267
  * Transforms raw data into a Structure, patches if existing, and saves to cache.
261
268
  * @internal
262
269
  */
263
- _add(data: any): Holds;
270
+ _add(data: RawData): Holds;
271
+ private isPatchable;
264
272
  }
265
273
 
266
274
  type MemberResolvable = Member | User | string;
@@ -278,7 +286,7 @@ interface FetchMembersOptions {
278
286
  /** Whether to exclude offline users from the fetch */
279
287
  excludeOffline?: boolean;
280
288
  }
281
- declare class MemberManager extends BaseManager<string, Member> {
289
+ declare class MemberManager extends BaseManager<string, Member, Member$1> {
282
290
  server: Server;
283
291
  constructor(client: Client, server: Server, limit?: number);
284
292
  /**
@@ -579,8 +587,10 @@ declare class GroupChannel extends BaseChannel {
579
587
  icon: Attachment | null;
580
588
  lastMessageId?: string | null;
581
589
  nsfw: boolean;
590
+ createdAt: Date;
591
+ createdTimestamp: number;
582
592
  constructor(client: Client, data: RawGroupChannel);
583
- _patch(data: RawGroupChannel, clear?: string[]): void;
593
+ _patch(data: RawGroupChannel, clear?: FieldsChannel[]): void;
584
594
  /** Gets the User object of the person who owns this group */
585
595
  get owner(): User | undefined;
586
596
  /** Resolves the recipient IDs into an array of cached User objects */
@@ -606,7 +616,7 @@ interface UserEditOptions {
606
616
  profile?: UserProfile;
607
617
  status?: UserStatus;
608
618
  }
609
- declare class UserManager extends BaseManager<string, User> {
619
+ declare class UserManager extends BaseManager<string, User, User$1> {
610
620
  constructor(client: Client, limit?: number);
611
621
  /**
612
622
  * Tell BaseManager how to find the ID for Users
@@ -709,7 +719,7 @@ interface MessageFetchOptions {
709
719
  nearby?: string;
710
720
  includeUsers?: boolean;
711
721
  }
712
- declare class MessageManager extends BaseManager<string, Message> {
722
+ declare class MessageManager extends BaseManager<string, Message, Message$1> {
713
723
  channel: BaseChannel;
714
724
  constructor(client: Client, channel: BaseChannel, limit?: number);
715
725
  /**
@@ -819,7 +829,7 @@ interface ChannelRolePermissionOptions {
819
829
  allow?: PermissionResolvable;
820
830
  deny?: PermissionResolvable;
821
831
  }
822
- declare class ChannelManager extends BaseManager<string, BaseChannel> {
832
+ declare class ChannelManager extends BaseManager<string, BaseChannel, Channel> {
823
833
  /**
824
834
  * Manages API methods and caching for all channels globally.
825
835
  * @param client The active Client instance.
@@ -947,8 +957,10 @@ declare class TextChannel extends BaseChannel {
947
957
  nsfw?: boolean;
948
958
  slowmode?: number;
949
959
  voice?: any;
960
+ createdAt: Date;
961
+ createdTimestamp: number;
950
962
  constructor(client: Client, data: RawTextChannel);
951
- _patch(data: RawTextChannel, clear?: string[]): void;
963
+ _patch(data: RawTextChannel, clear?: FieldsChannel[]): void;
952
964
  /**
953
965
  * Updates the permission overrides for the channel.
954
966
  * @param roleId The raw string ID of the role to update.
@@ -1142,6 +1154,82 @@ declare class MessageCollector extends Collector<string, Message> {
1142
1154
  endReason(): string | null;
1143
1155
  }
1144
1156
 
1157
+ interface AudioResourceOptions {
1158
+ volume?: number;
1159
+ inputType?: string;
1160
+ }
1161
+ type AudioSource = string | Readable;
1162
+ declare class AudioResource {
1163
+ readonly stream: Readable;
1164
+ private constructor();
1165
+ static from(source: AudioSource, options?: AudioResourceOptions): AudioResource;
1166
+ }
1167
+
1168
+ type AudioPlayerStatus = "idle" | "buffering" | "playing" | "paused" | "stopped";
1169
+ interface AudioPlayerEvents {
1170
+ stateChange: [oldStatus: AudioPlayerStatus, newStatus: AudioPlayerStatus];
1171
+ idle: [];
1172
+ error: [error: Error];
1173
+ }
1174
+ declare class AudioPlayer extends EventEmitter$1<AudioPlayerEvents> {
1175
+ private _status;
1176
+ private _resource;
1177
+ /** Registered VoiceConnections subscribed to this player */
1178
+ private readonly subscribers;
1179
+ get status(): AudioPlayerStatus;
1180
+ get resource(): AudioResource | null;
1181
+ play(resource: AudioResource): void;
1182
+ pause(): void;
1183
+ resume(): void;
1184
+ stop(): void;
1185
+ /** @internal */
1186
+ addSubscriber(conn: VoiceConnection): void;
1187
+ /** @internal */
1188
+ removeSubscriber(conn: VoiceConnection): void;
1189
+ private feed;
1190
+ private transition;
1191
+ }
1192
+
1193
+ interface VoiceConnectionEvents {
1194
+ ready: [];
1195
+ disconnect: [];
1196
+ error: [error: Error];
1197
+ }
1198
+ type VoiceConnectionStatus = "connecting" | "ready" | "disconnecting" | "disconnected";
1199
+ declare class VoiceConnection extends EventEmitter$1<VoiceConnectionEvents> {
1200
+ readonly channelId: string;
1201
+ readonly guildId: string | undefined;
1202
+ private readonly room;
1203
+ private _status;
1204
+ private _player;
1205
+ private _audioSource;
1206
+ private _audioTrack;
1207
+ constructor(channelId: string, guildId?: string);
1208
+ get status(): VoiceConnectionStatus;
1209
+ get player(): AudioPlayer | null;
1210
+ /** @internal */
1211
+ connect(url: string, token: string): Promise<void>;
1212
+ subscribe(player: AudioPlayer): void;
1213
+ unsubscribe(): void;
1214
+ _feedStream(stream: Readable): Promise<void>;
1215
+ disconnect(): Promise<void>;
1216
+ }
1217
+
1218
+ declare class VoiceManager {
1219
+ private readonly connections;
1220
+ private readonly client;
1221
+ constructor(client: Client);
1222
+ join(channelId: string, guildId?: string): Promise<VoiceConnection>;
1223
+ get(channelId: string): VoiceConnection | undefined;
1224
+ leave(channelId: string): Promise<void>;
1225
+ leaveAll(): Promise<void>;
1226
+ }
1227
+
1228
+ declare class VoiceChannel extends TextChannel {
1229
+ join(): Promise<VoiceConnection>;
1230
+ leave(): Promise<void>;
1231
+ }
1232
+
1145
1233
  type ChannelType = "SavedMessages" | "DirectMessage" | "Group" | "TextChannel";
1146
1234
  interface ChannelCreateOptions {
1147
1235
  name: string;
@@ -1249,6 +1337,7 @@ declare abstract class BaseChannel extends Base {
1249
1337
  isText(): this is TextChannel;
1250
1338
  isDM(): this is DMChannel;
1251
1339
  isGroup(): this is GroupChannel;
1340
+ isVoice(): this is VoiceChannel;
1252
1341
  }
1253
1342
 
1254
1343
  declare class ServerChannelManager {
@@ -1273,12 +1362,14 @@ declare class Role extends Base {
1273
1362
  rank: number;
1274
1363
  icon: Attachment | null;
1275
1364
  private _permissions;
1365
+ createdAt: Date;
1366
+ createdTimestamp: number;
1276
1367
  constructor(client: Client, data: Role$1, serverId: string);
1277
1368
  /**
1278
1369
  * Updates the role instance with new data without losing the object reference.
1279
1370
  * @internal
1280
1371
  */
1281
- _patch(data: Role$1): void;
1372
+ _patch(data: Role$1, clear?: FieldsRole[]): void;
1282
1373
  /**
1283
1374
  * The server this role belongs to.
1284
1375
  * Pulls dynamically from the cache to prevent massive memory duplication.
@@ -1428,7 +1519,7 @@ interface RolePermissionOptions {
1428
1519
  deny?: PermissionResolvable;
1429
1520
  }
1430
1521
  type RoleResolvable = Role | string;
1431
- declare class RoleManager extends BaseManager<string, Role> {
1522
+ declare class RoleManager extends BaseManager<string, Role, Role$1> {
1432
1523
  server: Server;
1433
1524
  /**
1434
1525
  * Manages API methods and caching for server roles.
@@ -1568,7 +1659,7 @@ declare class ServerInvite {
1568
1659
  _patch(data: Invite): void;
1569
1660
  }
1570
1661
 
1571
- declare class ServerInviteManager extends BaseManager<string, ServerInvite> {
1662
+ declare class ServerInviteManager extends BaseManager<string, ServerInvite, Invite> {
1572
1663
  server: Server;
1573
1664
  constructor(client: Client, server: Server, limit?: number);
1574
1665
  protected extractId(data: Invite): string;
@@ -1586,11 +1677,11 @@ declare class ServerBan {
1586
1677
  _patch(data: ServerBan$1): void;
1587
1678
  }
1588
1679
 
1589
- declare class ServerBanManager extends BaseManager<string, ServerBan> {
1680
+ declare class ServerBanManager extends BaseManager<string, ServerBan, ServerBan$1> {
1590
1681
  server: Server;
1591
1682
  constructor(client: Client, server: Server, limit?: number);
1592
- protected extractId(data: any): string;
1593
- protected construct(data: any): ServerBan;
1683
+ protected extractId(data: ServerBan$1): string;
1684
+ protected construct(data: ServerBan$1): ServerBan;
1594
1685
  /**
1595
1686
  * Fetches all bans in this server.
1596
1687
  * Automatically caches the associated User objects globally!
@@ -1623,7 +1714,7 @@ interface ServerEditOptions {
1623
1714
  analytics?: boolean;
1624
1715
  owner?: string;
1625
1716
  }
1626
- declare class ServerManager extends BaseManager<string, Server> {
1717
+ declare class ServerManager extends BaseManager<string, Server, Server$1> {
1627
1718
  constructor(client: Client, limit?: number);
1628
1719
  /**
1629
1720
  * Tell BaseManager how to find the ID for Servers
@@ -1653,6 +1744,8 @@ declare class Emoji extends Base {
1653
1744
  creatorId: string;
1654
1745
  name: string;
1655
1746
  parent: EmojiParent;
1747
+ createdAt: Date;
1748
+ createdTimestamp: number;
1656
1749
  animated: boolean;
1657
1750
  nsfw: boolean;
1658
1751
  constructor(client: Client, data: Emoji$1);
@@ -1697,7 +1790,7 @@ interface EmojiEditOptions {
1697
1790
  name: string;
1698
1791
  }
1699
1792
  type EmojiResolvable = string | Emoji;
1700
- declare class EmojiManager extends BaseManager<string, Emoji> {
1793
+ declare class EmojiManager extends BaseManager<string, Emoji, Emoji$1> {
1701
1794
  server?: Server | undefined;
1702
1795
  constructor(client: Client, server?: Server | undefined, limit?: number);
1703
1796
  /**
@@ -1763,6 +1856,40 @@ declare class EmojiManager extends BaseManager<string, Emoji> {
1763
1856
  [util.inspect.custom](): Collection<string, Emoji>;
1764
1857
  }
1765
1858
 
1859
+ declare class AuditLogEntry extends Base {
1860
+ serverId: string;
1861
+ userId: string;
1862
+ targetId: string | null;
1863
+ reason: string | null;
1864
+ action: AuditLogEntryAction;
1865
+ constructor(client: Client, data: AuditLogEntry$1);
1866
+ /** The action tag, e.g. "ChannelEdit" — narrow `entry.action` on this. */
1867
+ get type(): AuditLogEntryAction["type"];
1868
+ get server(): Server | undefined;
1869
+ /** The user who performed this action, if cached. */
1870
+ get executor(): User | undefined;
1871
+ /**
1872
+ * Best-effort resolve of `targetId` into the actual entity, picked by
1873
+ * `action.type` since a bare id alone doesn't say whether it's a member,
1874
+ * a role, a channel, etc.
1875
+ */
1876
+ get target(): User | Member | unknown | undefined;
1877
+ /**
1878
+ * Customizer for Node.js `console.log` and `util.inspect`.
1879
+ * Hides the cyclic client reference for a cleaner output.
1880
+ * @internal
1881
+ */
1882
+ [util.inspect.custom](): string;
1883
+ }
1884
+
1885
+ interface FetchAuditLogsOptions {
1886
+ user?: string;
1887
+ target?: string;
1888
+ type?: string[];
1889
+ before?: string;
1890
+ after?: string;
1891
+ limit?: number;
1892
+ }
1766
1893
  declare class Server extends Base {
1767
1894
  channelIds: string[];
1768
1895
  defaultPermissions: bigint;
@@ -1782,11 +1909,13 @@ declare class Server extends Base {
1782
1909
  bans: ServerBanManager;
1783
1910
  invites: ServerInviteManager;
1784
1911
  emojis: EmojiManager;
1912
+ createdAt: Date;
1913
+ createdTimestamp: number;
1785
1914
  constructor(client: Client, data: Server$1);
1786
1915
  /**
1787
1916
  * Updates the server instance with new data without losing the object reference.
1788
1917
  */
1789
- _patch(data: Server$1, clear?: string[]): void;
1918
+ _patch(data: Server$1, clear?: FieldsServer[]): void;
1790
1919
  /**
1791
1920
  * Edits this server.
1792
1921
  * @param options The fields to update.
@@ -1796,6 +1925,11 @@ declare class Server extends Base {
1796
1925
  * Leaves the server
1797
1926
  */
1798
1927
  leave(): Promise<never>;
1928
+ /**
1929
+ * Fetch audit logs for this server
1930
+ * @param options Query params
1931
+ */
1932
+ fetchAuditLogs(options?: FetchAuditLogsOptions): Promise<Collection<string, AuditLogEntry>>;
1799
1933
  /**
1800
1934
  * Fetches multiple members from this server.
1801
1935
  * @param options Filter options for the fetch request.
@@ -1849,12 +1983,14 @@ declare class Member extends Base {
1849
1983
  /** @internal */
1850
1984
  private _roles;
1851
1985
  joinedAt: Date;
1986
+ joinedTimestamp: number;
1852
1987
  timeout: Date | null;
1853
1988
  canPublish: boolean;
1854
1989
  canRecieve: boolean;
1855
1990
  roles: MemberRoleManager;
1991
+ pronouns?: string | null;
1856
1992
  constructor(client: Client, data: Member$1, serverId?: string);
1857
- _patch(data: Member$1): void;
1993
+ _patch(data: Member$1, clear?: FieldsMember[]): void;
1858
1994
  /**
1859
1995
  * Get member role IDs
1860
1996
  */
@@ -2056,7 +2192,8 @@ declare class Message extends Base {
2056
2192
  embeds: Embed[] | null;
2057
2193
  attachments: Attachment[];
2058
2194
  editedAt: Date | null;
2059
- createdAt: Date | null;
2195
+ createdAt: Date;
2196
+ createdTimestamp: number;
2060
2197
  flags: number;
2061
2198
  interactions: Interaction | null;
2062
2199
  masquerade: Masquerade | null;
@@ -2241,6 +2378,7 @@ declare class Client extends EventEmitter {
2241
2378
  emojis: EmojiManager;
2242
2379
  user: ClientUser | null;
2243
2380
  options: ClientOptions;
2381
+ readonly voice: VoiceManager;
2244
2382
  constructor(options?: ClientOptions);
2245
2383
  /**
2246
2384
  * Connects the bot to the Stoat Gateway
@@ -2259,4 +2397,4 @@ declare class UnknownChannel extends BaseChannel {
2259
2397
  constructor(client: Client, data: Channel);
2260
2398
  }
2261
2399
 
2262
- export { Attachment, AttachmentBuilder, type AttachmentMetadata, Base, BaseChannel, BitField, type BitFieldResolvable, type BotInformation, type CDNTag, type ChannelCreateOptions, type ChannelEditOptions, ChannelManager, type ChannelResolvable, type ChannelRolePermissionOptions, type ChannelType, Client, type ClientEvents, type ClientOptions, ClientUser, Collection, Collector, type CollectorOptions, DMChannel, EmbedBuilder, Emoji, type EmojiCreateOptions, type EmojiEditOptions, EmojiManager, type EmojiParent, type EmojiResolvable, type FetchMembersOptions, GatewayManager, GroupChannel, type Interaction, type Masquerade, Member, type MemberBanOptions, type MemberEditOptions, MemberManager, type MemberResolvable, Message, MessageCollector, type MessageCollectorOptions, type MessageFetchOptions, MessageManager, type MessageOptions, MessageReaction, type MessageResolvable, PermissionFlags, type PermissionResolvable, type PermissionString, Permissions, RESTManager, type RawDMChannel, type RawGroupChannel, type RawTextChannel, ReactionCollector, type ReactionCollectorOptions, type ReplyIntent, Role, type RoleCreateOptions, type RoleEditOptions, RoleManager, type RolePermissionOptions, type RoleResolvable, Server, ServerChannelManager, type ServerEditOptions, ServerManager, StoatAPIError, SweeperManager, type SweeperOptions, TextChannel, type TextEmbedData, UnknownChannel, User, type UserEditOptions, UserManager, type UserPresence, type UserProfile, type UserRelationShip, type UserResolvable, type UserStatus };
2400
+ export { Attachment, AttachmentBuilder, type AttachmentMetadata, AudioPlayer, type AudioPlayerEvents, type AudioPlayerStatus, AudioResource, type AudioResourceOptions, type AudioSource, Base, BaseChannel, BitField, type BitFieldResolvable, type BotInformation, type CDNTag, type ChannelCreateOptions, type ChannelEditOptions, ChannelManager, type ChannelResolvable, type ChannelRolePermissionOptions, type ChannelType, Client, type ClientEvents, type ClientOptions, ClientUser, Collection, Collector, type CollectorOptions, DMChannel, EmbedBuilder, Emoji, type EmojiCreateOptions, type EmojiEditOptions, EmojiManager, type EmojiParent, type EmojiResolvable, type FetchAuditLogsOptions, type FetchMembersOptions, GatewayManager, GroupChannel, type Interaction, type Masquerade, Member, type MemberBanOptions, type MemberEditOptions, MemberManager, type MemberResolvable, Message, MessageCollector, type MessageCollectorOptions, type MessageFetchOptions, MessageManager, type MessageOptions, MessageReaction, type MessageResolvable, PermissionFlags, type PermissionResolvable, type PermissionString, Permissions, RESTManager, type RawDMChannel, type RawGroupChannel, type RawTextChannel, ReactionCollector, type ReactionCollectorOptions, type ReplyIntent, Role, type RoleCreateOptions, type RoleEditOptions, RoleManager, type RolePermissionOptions, type RoleResolvable, Server, ServerChannelManager, type ServerEditOptions, ServerManager, StoatAPIError, SweeperManager, type SweeperOptions, TextChannel, type TextEmbedData, UnknownChannel, User, type UserEditOptions, UserManager, type UserPresence, type UserProfile, type UserRelationShip, type UserResolvable, type UserStatus, VoiceConnection, type VoiceConnectionEvents, type VoiceConnectionStatus, VoiceManager };