@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/LICENSE +21 -674
- package/README.md +3 -3
- package/dist/index.cjs +170 -29
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +131 -18
- package/dist/index.d.ts +131 -18
- package/dist/index.js +170 -29
- package/dist/index.js.map +1 -0
- package/package.json +4 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/Client.ts","../src/gateway/GatewayManager.ts","../src/structures/Base.ts","../src/structures/Message.ts","../src/structures/Attachment.ts","../src/structures/User.ts","../src/structures/ClientUser.ts","../src/rest/RESTManager.ts","../src/utils/Collection.ts","../src/managers/MessageManager.ts","../src/managers/BaseManager.ts","../src/structures/BaseChannel.ts","../src/structures/TextChannel.ts","../src/structures/UnknownChannel.ts","../src/structures/DMChannel.ts","../src/structures/GroupChannel.ts","../src/utils/ChannelFactory.ts","../src/utils/permissions.ts","../src/managers/ChannelManager.ts","../src/structures/Member.ts","../src/managers/MemberRoleManager.ts","../src/utils/Constants.ts","../src/managers/MemberManager.ts","../src/managers/ServerChannelManager.ts","../src/structures/Role.ts","../src/managers/RoleManager.ts","../src/structures/ServerInvite.ts","../src/managers/ServerInviteManager.ts","../src/structures/ServerBan.ts","../src/managers/ServerBanManager.ts","../src/structures/Server.ts","../src/managers/ServerManager.ts","../src/managers/UserManager.ts","../src/managers/SweepManager.ts","../src/builders/EmbedBuilder.ts"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport { GatewayManager } from \"../gateway/GatewayManager\";\nimport { RESTManager } from \"../rest/RESTManager\";\nimport { Message } from \"../structures/Message\";\nimport { ChannelManager } from \"../managers/ChannelManager\";\nimport { BaseChannel } from \"../structures/BaseChannel\";\nimport { ServerManager } from \"../managers/ServerManager\";\nimport { Server } from \"../structures/Server\";\nimport { UserManager } from \"../managers/UserManager\";\nimport { User } from \"../structures/User\";\nimport { ClientUser } from \"../structures/ClientUser\";\nimport { Member } from \"../structures/Member\";\nimport { SweeperManager, SweeperOptions } from \"../managers/SweepManager\";\n\nexport interface ClientEvents {\n ready: [data: any];\n messageCreate: [message: Message];\n messageUpdate: [oldMessage: null | Message, newMessage: Message];\n messageDelete: [message: Message | { id: string; channelId: string }];\n error: [error: Error];\n debug: [message: string];\n raw: [data: any];\n channelCreate: [channel: BaseChannel];\n channelUpdate: [oldChannel: BaseChannel | null, newChannel: BaseChannel];\n channelDelete: [channel: BaseChannel | string];\n serverCreate: [server: Server];\n serverUpdate: [oldServer: Server | null, newServer: Server];\n serverDelete: [server: Server | string];\n userUpdate: [oldUser: User, newUser: User];\n serverMemberJoin: [member: Member];\n serverMemberLeave: [member: Member];\n}\n\nexport interface ClientOptions {\n sweepers?: SweeperOptions;\n cacheLimits?: {\n users?: number;\n servers?: number;\n channels?: number;\n };\n}\n\nexport class Client extends EventEmitter {\n public rest: RESTManager;\n public gateway: GatewayManager;\n public channels: ChannelManager;\n public servers: ServerManager;\n public users: UserManager;\n public sweepers: SweeperManager;\n public user: ClientUser | null = null;\n\n constructor(public options: ClientOptions = {}) {\n super({ captureRejections: true });\n this.rest = new RESTManager(this);\n this.gateway = new GatewayManager(this);\n this.channels = new ChannelManager(this, options.cacheLimits?.channels);\n this.servers = new ServerManager(this, options.cacheLimits?.servers);\n this.users = new UserManager(this, options.cacheLimits?.users);\n\n this.sweepers = new SweeperManager(this, options.sweepers ?? {});\n }\n\n /**\n * Connects the bot to the Stoat Gateway\n */\n public async login(token: string): Promise<any> {\n if (!token) throw new Error(\"A valid token must be provided.\");\n this.sweepers.start();\n this.rest.setToken(token);\n return this.gateway.connect(token);\n }\n\n [Symbol.for(\"nodejs.rejection\")](error: Error) {\n this.emit(\"error\", error);\n }\n\n public override on<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => void): this {\n return super.on(event, listener as any);\n }\n\n public override once<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => void): this {\n return super.once(event, listener as any);\n }\n\n public override emit<K extends keyof ClientEvents>(event: K, ...args: ClientEvents[K]): boolean {\n return super.emit(event, ...args);\n }\n}\n","import WebSocket from \"ws\";\nimport { Client } from \"../client/Client\";\nimport { Message } from \"../structures/Message\";\nimport { TextChannel } from \"../structures/TextChannel\";\nimport { ClientUser } from \"../structures/ClientUser\";\n\nexport class GatewayManager {\n private ws: WebSocket | null = null;\n private pingInterval: NodeJS.Timeout | null = null;\n private token: string | null = null;\n\n private reconnectAttempts: number = 0;\n private readonly maxReconnectWait: number = 60000; // Cap at 60s\n private isIntentionalClose: boolean = false;\n\n constructor(private client: Client) {}\n\n public async connect(token: string): Promise<void> {\n this.token = token;\n this.isIntentionalClose = false;\n this.client.emit(\"debug\", \"Connecting to Stoat Gateway...\");\n\n if (this.ws) {\n this.ws.removeAllListeners();\n this.ws = null;\n }\n\n const baseUrl = \"wss://stoat.chat/events\";\n const url = `${baseUrl}?version=1&format=json&token=${this.token}`;\n\n this.ws = new WebSocket(url);\n\n this.ws.on(\"open\", () => {\n this.client.emit(\"debug\", \"WebSocket Opened. Starting ping loop...\");\n this.reconnectAttempts = 0;\n this.startPingLoop();\n });\n\n this.ws.on(\"message\", (data) => this.handleMessage(data));\n\n this.ws.on(\"close\", (code, reason) => {\n this.client.emit(\"debug\", `WebSocket closed: ${code} - ${reason.toString()}`);\n if (this.pingInterval) clearInterval(this.pingInterval);\n if (!this.isIntentionalClose) {\n this.reconnect();\n }\n });\n\n this.ws.on(\"error\", (error) => {\n this.client.emit(\"error\", error);\n });\n }\n\n private handleMessage(rawData: WebSocket.RawData) {\n const payload = JSON.parse(rawData.toString());\n const eventType = payload.type;\n\n switch (eventType) {\n case \"Error\":\n this.client.emit(\"error\", new Error(`Gateway Error: ${payload.error || JSON.stringify(payload)}`));\n break;\n\n case \"Authenticated\":\n this.client.emit(\"debug\", \"Successfully authenticated with Stoat.\");\n break;\n\n case \"Ready\": {\n if (payload.channels) {\n for (const rawChannel of payload.channels) {\n this.client.channels._add(rawChannel);\n }\n }\n\n if (payload.servers) {\n for (const rawServer of payload.servers) {\n this.client.servers._add(rawServer);\n }\n }\n\n if (payload.users) {\n for (const rawUser of payload.users) {\n this.client.users._add(rawUser);\n if (rawUser.relationship === \"User\" && !this.client.user) {\n this.client.user = new ClientUser(this.client, rawUser);\n }\n }\n }\n this.client.emit(\"ready\", payload);\n break;\n }\n\n case \"Message\": {\n if (payload.user) this.client.users._add(payload.user);\n\n const channel = this.client.channels.cache.get(payload.channel);\n let message;\n\n if (channel) {\n message = channel.messages._add(payload);\n\n if (\"serverId\" in channel) {\n const serverId = (channel as TextChannel).serverId;\n const server = this.client.servers.cache.get(serverId);\n if (server && payload.member && payload.user) {\n server.members._add({ ...payload.member, user: payload.user });\n }\n }\n } else {\n message = new Message(this.client, payload);\n }\n\n this.client.emit(\"messageCreate\", message);\n break;\n }\n\n case \"MessageUpdate\": {\n const channel = this.client.channels.cache.get(payload.channel);\n const existing = channel?.messages.cache.get(payload.id);\n\n if (existing) {\n const oldMessage = existing._clone();\n existing._patch(payload.data);\n this.client.emit(\"messageUpdate\", oldMessage, existing);\n } else {\n const newMessage = new Message(this.client, { id: payload.id, channelId: payload.channel, ...payload.data });\n this.client.emit(\"messageUpdate\", null, newMessage);\n }\n break;\n }\n\n case \"MessageAppend\": {\n const channel = this.client.channels.cache.get(payload.channel);\n const message = channel?.messages.cache.get(payload.id);\n\n if (message && payload.append.embeds) {\n const oldMessage = message._clone();\n message.embeds.push(...payload.append.embeds);\n this.client.emit(\"messageUpdate\", oldMessage, message);\n }\n break;\n }\n\n case \"MessageDelete\": {\n const channel = this.client.channels.cache.get(payload.channel);\n\n let message;\n\n if (channel) {\n message = channel.messages.cache.get(payload.id);\n channel.messages.cache.delete(payload.id);\n }\n\n if (message) {\n this.client.emit(\"messageDelete\", message);\n } else {\n this.client.emit(\"messageDelete\", { id: payload.id, channelId: payload.channel });\n }\n\n break;\n }\n\n case \"Pong\":\n this.client.emit(\"debug\", \"Received Pong from server.\");\n break;\n\n case \"ChannelCreate\": {\n const channel = this.client.channels._add(payload);\n\n this.client.emit(\"channelCreate\", channel);\n break;\n }\n\n case \"ChannelUpdate\": {\n const existing = this.client.channels.cache.get(payload.id);\n\n if (existing) {\n const oldChannel = existing._clone();\n\n if (\"_patch\" in existing) {\n (existing as any)._patch(payload.data, payload.clear);\n }\n\n this.client.emit(\"channelUpdate\", oldChannel, existing);\n } else {\n const newChannel = this.client.channels._add({ id: payload.id, ...payload.data });\n this.client.emit(\"channelUpdate\", null, newChannel);\n }\n break;\n }\n\n case \"ChannelDelete\": {\n const channel = this.client.channels.cache.get(payload.id);\n if (channel) {\n this.client.channels.cache.delete(channel.id);\n this.client.emit(\"channelDelete\", channel);\n }\n break;\n }\n\n case \"ServerCreate\": {\n const server = this.client.servers._add(payload);\n this.client.emit(\"serverCreate\", server);\n break;\n }\n\n case \"ServerUpdate\": {\n const existing = this.client.servers.cache.get(payload.id);\n\n if (existing) {\n const oldServer = existing._clone();\n\n existing._patch(payload.data, payload.clear);\n\n this.client.emit(\"serverUpdate\", oldServer, existing);\n } else {\n const newServer = this.client.servers._add({ id: payload.id, ...payload.data });\n this.client.emit(\"serverUpdate\", null, newServer);\n }\n break;\n }\n\n case \"ServerDelete\": {\n const server = this.client.servers.cache.get(payload.id);\n if (server) {\n this.client.servers.cache.delete(payload.id);\n this.client.emit(\"serverDelete\", server);\n } else {\n this.client.emit(\"serverDelete\", payload.id);\n }\n break;\n }\n\n case \"ServerMemberJoin\": {\n const server = this.client.servers.cache.get(payload.id);\n if (server) {\n const member = server.members._add({ user: payload.user });\n this.client.emit(\"serverMemberJoin\", member);\n }\n break;\n }\n\n case \"ServerMemberLeave\": {\n const server = this.client.servers.cache.get(payload.id);\n if (server) {\n const member = server.members.cache.get(payload.user);\n if (member) {\n server.members.cache.delete(payload.user);\n this.client.emit(\"serverMemberLeave\", member);\n }\n }\n break;\n }\n\n case \"UserUpdate\": {\n const existing = this.client.users.cache.get(payload.id);\n if (existing) {\n const oldUser = existing._clone();\n existing._patch(payload.data, payload.clear);\n this.client.emit(\"userUpdate\", oldUser, existing);\n }\n break;\n }\n\n default:\n this.client.emit(\"raw\", payload);\n }\n }\n\n private startPingLoop() {\n if (this.pingInterval) clearInterval(this.pingInterval);\n\n this.pingInterval = setInterval(() => {\n this.client.emit(\"debug\", \"Sending Ping...\");\n this.send({ type: \"Ping\", data: Date.now() });\n }, 20000);\n }\n\n private send(payload: any) {\n if (this.ws?.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify(payload));\n }\n }\n\n private reconnect(): void {\n if (!this.token) {\n this.client.emit(\"error\", new Error(\"RECONNECT_FAILED: No token available.\"));\n return;\n }\n\n let waitTime = Math.pow(2, this.reconnectAttempts) * 1000;\n\n const jitter = waitTime * 0.2 * Math.random();\n waitTime = Math.min(waitTime + jitter, this.maxReconnectWait);\n\n this.reconnectAttempts++;\n\n this.client.emit(\n \"debug\",\n `Attempting to reconnect in ${Math.round(waitTime / 1000)}s... (Attempt ${this.reconnectAttempts})`,\n );\n\n setTimeout(() => {\n void this.connect(this.token!);\n }, waitTime);\n }\n\n public disconnect() {\n this.isIntentionalClose = true;\n if (this.pingInterval) clearInterval(this.pingInterval);\n if (this.ws) {\n this.ws.close(1000, \"Client disconnected gracefully\");\n this.ws.removeAllListeners();\n this.ws = null;\n }\n this.client.emit(\"debug\", \"Gateway disconnected intentionally.\");\n }\n}\n","import { Client } from \"../client/Client\";\n\n/**\n * The base class for all structures.\n */\nexport abstract class Base {\n public readonly id: string;\n public cachedAt: number = Date.now();\n protected readonly client: Client;\n\n constructor(client: Client, data: { _id: string }) {\n this.id = data._id;\n this.client = client;\n\n Object.defineProperty(this, \"client\", {\n value: client,\n enumerable: false,\n writable: false,\n });\n }\n\n /**\n * Compares this object with another to see if they represent the same entity.\n */\n public equals(other: Base | string): boolean {\n if (typeof other === \"string\") return this.id === other;\n return other instanceof Base && this.id === other.id;\n }\n\n /**\n * Returns the UUID string when the object is cast to a string.\n */\n public toString(): string {\n return this.id;\n }\n\n /**\n * Helper to quickly clone a structure\n */\n public _clone(): this {\n return Object.assign(Object.create(this), this);\n }\n}\n","import { Base } from \"./Base\";\nimport { Client } from \"../client/Client\";\nimport { Member } from \"./Member\";\nimport { User } from \"./User\";\nimport { BaseChannel } from \"./BaseChannel\";\nimport * as util from \"node:util\";\nimport { EmbedBuilder, TextEmbedData } from \"../builders/EmbedBuilder\";\nimport { Attachment } from \"./Attachment\";\nimport { Server } from \"./Server\";\nimport { decodeTime } from \"ulid\";\n\nexport interface MessageOptions {\n content?: string;\n embeds?: (TextEmbedData | EmbedBuilder)[];\n attachments?: string[];\n interactions?: any[];\n flags?: number;\n masquerade?: Masquerade;\n replies?: ReplyIntent[];\n}\nexport interface Masquerade {\n avatar?: string;\n name?: string;\n colour?: string;\n}\nexport interface ReplyIntent {\n id: string;\n mention: boolean;\n fail_if_not_exists?: boolean;\n}\n\nexport interface Interaction {\n reactions: string[];\n restrictReactions: boolean;\n}\n\nexport class Message extends Base {\n public content: string | null = null;\n public authorId: string;\n public channelId: string;\n public embeds: any[] = [];\n public attachments: Attachment[] = [];\n public editedAt: Date | null = null;\n public createdAt: Date | null = null;\n public flags: number = 0;\n public interactions: Interaction | null = null;\n public masquerade: Masquerade | null = null;\n public mentions: string[] = [];\n public pinned: boolean = false;\n public reactions: any[] = [];\n public replies: string[] = [];\n public role_mentions: string[] = [];\n\n constructor(client: Client, data: any) {\n super(client, data);\n\n this.authorId = data.author;\n this.channelId = data.channel;\n\n const timestamp = decodeTime(this.id);\n if (timestamp) {\n this.createdAt = new Date(timestamp);\n }\n\n if (data.attachments) {\n this.attachments = data.attachments.map((fileData: any) => new Attachment(this.client, fileData));\n }\n\n if (data.masquerade !== undefined) this.masquerade = data.masquerade;\n if (data.mentions !== undefined) this.mentions = data.mentions;\n if (data.replies !== undefined) this.replies = data.replies;\n if (data.role_mentions !== undefined) this.role_mentions = data.role_mentions;\n\n this._patch(data);\n }\n\n public async reply(contentOrOptions: string | MessageOptions): Promise<Message> {\n let channel = this.channel;\n if (!channel) channel = await this.client.channels.fetch(this.channelId);\n\n const options: MessageOptions =\n typeof contentOrOptions === \"string\" ? { content: contentOrOptions } : { ...contentOrOptions };\n\n const repliesArray: ReplyIntent[] = options.replies ? [...options.replies] : [];\n\n const alreadyReplying = repliesArray.some((reply) => reply.id === this.id);\n if (!alreadyReplying) {\n repliesArray.push({\n id: this.id,\n mention: true,\n });\n }\n\n options.replies = repliesArray;\n\n return channel.messages.send(options);\n }\n\n /**\n * Edits this message.\n * @param contentOrOptions The new content or options for the message.\n */\n public async edit(contentOrOptions: string | MessageOptions): Promise<this> {\n let channel = this.channel;\n if (!channel) channel = await this.client.channels.fetch(this.channelId);\n\n return (await channel.messages.edit(this.id, contentOrOptions)) as this;\n }\n\n /**\n * Deletes this message.\n */\n public async delete(): Promise<void> {\n let channel = this.channel;\n if (!channel) channel = await this.client.channels.fetch(this.channelId);\n\n await channel.messages.delete(this.id);\n }\n\n /**\n * Pins this message.\n */\n public async pin(): Promise<void> {\n let channel = this.channel;\n if (!channel) channel = await this.client.channels.fetch(this.channelId);\n\n await channel.messages.pin(this.id);\n }\n\n /**\n * Unpins this message.\n */\n public async unpin(): Promise<void> {\n let channel = this.channel;\n if (!channel) channel = await this.client.channels.fetch(this.channelId);\n\n await channel.messages.unpin(this.id);\n }\n\n /** Gets the Channel object from cache */\n public get channel(): BaseChannel | undefined {\n return this.client.channels.cache.get(this.channelId);\n }\n\n /** Gets the Global User object from cache */\n public get author(): User | undefined {\n return this.client.users.cache.get(this.authorId);\n }\n\n /** Gets the Server Member object (if sent in a server) */\n public get member(): Member | undefined {\n const channel = this.channel;\n if (channel && \"serverId\" in channel) {\n const server = this.client.servers.cache.get((channel as any).serverId);\n return server?.members.cache.get(this.authorId);\n }\n return undefined;\n }\n\n /** Gets the Server ID if this message was sent in a server channel */\n public get serverId(): string | undefined {\n const channel = this.channel;\n if (channel && \"serverId\" in channel) {\n return (channel as any).serverId as string;\n }\n return undefined;\n }\n\n /** Gets the Server object from cache */\n public get server(): Server | undefined {\n const serverId = this.serverId;\n if (!serverId) return undefined;\n return this.client.servers.cache.get(serverId);\n }\n\n public _patch(data: any) {\n if (data.content !== undefined) this.content = data.content;\n if (data.edited !== undefined) this.editedAt = new Date(data.edited);\n if (data.pinned !== undefined) this.pinned = data.pinned;\n if (data.embeds !== undefined) this.embeds = data.embeds;\n if (data.flags !== undefined) this.flags = data.flags;\n if (data.reactions !== undefined) this.reactions = data.reactions;\n\n if (data.interactions !== undefined) {\n if (data.interactions) {\n this.interactions = {\n reactions: data.interactions.reactions ?? [],\n restrictReactions: data.interactions.restrict_reactions ?? false,\n };\n } else {\n this.interactions = null;\n }\n }\n }\n\n // This tells Node.js exactly how to print this object in console.log()\n [util.inspect.custom](depth: number, options: util.InspectOptions, inspect: typeof util.inspect) {\n const { client, authorId, channelId, ...props } = this;\n\n const data = {\n ...props,\n author: this.author,\n channel: this.channel,\n server: this.server,\n member: this.member,\n };\n\n return `${this.constructor.name} ${inspect(data, { ...options, depth: depth ?? options.depth })}`;\n }\n}\n","import { Base } from \"./Base\";\nimport type { Client } from \"../client/Client\";\n\nexport type AttachmentMetadata =\n | { type: \"File\" }\n | { type: \"Text\" }\n | { type: \"Audio\" }\n | { type: \"Image\"; width: number; height: number; thumbhash?: number[]; animated?: boolean }\n | { type: \"Video\"; width: number; height: number };\n\nexport class Attachment extends Base {\n public override id: string;\n public tag: string;\n public filename: string;\n public metadata: AttachmentMetadata;\n public contentType: string;\n public size: number;\n\n public deleted?: boolean;\n public reported?: boolean;\n public messageId?: string;\n public userId?: string;\n public serverId?: string;\n public objectId?: string;\n\n constructor(client: Client, data: any) {\n super(client, { ...data, id: data._id });\n\n this.id = data._id;\n this.tag = data.tag;\n this.filename = data.filename;\n this.metadata = data.metadata ?? { type: \"File\" };\n this.contentType = data.content_type;\n this.size = data.size;\n\n this.deleted = data.deleted ?? false;\n this.reported = data.reported ?? false;\n this.messageId = data.message_id;\n this.userId = data.user_id;\n this.serverId = data.server_id;\n this.objectId = data.object_id;\n }\n\n /**\n * Automatically constructs the direct CDN URL for this file\n */\n public get url(): string {\n // Standard Autumn CDN format: cdn.domain.com/tag/id/filename\n return `https://cdn.stoatusercontent.com/${this.tag}/${this.id}/${this.filename}`;\n }\n\n /**\n * Helper boolean to quickly check if it's an image\n */\n public get isImage(): boolean {\n return this.metadata.type === \"Image\";\n }\n}\n","import { Base } from \"./Base\";\nimport type { Client } from \"../client/Client\";\nimport { Attachment } from \"./Attachment\";\n\nexport enum UserRelationship {\n None = \"None\",\n User = \"User\",\n Friend = \"Friend\",\n Outgoing = \"Outgoing\",\n Incoming = \"Incoming\",\n Blocked = \"Blocked\",\n BlockedOther = \"BlockedOther\",\n}\n\nexport enum UserPresence {\n Online = \"Online\",\n Idle = \"Idle\",\n Focus = \"Focus\",\n Busy = \"Busy\",\n Invisible = \"Invisible\",\n}\n\nexport interface BotInformation {\n owner: string;\n}\n\nexport interface UserStatus {\n presence: UserPresence;\n text?: string | null;\n}\n\nexport interface UserProfile {\n background?: string | null;\n content?: string | null;\n}\n\nexport class User extends Base {\n public discriminator!: string;\n public online!: boolean;\n public relationship!: UserRelationship;\n public username!: string;\n public avatar?: Attachment | null;\n public badges?: number;\n public bot!: false | BotInformation;\n public displayName?: string | null;\n public flags?: number;\n public privileged?: boolean;\n public status?: UserStatus | null;\n\n constructor(client: Client, data: any) {\n super(client, data);\n this.bot = false;\n this.privileged = false;\n this.flags = 0;\n this._patch(data);\n }\n\n public _patch(data: any, clear?: string[]) {\n if (data.username !== undefined) this.username = data.username;\n if (data.discriminator !== undefined) this.discriminator = data.discriminator;\n if (data.online !== undefined) this.online = data.online;\n if (data.relationship !== undefined) this.relationship = data.relationship;\n\n if (data.display_name !== undefined) this.displayName = data.display_name;\n\n if (data.badges !== undefined) this.badges = data.badges;\n if (data.flags !== undefined) this.flags = data.flags;\n if (data.privileged !== undefined) this.privileged = data.privileged ?? false;\n if (data.status !== undefined) this.status = data.status;\n\n if (data.bot !== undefined) {\n this.bot = data.bot ? { owner: data.bot.owner } : false;\n }\n\n if (data.avatar !== undefined) {\n this.avatar = new Attachment(this.client, data.avatar);\n }\n\n // Handle deletions gracefully\n if (clear && Array.isArray(clear)) {\n for (const field of clear) {\n if (field === \"Avatar\") this.avatar = null;\n if (field === \"StatusText\" && this.status) this.status.text = null;\n if (field === \"DisplayName\") this.displayName = null;\n }\n }\n }\n\n /**\n * Convenience getter to return the user's tag (username#discriminator)\n */\n public get tag(): string {\n return `${this.username}#${this.discriminator}`;\n }\n\n /**\n * Fetch a User to update their information\n * @param force Skip the cache check and force an API request\n * @returns The fetched User object\n * @throws Error if the user cannot be found or fetched\n * @example\n * // Fetch a user\n * await user.fetch();\n */\n public async fetch(force: boolean = false): Promise<this> {\n return (await this.client.users.fetch(this.id, force)) as this;\n }\n}\n","import { User } from \"./User\";\nimport type { Client } from \"../client/Client\";\n\n/**\n * Represents the authenticated bot's user object.\n */\nexport class ClientUser extends User {\n constructor(client: Client, data: any) {\n super(client, data);\n }\n}\n","import { request } from \"undici\";\nimport { Client } from \"../client/Client\";\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Represents an independent rate limit bucket queue\n */\nclass AsyncBucket {\n public remaining: number = 1;\n public resetAt: number = 0;\n public queue: Promise<void> = Promise.resolve();\n}\n\n/**\n * Custom Error class for Stoat API failures\n */\nexport class StoatAPIError extends Error {\n public statusCode: number;\n public apiType: string;\n public location: string;\n public rawData: any;\n public method?: string | undefined;\n public path?: string | undefined;\n\n constructor(statusCode: number, data: any, method?: string, path?: string) {\n let errorMessage = \"Unknown API Error\";\n let type = \"Unknown\";\n let location = \"Unknown\";\n\n if (typeof data === \"object\" && data !== null) {\n if (\"type\" in data || \"location\" in data) {\n type = String(data.type || type);\n location = String(data.location || location);\n errorMessage = `Type: ${type} (Location: ${location})`;\n } else if (\"message\" in data) {\n errorMessage = String(data.message);\n } else {\n try {\n errorMessage = JSON.stringify(data);\n } catch {\n errorMessage = \"Unparseable Error Object\";\n }\n }\n } else if (typeof data === \"string\" && data.trim() !== \"\") {\n errorMessage = data;\n }\n\n const routeInfo = method && path ? ` on ${method.toUpperCase()} ${path}` : \"\";\n\n super(`${errorMessage}${routeInfo}`);\n\n this.name = `StoatAPIError[${statusCode}]`;\n this.statusCode = statusCode;\n this.apiType = type;\n this.location = location;\n this.rawData = data;\n this.method = method;\n this.path = path;\n\n Object.setPrototypeOf(this, StoatAPIError.prototype);\n }\n}\n\nexport class RESTManager {\n private baseURL = \"https://stoat.chat/api\";\n\n private token: string | null = null;\n\n private buckets = new Map<string, AsyncBucket>();\n\n constructor(private client: Client) {}\n\n public setToken(token: string) {\n this.token = token;\n }\n\n /**\n * Generates a local identifier for the bucket based on method and path.\n */\n private getRouteKey(method: string, endpoint: string): string {\n return `${method}:${endpoint}`;\n }\n\n public makeRequest(method: string, endpoint: string, body?: any): Promise<any> {\n const routeKey = this.getRouteKey(method, endpoint);\n\n let bucket = this.buckets.get(routeKey);\n if (!bucket) {\n bucket = new AsyncBucket();\n this.buckets.set(routeKey, bucket);\n }\n\n return new Promise((resolve, reject) => {\n bucket!.queue = bucket!.queue.then(async () => {\n try {\n const result = await this.execute(method, endpoint, body, bucket!);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n private async execute(method: string, endpoint: string, body: any, bucket: AsyncBucket): Promise<any> {\n if (!this.token) {\n throw new Error(\"REST_NOT_READY: You must call client.login() before making API requests.\");\n }\n const url = `${this.baseURL}${endpoint}`;\n\n if (bucket.remaining <= 0 && Date.now() < bucket.resetAt) {\n const waitTime = bucket.resetAt - Date.now();\n this.client.emit(\"debug\", `Bucket [${method}:${endpoint}] exhausted. Waiting ${waitTime}ms proactively...`);\n await sleep(waitTime);\n }\n\n const options = {\n method: method as any,\n headers: {\n \"X-Bot-Token\": this.token,\n \"Content-Type\": \"application/json\",\n },\n ...(body ? { body: JSON.stringify(body) } : {}),\n };\n const response = await request(url, options);\n\n const remainingHeader = response.headers[\"x-ratelimit-remaining\"];\n const resetAfterHeader = response.headers[\"x-ratelimit-reset-after\"];\n\n if (remainingHeader !== undefined && resetAfterHeader !== undefined) {\n bucket.remaining = Number(remainingHeader);\n bucket.resetAt = Date.now() + Number(resetAfterHeader);\n }\n\n // Safely parse the body (handles cases where Cloudflare returns HTML/Text on 502s)\n const textBody = await response.body.text();\n let data;\n try {\n data = JSON.parse(textBody);\n } catch {\n data = textBody;\n }\n\n if (response.statusCode === 429) {\n const retryMs =\n typeof data === \"object\" && data?.retry_after ? data.retry_after : Number(resetAfterHeader) || 5000;\n\n this.client.emit(\"debug\", `Hit 429 on [${method}:${endpoint}]. Retrying in ${retryMs}ms.`);\n\n bucket.remaining = 0;\n bucket.resetAt = Date.now() + retryMs;\n\n await sleep(retryMs);\n\n return this.execute(method, endpoint, body, bucket);\n }\n\n if (response.statusCode >= 400) {\n throw new StoatAPIError(response.statusCode, data, method, endpoint);\n }\n\n return data as any;\n }\n\n /**\n * Uploads a file to Stoat's CDN and returns the File ID\n */\n public async uploadFile(filename: string, fileBuffer: Buffer | Blob): Promise<string> {\n if (!this.token) throw new Error(\"REST_NOT_READY: No token available.\");\n\n const url = \"https://cdn.stoatusercontent.com/attachments\";\n\n const formData = new FormData();\n formData.append(\"file\", new Blob([fileBuffer as Uint8Array<ArrayBuffer>]), filename);\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"X-Bot-Token\": this.token,\n },\n body: formData,\n });\n\n if (!response.ok) {\n let errData;\n const errText = await response.text();\n try {\n errData = JSON.parse(errText);\n } catch {\n errData = errText;\n }\n throw new StoatAPIError(response.status, errData, \"POST\", \"/attachments\");\n }\n\n const data = (await response.json()) as { id: string };\n\n return data.id;\n }\n\n public get(endpoint: string) {\n return this.makeRequest(\"GET\", endpoint);\n }\n public post(endpoint: string, body: any) {\n return this.makeRequest(\"POST\", endpoint, body);\n }\n public patch(endpoint: string, body: any) {\n return this.makeRequest(\"PATCH\", endpoint, body);\n }\n public delete(endpoint: string) {\n return this.makeRequest(\"DELETE\", endpoint);\n }\n\n async put(endpoint: string, body: any) {\n return this.makeRequest(\"PUT\", endpoint, body);\n }\n}\n","/**\n * A utility class that extends the native JavaScript Map with Array-like methods.\n */\nexport class Collection<K, V> extends Map<K, V> {\n public limit: number;\n\n constructor(limit: number = Infinity) {\n super();\n this.limit = limit;\n }\n\n /**\n * Overrides the default set method to enforce the maximum cache size.\n */\n public override set(key: K, value: V): this {\n if (this.limit === 0) return this;\n\n if (this.size >= this.limit && !this.has(key)) {\n const oldestKey = this.keys().next().value;\n if (oldestKey !== undefined) {\n this.delete(oldestKey);\n }\n }\n\n return super.set(key, value);\n }\n\n /**\n * Finds the first item where the given function returns true.\n */\n public find(fn: (value: V, key: K, collection: this) => boolean): V | undefined {\n for (const [key, val] of this) {\n if (fn(val, key, this)) return val;\n }\n return undefined;\n }\n\n /**\n * Returns a new Collection containing only the items where the function returns true.\n */\n public filter(fn: (value: V, key: K, collection: this) => boolean): Collection<K, V> {\n const results = new Collection<K, V>();\n for (const [key, val] of this) {\n if (fn(val, key, this)) results.set(key, val);\n }\n return results;\n }\n\n /**\n * Maps each item to a new array of values.\n */\n public map<T>(fn: (value: V, key: K, collection: this) => T): T[] {\n const results: T[] = [];\n for (const [key, val] of this) {\n results.push(fn(val, key, this));\n }\n return results;\n }\n\n /**\n * Gets the very first value in the Collection (based on insertion order).\n */\n public first(): V | undefined {\n return this.values().next().value;\n }\n\n /**\n * Gets the very last value in the Collection.\n */\n public last(): V | undefined {\n const arr = Array.from(this.values());\n return arr[arr.length - 1];\n }\n\n /**\n * Checks if at least one item matches the condition.\n */\n public some(fn: (value: V, key: K, collection: this) => boolean): boolean {\n for (const [key, val] of this) {\n if (fn(val, key, this)) return true;\n }\n return false;\n }\n}\n","import { Collection } from \"../utils/Collection\";\nimport type { BaseChannel } from \"../structures/BaseChannel\";\nimport { Message, MessageOptions } from \"../structures/Message\";\nimport type { Client } from \"../client/Client\";\nimport * as util from \"node:util\";\nimport { BaseManager } from \"./BaseManager\";\n\nexport type MessageResolvable = Message | string;\n\nexport interface MessageFetchOptions {\n limit?: number;\n before?: string;\n after?: string;\n sort?: \"Relevance\" | \"Latest\" | \"Oldest\";\n nearby?: string;\n includeUsers?: boolean;\n}\n\nexport class MessageManager extends BaseManager<string, Message> {\n constructor(\n client: Client,\n private channel: BaseChannel,\n limit: number = Infinity,\n ) {\n super(client, limit);\n }\n\n /**\n * Tell BaseManager how to find the ID for Messages\n */\n protected extractId(data: any): string {\n return data._id ?? data.id;\n }\n\n /**\n * Tell BaseManager how to build a Message\n */\n protected construct(data: any): Message {\n return new Message(this.client, data);\n }\n\n public async fetch(id: string): Promise<Message> {\n const data = await this.client.rest.get(`/channels/${this.channel.id}/messages/${id}`);\n return this._add(data);\n }\n\n /**\n * Fetches multiple messages from the channel using specific filter parameters.\n * @param options The query parameters to filter the fetched messages.\n * @returns A promise that resolves to a Collection of fetched Messages.\n * @throws {Error} If the API request fails.\n * @example\n * // Fetch the last 50 messages in the channel\n * const messages = await channel.messages.fetchMany({ limit: 50, sort: \"Latest\" });\n *\n * // Fetch 20 messages before a specific message ID\n * const history = await channel.messages.fetchMany({ limit: 20, before: \"01H...\" });\n */\n public async fetchMany(options: MessageFetchOptions = {}): Promise<Collection<string, Message>> {\n const params = new URLSearchParams();\n\n if (options.limit !== undefined) params.append(\"limit\", options.limit.toString());\n if (options.before !== undefined) params.append(\"before\", options.before);\n if (options.after !== undefined) params.append(\"after\", options.after);\n if (options.sort !== undefined) params.append(\"sort\", options.sort);\n if (options.nearby !== undefined) params.append(\"nearby\", options.nearby);\n if (options.includeUsers !== undefined) params.append(\"include_users\", options.includeUsers.toString());\n\n const queryString = params.toString();\n const endpoint = `/channels/${this.channel.id}/messages${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await this.client.rest.get(endpoint);\n\n const rawMessages = Array.isArray(data) ? data : data.messages || [];\n\n if (!Array.isArray(data) && data.users) {\n for (const userData of data.users) {\n this.client.users._add(userData);\n }\n }\n\n const fetched = new Collection<string, Message>();\n\n for (const rawMsg of rawMessages) {\n const msg = this._add(rawMsg);\n fetched.set(msg.id, msg);\n }\n\n return fetched;\n }\n\n public resolveId(message: MessageResolvable): string {\n if (typeof message === \"string\") return message;\n if (message instanceof Message) return message.id;\n throw new Error(\"Invalid MessageResolvable: must be a Message object or a string ID.\");\n }\n\n /**\n * Sends a new message to this channel.\n * @param contentOrOptions The string content or message options payload.\n * @returns A promise that resolves to the sent Message.\n */\n public async send(contentOrOptions: MessageOptions | string): Promise<Message> {\n const payload: any = typeof contentOrOptions === \"string\" ? { content: contentOrOptions } : { ...contentOrOptions }; // Spread to avoid mutating the user's original object\n\n if (payload.embeds) {\n payload.embeds = payload.embeds.map((embed: any) =>\n typeof embed.toJSON === \"function\" ? embed.toJSON() : embed,\n );\n }\n\n const data = await this.client.rest.post(`/channels/${this.channel.id}/messages`, payload);\n\n return new Message(this.client, data);\n }\n\n /**\n * Edits an existing message.\n * @param message The MessageResolvable (object or ID) to edit.\n * @param contentOrOptions The new content or options.\n * @returns A promise that resolves to the updated Message.\n */\n public async edit(message: MessageResolvable, contentOrOptions: string | MessageOptions): Promise<Message> {\n const id = this.resolveId(message);\n const payload: MessageOptions =\n typeof contentOrOptions === \"string\" ? { content: contentOrOptions } : { ...contentOrOptions };\n\n if (payload.embeds) {\n payload.embeds = payload.embeds.map((embed: any) =>\n typeof embed.toJSON === \"function\" ? embed.toJSON() : embed,\n );\n }\n\n const data = await this.client.rest.patch(`/channels/${this.channel.id}/messages/${id}`, payload);\n const existing = this.cache.get(id);\n if (existing) {\n existing._patch(data);\n return existing;\n }\n\n return new Message(this.client, data);\n }\n\n /**\n * Deletes a message from the channel.\n * @param message The MessageResolvable to delete.\n */\n public async delete(message: MessageResolvable): Promise<void> {\n const id = this.resolveId(message);\n await this.client.rest.delete(`/channels/${this.channel.id}/messages/${id}`);\n this.cache.delete(id);\n }\n\n /**\n * Pins a message in the channel.\n * @param message The MessageResolvable to pin.\n */\n public async pin(message: MessageResolvable): Promise<void> {\n const id = this.resolveId(message);\n await this.client.rest.post(`/channels/${this.channel.id}/messages/${id}/pin`, {});\n\n const existing = this.cache.get(id);\n if (existing) existing.pinned = true;\n }\n\n /**\n * Unpins a message in the channel.\n * @param message The MessageResolvable to unpin.\n */\n public async unpin(message: MessageResolvable): Promise<void> {\n const id = this.resolveId(message);\n await this.client.rest.delete(`/channels/${this.channel.id}/messages/${id}/pin`);\n\n const existing = this.cache.get(id);\n if (existing) existing.pinned = false;\n }\n\n [util.inspect.custom]() {\n return this.cache;\n }\n}\n","import { Collection } from \"../utils/Collection\";\nimport type { Client } from \"../client/Client\";\n\n/**\n * @template K The type of the cache keys (usually string)\n * @template Holds The type of the Structure this manager holds\n */\nexport abstract class BaseManager<K, Holds> {\n public cache: Collection<K, Holds>;\n protected readonly client: Client;\n\n protected constructor(client: Client, limit: number = Infinity) {\n this.client = client;\n this.cache = new Collection<K, Holds>(limit);\n\n Object.defineProperty(this, \"client\", {\n value: client,\n enumerable: false,\n writable: false,\n });\n }\n\n /**\n * Defines how to extract the unique ID from a raw API payload.\n * @internal\n */\n protected abstract extractId(data: any): K;\n\n /**\n * Defines how to construct a new instance of the Structure.\n * @internal\n */\n protected abstract construct(data: any): Holds;\n\n /**\n * Transforms raw data into a Structure, patches if existing, and saves to cache.\n * @internal\n */\n public _add(data: any): Holds {\n const id = this.extractId(data);\n const existing = this.cache.get(id);\n\n if (existing && typeof (existing as any)._patch === \"function\") {\n (existing as any)._patch(data);\n return existing;\n }\n\n const structure = this.construct(data);\n this.cache.set(id, structure);\n\n return structure;\n }\n}\n","import { Base } from \"./Base\";\nimport type { Client } from \"../client/Client\";\nimport type { TextChannel } from \"./TextChannel\";\nimport { MessageFetchOptions, MessageManager } from \"../managers/MessageManager\";\nimport { Message, MessageOptions } from \"./Message\";\nimport { DMChannel } from \"./DMChannel\";\nimport { GroupChannel } from \"./GroupChannel\";\nimport { ChannelEditOptions } from \"../managers/ChannelManager\";\n\nexport enum ChannelType {\n TEXT = \"TextChannel\",\n DM = \"DirectMessage\",\n GROUP = \"Group\",\n}\n\nexport interface ChannelCreateOptions {\n name: string;\n type: \"Text\" | \"Voice\";\n description?: string;\n nsfw?: boolean;\n voice?: {\n max_users?: number;\n };\n}\n\nexport abstract class BaseChannel extends Base {\n public type: ChannelType;\n public messages: MessageManager;\n\n protected constructor(client: Client, data: any) {\n super(client, data);\n this.type = data.channel_type;\n\n this.messages = new MessageManager(this.client, this);\n }\n\n /**\n * Sends a message to this channel.\n * @param contentOrOptions The string content or message options payload.\n * @returns A promise that resolves to the sent Message.\n * @example\n * await channel.send(\"Hello world!\");\n * await channel.send({ content: \"Here is an embed\", embeds: [myEmbed] });\n */\n public async send(contentOrOptions: string | MessageOptions): Promise<Message> {\n return this.messages.send(contentOrOptions);\n }\n\n public async fetch(force: boolean = true): Promise<this> {\n return (await this.client.channels.fetch(this.id, force)) as this;\n }\n\n /**\n * Fetches multiple messages from this channel.\n * @param options The query parameters to filter the messages.\n */\n public async fetchMessages(options?: MessageFetchOptions) {\n return this.messages.fetchMany(options);\n }\n\n /**\n * Edits this channel.\n * @param options The fields to update\n */\n public async edit(options: ChannelEditOptions): Promise<this> {\n return (await this.client.channels.edit(this.id, options)) as this;\n }\n\n /**\n * Deletes this channel.\n */\n public async delete(): Promise<void> {\n await this.client.channels.delete(this.id);\n }\n\n public isText(): this is TextChannel {\n return this.type === ChannelType.TEXT;\n }\n\n public isDM(): this is DMChannel {\n return this.type === ChannelType.DM;\n }\n\n public isGroup(): this is GroupChannel {\n return this.type === ChannelType.GROUP;\n }\n}\n","import { BaseChannel } from \"./BaseChannel\";\nimport { Client } from \"../client/Client\";\nimport { Attachment } from \"./Attachment\";\nimport { PermissionResolvable } from \"../utils/permissions\";\nimport { ChannelRolePermissionOptions } from \"../managers/ChannelManager\";\n\nexport class TextChannel extends BaseChannel {\n public name!: string;\n public serverId!: string;\n public defaultPermissions?: { a: number; d: number };\n public description?: string | null;\n public icon?: Attachment | null;\n public lastMessageId?: string | null;\n public nsfw?: boolean;\n public slowmode?: number;\n public voice?: any;\n\n constructor(client: Client, data: any) {\n super(client, data);\n this.serverId = data.server;\n this.defaultPermissions = data.default_permissions;\n this.description = data.description;\n this.icon = data.icon;\n this.lastMessageId = data.last_message_id;\n this.nsfw = data.nsfw ?? false;\n this.slowmode = data.slowmode ?? 0;\n this.voice = data.voice;\n this._patch(data);\n }\n\n public _patch(data: any, clear?: string[]) {\n if (data.name !== undefined) this.name = data.name;\n if (data.description !== undefined) this.description = data.description;\n\n if (clear && Array.isArray(clear)) {\n for (const field of clear) {\n switch (field) {\n case \"Description\":\n this.description = null;\n break;\n }\n }\n }\n }\n\n /**\n * Updates the permission overrides for the channel.\n * @param roleId The raw string ID of the role to update.\n * @param options The allow and deny permissions to set.\n * @returns A promise that resolves to the updated BaseChannel.\n * @throws {TypeError} If the channel is not a Server Channel, or options are invalid.\n * @throws {Error} If the API request fails.\n * @example\n * // Deny a role the ability to send messages in this channel\n * await channel.setRolePermissions(\"ROLE_ID\", { deny: [\"SendMessage\"] });\n */\n public async setRolePermissions(roleId: string, options: ChannelRolePermissionOptions): Promise<this> {\n return (await this.client.channels.setRolePermissions(this.id, roleId, options)) as this;\n }\n\n /**\n * Updates the default (everyone) permissions for this channel.\n * @param permissions The default permissions to grant globally in this channel.\n * @returns A promise that resolves to the updated BaseChannel.\n * @throws {TypeError} If invalid permissions are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Set the default permission to allow everyone to view the channel\n * await channel.setDefaultPermissions([\"ViewChannel\", \"ReadMessageHistory\"]);\n */\n public async setDefaultPermissions(permissions: PermissionResolvable): Promise<this> {\n return (await this.client.channels.setDefaultPermissions(this.id, permissions)) as this;\n }\n}\n","import { BaseChannel } from \"./BaseChannel\";\nimport type { Client } from \"../client/Client\";\n\n/**\n * A fallback class for channel types that are not yet officially supported by the library.\n */\nexport class UnknownChannel extends BaseChannel {\n constructor(client: Client, data: any) {\n super(client, data);\n }\n}\n","import { BaseChannel } from \"./BaseChannel\";\n\nexport class DMChannel extends BaseChannel {\n public active: boolean = false;\n public recipients: string[] = [];\n public lastMessageId: string | null = null;\n\n constructor(client: any, data: any) {\n super(client, data);\n }\n\n public _patch(data: any) {\n if (data.active !== undefined) this.active = data.active;\n if (data.recipients !== undefined) this.recipients = data.recipients;\n if (data.last_message_id !== undefined) this.lastMessageId = data.last_message_id;\n }\n}\n","import { Client } from \"../client/Client\";\nimport { Attachment } from \"./Attachment\";\nimport { BaseChannel } from \"./BaseChannel\";\nimport type { User } from \"./User\";\nimport * as util from \"node:util\";\nimport { PermissionResolvable } from \"../utils/permissions\";\n\nexport class GroupChannel extends BaseChannel {\n public name!: string;\n public ownerId!: string;\n public recipients: string[] = [];\n public description?: string | null = null;\n public icon: Attachment | null = null;\n public lastMessageId?: string | null = null;\n public nsfw: boolean = false;\n\n constructor(client: Client, data: any) {\n super(client, data);\n this._patch(data);\n }\n\n public _patch(data: any, clear?: string[]) {\n if (data.name !== undefined) this.name = data.name;\n if (data.owner !== undefined) this.ownerId = data.owner;\n if (data.recipients !== undefined) this.recipients = data.recipients;\n if (data.description !== undefined) this.description = data.description;\n if (data.last_message_id !== undefined) this.lastMessageId = data.last_message_id;\n if (data.nsfw !== undefined) this.nsfw = data.nsfw;\n\n if (data.icon !== undefined) {\n this.icon = data.icon ? new Attachment(this.client, data.icon) : null;\n }\n\n if (clear && Array.isArray(clear)) {\n for (const field of clear) {\n switch (field) {\n case \"Name\":\n this.name = \"\";\n break;\n case \"Description\":\n this.description = null;\n break;\n case \"Icon\":\n this.icon = null;\n break;\n }\n }\n }\n }\n\n /** Gets the User object of the person who owns this group */\n public get owner(): User | undefined {\n return this.client.users.cache.get(this.ownerId);\n }\n\n /** Resolves the recipient IDs into an array of cached User objects */\n public get recipientUsers(): User[] {\n return this.recipients\n .map((id) => this.client.users.cache.get(id))\n .filter((user): user is User => user !== undefined);\n }\n\n /**\n * Updates the default (everyone) permissions for this channel.\n * @param permissions The default permissions to grant globally in this channel.\n * @returns A promise that resolves to the updated BaseChannel.\n * @throws {TypeError} If invalid permissions are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Set the default permission to allow everyone to view the channel\n * await channel.setDefaultPermissions([\"ViewChannel\", \"ReadMessageHistory\"]);\n */\n public async setDefaultPermissions(permissions: PermissionResolvable): Promise<this> {\n return (await this.client.channels.setDefaultPermissions(this.id, permissions)) as this;\n }\n\n [util.inspect.custom](_depth: number, options: util.InspectOptions, inspect: typeof util.inspect) {\n const { client, ...props } = this;\n return `${this.constructor.name} ${inspect(\n {\n ...props,\n owner: this.owner,\n recipientUsers: this.recipientUsers,\n },\n options,\n )}`;\n }\n}\n","import { TextChannel } from \"../structures/TextChannel\";\nimport { BaseChannel, ChannelType } from \"../structures/BaseChannel\";\nimport type { Client } from \"../client/Client\";\nimport { UnknownChannel } from \"../structures/UnknownChannel\";\nimport { DMChannel } from \"../structures/DMChannel\";\nimport { GroupChannel } from \"../structures/GroupChannel\";\n\nexport function createChannel(client: Client, data: any): BaseChannel {\n switch (data.channel_type) {\n case ChannelType.TEXT:\n return new TextChannel(client, data);\n case ChannelType.DM:\n return new DMChannel(client, data);\n case ChannelType.GROUP:\n return new GroupChannel(client, data);\n default:\n client.emit(\"debug\", `Received unknown channel type: ${data.type}`);\n return new UnknownChannel(client, data);\n }\n}\n","export const PermissionFlags = {\n // Server permissions\n ManageChannel: 1n << 0n,\n ManageServer: 1n << 1n,\n ManagePermissions: 1n << 2n,\n ManageRole: 1n << 3n,\n ManageCustomisation: 1n << 4n,\n\n // Member permissions\n KickMembers: 1n << 6n,\n BanMembers: 1n << 7n,\n TimeoutMembers: 1n << 8n,\n AssignRoles: 1n << 9n,\n ChangeNickname: 1n << 10n,\n ManageNicknames: 1n << 11n,\n ChangeAvatar: 1n << 12n,\n RemoveAvatars: 1n << 13n,\n\n // Channel permissions\n ViewChannel: 1n << 20n,\n ReadMessageHistory: 1n << 21n,\n SendMessage: 1n << 22n,\n ManageMessages: 1n << 23n,\n ManageWebhooks: 1n << 24n,\n InviteOthers: 1n << 25n,\n SendEmbeds: 1n << 26n,\n UploadFiles: 1n << 27n,\n Masquerade: 1n << 28n,\n React: 1n << 29n,\n BypassSlowmode: 1n << 39n,\n\n // Voice permissions\n Connect: 1n << 30n,\n Speak: 1n << 31n,\n Video: 1n << 32n,\n MuteMembers: 1n << 33n,\n DeafenMembers: 1n << 34n,\n MoveMembers: 1n << 35n,\n Listen: 1n << 36n,\n\n // Channel permissions (Part 2)\n MentionEveryone: 1n << 37n,\n MentionRoles: 1n << 38n,\n\n // Grant all\n GrantAllSafe: 0x000fffffffffffffn,\n} as const;\n\nexport type PermissionString = keyof typeof PermissionFlags;\nexport type PermissionResolvable = bigint | PermissionString | PermissionResolvable[];\n\nexport class Permissions {\n /**\n * Converts a string, BigInt, or array of strings into a single BigInt\n */\n public static resolve(permission: PermissionResolvable): bigint {\n if (typeof permission === \"bigint\") return permission;\n\n if (typeof permission === \"string\") {\n return PermissionFlags[permission] ?? 0n;\n }\n\n if (Array.isArray(permission)) {\n return permission.reduce<bigint>((acc, p) => acc | this.resolve(p), 0n);\n }\n\n return 0n;\n }\n\n /**\n * Checks if a specific permission bit exists\n */\n public static has(totalPermissions: bigint, permissionToCheck: PermissionResolvable): boolean {\n const resolvedCheck = this.resolve(permissionToCheck);\n return (totalPermissions & resolvedCheck) === resolvedCheck;\n }\n}\n","import { BaseChannel } from \"../structures/BaseChannel\";\nimport { createChannel } from \"../utils/ChannelFactory\";\nimport type { Client } from \"../client/Client\";\nimport { TextChannel } from \"../structures/TextChannel\";\nimport { DMChannel } from \"../structures/DMChannel\";\nimport { GroupChannel } from \"../structures/GroupChannel\";\nimport { Permissions, type PermissionResolvable } from \"../utils/permissions\";\nimport { BaseManager } from \"./BaseManager\";\n\nexport type ChannelResolvable = BaseChannel | string;\n\nexport interface ChannelEditOptions {\n name?: string;\n description?: string | null;\n owner?: string;\n icon?: string | null;\n nsfw?: boolean;\n archived?: boolean;\n voice?: { max_users: number };\n slowmode?: number;\n}\n\nexport interface ChannelRolePermissionOptions {\n allow?: PermissionResolvable;\n deny?: PermissionResolvable;\n}\n\nexport class ChannelManager extends BaseManager<string, BaseChannel> {\n /**\n * Manages API methods and caching for all channels globally.\n * @param client The active Client instance.\n * @param limit The maximum number of channels to hold in the cache.\n */\n constructor(\n public override client: Client,\n limit: number = Infinity,\n ) {\n super(client, limit);\n }\n\n protected extractId(data: any): string {\n return data._id ?? data.id;\n }\n\n protected construct(data: any): BaseChannel {\n return createChannel(this.client, data);\n }\n\n /**\n * Resolves a ChannelResolvable to a cached BaseChannel object.\n * @param channel The ChannelResolvable to resolve.\n * @returns The resolved BaseChannel, or undefined if not cached.\n */\n public resolve(channel: ChannelResolvable): BaseChannel | undefined {\n if (channel instanceof BaseChannel) return channel;\n\n if (typeof channel === \"string\") {\n const id = channel.replace(/[<#>]/g, \"\");\n return this.cache.get(id);\n }\n\n return undefined;\n }\n\n public resolveText(channel: ChannelResolvable): TextChannel | undefined {\n const resolved = this.resolve(channel);\n return resolved?.isText() ? resolved : undefined;\n }\n\n public resolveDM(channel: ChannelResolvable): DMChannel | undefined {\n const resolved = this.resolve(channel);\n return resolved?.isDM() ? resolved : undefined;\n }\n\n public resolveGroup(channel: ChannelResolvable): GroupChannel | undefined {\n const resolved = this.resolve(channel);\n return resolved?.isGroup() ? resolved : undefined;\n }\n\n /**\n * Extracts ID from a ChannelResolvable.\n * @param channel The ChannelResolvable to extract the ID from.\n * @returns The extracted channel ID.\n * @throws {TypeError} If an invalid type is provided.\n */\n public resolveId(channel: ChannelResolvable): string {\n if (channel instanceof BaseChannel) {\n return channel.id;\n }\n\n if (typeof channel === \"string\") {\n return channel.replace(/[<#>]/g, \"\");\n }\n\n throw new TypeError(\"Invalid ChannelResolvable provided. Expected a BaseChannel object or a string ID/Mention.\");\n }\n\n /**\n * Fetches a Channel from the API or resolves it from the local cache.\n * @param channel The ID, mention, or Channel object to fetch.\n * @param force Whether to skip the cache check and force a direct API request. Defaults to true.\n * @returns A promise that resolves to the fetched BaseChannel object.\n * @throws {TypeError} If an invalid ChannelResolvable is provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Fetch a channel, bypassing cache\n * const channel = await client.channels.fetch(\"01H...\");\n */\n public async fetch(channel: ChannelResolvable, force: boolean = true): Promise<BaseChannel> {\n if (!force) {\n const cached = this.resolve(channel);\n if (cached) return cached;\n }\n\n const id = this.resolveId(channel);\n const data = await this.client.rest.get(`/channels/${id}`);\n\n return this._add(data);\n }\n\n /**\n * Edits a channel in the server.\n * @param channel The ChannelResolvable to edit.\n * @param options The fields to update.\n * @returns A promise that resolves to the updated BaseChannel.\n * @throws {TypeError} If invalid options or ChannelResolvable are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Update channel name and remove its description\n * await client.channels.edit(\"01H...\", { name: \"general\", description: null });\n */\n public async edit(channel: ChannelResolvable, options: ChannelEditOptions): Promise<BaseChannel> {\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"ChannelEditOptions must be a valid object.\");\n }\n\n const payload: any = {};\n const remove: string[] = [];\n\n if (options.name !== undefined) payload.name = options.name;\n if (options.owner !== undefined) payload.owner = options.owner;\n if (options.nsfw !== undefined) payload.nsfw = options.nsfw;\n if (options.archived !== undefined) payload.archived = options.archived;\n if (options.voice !== undefined) payload.voice = options.voice;\n if (options.slowmode !== undefined) payload.slowmode = options.slowmode;\n\n if (options.description !== undefined) {\n if (options.description === null) remove.push(\"Description\");\n else payload.description = options.description;\n }\n\n if (options.icon !== undefined) {\n if (options.icon === null) remove.push(\"Icon\");\n else payload.icon = options.icon;\n }\n\n if (remove.length > 0) payload.remove = remove;\n if (Object.keys(payload).length === 0) return this.fetch(channel);\n\n const data = await this.client.rest.patch(`/channels/${this.resolveId(channel)}`, payload);\n return this._add(data);\n }\n\n /**\n * Updates the permission overrides for a specific role in a channel.\n * @param channel The ChannelResolvable to update permissions for.\n * @param roleId The raw string ID of the role to update.\n * @param options The allow and deny permissions to set.\n * @returns A promise that resolves to the updated BaseChannel.\n * @throws {TypeError} If the channel is not a Server Channel, or options are invalid.\n * @throws {Error} If the API request fails.\n * @example\n * // Deny a role the ability to send messages in this channel\n * await client.channels.setRolePermissions(channel, \"ROLE_ID\", { deny: [\"SendMessage\"] });\n */\n public async setRolePermissions(\n channel: ChannelResolvable,\n roleId: string,\n options: ChannelRolePermissionOptions,\n ): Promise<BaseChannel> {\n const resolved = this.resolve(channel);\n if (resolved && !resolved.isText()) {\n throw new TypeError(\"Role permissions can only be set on Server Channels.\");\n }\n\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"ChannelRolePermissionOptions must be a valid object.\");\n }\n\n const id = this.resolveId(channel);\n const allowBigInt = options.allow !== undefined ? Permissions.resolve(options.allow) : 0n;\n const denyBigInt = options.deny !== undefined ? Permissions.resolve(options.deny) : 0n;\n\n const payload = {\n permissions: {\n allow: Number(allowBigInt),\n deny: Number(denyBigInt),\n },\n };\n\n const data = await this.client.rest.put(`/channels/${id}/permissions/${roleId}`, payload);\n return this._add(data);\n }\n\n /**\n * Updates the default (everyone) permissions for a channel.\n * @param channel The ChannelResolvable to update permissions for.\n * @param permissions The default permissions to grant globally in this channel.\n * @returns A promise that resolves to the updated BaseChannel.\n * @throws {TypeError} If invalid permissions are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Set the default permission to allow everyone to view the channel\n * await client.channels.setDefaultPermissions(channel, [\"ViewChannel\", \"ReadMessageHistory\"]);\n */\n public async setDefaultPermissions(\n channel: ChannelResolvable,\n permissions: PermissionResolvable,\n ): Promise<BaseChannel> {\n const resolved = this.resolve(channel);\n if (resolved && resolved.isDM()) {\n throw new TypeError(\"Default permissions cannot be set on Direct Message channels.\");\n }\n\n const id = this.resolveId(channel);\n const permBigInt = Permissions.resolve(permissions);\n\n const payload = {\n permissions: Number(permBigInt),\n };\n\n const data = await this.client.rest.put(`/channels/${id}/permissions/default`, payload);\n return this._add(data);\n }\n\n /**\n * Deletes a server channel, leaves a group, or closes a DM.\n * @param channel The channel object, raw ID, or mention string to delete.\n * @returns A promise that resolves when the action is successful.\n * @throws {Error} If the API request fails.\n * @example\n * await client.channels.delete(\"01H...\");\n */\n public async delete(channel: ChannelResolvable): Promise<void> {\n const id = this.resolveId(channel);\n await this.client.rest.delete(`/channels/${id}`);\n this.cache.delete(id);\n }\n}\n","import { Base } from \"./Base\";\nimport type { Client } from \"../client/Client\";\nimport type { User } from \"./User\";\nimport type { Server } from \"./Server\";\nimport { Permissions, PermissionFlags, PermissionResolvable } from \"../utils/permissions\";\nimport * as util from \"node:util\";\nimport { MemberBanOptions, MemberEditOptions } from \"../managers/MemberManager\";\nimport { MemberRoleManager } from \"../managers/MemberRoleManager\";\nimport { StoatCDN } from \"../utils/Constants\";\nimport { Attachment } from \"./Attachment\";\n\n/**\n * Represents a member of a server on Stoat\n *\n * @extends {Base}\n */\nexport class Member extends Base {\n // The server ID the member is in\n public serverId!: string;\n // The nickname the member has in the server, if any.\n public nickname: string | null = null;\n // The avatar the member has in the server, if any.\n public avatar: Attachment | null = null;\n /** @internal */\n private _roles: string[] = [];\n // The date the member joined the server\n public joinedAt!: Date;\n // The date the member's timeout expires, or null if not timed out\n public timeout: Date | null = null;\n // Whatever the user can talk in Voice Chat\n public canPublish: boolean = false;\n // Whatever the user can hear in Voice Chat\n public canRecieve: boolean = false;\n // Member roles manager\n public roles: MemberRoleManager;\n\n constructor(client: Client, data: any) {\n super(client, { _id: data.user._id });\n\n this.serverId = data.serverId || data.server_id;\n this.joinedAt = new Date(data.joinedAt || data.joined_at);\n this.roles = new MemberRoleManager(this);\n\n this._patch(data);\n }\n\n _patch(data: any) {\n if (data.nickname !== undefined) this.nickname = data.nickname;\n if (data.avatar !== undefined) this.avatar = data.avatar;\n if (data.roles !== undefined) this._roles = data.roles;\n if (data.timeout !== undefined) this.timeout = data.timeout ? new Date(data.timeout) : null;\n if (data.can_publish !== undefined) this.canPublish = data.canPublish;\n if (data.can_recieve !== undefined) this.canRecieve = data.canRecieve;\n }\n\n /**\n * Get member role IDs\n */\n public get roleIds(): string[] {\n return this._roles;\n }\n\n /** Gets the global User object for this member */\n public get user(): User | undefined {\n return this.client.users.cache.get(this.id);\n }\n\n /** Gets the Server object this member belongs to */\n public get server(): Server | undefined {\n return this.client.servers.cache.get(this.serverId);\n }\n\n /** Calculates the member's total permissions using BigInt */\n public get permissions(): bigint {\n const server = this.server;\n if (!server) return 0n;\n\n let totalPerms = server.defaultPermissions ?? 0n;\n\n for (const role of this.roles.cache.values()) {\n totalPerms |= BigInt(role.permissions);\n }\n\n if (server.ownerId === this.id) {\n return PermissionFlags.GrantAllSafe;\n }\n\n return totalPerms;\n }\n\n /** Get avatar URL for this member, or null if they don't have one.\n * @example\n * // Get a member's avatar URL\n * const avatarURL = member.avatarURL;\n * console.log(avatarURL); // https://cdn.stoat.chat/attachments/avatars/1234567890/avatar.png\n */\n public get avatarURL(): string | null {\n if (!this.avatar) return null;\n return `${StoatCDN}/attachments/avatars/${this.avatar.id}/${this.avatar.filename}`;\n }\n\n /**\n * Ban this member from the server.\n * @param options The options for this ban\n * @example\n * // Ban a member with a reason and delete their messages from the last hour\n * await member.ban({ reason: \"Spamming\", deleteMessageSeconds: 3600 });\n */\n public async ban(options?: MemberBanOptions): Promise<void> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n await server.members.ban(this.id, options);\n }\n\n /**\n * Creates a DM channel between the client's user and this member.\n * @param force If true, forces the creation of a new DM channel even if one already exists.\n * @returns A promise that resolves to the created DMChannel object.\n * @throws {Error} If the API request fails.\n * @example\n * // Create a DM with this member\n * const dm = await member.createDM();\n * console.log(`DM channel ID: ${dm.id}`);\n */\n public async createDM(force: boolean = false): Promise<void> {\n await this.client.users.createDM(this.id, { force });\n }\n\n /**\n * Timeout this member for a specified duration.\n * @param duration The duration of the timeout in milliseconds.\n * @example\n * // Timeout a member for 10 minutes (600,000 milliseconds)\n * await member.setTimeout(600000);\n */\n public async setTimeout(duration: number): Promise<void> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n await server.members.setTimeout(this.id, duration);\n }\n\n /** Checks if the member has a specific permission */\n public hasPermission(permission: PermissionResolvable): boolean {\n return Permissions.has(this.permissions, permission);\n }\n\n /**\n * Edit this member.\n * @param options The options to edit the member with (nickname, roles, timeout, etc.)\n * @returns A promise that resolves to the updated Member.\n */\n public async edit(options: MemberEditOptions): Promise<this> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n return (await server.members.edit(this.id, options)) as this;\n }\n\n /**\n * Kick this member from the server.\n */\n public async kick(): Promise<void> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n await server.members.kick(this.id);\n }\n\n /** @internal */\n [util.inspect.custom](depth: number, options: util.InspectOptions, inspect: typeof util.inspect) {\n const { client, serverId, ...props } = this;\n return `${this.constructor.name} ${inspect(\n {\n ...props,\n user: this.user,\n permissions: this.permissions,\n },\n { ...options, depth: depth ?? options.depth },\n )}`;\n }\n}\n","import type { Member } from \"../structures/Member\";\nimport type { Role } from \"../structures/Role\";\nimport { Collection } from \"../utils/Collection\";\nimport type { RoleResolvable } from \"./RoleManager\";\n\nexport class MemberRoleManager {\n constructor(private member: Member) {}\n\n /**\n * Gets a Collection of the actual Role objects this member has.\n * This dynamically pulls from the Server's role cache so references are always up to date\n */\n public get cache(): Collection<string, Role> {\n const fetched = new Collection<string, Role>();\n const server = this.member.server;\n\n if (!server) return fetched;\n\n for (const roleId of this.member.roleIds) {\n const role = server.roles.cache.get(roleId);\n if (role) fetched.set(role.id, role);\n }\n\n return fetched;\n }\n\n /**\n * Checks if the member has a specific role.\n * @param role The RoleResolvable to check for.\n */\n public has(role: RoleResolvable): boolean {\n const server = this.member.server;\n if (!server) return false;\n\n const id = server.roles.resolveId(role);\n return this.member.roleIds.includes(id);\n }\n\n /**\n * Adds a role to the member.\n * @param role The RoleResolvable to add.\n * @returns A promise that resolves to the updated Member.\n */\n public async add(role: RoleResolvable): Promise<Member> {\n const server = this.member.server;\n if (!server) throw new Error(\"Server not cached, cannot add role.\");\n\n const id = server.roles.resolveId(role);\n\n if (this.member.roleIds.includes(id)) return this.member;\n\n const newRoles = [...this.member.roleIds, id];\n\n return this.member.edit({ roles: newRoles });\n }\n\n /**\n * Removes a role from the member.\n * @param role The RoleResolvable to remove.\n * @returns A promise that resolves to the updated Member.\n */\n public async remove(role: RoleResolvable): Promise<Member> {\n const server = this.member.server;\n if (!server) throw new Error(\"Server not cached, cannot remove role.\");\n\n const id = server.roles.resolveId(role);\n\n if (!this.member.roleIds.includes(id)) return this.member;\n\n const newRoles = this.member.roleIds.filter((rId) => rId !== id);\n\n return this.member.edit({ roles: newRoles });\n }\n\n /**\n * Overwrites all roles on the member with a completely new array.\n * @param roles An array of RoleResolvables.\n * @returns A promise that resolves to the updated Member.\n */\n public async set(roles: RoleResolvable[]): Promise<Member> {\n const server = this.member.server;\n if (!server) throw new Error(\"Server not cached, cannot set roles.\");\n\n const newRoles = roles.map((r) => server.roles.resolveId(r));\n\n return this.member.edit({ roles: newRoles });\n }\n}\n","export const StoatCDN = \"https://cdn.stoatusercontent.com\";\nexport const StoatAPI = \"https://stoat.chat/api\";\n","import { Member } from \"../structures/Member\";\nimport { Collection } from \"../utils/Collection\";\nimport type { Client } from \"../client/Client\";\nimport type { Server } from \"../structures/Server\";\nimport * as util from \"node:util\";\nimport { User } from \"../structures/User\";\nimport { BaseManager } from \"./BaseManager\";\n\nexport type MemberResolvable = Member | User | string;\n\nexport interface MemberEditOptions {\n nickname?: string | null;\n avatar?: string | null;\n roles?: string[];\n timeout?: string | null;\n}\n\nexport interface MemberBanOptions {\n reason?: string | null;\n deleteMessageSeconds?: number;\n}\n\nexport interface FetchMembersOptions {\n exclude_offline?: boolean;\n}\n\nexport class MemberManager extends BaseManager<string, Member> {\n constructor(\n client: Client,\n public server: Server,\n limit: number = Infinity,\n ) {\n super(client, limit);\n }\n\n /**\n * Tell BaseManager how to handle Revolt's Member IDs\n * @internal\n */\n protected extractId(data: any): string {\n return data.user_id ?? data.id ?? (typeof data._id === \"string\" ? data._id : data._id?.user);\n }\n\n /**\n * Tell BaseManager how to build a Member\n * @internal\n */\n protected construct(data: any): Member {\n if (!data.server_id && !data.serverId) {\n data.serverId = this.server.id;\n }\n return new Member(this.client, data);\n }\n\n /**\n * Resolve a string or mention to Member\n * @param member The MemberResolvable to resolve\n * @returns The resolved Member or undefined if not found\n */\n public resolve(member: MemberResolvable): Member | undefined {\n if (member instanceof Member) return member;\n if (member instanceof User) return this.cache.get(member.id);\n if (typeof member === \"string\") return this.cache.get(member.replace(/[<@>]/g, \"\"));\n return undefined;\n }\n\n /**\n * Resolve a Member to their ID string.\n * @param member The MemberResolvable to resolve\n * @returns The resolved ID string\n * @throws {TypeError} If the provided resolvable is invalid\n */\n public resolveId(member: MemberResolvable): string {\n if (typeof member === \"string\") return member.replace(/[<@>]/g, \"\");\n if (\"id\" in member) return member.id;\n throw new TypeError(\"Invalid MemberResolvable provided.\");\n }\n\n /**\n * Fetches a member from the server, or returns the cached version if available and not forced.\n * @param member The MemberResolvable to fetch\n * @param force Whether to bypass the cache and fetch fresh data from the API\n * @returns A promise that resolves to the fetched Member\n * @throws {Error} If the API request fails or the member is not found\n * @example\n * // Fetch a member by ID, using cache if available\n * const member = await server.members.fetch(\"1234567890\");\n *\n * // Fetch a member by mention, bypassing cache\n * const member = await server.members.fetch(\"<@1234567890>\", true);\n */\n public async fetch(member: MemberResolvable, force: boolean = false): Promise<Member> {\n if (!force) {\n const cached = this.resolve(member);\n if (cached) return cached;\n }\n\n const id = this.resolveId(member);\n const data = await this.client.rest.get(`/servers/${this.server.id}/members/${id}`);\n\n return this._add(data);\n }\n\n /**\n * Fetches multiple members from the server.\n * @param options Filter options for the fetch request.\n * @returns A promise that resolves to a Collection of fetched Members.\n * @throws {Error} If the API request fails.\n * @example\n * // Fetch all members in the server\n * const allMembers = await server.members.fetchMany();\n *\n * // Fetch only online members to save bandwidth\n * const onlineMembers = await server.members.fetchMany({ exclude_offline: true });\n */\n public async fetchMany(options: FetchMembersOptions = {}): Promise<Collection<string, Member>> {\n const params = new URLSearchParams();\n\n if (options.exclude_offline !== undefined) {\n params.append(\"exclude_offline\", options.exclude_offline.toString());\n }\n\n const queryString = params.toString();\n const endpoint = `/servers/${this.server.id}/members${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await this.client.rest.get(endpoint);\n\n if (data.users && Array.isArray(data.users)) {\n for (const userData of data.users) {\n this.client.users._add(userData);\n }\n }\n\n const fetched = new Collection<string, Member>();\n const rawMembers = data.members || (Array.isArray(data) ? data : []);\n\n for (const rawMember of rawMembers) {\n const member = this._add(rawMember);\n fetched.set(member.id, member);\n }\n\n return fetched;\n }\n\n /**\n * Edits a member in the server.\n * @param member The MemberResolvable to edit.\n * @param options The fields to update (nickname, roles, timeout, etc.).\n * @returns A promise that resolves to the updated Member.\n * @throws {Error} If the API request fails or the member is not found.\n * @example\n * // Change a member's nickname and add a role\n * const updatedMember = await server.members.edit(\"1234567890\", {\n * nickname: \"New Nickname\",\n * roles: [\"roleId1\", \"roleId2\"],\n * });\n */\n public async edit(member: MemberResolvable, options: MemberEditOptions): Promise<Member> {\n const id = this.resolveId(member);\n const payload: any = {};\n const remove: string[] = [];\n\n if (options.nickname !== undefined) {\n if (options.nickname === null) remove.push(\"Nickname\");\n else payload.nickname = options.nickname;\n }\n\n if (options.avatar !== undefined) {\n if (options.avatar === null) remove.push(\"Avatar\");\n else payload.avatar = options.avatar;\n }\n\n if (options.roles !== undefined) payload.roles = options.roles;\n if (options.timeout !== undefined) {\n if (options.timeout === null) remove.push(\"Timeout\");\n else payload.timeout = options.timeout;\n }\n\n if (remove.length > 0) payload.remove = remove;\n if (Object.keys(payload).length === 0) return this.fetch(id);\n\n const data = await this.client.rest.patch(`/servers/${this.server.id}/members/${id}`, payload);\n return this._add(data);\n }\n\n /**\n * Kicks a member from the server.\n * @param member The MemberResolvable to kick.\n * @example\n * // Kick a member by ID\n * await server.members.kick(\"1234567890\");\n */\n public async kick(member: MemberResolvable): Promise<void> {\n const id = this.resolveId(member);\n await this.client.rest.delete(`/servers/${this.server.id}/members/${id}`);\n this.cache.delete(id);\n }\n\n /**\n * Bans a member from the server.\n * @param member The MemberResolvable to ban.\n * @param options The ban options\n * @example\n * // Ban a member by ID\n * await server.members.ban(\"1234567890\", { reason: \"Spamming\", deleteMessageSeconds: 3600 });\n */\n public async ban(member: MemberResolvable, options?: MemberBanOptions): Promise<void> {\n const id = this.resolveId(member);\n const payload: any = {};\n\n if (options?.reason !== undefined) payload.reason = options.reason;\n if (options?.deleteMessageSeconds !== undefined) payload.delete_message_seconds = options.deleteMessageSeconds;\n\n await this.client.rest.put(`/servers/${this.server.id}/bans/${id}`, payload);\n this.cache.delete(id);\n }\n\n /**\n * Unbans a user from the server\n * @param member The MemberResolvable to unban\n * @example\n * // Unban a member by ID\n * await server.members.unban(\"1234567890\");\n */\n public async unban(member: MemberResolvable): Promise<void> {\n const id = this.resolveId(member);\n await this.client.rest.delete(`/servers/${this.server.id}/bans/${id}`);\n }\n\n /**\n * Timeouts a member in the server for a specified duration.\n * @param member The MemberResolvable to timeout\n * @param duration The duration of the timeout in milliseconds\n * @example\n * // Timeout a member for 10 minutes\n * await server.members.setTimeout(\"1234567890\", 10 * 60 * 1000);\n */\n public async setTimeout(member: MemberResolvable, duration: number): Promise<void> {\n const id = this.resolveId(member);\n\n await this.edit(id, { timeout: new Date(Date.now() + duration).toISOString() });\n }\n\n [util.inspect.custom]() {\n return this.cache;\n }\n}\n","import { Collection } from \"../utils/Collection\";\nimport type { BaseChannel, ChannelCreateOptions } from \"../structures/BaseChannel\";\nimport type { Server } from \"../structures/Server\";\nimport type { Client } from \"../client/Client\";\nimport * as util from \"node:util\";\n\nexport class ServerChannelManager {\n constructor(\n private client: Client,\n private server: Server,\n ) {}\n\n public get cache(): Collection<string, BaseChannel> {\n return this.client.channels.cache.filter((channel) => (channel as any).serverId === this.server.id);\n }\n\n /**\n * Creates a new channel within this server.\n * @param options The configuration for the new channel.\n * @returns The newly created Channel object.\n */\n public async create(options: ChannelCreateOptions): Promise<BaseChannel> {\n if (!options.name) throw new Error(\"A channel name must be provided.\");\n\n const payload: any = {\n name: options.name,\n type: options.type ?? \"Text\",\n description: options.description,\n nsfw: options.nsfw ?? false,\n };\n\n if (options.type === \"Voice\" && options.voice?.max_users) {\n payload.voice = { max_users: options.voice.max_users };\n }\n\n const data = await this.client.rest.post(`/servers/${this.server.id}/channels`, payload);\n\n return this.client.channels._add(data);\n }\n\n [util.inspect.custom]() {\n return this.cache;\n }\n}\n","import { Base } from \"./Base\";\nimport type { Client } from \"../client/Client\";\nimport type { Server } from \"./Server\";\nimport * as util from \"node:util\";\nimport { Permissions, type PermissionResolvable } from \"../utils/permissions\";\nimport type { RoleEditOptions, RolePermissionOptions } from \"../managers/RoleManager\";\n\nexport class Role extends Base {\n public serverId: string;\n public name!: string;\n public color: string | null = null;\n public hoist: boolean = false;\n public rank: number = 0;\n public permissions: bigint = 0n;\n\n constructor(client: Client, data: any, serverId: string) {\n super(client, data);\n this.serverId = serverId;\n this._patch(data);\n }\n\n /**\n * Updates the role instance with new data without losing the object reference.\n * @internal\n */\n public _patch(data: any) {\n if (data.name !== undefined) this.name = data.name;\n if (data.color !== undefined) this.color = data.color;\n if (data.hoist !== undefined) this.hoist = data.hoist;\n if (data.rank !== undefined) this.rank = data.rank;\n if (data.permissions !== undefined) {\n try {\n if (typeof data.permissions === \"object\" && data.permissions !== null) {\n const allowPerms = data.permissions.a ?? data.permissions[0] ?? 0;\n this.permissions = BigInt(allowPerms);\n } else {\n this.permissions = BigInt(data.permissions);\n }\n } catch {\n this.permissions = 0n;\n }\n }\n }\n\n /**\n * The server this role belongs to.\n * Pulls dynamically from the cache to prevent massive memory duplication.\n */\n public get server(): Server | undefined {\n return this.client.servers.cache.get(this.serverId);\n }\n\n /**\n * Checks whether this role has a specific permission.\n * @param permission The permission to check for.\n * @returns True if the role has the permission.\n */\n public hasPermission(permission: PermissionResolvable): boolean {\n return Permissions.has(this.permissions, permission);\n }\n\n /**\n * Fetches this role directly from the API to ensure data is up to date.\n * @param force Whether to skip the cache check and force a direct API request. Defaults to false.\n * @returns A promise that resolves to the fetched Role object.\n * @throws {TypeError} If an invalid RoleResolvable is provided.\n * @throws {Error} If the API request fails (e.g., the role does not exist).\n * @example\n * // Refresh the role's data from the API\n * await role.fetch();\n * console.log(`Role updated, current name: ${role.name}`);\n */\n public async fetch(force: boolean = true): Promise<this> {\n let server = this.server;\n\n if (!server) {\n server = await this.client.servers.fetch(this.serverId);\n }\n\n return (await server.roles.fetch(this.id, force)) as this;\n }\n\n /**\n * Edits the role with the given options. Only the fields provided in the options will be updated; all other fields will remain unchanged.\n * @param options The fields to update.\n * @returns A promise that resolves to the updated Role.\n * @throws {TypeError} If invalid options or RoleResolvable are provided.\n * @throws {Error} If the API request fails (e.g., lack of permissions).\n * @example\n * // Change the role's name and color\n * await role.edit({ name: \"Senior Admin\", colour: \"#FFD700\" });\n *\n * // Remove the custom color from the role\n * await role.edit({ colour: null });\n */\n public async edit(options: RoleEditOptions): Promise<this> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n return (await server.roles.edit(this.id, options)) as this;\n }\n\n /**\n * Deletes this Role from the server.\n * @throws {Error} If the role cannot be deleted (e.g., lack of permissions).\n * @example\n * // Delete a role by its ID\n * await role.delete();\n */\n public async delete(): Promise<void> {\n let server = this.server;\n\n if (!server) {\n server = await this.client.servers.fetch(this.serverId);\n }\n\n await server.roles.delete(this.id);\n }\n\n /**\n * Updates the permissions for this role.\n * @param options The allow and deny permissions to set.\n * @returns A promise that resolves to the updated Role object.\n * @throws {TypeError} If invalid options are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Grant the role permission to manage channels and send messages\n * await role.setPermissions({\n * allow: [\"ManageChannel\", \"SendMessage\"]\n * });\n */\n public async setPermissions(options: RolePermissionOptions): Promise<this> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n return (await server.roles.setPermissions(this.id, options)) as this;\n }\n\n /**\n * Updates the hierarchical position of this role.\n * Automatically reconstructs the role array and performs a bulk update.\n * @param newPosition The new rank/position for this role (0-indexed).\n * @returns A promise that resolves to this updated Role object.\n * @throws {Error} If API request fails.\n * @example\n * // Move this role to position 2 in the hierarchy\n * await role.setPosition(2);\n * console.log(`Role moved to rank: ${role.rank}`);\n */\n public async setPosition(newPosition: number): Promise<this> {\n let server = this.server;\n if (!server) server = await this.client.servers.fetch(this.serverId);\n\n const sortedRoles = Array.from(server.roles.cache.values()).sort((a, b) => a.rank - b.rank);\n\n const filteredRoles = sortedRoles.filter((r) => r.id !== this.id);\n\n const clampedPosition = Math.max(0, Math.min(newPosition, filteredRoles.length));\n\n filteredRoles.splice(clampedPosition, 0, this);\n\n await server.roles.setRanks(filteredRoles);\n\n return this;\n }\n\n /**\n * Customizer for Node.js `console.log` and `util.inspect`.\n * Hides the cyclic client reference and raw serverId for a cleaner output.\n * @internal\n */\n [util.inspect.custom]() {\n const { client, serverId, ...props } = this;\n return `${this.constructor.name} ${util.inspect(props)}`;\n }\n}\n","import { Role } from \"../structures/Role\";\nimport type { Server } from \"../structures/Server\";\nimport type { Client } from \"../client/Client\";\nimport * as util from \"node:util\";\nimport { PermissionResolvable, Permissions } from \"../utils/permissions\";\nimport { BaseManager } from \"./BaseManager\";\n\nexport interface RoleCreateOptions {\n name: string;\n}\n\nexport interface RoleEditOptions {\n name?: string;\n colour?: string | null;\n hoist?: boolean;\n}\n\nexport interface RolePermissionOptions {\n allow?: PermissionResolvable;\n deny?: PermissionResolvable;\n}\n\nexport type RoleResolvable = Role | string;\n\nexport class RoleManager extends BaseManager<string, Role> {\n /**\n * Manages API methods and caching for server roles.\n */\n constructor(\n client: Client,\n private server: Server,\n limit: number = Infinity,\n ) {\n super(client, limit);\n }\n\n /**\n * Tell BaseManager how to find the ID for Roles\n */\n protected extractId(data: any): string {\n return data._id ?? data.id;\n }\n\n /**\n * Tell BaseManager how to build a Role\n */\n protected construct(data: any): Role {\n return new Role(this.client, data, this.server.id);\n }\n\n /**\n * Adds or updates a role in the local cache.\n * @internal\n * @param data The raw role data from the API.\n * @param idParam An optional ID parameter if the payload wraps the role object.\n * @returns The newly created or updated Role object.\n */\n public override _add(data: any, idParam?: string): Role {\n const id = idParam ?? data._id ?? data.id;\n const existing = this.cache.get(id);\n\n if (existing) {\n existing._patch(data);\n return existing;\n }\n\n const role = new Role(this.client, data, this.server.id);\n this.cache.set(role.id, role);\n return role;\n }\n\n [util.inspect.custom]() {\n return this.cache;\n }\n\n /**\n * Resolves a RoleResolvable to a Role object from the cache.\n * @param role The RoleResolvable to resolve.\n * @returns The resolved Role object, or undefined if not found.\n */\n public resolve(role: RoleResolvable): Role | undefined {\n if (role instanceof Role) return role;\n\n if (typeof role === \"string\") {\n const id = role.replace(/[<%>]/g, \"\");\n return this.cache.get(id);\n }\n\n return undefined;\n }\n\n /**\n * Extracts ID from a RoleResolvable.\n * @param role The RoleResolvable to extract the ID from.\n * @returns The extracted role ID.\n * @throws TypeError if an invalid type is provided.\n */\n public resolveId(role: RoleResolvable): string {\n if (role instanceof Role) {\n return role.id;\n }\n\n if (typeof role === \"string\") {\n return role.replace(/[<%>]/g, \"\");\n }\n\n throw new TypeError(\"Invalid RoleResolvable provided. Expected a Role object or a string ID/Mention.\");\n }\n\n /**\n * Creates a new role in this server.\n * @param options The name and optional rank of the new role\n * @returns Role The role that was created\n * @throws {Error} If the role cannot be created (e.g., lack of permissions, invalid options).\n * @throws {TypeError} If invalid options are provided.\n * @example\n * // Create a new role named \"Moderator\" with rank 1\n * const moderatorRole = await server.roles.create({ name: \"Moderator\", rank: 1 });\n * console.log(`Created role: ${moderatorRole.name} with ID: ${moderatorRole.id}`);\n */\n public async create(options: RoleCreateOptions): Promise<Role> {\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"RoleCreateOptions must be a valid object.\");\n }\n\n if (typeof options.name !== \"string\" || options.name.trim().length === 0) {\n throw new TypeError(\"A valid role 'name' (string) must be provided.\");\n }\n\n const payload: any = {\n name: options.name,\n };\n\n const data = await this.client.rest.post(`/servers/${this.server.id}/roles`, payload);\n\n return this._add(data);\n }\n\n /**\n * Fetches a Role from the API or resolves it from the local cache.\n * @param role The ID, mention, or Role object to fetch.\n * @param force Whether to skip the cache check and force a direct API request. Defaults to false.\n * @returns A promise that resolves to the fetched Role object.\n * @throws {TypeError} If an invalid RoleResolvable is provided.\n * @throws {Error} If the API request fails (e.g., the role does not exist).\n * @example\n * // Fetch a role from the API\n * const role = await server.roles.fetch(\"01JE2MM759J5D7CHJF084R7MJ2\");\n * console.log(`Fetched role: ${role.name} with ID: ${role.id}`);\n *\n * // Fetch a role by mention\n * const role = await.server.roles.fetch(\"<%01JE2MM759J5D7CHJF084R7MJ2>\");\n * console.log(`Fetched role: ${role.name} with ID: ${role.id}`);\n *\n * // Force fetch a role, bypassing the cache\n * const role = await server.roles.fetch(\"01JE2MM759J5D7CHJF084R7MJ2\", true);\n * console.log(`Fetched role: ${role.name} with ID: ${role.id}`);\n */\n public async fetch(role: RoleResolvable, force: boolean = false): Promise<Role> {\n if (!force) {\n const cached = this.resolve(role);\n if (cached) return cached;\n }\n\n const id = this.resolveId(role);\n\n const data = await this.client.rest.get(`/servers/${this.server.id}/roles/${id}`);\n\n return this._add(data);\n }\n\n /**\n * Edits an existing role in the server.\n * @param role The RoleResolvable to edit.\n * @param options The fields to update.\n * @returns A promise that resolves to the updated Role.\n * @throws {TypeError} If invalid options or RoleResolvable are provided.\n * @throws {Error} If the API request fails (e.g., lack of permissions).\n * @example\n * // Rename a role and give it a red color\n * await server.roles.edit(\"01H...\", { name: \"Super Admin\", colour: \"#FF0000\" });\n *\n * // Remove the custom color from a role\n * await server.roles.edit(role, { colour: null });\n */\n public async edit(role: RoleResolvable, options: RoleEditOptions): Promise<Role> {\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"RoleEditOptions must be a valid object.\");\n }\n\n const id = this.resolveId(role);\n const payload: any = {};\n const remove: string[] = [];\n\n if (options.name !== undefined) payload.name = options.name;\n if (options.hoist !== undefined) payload.hoist = options.hoist;\n\n // 3. Handle the \"Remove\" magic for colors\n if (options.colour !== undefined) {\n if (options.colour === null) {\n remove.push(\"Colour\");\n } else {\n payload.colour = options.colour;\n }\n }\n\n if (remove.length > 0) {\n payload.remove = remove;\n }\n\n if (Object.keys(payload).length === 0) {\n return this.fetch(id);\n }\n\n const data = await this.client.rest.patch(`/servers/${this.server.id}/roles/${id}`, payload);\n\n return this._add(data, id);\n }\n\n /**\n * Deletes a Role from the server.\n * @param role The RoleResolvable to delete\n * @returns A promise that resolves when the role is successfully deleted.\n * @throws {TypeError} If an invalid RoleResolvable is provided.\n * @throws {Error} If the role cannot be deleted (e.g., lack of permissions).\n * @example\n * // Delete a role by its ID\n * await server.roles.delete(\"01JE2MM759J5D7CHJF084R7MJ2\");\n * console.log(\"Role deleted successfully.\");\n *\n * // Delete a role using a Role object\n * const role = await server.roles.fetch(\"01JE2MM759J5D7CHJF084R7\");\n * await server.roles.delete(role);\n * console.log(\"Role deleted successfully.\");\n *\n * // Delete a role by mention\n * await server.roles.delete(\"<%01JE2MM759J5D7CHJF084R7MJ2>\");\n * console.log(\"Role deleted successfully.\");\n */\n public async delete(role: RoleResolvable): Promise<void> {\n const id = this.resolveId(role);\n\n await this.client.rest.delete(`/servers/${this.server.id}/roles/${id}`);\n\n this.cache.delete(id);\n }\n\n /**\n * Updates the permissions for a role in the server.\n * @param role The RoleResolvable to update permissions for.\n * @param options The allow and deny permissions to set.\n * @returns A promise that resolves to the updated Role.\n * @throws {TypeError} If an invalid RoleResolvable or options are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Set permissions using an array of strings.\n * await server.roles.setPermissions(role, {\n * allow: [\"ManageChannel\", \"ViewChannel\", \"SendMessage\"]\n * });\n */\n public async setPermissions(role: RoleResolvable, options: RolePermissionOptions): Promise<Role> {\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"RolePermissionOptions must be a valid object.\");\n }\n\n const id = this.resolveId(role);\n\n const allowBigInt = options.allow !== undefined ? Permissions.resolve(options.allow) : 0n;\n const denyBigInt = options.deny !== undefined ? Permissions.resolve(options.deny) : 0n;\n\n const payload = {\n permissions: {\n allow: Number(allowBigInt),\n deny: Number(denyBigInt),\n },\n };\n\n const data = await this.client.rest.put(`/servers/${this.server.id}/permissions/${id}`, payload);\n\n // The fucking API returns a Server object\n this.server._patch(data);\n\n // So we turn it into a role to improve DX\n return this.cache.get(id) as Role;\n }\n\n /**\n * Updates the hierarchical positions of roles in the server.\n * @param ranks An array of RoleResolvables representing the new order of roles.\n * @returns A promise that resolves when the ranks are successfully updated.\n * @throws {TypeError} If the ranks parameter is not an array or contains invalid resolvables.\n * @throws {Error} If the API request fails.\n * @example\n * // Reorder roles by passing an array of Role objects or IDs\n * await server.roles.setRanks([\"RoleID_1\", adminRoleObject, \"RoleID_3\"]);\n */\n public async setRanks(ranks: RoleResolvable[]): Promise<Server> {\n if (!Array.isArray(ranks)) {\n throw new TypeError(\"The 'ranks' parameter must be an array of RoleResolvables.\");\n }\n\n const mappedIds = ranks.map((role) => this.resolveId(role));\n\n const payload = {\n ranks: mappedIds,\n };\n\n const data = await this.client.rest.put(`/servers/${this.server.id}/roles`, payload);\n\n this.server._patch(data);\n\n return this.server;\n }\n}\n","export class ServerInvite {\n public code: string;\n public creatorId: string;\n public channelId: string;\n\n constructor(data: any) {\n this.code = data._id ?? data.code;\n this.creatorId = data.creator;\n this.channelId = data.channel;\n }\n\n public _patch(data: any) {\n this.creatorId = data.creator ?? this.creatorId;\n this.channelId = data.channel ?? this.channelId;\n }\n}\n","import type { Server } from \"../structures/Server\";\nimport type { Client } from \"../client/Client\";\nimport { Collection } from \"../utils/Collection\";\nimport { ServerInvite } from \"../structures/ServerInvite\";\nimport { BaseManager } from \"./BaseManager\";\n\nexport interface Invite {\n code: string;\n creatorId: string;\n channelId: string;\n}\n\nexport class ServerInviteManager extends BaseManager<string, ServerInvite> {\n constructor(\n client: Client,\n public server: Server,\n limit: number = Infinity,\n ) {\n super(client, limit);\n }\n\n protected extractId(data: any): string {\n return data._id ?? data.code;\n }\n\n protected construct(data: any): ServerInvite {\n return new ServerInvite(data);\n }\n\n /**\n * Fetches all active invites for this server.\n */\n public async fetch(): Promise<Collection<string, ServerInvite>> {\n const data = await this.client.rest.get(`/servers/${this.server.id}/invites`);\n\n const rawInvites = Array.isArray(data) ? data : [];\n const fetched = new Collection<string, ServerInvite>();\n\n for (const raw of rawInvites) {\n const invite = this._add(raw);\n fetched.set(invite.code, invite);\n }\n\n return fetched;\n }\n}\n","export class ServerBan {\n public userId: string;\n public reason: string | null;\n\n constructor(data: any) {\n this.userId = data._id?.user ?? data.id;\n this.reason = data.reason ?? null;\n }\n\n public _patch(data: any) {\n if (data.reason !== undefined) this.reason = data.reason;\n }\n}\n","import type { Server } from \"../structures/Server\";\nimport type { Client } from \"../client/Client\";\nimport { Collection } from \"../utils/Collection\";\nimport { BaseManager } from \"./BaseManager\";\nimport { ServerBan } from \"../structures/ServerBan\";\n\nexport interface Ban {\n userId: string;\n reason: string | null;\n}\n\nexport class ServerBanManager extends BaseManager<string, ServerBan> {\n constructor(\n client: Client,\n public server: Server,\n limit: number = Infinity,\n ) {\n super(client, limit);\n }\n\n protected extractId(data: any): string {\n return data._id?.user ?? data.id;\n }\n\n protected construct(data: any): ServerBan {\n return new ServerBan(data);\n }\n\n /**\n * Fetches all bans in this server.\n * Automatically caches the associated User objects globally!\n * @returns A promise that resolves to a Collection of Bans.\n */\n public async fetch(): Promise<Collection<string, ServerBan>> {\n const data = await this.client.rest.get(`/servers/${this.server.id}/bans`);\n\n // Cache associated users globally\n if (data.users && Array.isArray(data.users)) {\n for (const userData of data.users) {\n this.client.users._add(userData);\n }\n }\n\n const rawBans = data.bans || (Array.isArray(data) ? data : []);\n const fetched = new Collection<string, ServerBan>();\n\n for (const rawBan of rawBans) {\n const ban = this._add(rawBan);\n fetched.set(ban.userId, ban);\n }\n\n return fetched;\n }\n\n /**\n * Unbans a user from the server.\n * @param userId The ID of the user to unban.\n */\n public async remove(userId: string): Promise<void> {\n const id = userId.replace(/[<@!>]/g, \"\"); // Clean the ID just in case\n await this.client.rest.delete(`/servers/${this.server.id}/bans/${id}`);\n this.cache.delete(id);\n }\n}\n","import { Base } from \"./Base\";\nimport type { Client } from \"../client/Client\";\nimport { FetchMembersOptions, MemberManager } from \"../managers/MemberManager\";\nimport { ServerChannelManager } from \"../managers/ServerChannelManager\";\nimport { Attachment } from \"./Attachment\";\nimport { RoleManager } from \"../managers/RoleManager\";\nimport { ServerInviteManager } from \"../managers/ServerInviteManager\";\nimport { ServerBanManager } from \"../managers/ServerBanManager\";\nimport { ServerEditOptions } from \"../managers/ServerManager\";\n\nexport interface Categories {\n channels: string[];\n id: string;\n title: string;\n}\n\nexport class Server extends Base {\n public channelIds: string[] = [];\n public defaultPermissions!: bigint;\n public name!: string;\n public ownerId!: string;\n public analytics: boolean = false;\n public banner: Attachment | null = null;\n public categories: Categories[] = [];\n public description: string | null = null;\n public discoverable: boolean = false;\n public flags: number = 0;\n public icon: Attachment | null = null;\n public nsfw: boolean = false;\n public members: MemberManager;\n public channels: ServerChannelManager;\n public roles: RoleManager;\n public bans: ServerBanManager;\n public invites: ServerInviteManager;\n\n constructor(client: Client, data: any) {\n super(client, data);\n this.channels = new ServerChannelManager(client, this);\n this.members = new MemberManager(client, this);\n this.roles = new RoleManager(client, this);\n this.bans = new ServerBanManager(this.client, this);\n this.invites = new ServerInviteManager(this.client, this);\n this._patch(data);\n }\n\n /**\n * Updates the server instance with new data without losing the object reference.\n */\n public _patch(data: any, clear?: string[]) {\n if (data.channels !== undefined) this.channelIds = data.channels;\n if (data.default_permissions !== undefined) {\n try {\n this.defaultPermissions = BigInt(data.default_permissions);\n } catch {\n this.defaultPermissions = 0n;\n }\n }\n if (data.name !== undefined) this.name = data.name;\n if (data.owner !== undefined) this.ownerId = data.owner;\n if (data.analytics !== undefined) this.analytics = data.analytics;\n if (data.categories !== undefined) this.categories = data.categories;\n if (data.description !== undefined) this.description = data.description;\n if (data.discoverable !== undefined) this.discoverable = data.discoverable;\n if (data.flags !== undefined) this.flags = data.flags;\n if (data.nsfw !== undefined) this.nsfw = data.nsfw;\n if (data.icon !== undefined) {\n this.icon = data.icon ? new Attachment(this.client, data.icon) : null;\n }\n if (data.banner !== undefined) {\n this.banner = data.banner ? new Attachment(this.client, data.banner) : null;\n }\n if (data.roles !== undefined) {\n for (const [id, roleData] of Object.entries(data.roles)) {\n this.roles._add({ id, ...(roleData as any) });\n }\n }\n\n if (clear && Array.isArray(clear)) {\n for (const field of clear) {\n switch (field) {\n case \"Description\":\n this.description = null;\n break;\n case \"Icon\":\n this.icon = null;\n break;\n }\n }\n }\n }\n\n /**\n * Edits this server.\n * @param options The fields to update.\n */\n public async edit(options: ServerEditOptions): Promise<this> {\n await this.client.servers.edit(this.id, options);\n return this;\n }\n\n /**\n * Leaves the server\n */\n public async leave() {\n return this.client.rest.delete(`/servers/${this.id}/leave`);\n }\n\n /**\n * Fetches multiple members from this server.\n * @param options Filter options for the fetch request.\n * @returns A Collection of the fetched members.\n */\n public async fetchMembers(options?: FetchMembersOptions) {\n return this.members.fetchMany(options);\n }\n}\n","import { BaseManager } from \"./BaseManager\";\nimport { Server } from \"../structures/Server\";\nimport type { Client } from \"../client/Client\";\nimport * as util from \"node:util\";\n\nexport interface ServerEditOptions {\n name?: string;\n description?: string | null;\n icon?: string | null;\n banner?: string | null;\n categories?: {\n id: string;\n title: string;\n channels: string[];\n }[];\n systemMessages?: {\n userJoined?: string | null;\n userLeft?: string | null;\n userKicked?: string | null;\n userBanned?: string | null;\n };\n analytics?: boolean;\n owner?: string;\n}\n\nexport class ServerManager extends BaseManager<string, Server> {\n constructor(client: Client, limit: number = Infinity) {\n super(client, limit);\n }\n\n /**\n * Tell BaseManager how to find the ID for Servers\n */\n protected extractId(data: any): string {\n return data._id ?? data.id;\n }\n\n /**\n * Tell BaseManager how to build a Server\n */\n protected construct(data: any): Server {\n return new Server(this.client, data);\n }\n\n /**\n * Fetches a server from the API.\n * @param id The server ID.\n * @param force Whether to skip the cache and fetch from the API.\n */\n public async fetch(id: string, force: boolean = false): Promise<Server> {\n if (!force) {\n const cached = this.cache.get(id);\n if (cached) return cached;\n }\n\n const data = await this.client.rest.get(`/servers/${id}`);\n return this._add(data);\n }\n\n public async edit(serverId: string, options: ServerEditOptions): Promise<Server> {\n const payload: any = {};\n const remove: string[] = [];\n\n if (options.name !== undefined) payload.name = options.name;\n if (options.description !== undefined) {\n if (options.description === null) remove.push(\"Description\");\n else payload.description = options.description;\n }\n\n if (options.icon !== undefined) {\n if (options.icon === null) remove.push(\"Icon\");\n else payload.icon = options.icon;\n }\n if (options.banner !== undefined) {\n if (options.banner === null) remove.push(\"Banner\");\n else payload.banner = options.banner;\n }\n\n // System Messages\n if (options.systemMessages) {\n payload.system_messages = {};\n const sm = options.systemMessages;\n if (sm.userJoined !== undefined) {\n if (sm.userJoined === null) remove.push(\"SystemMessageUserJoined\");\n else payload.system_messages.user_joined = sm.userJoined;\n }\n if (sm.userLeft !== undefined) {\n if (sm.userLeft === null) remove.push(\"SystemMessageUserLeft\");\n else payload.system_messages.user_left = sm.userLeft;\n }\n if (sm.userKicked !== undefined) {\n if (sm.userKicked === null) remove.push(\"SystemMessageUserKicked\");\n else payload.system_messages.user_kicked = sm.userKicked;\n }\n if (sm.userBanned !== undefined) {\n if (sm.userBanned === null) remove.push(\"SystemMessageUserBanned\");\n else payload.system_messages.user_banned = sm.userBanned;\n }\n }\n\n if (options.categories !== undefined) payload.categories = options.categories;\n if (options.analytics !== undefined) payload.analytics = options.analytics;\n if (options.owner !== undefined) payload.owner = options.owner;\n\n if (remove.length > 0) payload.remove = remove;\n\n const data = await this.client.rest.patch(`/servers/${serverId}`, payload);\n\n // Using _add ensures the existing Server object is patched!\n return this._add(data);\n }\n\n [util.inspect.custom]() {\n return this.cache;\n }\n}\n","import { User, UserProfile, UserStatus } from \"../structures/User\";\nimport type { Client } from \"../client/Client\";\nimport { BaseManager } from \"./BaseManager\";\nimport { DMChannel } from \"../structures/DMChannel\";\nexport type UserResolvable = User | string;\n\nexport interface UserEditOptions {\n avatar?: string | null;\n displayName?: string | null;\n profile?: UserProfile;\n status?: UserStatus;\n}\n\nexport class UserManager extends BaseManager<string, User> {\n constructor(client: Client, limit: number = Infinity) {\n super(client, limit);\n }\n\n /**\n * Tell BaseManager how to find the ID for Users\n */\n protected extractId(data: any): string {\n return data._id ?? data.id;\n }\n\n /**\n * Tell BaseManager how to build a User\n */\n protected construct(data: any): User {\n return new User(this.client, data);\n }\n\n /**\n * Resolves a UserResolvable to a User object from the cache.\n */\n public resolve(user: UserResolvable): User | undefined {\n if (user instanceof User) return user;\n\n if (typeof user === \"string\") {\n const id = user.replace(/[<@>]/g, \"\");\n return this.cache.get(id);\n }\n\n return undefined;\n }\n\n /**\n * Extracts ID from a UserResolvable.\n * @param user The UserResolvable to extract the ID from.\n * @returns The extracted user ID.\n * @throws TypeError if an invalid type is provided.\n */\n public resolveId(user: UserResolvable): string {\n if (user instanceof User) {\n return user.id;\n }\n\n if (typeof user === \"string\") {\n return user.replace(/[<@>]/g, \"\");\n }\n\n throw new TypeError(\"Invalid UserResolvable provided. Expected a User object or a string ID/Mention.\");\n }\n\n /**\n * Fetches a User.\n * @param user The ID or mention to fetch\n * @param force Skip the cache check and force an API request\n * @returns The fetched User object\n * @throws Error if the user cannot be found or fetched\n * @throws TypeError if invalid UserResolvable is provided\n * @example\n * // Fetch a user by ID\n * const user = await client.users.fetch(\"01JE2MM759J5D7CHJF084R7MJ2\");\n * console.log(user.username);\n *\n * // Fetch a user by mention\n * const user = await client.users.fetch(\"<@01JE2MM759J5D7CHJF084R7MJ2>\");\n * console.log(user.username);\n *\n * // Force fetch a user, bypassing the cache\n * const user = await client.users.fetch(\"01JE2MM759J5D7CHJF084R7MJ2\", true);\n * console.log(user.username);\n */\n public async fetch(user: UserResolvable, force: boolean = false): Promise<User> {\n if (!force) {\n const cached = this.resolve(user);\n if (cached) return cached;\n }\n\n const id = this.resolveId(user);\n\n const data = await this.client.rest.get(`/users/${id}`);\n\n return this._add(data);\n }\n\n /**\n * Fetch the current user (the bot itself).\n * @returns The fetched User object representing the current user.\n * @throws Error if the user cannot be fetched.\n * @example\n * // Fetch the current user (the bot itself)\n * const me = await client.users.fetchMe();\n * console.log(`Logged in as ${me.tag}`);\n */\n public async fetchMe() {\n const data = await this.client.rest.get(`/users/@me`);\n\n return this._add(data);\n }\n\n /**\n * Edits the currently authenticated user (the bot itself).\n * @param options The fields to update (avatar, status, profile, etc.).\n * @returns A promise that resolves to the updated User object.\n * @throws {TypeError} If invalid options are provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Update the bot's status and presence\n * await client.users.editMe({\n * status: { text: \"Watching the server\", presence: \"Online\" }\n * });\n *\n * // Clear the bot's avatar and display name\n * await client.users.editMe({ avatar: null, displayName: null });\n */\n public async editMe(options: UserEditOptions): Promise<User> {\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"UserEditOptions must be a valid object.\");\n }\n\n const payload: any = {};\n const remove: string[] = [];\n\n if (options.displayName !== undefined) {\n if (options.displayName === null) remove.push(\"DisplayName\");\n else payload.display_name = options.displayName;\n }\n\n if (options.avatar !== undefined) {\n if (options.avatar === null) remove.push(\"Avatar\");\n else payload.avatar = options.avatar;\n }\n\n if (options.profile !== undefined) {\n payload.profile = {};\n if (options.profile.content !== undefined) {\n if (options.profile.content === null) remove.push(\"ProfileContent\");\n else payload.profile.content = options.profile.content;\n }\n if (options.profile.background !== undefined) {\n if (options.profile.background === null) remove.push(\"ProfileBackground\");\n else payload.profile.background = options.profile.background;\n }\n if (Object.keys(payload.profile).length === 0) delete payload.profile;\n }\n\n if (options.status !== undefined) {\n payload.status = {};\n if (options.status.text !== undefined) {\n if (options.status.text === null) remove.push(\"StatusText\");\n else payload.status.text = options.status.text;\n }\n if (options.status.presence !== undefined) {\n if (options.status.presence === null) remove.push(\"StatusPresence\");\n else payload.status.presence = options.status.presence;\n }\n if (Object.keys(payload.status).length === 0) delete payload.status;\n }\n\n if (remove.length > 0) {\n payload.remove = remove;\n }\n\n if (Object.keys(payload).length === 0) {\n return this.fetch(\"@me\");\n }\n\n const data = await this.client.rest.patch(`/users/@me`, payload);\n\n return this._add(data);\n }\n\n /**\n * The DM between the client's user and a user\n *\n * @param {string} userId The user id\n * @returns {?DMChannel}\n * @private\n */\n dmChannel(userId: string): DMChannel | null {\n return (this.client.channels.cache.find((channel) => channel.isDM() && channel.recipients.includes(userId)) ??\n null) as DMChannel | null;\n }\n\n /**\n * Creates a DM channel between the client's user and another user.\n * @param user The UserResolvable to create a DM with.\n * @param options Additional options for DM creation.\n * @param options.force If true, forces the creation of a new DM channel even if one already exists.\n * @returns A promise that resolves to the created DMChannel object.\n * @throws {TypeError} If an invalid UserResolvable is provided.\n * @throws {Error} If the API request fails.\n * @example\n * // Create a DM with a user by ID\n * const dm = await client.users.createDM(\"1234567890\");\n * console.log(`DM channel ID: ${dm.id}`);\n */\n public async createDM(user: UserResolvable, { force = false } = {}): Promise<DMChannel> {\n const id = this.resolveId(user);\n\n if (!force) {\n const dmChannel = this.dmChannel(id);\n if (dmChannel) return dmChannel;\n }\n\n const data = await this.client.rest.get(`/users/${id}/dm`);\n return this.client.channels._add(data) as DMChannel;\n }\n}\n","// src/managers/SweeperManager.ts\nimport type { Client } from \"../client/Client\";\nimport type { TextChannel } from \"../structures/TextChannel\";\n\nexport interface SweeperOptions {\n messages?: {\n lifetime: number;\n interval: number;\n };\n}\n\nexport class SweeperManager {\n private messageInterval: NodeJS.Timeout | null = null;\n\n constructor(\n private client: Client,\n private options: SweeperOptions,\n ) {}\n\n public start() {\n if (this.options.messages) {\n this.client.emit(\"debug\", \"Starting Message Cache Sweeper...\");\n\n this.messageInterval = setInterval(() => {\n this.sweepMessages();\n }, this.options.messages.interval);\n }\n }\n\n private sweepMessages() {\n if (!this.options.messages) return;\n\n const now = Date.now();\n const lifetime = this.options.messages.lifetime;\n let sweptCount = 0;\n\n for (const channel of this.client.channels.cache.values()) {\n if (!(\"messages\" in channel)) continue;\n\n const textChannel = channel as TextChannel;\n\n for (const [id, message] of textChannel.messages.cache.entries()) {\n if (now - message.cachedAt > lifetime) {\n textChannel.messages.cache.delete(id);\n sweptCount++;\n }\n }\n }\n\n if (sweptCount > 0) {\n this.client.emit(\"debug\", `🧹 Sweeper cleared ${sweptCount} old messages from cache.`);\n }\n }\n\n public stop() {\n if (this.messageInterval) clearInterval(this.messageInterval);\n this.client.emit(\"debug\", \"Sweepers stopped.\");\n }\n}\n","export interface TextEmbedData {\n type: \"Text\";\n title?: string;\n description?: string;\n url?: string;\n icon_url?: string;\n colour?: string;\n media?: string;\n}\n\nexport class EmbedBuilder {\n private data: TextEmbedData;\n\n constructor(data: Partial<TextEmbedData> = {}) {\n this.data = { type: \"Text\", ...data };\n }\n\n public setTitle(title: string): this {\n this.data.title = title;\n return this;\n }\n\n public setDescription(description: string): this {\n this.data.description = description;\n return this;\n }\n\n public setUrl(url: string): this {\n this.data.url = url;\n return this;\n }\n\n public setIconUrl(iconUrl: string): this {\n this.data.icon_url = iconUrl;\n return this;\n }\n\n public setColor(color: string): this {\n this.data.colour = color;\n return this;\n }\n\n public setMedia(fileId: string): this {\n this.data.media = fileId;\n return this;\n }\n\n /**\n * Serializes the builder into the raw JSON required by the API\n */\n public toJSON(): TextEmbedData {\n return { ...this.data };\n }\n}\n"],"mappings":"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","names":["inspect","UserRelationship","UserPresence","util","ChannelType","util","inspect","util","inspect","util","util","util","util","util"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stoatx/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A client library for the Stoatx command handler, providing utilities and integrations for building command-based applications within the Stoat ecosystem.",
|
|
6
6
|
"repository": {
|
|
@@ -35,15 +35,11 @@
|
|
|
35
35
|
"ws": "^8.16.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@types/
|
|
39
|
-
"@types/ws": "^8.5.0",
|
|
40
|
-
"prettier": "^3.8.1",
|
|
41
|
-
"tsup": "^8.0.0",
|
|
42
|
-
"typescript": "^5.0.0"
|
|
38
|
+
"@types/ws": "^8.5.0"
|
|
43
39
|
},
|
|
44
40
|
"scripts": {
|
|
45
|
-
"build": "tsup
|
|
46
|
-
"dev": "tsup
|
|
41
|
+
"build": "tsup",
|
|
42
|
+
"dev": "tsup --watch",
|
|
47
43
|
"lint": "eslint src/**/*.ts"
|
|
48
44
|
}
|
|
49
45
|
}
|