diff --git a/vendor/better-sqlite3 b/vendor/better-sqlite3
new file mode 160000
index 0000000..7fa2365
--- /dev/null
+++ b/vendor/better-sqlite3
@@ -0,0 +1 @@
+Subproject commit 7fa236543297bb3e01d84f8fcf0b8a068d6bc9ab
diff --git a/vendor/discord-video-stream b/vendor/discord-video-stream
new file mode 160000
index 0000000..f2b18ce
--- /dev/null
+++ b/vendor/discord-video-stream
@@ -0,0 +1 @@
+Subproject commit f2b18cec7490743ec94a2c72f4e3e78541b6fc51
diff --git a/vendor/discord-video-stream/.github/workflows/biome.yml b/vendor/discord-video-stream/.github/workflows/biome.yml
deleted file mode 100644
index 345cf45..0000000
--- a/vendor/discord-video-stream/.github/workflows/biome.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: Biome Lint & Format Check
-
-on:
- push:
- pull_request:
-
-jobs:
- quality:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Setup Biome
- uses: biomejs/setup-biome@v2
- with:
- version: 2.3.8
- - name: Run Biome
- run: biome ci .
diff --git a/vendor/discord-video-stream/.github/workflows/publish_prerelease.yml b/vendor/discord-video-stream/.github/workflows/publish_prerelease.yml
deleted file mode 100644
index b2af53c..0000000
--- a/vendor/discord-video-stream/.github/workflows/publish_prerelease.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: Publish pkg.pr.new
-on: [push, pull_request]
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install pnpm
- uses: pnpm/action-setup@v4
- with:
- version: 9
-
- - name: Install Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 22
- cache: "pnpm"
-
- - name: Install dependencies
- run: pnpm install
-
- - name: Build
- run: pnpm build
-
- - name: Publish
- run: pnpx pkg-pr-new publish
diff --git a/vendor/discord-video-stream/.gitignore b/vendor/discord-video-stream/.gitignore
deleted file mode 100644
index e3a5c08..0000000
--- a/vendor/discord-video-stream/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-node_modules
-dist
-package-lock.json
-#example/src/config.json
-examples/*/node_modules
-examples/*/dist
\ No newline at end of file
diff --git a/vendor/discord-video-stream/PERFORMANCE.md b/vendor/discord-video-stream/PERFORMANCE.md
deleted file mode 100644
index 1839fd9..0000000
--- a/vendor/discord-video-stream/PERFORMANCE.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# Performance related tweaks
-
-## `ultrafast` shouldn't be used for x264/5
-
-In our testing, the `ultrafast` preset produces a lot of bitrate spikes, causing the stream to stutter. `superfast` and below seems to keep it under control pretty well. Do not use `ultrafast`. Previous versions of the library has `ultrafast` as the default, which has been changed after the testing.
-
-## Transport encryption methods
-
-> [!NOTE]
-> This is no longer accurate as of [#195](https://github.com/Discord-RE/Discord-video-stream/pull/195), which replaces the custom UDP connection with standard WebRTC. This is kept here for historical purposes only.
-
-On CPUs without AES acceleration (very old x86 CPUs, certain ARM SoCs on single board computers, certain VMs that don't expose AES acceleration capability), the default encryption method (AES-256-GCM) might not be fast enough to handle high frame-rate + high bitrate streams.
-
-In such cases, you can enable the `forceChacha20Encryption` option on the `Streamer` instance (`streamer.opts.forceChacha20Encryption = true`) before starting a stream, to force the use of the faster Chacha20-Poly1305 encryption method. For even higher performance, also install the optional [`sodium-native`](https://www.npmjs.com/package/sodium-native) package to use the faster native version instead of the WASM version.
-
-Below are some benchmark results of the two encryption methods in various circumstances, for reference purposes only. All benchmarks are performed on a Ryzen 5 5600H.
-
-
-AES-256-GCM, with AES acceleration
-
-```
-PS C:\> openssl speed -elapsed -aead -evp aes-256-gcm
-You have chosen to measure elapsed time instead of user CPU time.
-Doing AES-256-GCM ops for 3s on 2 size blocks: 19046296 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 31 size blocks: 15299030 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 136 size blocks: 13580376 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 1024 size blocks: 7691855 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 8192 size blocks: 1648811 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 16384 size blocks: 863115 AES-256-GCM ops in 3.00s
-version: 3.4.0
-built on: Tue Oct 22 23:27:41 2024 UTC
-options: bn(64,64)
-compiler: cl /Z7 /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 -DL_ENDIAN -DOPENSSL_PIC -D"OPENSSL_BUILDING_OPENSSL" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"NDEBUG" -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_WIN32_WINNT=0x0502
-CPUINFO: OPENSSL_ia32cap=0xfed8320b078bffff:0x400684219c97a9
-The 'numbers' are in 1000s of bytes per second processed.
-type 2 bytes 31 bytes 136 bytes 1024 bytes 8192 bytes 16384 bytes
-AES-256-GCM 12693.30k 158089.98k 615233.56k 2625486.51k 4500852.95k 4712187.99k
-```
-
-
-
-
-AES-256-GCM, without AES acceleration
-
-```
-PS C:\> openssl speed -elapsed -aead -evp aes-256-gcm
-You have chosen to measure elapsed time instead of user CPU time.
-Doing AES-256-GCM ops for 3s on 2 size blocks: 6947831 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 31 size blocks: 4875037 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 136 size blocks: 3132696 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 1024 size blocks: 821006 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 8192 size blocks: 113769 AES-256-GCM ops in 3.00s
-Doing AES-256-GCM ops for 3s on 16384 size blocks: 57074 AES-256-GCM ops in 3.00s
-version: 3.4.0
-built on: Tue Oct 22 23:27:41 2024 UTC
-options: bn(64,64)
-compiler: cl /Z7 /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 -DL_ENDIAN -DOPENSSL_PIC -D"OPENSSL_BUILDING_OPENSSL" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"NDEBUG" -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_WIN32_WINNT=0x0502
-CPUINFO: OPENSSL_ia32cap=0xfcd83209078bffff:0x0 env:~0x200000200000000
-The 'numbers' are in 1000s of bytes per second processed.
-type 2 bytes 31 bytes 136 bytes 1024 bytes 8192 bytes 16384 bytes
-AES-256-GCM 4630.34k 50358.60k 142015.55k 280143.33k 310561.70k 311596.27k
-```
-
-
-
-
-Chacha20-Poly1305
-
-```
-PS C:\> openssl speed -elapsed -aead -evp chacha20-poly1305
-You have chosen to measure elapsed time instead of user CPU time.
-Doing ChaCha20-Poly1305 ops for 3s on 2 size blocks: 8312139 ChaCha20-Poly1305 ops in 3.00s
-Doing ChaCha20-Poly1305 ops for 3s on 31 size blocks: 7801222 ChaCha20-Poly1305 ops in 3.00s
-Doing ChaCha20-Poly1305 ops for 3s on 136 size blocks: 5436377 ChaCha20-Poly1305 ops in 3.00s
-Doing ChaCha20-Poly1305 ops for 3s on 1024 size blocks: 4182141 ChaCha20-Poly1305 ops in 3.00s
-Doing ChaCha20-Poly1305 ops for 3s on 8192 size blocks: 903567 ChaCha20-Poly1305 ops in 3.00s
-Doing ChaCha20-Poly1305 ops for 3s on 16384 size blocks: 472556 ChaCha20-Poly1305 ops in 3.00s
-version: 3.4.0
-built on: Tue Oct 22 23:27:41 2024 UTC
-options: bn(64,64)
-compiler: cl /Z7 /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 -DL_ENDIAN -DOPENSSL_PIC -D"OPENSSL_BUILDING_OPENSSL" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"NDEBUG" -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_WIN32_WINNT=0x0502
-CPUINFO: OPENSSL_ia32cap=0xfed8320b078bffff:0x400684219c97a9
-The 'numbers' are in 1000s of bytes per second processed.
-type 2 bytes 31 bytes 136 bytes 1024 bytes 8192 bytes 16384 bytes
-ChaCha20-Poly1305 5539.58k 80585.77k 246284.90k 1427504.13k 2465696.49k 2580785.83k
-```
-
-
diff --git a/vendor/discord-video-stream/README.md b/vendor/discord-video-stream/README.md
deleted file mode 100644
index 525cc06..0000000
--- a/vendor/discord-video-stream/README.md
+++ /dev/null
@@ -1,296 +0,0 @@
-# Discord self-bot video
-
-[](https://pkg.pr.new/~/Discord-RE/Discord-video-stream)
-
-Fork: [Discord-video-experiment](https://github.com/mrjvs/Discord-video-experiment)
-
-> [!CAUTION]
-> Using any kind of automation programs on your account can result in your account getting permanently banned by Discord. Use at your own risk
-
-## Features
-
-- Playing video & audio in a voice channel (`Go Live`, or webcam video)
-
-## Implementation
-
-What I implemented and what I did not.
-
-### Video codecs
-
-- [ ] VP8 (once supported, removed for maintainability)
-- [ ] VP9
-- [X] H.264
-- [X] H.265
-- [ ] AV1
-
-### Packet types
-
-- [X] RTP (sending of realtime data)
-- [ ] RTX (retransmission)
-
-### Connection types
-
-- [X] Regular Voice Connection
-- [X] Go Live
-
-### Encryption
-
-- [X] Transport Encryption
-- [X] [End-to-end Encryption](https://github.com/dank074/Discord-video-stream/issues/102)
-
-### Extras
-
-- [X] Figure out RTP header extensions (discord specific) (discord seems to use [one-byte RTP header extension](https://www.rfc-editor.org/rfc/rfc8285.html#section-4.2))
-
-Extensions supported by Discord (taken from the webrtc sdp exchange)
-
-```
-"a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level"
-"a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
-"a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
-"a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid"
-"a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay"
-"a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type"
-"a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing"
-"a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space"
-"a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"
-"a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"
-"a=extmap:13 urn:3gpp:video-orientation"
-"a=extmap:14 urn:ietf:params:rtp-hdrext:toffset"
-```
-
-## Requirements
-
-For full functionality, this library requires an FFmpeg build with `libzmq` enabled. Here is our recommendation:
-
-- Windows & Linux: [BtbN's FFmpeg Builds](https://github.com/BtbN/FFmpeg-Builds)
-- macOS (Intel): [evermeet.cx](https://evermeet.cx/ffmpeg/)
-- macOS (Apple Silicon): Install from Homebrew
-
-## Usage
-
-Install the package, alongside its peer-dependency discord.js-selfbot-v13:
-
-```
-npm install @dank074/discord-video-stream@latest
-npm install discord.js-selfbot-v13@latest
-```
-
-> [!IMPORTANT]
-> This library makes use of native dependencies (`node-av` and `node-datachannel`). If you use package managers that don't run install scripts by default (`pnpm`, `bun`, etc.), you'll need to allow running install scripts for `node-av` and `node-datachannel` for proper operation.
-
-Create a new Streamer, and pass it a selfbot Client
-
-```typescript
-import { Client } from "discord.js-selfbot-v13";
-import { Streamer } from '@dank074/discord-video-stream';
-
-const streamer = new Streamer(new Client());
-await streamer.client.login('TOKEN HERE');
-```
-
-Make client join a voice channel
-
-```typescript
-await streamer.joinVoice("GUILD ID HERE", "CHANNEL ID HERE");
-```
-
-Start sending media
-
-```typescript
-import { prepareStream, playStream, Utils, Encoders } from "@dank074/discord-video-stream"
-try {
- // NVENC is also available, change Encoders.software to Encoders.nvenc and
- // adapt the settings
- let encoder = Encoders.software({
- x264: {
- preset: "superfast"
- },
- x265: {
- preset: "superfast"
- }
- });
- const { command, output } = prepareStream("DIRECT VIDEO URL OR READABLE STREAM HERE", {
- encoder,
-
- // Specify either width or height for aspect ratio aware scaling
- // Specify both for stretched output
- height: 1080,
-
- // Force frame rate, or leave blank to use source frame rate
- frameRate: 30,
- bitrateVideo: 5000,
- bitrateVideoMax: 7500,
- videoCodec: Utils.normalizeVideoCodec("H264" /* or H265 */),
- });
- command.on("error", (err, stdout, stderr) => {
- // Handle ffmpeg errors here
- });
-
- await playStream(output, streamer, {
- type: "go-live" // use "camera" for camera stream
- });
-
- console.log("Finished playing video");
-} catch (e) {
- console.log(e);
-}
-```
-
-## Encoder options available
-
-```typescript
-/**
- * A function returning encoder settings for a specific avg and max bitrate
- * You can define your own, or use the pre-made functions in the library
- */
-encoder: EncoderSettingsGetter;
-/**
- * Disable transcoding of the video stream. If specified, all video related
- * options have no effects
- *
- * Only use this if your video stream is Discord streaming friendly, otherwise
- * you'll get a glitchy output
- */
-noTranscoding?: boolean;
-/**
- * Video output width
- */
-width?: number;
-/**
- * Video output height
- */
-height?: number;
-/**
- * Video output frames per second
- */
-fps?: number;
-/**
- * Video average bitrate in kbps
- */
-bitrateVideo?: number;
-/**
- * Video max bitrate in kbps
- */
-bitrateVideoMax?: number;
-/**
- * Audio bitrate in kbps
- */
-bitrateAudio?: number;
-/**
- * Enable audio output
- */
-includeAudio?: boolean;
-/**
- * Enables hardware accelerated video decoding. Enabling this option might result in an exception
- * being thrown by Ffmpeg process if your system does not support hardware acceleration
- */
-hardwareAcceleratedDecoding?: boolean;
-/**
- * Output video codec. **Only** supports H264, H265, and VP8 currently
- */
-videoCodec?: SupportedVideoCodec;
-/**
- * Adds ffmpeg params to minimize latency and start outputting video as fast as possible.
- * Might create lag in video output in some rare cases
- */
-minimizeLatency?: boolean;
-/**
- * Custom headers for HTTP requests
- */
-customHeaders?: Record;
-/**
- * Custom input options to pass directly to ffmpeg
- * These will be added to the command *before* other options
- */
-customInputOptions?: string[];
-/**
- * Custom ffmpeg flags/options to pass directly to ffmpeg
- * These will be added to the command *after* other options
- */
-customFfmpegFlags?: string[];
-```
-
-## `playStream` options available
-
-```typescript
-/**
- * Set stream type as "Go Live" or camera stream
- */
-type?: "go-live" | "camera",
-
-/**
- * Override video width sent to Discord.
- *
- * DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
- */
-width?: number,
-
-/**
- * Override video height sent to Discord.
- *
- * DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
- */
-height?: number,
-
-/**
- * Override video frame rate sent to Discord.
- *
- * DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
- */
-frameRate?: number,
-
-/**
- * Same as ffmpeg's `readrate_initial_burst` command line flag
- *
- * See https://ffmpeg.org/ffmpeg.html#:~:text=%2Dreadrate_initial_burst
- */
-readrateInitialBurst?: number,
-```
-
-## Performance tips
-
-See [this page](./PERFORMANCE.md) for some tips on improving performance
-
-## Running example
-
-`examples/basic/src/config.json`:
-
-```json
-"token": "SELF TOKEN HERE",
-"acceptedAuthors": ["USER_ID_HERE"],
-```
-
-1. Configure your `config.json` with your accepted authors ids, and your self token
-2. Generate js files with ```npm run build```
-3. Start program with: ```npm run start```
-4. Join a voice channel
-5. Start streaming with commands:
-
-for go-live
-
-```
-$play-live
-```
-
-or for cam
-
-```
-$play-cam
-```
-
-for example:
-
-```
-$play-live http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4
-```
-
-## FAQs
-
-- Can I stream on existing voice connection (CAM) and in a go-live connection simultaneously?
-
-Yes, just send the media packets over both connections. The voice gateway expects you to signal when a user turns on their camera, so make sure you signal using `client.signalVideo(guildId, channelId, true)` before you start sending cam media packets.
-
-- Does this library work with bot tokens?
-
-No, Discord blocks video from bots which is why this library uses a selfbot library as peer dependency. You must use a user token
diff --git a/vendor/discord-video-stream/biome.json b/vendor/discord-video-stream/biome.json
deleted file mode 100644
index f00758c..0000000
--- a/vendor/discord-video-stream/biome.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
- "vcs": {
- "enabled": true,
- "clientKind": "git",
- "useIgnoreFile": true
- },
- "files": {
- "ignoreUnknown": false,
- "includes": ["./src/**/*"]
- },
- "formatter": {
- "enabled": true,
- "indentStyle": "space",
- "indentWidth": 2
- },
- "assist": {
- "actions": {
- "source": {
- "organizeImports": "off"
- }
- }
- },
- "linter": {
- "enabled": true,
- "rules": {
- "recommended": true,
- "style": {
- "noNonNullAssertion": "off"
- }
- }
- },
- "javascript": {
- "formatter": {
- "quoteStyle": "double"
- }
- }
-}
diff --git a/vendor/discord-video-stream/examples/basic/README.md b/vendor/discord-video-stream/examples/basic/README.md
deleted file mode 100644
index 9c55934..0000000
--- a/vendor/discord-video-stream/examples/basic/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# basic example
-
-This example shows how to stream a video, both using the existing voice connection or with a Go Live connection, using the new API introduced in v4.1.3
\ No newline at end of file
diff --git a/vendor/discord-video-stream/examples/basic/package.json b/vendor/discord-video-stream/examples/basic/package.json
deleted file mode 100644
index 4c7676b..0000000
--- a/vendor/discord-video-stream/examples/basic/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "@dank074/discord-video-stream-example",
- "version": "1.0.0",
- "description": "",
- "main": "dist/index.js",
- "types": "dist/index.d.ts",
- "type": "module",
- "dependencies": {
- "@dank074/discord-video-stream": "^5.0.0",
- "discord.js-selfbot-v13": "^3.5.1"
- },
- "devDependencies": {
- "@types/node": "^22.10.1",
- "typescript": "^5.7.2"
- },
- "scripts": {
- "build": "tsc",
- "start": "node ./dist/index.js",
- "yeet": "npm run build && npm run start"
- },
- "author": "",
- "license": "ISC"
-}
diff --git a/vendor/discord-video-stream/examples/basic/src/config.json b/vendor/discord-video-stream/examples/basic/src/config.json
deleted file mode 100644
index 569612e..0000000
--- a/vendor/discord-video-stream/examples/basic/src/config.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "token": "SELF TOKEN HERE",
- "acceptedAuthors": ["USER_ID_HERE"],
- "streamOpts": {
- "width": 1280,
- "height": 720,
- "fps": 30,
- "bitrateKbps": 1000,
- "maxBitrateKbps": 2500,
- "hardware_acceleration": false,
- "videoCodec": "H264"
- }
-}
\ No newline at end of file
diff --git a/vendor/discord-video-stream/examples/basic/src/index.ts b/vendor/discord-video-stream/examples/basic/src/index.ts
deleted file mode 100644
index b6e5421..0000000
--- a/vendor/discord-video-stream/examples/basic/src/index.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import { Client, StageChannel } from "discord.js-selfbot-v13";
-import { Streamer, Utils, prepareStream, playStream } from "@dank074/discord-video-stream";
-import config from "./config.json" with {type: "json"};
-
-const streamer = new Streamer(new Client());
-
-// ready event
-streamer.client.on("ready", () => {
- console.log(`--- ${streamer.client.user?.tag} is ready ---`);
-});
-
-let controller: AbortController;
-
-// message event
-streamer.client.on("messageCreate", async (msg) => {
- if (msg.author.bot) return;
-
- if (!config.acceptedAuthors.includes(msg.author.id)) return;
-
- if (!msg.content) return;
-
- if (msg.content.startsWith("$play-live")) {
- const args = parseArgs(msg.content)
- if (!args) return;
-
- const channel = msg.author.voice?.channel;
-
- if(!channel) return;
-
- console.log(`Attempting to join voice channel ${msg.guildId}/${channel.id}`);
- await streamer.joinVoice(msg.guildId!, channel.id);
-
- if (channel instanceof StageChannel)
- {
- await streamer.client.user?.voice?.setSuppressed(false);
- }
-
- controller?.abort();
- controller = new AbortController();
-
- const { command, output } = prepareStream(args.url, {
- width: config.streamOpts.width,
- height: config.streamOpts.height,
- frameRate: config.streamOpts.fps,
- bitrateVideo: config.streamOpts.bitrateKbps,
- bitrateVideoMax: config.streamOpts.maxBitrateKbps,
- hardwareAcceleratedDecoding: config.streamOpts.hardware_acceleration,
- videoCodec: Utils.normalizeVideoCodec(config.streamOpts.videoCodec)
- }, controller.signal);
- command.on("error", (err) => {
- console.log("An error happened with ffmpeg");
- console.log(err);
- });
- await playStream(output, streamer, undefined, controller.signal)
- .catch(() => controller.abort());
- } else if (msg.content.startsWith("$play-cam")) {
- const args = parseArgs(msg.content);
- if (!args) return;
-
- const channel = msg.author.voice?.channel;
-
- if (!channel) return;
-
- console.log(`Attempting to join voice channel ${msg.guildId}/${channel.id}`);
- const vc = await streamer.joinVoice(msg.guildId!, channel.id);
-
- if (channel instanceof StageChannel)
- {
- await streamer.client.user?.voice?.setSuppressed(false);
- }
-
- controller?.abort();
- controller = new AbortController();
-
- const { command, output } = prepareStream(args.url, {
- width: config.streamOpts.width,
- height: config.streamOpts.height,
- frameRate: config.streamOpts.fps,
- bitrateVideo: config.streamOpts.bitrateKbps,
- bitrateVideoMax: config.streamOpts.maxBitrateKbps,
- hardwareAcceleratedDecoding: config.streamOpts.hardware_acceleration,
- videoCodec: Utils.normalizeVideoCodec(config.streamOpts.videoCodec)
- }, controller.signal)
- command.on("error", (err) => {
- console.log("An error happened with ffmpeg");
- console.log(err);
- });
- await playStream(output, streamer, undefined, controller.signal)
- .catch(() => controller.abort());
- } else if (msg.content.startsWith("$disconnect")) {
- controller?.abort();
- streamer.leaveVoice();
- } else if(msg.content.startsWith("$stop-stream")) {
- controller?.abort();
- }
-});
-
-// login
-streamer.client.login(config.token);
-
-function parseArgs(message: string): Args | undefined {
- const args = message.split(" ");
- if (args.length < 2) return;
-
- const url = args[1];
-
- return { url }
-}
-
-type Args = {
- url: string;
-}
diff --git a/vendor/discord-video-stream/examples/basic/tsconfig.json b/vendor/discord-video-stream/examples/basic/tsconfig.json
deleted file mode 100644
index 4d59fb9..0000000
--- a/vendor/discord-video-stream/examples/basic/tsconfig.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "NodeNext", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- "moduleResolution": "NodeNext", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- "resolveJsonModule": true, /* Enable importing .json files. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- "outDir": "./dist", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
- // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- },
- "include": [
- "src/**/*"
- ]
-}
\ No newline at end of file
diff --git a/vendor/discord-video-stream/examples/puppeteer-stream/README.md b/vendor/discord-video-stream/examples/puppeteer-stream/README.md
deleted file mode 100644
index d022f91..0000000
--- a/vendor/discord-video-stream/examples/puppeteer-stream/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# puppeteer stream example
-
-This example shows how to use puppeteer stream to stream a browser window
\ No newline at end of file
diff --git a/vendor/discord-video-stream/examples/puppeteer-stream/package.json b/vendor/discord-video-stream/examples/puppeteer-stream/package.json
deleted file mode 100644
index d842c39..0000000
--- a/vendor/discord-video-stream/examples/puppeteer-stream/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "@dank074/discord-video-stream-example-puppeteer",
- "version": "1.0.0",
- "description": "",
- "main": "dist/index.js",
- "types": "dist/index.d.ts",
- "type": "module",
- "dependencies": {
- "@dank074/discord-video-stream": "^5.0.0",
- "discord.js-selfbot-v13": "^3.5.1",
- "puppeteer": "^24.1.1",
- "puppeteer-stream": "^3.0.19"
- },
- "devDependencies": {
- "@types/node": "^22.13.1",
- "typescript": "^5.7.3"
- },
- "scripts": {
- "build": "tsc",
- "start": "node ./dist/index.js",
- "yeet": "npm run build && npm run start"
- },
- "author": "",
- "license": "ISC"
-}
diff --git a/vendor/discord-video-stream/examples/puppeteer-stream/src/config.json b/vendor/discord-video-stream/examples/puppeteer-stream/src/config.json
deleted file mode 100644
index 569612e..0000000
--- a/vendor/discord-video-stream/examples/puppeteer-stream/src/config.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "token": "SELF TOKEN HERE",
- "acceptedAuthors": ["USER_ID_HERE"],
- "streamOpts": {
- "width": 1280,
- "height": 720,
- "fps": 30,
- "bitrateKbps": 1000,
- "maxBitrateKbps": 2500,
- "hardware_acceleration": false,
- "videoCodec": "H264"
- }
-}
\ No newline at end of file
diff --git a/vendor/discord-video-stream/examples/puppeteer-stream/src/index.ts b/vendor/discord-video-stream/examples/puppeteer-stream/src/index.ts
deleted file mode 100644
index ca91445..0000000
--- a/vendor/discord-video-stream/examples/puppeteer-stream/src/index.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-import { Client, StageChannel } from 'discord.js-selfbot-v13';
-import { Streamer, Utils, prepareStream, playStream } from "@dank074/discord-video-stream";
-import { executablePath } from 'puppeteer';
-import { launch, getStream } from 'puppeteer-stream';
-import config from "./config.json" with {type: "json"};
-
-type BrowserOptions = {
- width: number,
- height: number
-}
-
-const streamer = new Streamer(new Client());
-let browser: Awaited>;
-
-// ready event
-streamer.client.on("ready", () => {
- console.log(`--- ${streamer.client.user?.tag} is ready ---`);
-});
-
-let controller: AbortController;
-
-// message event
-streamer.client.on("messageCreate", async (msg) => {
- if (msg.author.bot) return;
-
- if (!config.acceptedAuthors.includes(msg.author.id)) return;
-
- if (!msg.content) return;
-
- if (msg.content.startsWith("$play-screen")) {
- const args = msg.content.split(" ");
- if (args.length < 2) return;
-
- const url = args[1];
-
- if (!url) return;
-
- const channel = msg.author.voice?.channel;
-
- if (!channel) return;
-
- console.log(`Attempting to join voice channel ${msg.guildId}/${channel.id}`);
- await streamer.joinVoice(msg.guildId!, channel.id);
-
- if (channel instanceof StageChannel)
- {
- await streamer.client.user?.voice?.setSuppressed(false);
- }
-
- controller?.abort();
- controller = new AbortController();
- await streamPuppeteer(url, streamer, {
- width: config.streamOpts.width,
- height: config.streamOpts.height
- }, controller.signal);
- } else if (msg.content.startsWith("$disconnect")) {
- controller?.abort();
- streamer.leaveVoice();
- }
-})
-
-// login
-streamer.client.login(config.token);
-
-async function streamPuppeteer(url: string, streamer: Streamer, opts: BrowserOptions, cancelSignal?: AbortSignal) {
- cancelSignal?.throwIfAborted();
- cancelSignal?.addEventListener("abort", () => {
- browser.close();
- }, { once: true });
- browser = await launch({
- defaultViewport: {
- width: opts.width,
- height: opts.height,
- },
- executablePath: executablePath()
- });
-
- const page = await browser.newPage();
- await page.goto(url);
-
- const stream = await getStream(page, { audio: true, video: true, mimeType: "video/webm;codecs=vp8,opus" });
-
- try {
- const { command, output } = prepareStream(stream, {
- frameRate: config.streamOpts.fps,
- bitrateVideo: config.streamOpts.bitrateKbps,
- bitrateVideoMax: config.streamOpts.maxBitrateKbps,
- hardwareAcceleratedDecoding: config.streamOpts.hardware_acceleration,
- videoCodec: Utils.normalizeVideoCodec(config.streamOpts.videoCodec)
- }, cancelSignal);
- command.on("error", (err, stdout, stderr) => {
- console.log("An error occurred with ffmpeg");
- console.log(err)
- });
-
- await playStream(output, streamer, {
- // Use this to catch up with ffmpeg
- readrateInitialBurst: 10
- }, cancelSignal);
- console.log("Finished playing video");
- } catch (e) {
- console.log(e);
- }
-}
diff --git a/vendor/discord-video-stream/examples/puppeteer-stream/tsconfig.json b/vendor/discord-video-stream/examples/puppeteer-stream/tsconfig.json
deleted file mode 100644
index 4d59fb9..0000000
--- a/vendor/discord-video-stream/examples/puppeteer-stream/tsconfig.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "NodeNext", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- "moduleResolution": "NodeNext", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- "resolveJsonModule": true, /* Enable importing .json files. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- "outDir": "./dist", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
- // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- },
- "include": [
- "src/**/*"
- ]
-}
\ No newline at end of file
diff --git a/vendor/discord-video-stream/package.json b/vendor/discord-video-stream/package.json
deleted file mode 100644
index 27fbe86..0000000
--- a/vendor/discord-video-stream/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "name": "@dank074/discord-video-stream",
- "version": "6.0.0",
- "description": "Experiment for making video streaming work for discord selfbots",
- "exports": "./dist/index.js",
- "types": "dist/index.d.ts",
- "type": "module",
- "files": [
- "dist",
- "src"
- ],
- "publishConfig": {
- "access": "public"
- },
- "dependencies": {
- "@lng2004/node-datachannel": "0.32.0-20260202",
- "@snazzah/davey": "^0.1.8",
- "debug-level": "^4.1.1",
- "fluent-ffmpeg-simplified": "^0.1.0",
- "node-av": "^5.2.2",
- "p-debounce": "^5.1.0",
- "sharp": "^0.34.5",
- "zeromq": "^6.5.0"
- },
- "devDependencies": {
- "@biomejs/biome": "2.3.8",
- "@types/fluent-ffmpeg": "^2.1.28",
- "@types/node": "^25.0.1",
- "discord.js-selfbot-v13": "workspace:*",
- "pkg-pr-new": "^0.0.62",
- "typescript": "^5.9.3"
- },
- "peerDependencies": {
- "discord.js-selfbot-v13": "^3.6.0"
- },
- "engines": {
- "node": ">=22.4.0"
- },
- "scripts": {
- "build": "tsc",
- "lint": "biome lint --error-on-warnings .",
- "lint:fix": "biome lint --write .",
- "check": "biome check .",
- "check:fix": "biome check --write ."
- },
- "keywords": [
- "discord",
- "video",
- "voice",
- "stream",
- "go-live"
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/dank074/Discord-video-stream.git"
- },
- "contributors": [
- "Long Nguyen ",
- "s074 ",
- "mrjvs ",
- "Elysia <71698422+aiko-chan-ai@users.noreply.github.com>",
- "Fede14 ",
- "Malthe Morsing Larsen <57196060+malthemorsing@users.noreply.github.com>"
- ],
- "license": "ISC",
- "bugs": {
- "url": "https://github.com/dank074/Discord-video-stream/issues"
- },
- "homepage": "https://github.com/dank074/Discord-video-stream#readme"
-}
diff --git a/vendor/discord-video-stream/pnpm-lock.yaml b/vendor/discord-video-stream/pnpm-lock.yaml
deleted file mode 100644
index c230e6d..0000000
--- a/vendor/discord-video-stream/pnpm-lock.yaml
+++ /dev/null
@@ -1,2689 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- '@lng2004/node-datachannel':
- specifier: 0.32.0-20260202
- version: 0.32.0-20260202
- '@snazzah/davey':
- specifier: ^0.1.8
- version: 0.1.8
- debug-level:
- specifier: ^4.1.1
- version: 4.1.1
- fluent-ffmpeg-simplified:
- specifier: ^0.1.0
- version: 0.1.0
- node-av:
- specifier: ^5.2.2
- version: 5.2.2
- p-debounce:
- specifier: ^5.1.0
- version: 5.1.0
- sharp:
- specifier: ^0.34.5
- version: 0.34.5
- zeromq:
- specifier: ^6.5.0
- version: 6.5.0
- devDependencies:
- '@biomejs/biome':
- specifier: 2.3.8
- version: 2.3.8
- '@types/fluent-ffmpeg':
- specifier: ^2.1.28
- version: 2.1.28
- '@types/node':
- specifier: ^25.0.1
- version: 25.0.1
- discord.js-selfbot-v13:
- specifier: ^3.7.1
- version: 3.7.1
- pkg-pr-new:
- specifier: ^0.0.62
- version: 0.0.62
- typescript:
- specifier: ^5.9.3
- version: 5.9.3
-
-packages:
-
- '@actions/core@1.11.1':
- resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==}
-
- '@actions/exec@1.1.1':
- resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==}
-
- '@actions/http-client@2.2.3':
- resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==}
-
- '@actions/io@1.1.3':
- resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==}
-
- '@babel/runtime@7.28.6':
- resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
- engines: {node: '>=6.9.0'}
-
- '@biomejs/biome@2.3.8':
- resolution: {integrity: sha512-Qjsgoe6FEBxWAUzwFGFrB+1+M8y/y5kwmg5CHac+GSVOdmOIqsAiXM5QMVGZJ1eCUCLlPZtq4aFAQ0eawEUuUA==}
- engines: {node: '>=14.21.3'}
- hasBin: true
-
- '@biomejs/cli-darwin-arm64@2.3.8':
- resolution: {integrity: sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [darwin]
-
- '@biomejs/cli-darwin-x64@2.3.8':
- resolution: {integrity: sha512-lUDQ03D7y/qEao7RgdjWVGCu+BLYadhKTm40HkpJIi6kn8LSv5PAwRlew/DmwP4YZ9ke9XXoTIQDO1vAnbRZlA==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [darwin]
-
- '@biomejs/cli-linux-arm64-musl@2.3.8':
- resolution: {integrity: sha512-PShR4mM0sjksUMyxbyPNMxoKFPVF48fU8Qe8Sfx6w6F42verbwRLbz+QiKNiDPRJwUoMG1nPM50OBL3aOnTevA==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [linux]
-
- '@biomejs/cli-linux-arm64@2.3.8':
- resolution: {integrity: sha512-Uo1OJnIkJgSgF+USx970fsM/drtPcQ39I+JO+Fjsaa9ZdCN1oysQmy6oAGbyESlouz+rzEckLTF6DS7cWse95g==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [linux]
-
- '@biomejs/cli-linux-x64-musl@2.3.8':
- resolution: {integrity: sha512-YGLkqU91r1276uwSjiUD/xaVikdxgV1QpsicT0bIA1TaieM6E5ibMZeSyjQ/izBn4tKQthUSsVZacmoJfa3pDA==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [linux]
-
- '@biomejs/cli-linux-x64@2.3.8':
- resolution: {integrity: sha512-QDPMD5bQz6qOVb3kiBui0zKZXASLo0NIQ9JVJio5RveBEFgDgsvJFUvZIbMbUZT3T00M/1wdzwWXk4GIh0KaAw==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [linux]
-
- '@biomejs/cli-win32-arm64@2.3.8':
- resolution: {integrity: sha512-H4IoCHvL1fXKDrTALeTKMiE7GGWFAraDwBYFquE/L/5r1927Te0mYIGseXi4F+lrrwhSWbSGt5qPFswNoBaCxg==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [win32]
-
- '@biomejs/cli-win32-x64@2.3.8':
- resolution: {integrity: sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [win32]
-
- '@discordjs/builders@1.13.1':
- resolution: {integrity: sha512-cOU0UDHc3lp/5nKByDxkmRiNZBpdp0kx55aarbiAfakfKJHlxv/yFW1zmIqCAmwH5CRlrH9iMFKJMpvW4DPB+w==}
- engines: {node: '>=16.11.0'}
-
- '@discordjs/collection@2.1.1':
- resolution: {integrity: sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==}
- engines: {node: '>=18'}
-
- '@discordjs/formatters@0.6.2':
- resolution: {integrity: sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==}
- engines: {node: '>=16.11.0'}
-
- '@discordjs/util@1.2.0':
- resolution: {integrity: sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==}
- engines: {node: '>=18'}
-
- '@emnapi/core@1.7.1':
- resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
-
- '@emnapi/runtime@1.7.1':
- resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
-
- '@emnapi/wasi-threads@1.1.0':
- resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
-
- '@fastify/busboy@2.1.1':
- resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
- engines: {node: '>=14'}
-
- '@fidm/asn1@1.0.4':
- resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==}
- engines: {node: '>= 8'}
-
- '@fidm/x509@1.2.1':
- resolution: {integrity: sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==}
- engines: {node: '>= 8'}
-
- '@img/colour@1.0.0':
- resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
- engines: {node: '>=18'}
-
- '@img/sharp-darwin-arm64@0.34.5':
- resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [darwin]
-
- '@img/sharp-darwin-x64@0.34.5':
- resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [darwin]
-
- '@img/sharp-libvips-darwin-arm64@1.2.4':
- resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
- cpu: [arm64]
- os: [darwin]
-
- '@img/sharp-libvips-darwin-x64@1.2.4':
- resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
- cpu: [x64]
- os: [darwin]
-
- '@img/sharp-libvips-linux-arm64@1.2.4':
- resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-libvips-linux-arm@1.2.4':
- resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
- cpu: [arm]
- os: [linux]
-
- '@img/sharp-libvips-linux-ppc64@1.2.4':
- resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
- cpu: [ppc64]
- os: [linux]
-
- '@img/sharp-libvips-linux-riscv64@1.2.4':
- resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
- cpu: [riscv64]
- os: [linux]
-
- '@img/sharp-libvips-linux-s390x@1.2.4':
- resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
- cpu: [s390x]
- os: [linux]
-
- '@img/sharp-libvips-linux-x64@1.2.4':
- resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
- resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-libvips-linuxmusl-x64@1.2.4':
- resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-linux-arm64@0.34.5':
- resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-linux-arm@0.34.5':
- resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm]
- os: [linux]
-
- '@img/sharp-linux-ppc64@0.34.5':
- resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ppc64]
- os: [linux]
-
- '@img/sharp-linux-riscv64@0.34.5':
- resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [riscv64]
- os: [linux]
-
- '@img/sharp-linux-s390x@0.34.5':
- resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [s390x]
- os: [linux]
-
- '@img/sharp-linux-x64@0.34.5':
- resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-linuxmusl-arm64@0.34.5':
- resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-linuxmusl-x64@0.34.5':
- resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-wasm32@0.34.5':
- resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [wasm32]
-
- '@img/sharp-win32-arm64@0.34.5':
- resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [win32]
-
- '@img/sharp-win32-ia32@0.34.5':
- resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ia32]
- os: [win32]
-
- '@img/sharp-win32-x64@0.34.5':
- resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [win32]
-
- '@jsdevtools/ez-spawn@3.0.4':
- resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==}
- engines: {node: '>=10'}
-
- '@leichtgewicht/ip-codec@2.0.5':
- resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
-
- '@lng2004/node-datachannel@0.32.0-20260202':
- resolution: {integrity: sha512-YLpIA5yYC4NRSaw3suitZcQUW/vdI3DHadsCZjPEgUOi2vuoPzPwq+L8Qtt4REuJs/Pw3BcypdVBQfeUVtw9sA==}
- engines: {node: '>=18.20.0'}
-
- '@minhducsun2002/leb128@1.0.0':
- resolution: {integrity: sha512-eFrYUPDVHeuwWHluTG1kwNQUEUcFjVKYwPkU8z9DR1JH3AW7JtJsG9cRVGmwz809kKtGfwGJj58juCZxEvnI/g==}
-
- '@napi-rs/wasm-runtime@1.1.0':
- resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==}
-
- '@noble/curves@1.9.7':
- resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
- engines: {node: ^14.21.3 || >=16}
-
- '@noble/hashes@1.8.0':
- resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
- engines: {node: ^14.21.3 || >=16}
-
- '@octokit/action@6.1.0':
- resolution: {integrity: sha512-lo+nHx8kAV86bxvOVOI3vFjX3gXPd/L7guAUbvs3pUvnR2KC+R7yjBkA1uACt4gYhs4LcWP3AXSGQzsbeN2XXw==}
- engines: {node: '>= 18'}
-
- '@octokit/auth-action@4.1.0':
- resolution: {integrity: sha512-m+3t7K46IYyMk7Bl6/lF4Rv09GqDZjYmNg8IWycJ2Fa3YE3DE7vQcV6G2hUPmR9NDqenefNJwVtlisMjzymPiQ==}
- engines: {node: '>= 18'}
-
- '@octokit/auth-token@4.0.0':
- resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
- engines: {node: '>= 18'}
-
- '@octokit/core@5.2.2':
- resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==}
- engines: {node: '>= 18'}
-
- '@octokit/endpoint@9.0.6':
- resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==}
- engines: {node: '>= 18'}
-
- '@octokit/graphql@7.1.1':
- resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==}
- engines: {node: '>= 18'}
-
- '@octokit/openapi-types@20.0.0':
- resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==}
-
- '@octokit/openapi-types@24.2.0':
- resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==}
-
- '@octokit/plugin-paginate-rest@9.2.2':
- resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@octokit/core': '5'
-
- '@octokit/plugin-rest-endpoint-methods@10.4.1':
- resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@octokit/core': '5'
-
- '@octokit/request-error@5.1.1':
- resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==}
- engines: {node: '>= 18'}
-
- '@octokit/request@8.4.1':
- resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==}
- engines: {node: '>= 18'}
-
- '@octokit/types@12.6.0':
- resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==}
-
- '@octokit/types@13.10.0':
- resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==}
-
- '@otplib/core@12.0.1':
- resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==}
-
- '@otplib/plugin-crypto@12.0.1':
- resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==}
-
- '@otplib/plugin-thirty-two@12.0.1':
- resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==}
-
- '@otplib/preset-default@12.0.1':
- resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==}
-
- '@otplib/preset-v11@12.0.1':
- resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==}
-
- '@peculiar/asn1-cms@2.6.0':
- resolution: {integrity: sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==}
-
- '@peculiar/asn1-csr@2.6.0':
- resolution: {integrity: sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==}
-
- '@peculiar/asn1-ecc@2.6.0':
- resolution: {integrity: sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==}
-
- '@peculiar/asn1-pfx@2.6.0':
- resolution: {integrity: sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==}
-
- '@peculiar/asn1-pkcs8@2.6.0':
- resolution: {integrity: sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==}
-
- '@peculiar/asn1-pkcs9@2.6.0':
- resolution: {integrity: sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==}
-
- '@peculiar/asn1-rsa@2.6.0':
- resolution: {integrity: sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==}
-
- '@peculiar/asn1-schema@2.6.0':
- resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==}
-
- '@peculiar/asn1-x509-attr@2.6.0':
- resolution: {integrity: sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==}
-
- '@peculiar/asn1-x509@2.6.0':
- resolution: {integrity: sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==}
-
- '@peculiar/x509@1.14.3':
- resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==}
- engines: {node: '>=20.0.0'}
-
- '@sapphire/async-queue@1.5.5':
- resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==}
- engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
-
- '@sapphire/shapeshift@4.0.0':
- resolution: {integrity: sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==}
- engines: {node: '>=v16'}
-
- '@sec-ant/readable-stream@0.4.1':
- resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
-
- '@seydx/node-av-darwin-arm64@5.2.2':
- resolution: {integrity: sha512-uj8hKggmfckYqRldfRWLT/0wRMhxc31+GMKPeYlL+PeAAfW2UigR0iL06CS/c0qIQRgFC9yMHv5Uc3OrIqJfZw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [darwin]
-
- '@seydx/node-av-darwin-x64@5.2.2':
- resolution: {integrity: sha512-HMq6BSoplzvH/0IygOQNVSYeWR0YH3SczHp53xgzxtzGtsdQ+2oWFuMr6jwlGGIIE0MrfUIDm+yuzZO2Z1YqpA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [darwin]
-
- '@seydx/node-av-linux-arm64@5.2.2':
- resolution: {integrity: sha512-AltBFfrGK29GvpvVkm3WgKy+RyrGVFZyISLm11mf+KUk/EhpNJauSPAPaPvVaTlISHAuKXW6AncZusjYUEGJ8A==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
-
- '@seydx/node-av-linux-x64@5.2.2':
- resolution: {integrity: sha512-8H5nas3leiFcFT4yNMhuFlIGaYc5+jUFl3I3hFEww/wnLLd+WG3v/uX8lHot8am8P3eZqwX9PHXoVauxfji5lQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
-
- '@seydx/node-av-win32-arm64-mingw@5.2.2':
- resolution: {integrity: sha512-BSQvoyyJKKF2faw0w9YADs9IMYOYXiIEGz/slKfqkYFeAr1AhoPCQmVkIu8U1Knmxnm1XN2xq8ovIYRr7aiUvg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [win32]
-
- '@seydx/node-av-win32-arm64-msvc@5.2.2':
- resolution: {integrity: sha512-1dvoWam1m6u40ffVGGHjy6Giqh9GsGpooRlY5JLZQWftRRO2frDVIU+qaR2xqdE4xMZ2xoLzcVG1uZRtXvw7sQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [win32]
-
- '@seydx/node-av-win32-x64-mingw@5.2.2':
- resolution: {integrity: sha512-mh/n3C/Vm44pDZ0Qn8enKM9Dp32d67tZ1h3s6yL8lbYu6bDyuBET68h+x+Lq+X+PifrNxKczs2gnI3cuKk93Dg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [win32]
-
- '@seydx/node-av-win32-x64-msvc@5.2.2':
- resolution: {integrity: sha512-abfpaUNj0RK6/tWL2SoXnnhWxvP7HGfeNGZgmJYmVZwCIYQKs6kNcQVF+xPxJedJHYDJuJAI3rOj/2mBK7pPWA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [win32]
-
- '@shinyoshiaki/binary-data@0.6.1':
- resolution: {integrity: sha512-7HDb/fQAop2bCmvDIzU5+69i+UJaFgIVp99h1VzK1mpg1JwSODOkjbqD7ilTYnqlnadF8C4XjpwpepxDsGY6+w==}
- engines: {node: '>=6'}
-
- '@shinyoshiaki/jspack@0.0.6':
- resolution: {integrity: sha512-SdsNhLjQh4onBlyPrn4ia1Pdx5bXT88G/LIEpOYAjx2u4xeY/m/HB5yHqlkJB1uQR3Zw4R3hBWLj46STRAN0rg==}
-
- '@sindresorhus/merge-streams@4.0.0':
- resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
- engines: {node: '>=18'}
-
- '@snazzah/davey-android-arm-eabi@0.1.8':
- resolution: {integrity: sha512-kRrrU2AldUEG8+Qqj+d5bofm1xzHEX2e657TFHOzKXObU7igqINFL61opcb30cMHcnMTGthV3bFFlh6ky0xrqw==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [android]
-
- '@snazzah/davey-android-arm64@0.1.8':
- resolution: {integrity: sha512-ttGznhY/vy0aUI+wwvt9Ati0U4gujKKjVwBOaOY6Ug+DKaPIc3Sah73XMXoX9QB9TyUBkH7lxvhpI+VneIcg4w==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [android]
-
- '@snazzah/davey-darwin-arm64@0.1.8':
- resolution: {integrity: sha512-c75j0DuAWZ20XgaTVCXzks2Gl9L0+dC0ID1NSdvoOqBRCphjHBUSf1te2hdWJKI3Dq1uPaJ00JL6fYUkpb+Wxw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@snazzah/davey-darwin-x64@0.1.8':
- resolution: {integrity: sha512-/SAvTmkEc73R4JSAfwVGMcVzwtjvmduaZHWnF49fCO1iFGR688U8k4W1obM9JkaNoLg4LPvU4HGMuDvfxh/gUA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@snazzah/davey-freebsd-x64@0.1.8':
- resolution: {integrity: sha512-91gPSY0gcbq/o7yqpBfWyrck7yZ4nciH3LJlk55tpC+NExedWUtH2HvsqVqqoS8TmNu+1msT0+5nJsq65flWPQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [freebsd]
-
- '@snazzah/davey-linux-arm-gnueabihf@0.1.8':
- resolution: {integrity: sha512-nJQOsykF5XFngsxxv6zKQX0bPfqE2YotlcPajHKVR7COSbrYgFXZ+Cck+nILiDqpCU+4fk7ae+8Knx181qbWYg==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [linux]
-
- '@snazzah/davey-linux-arm64-gnu@0.1.8':
- resolution: {integrity: sha512-IaALezD2F3Qt2n1GL5Wm2aQEjeiJI6gzSEhEHYiqyZUM/LygCyRXSDkoPAvHGuu3Xwy5m58Z20pfukxA49xbGQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@snazzah/davey-linux-arm64-musl@0.1.8':
- resolution: {integrity: sha512-OhEwQmZ/ntiqHoSAxRe1qVfELdKMREqwlf52vhPMFVa4XNyT6jNYXGanTMjYX2+jhH9SlJ7cqsADm1VFvjRnGA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@snazzah/davey-linux-x64-gnu@0.1.8':
- resolution: {integrity: sha512-yghgG7iXZUHy734Cq3PcgrbRnLhhB233JNTX5VPRxRqdwFAg2MzAJ2iSWpP12K6hSqKq9hw0sdt8CNpr0mEXjQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@snazzah/davey-linux-x64-musl@0.1.8':
- resolution: {integrity: sha512-WwCiAge27ZOEu7NRx5NFjpCAkGcUGHGtoROBY4ElRYE0Tp3DfuzWU06qSu6JBQPlzhTTBN29X2/kGP8iRUwqnQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@snazzah/davey-wasm32-wasi@0.1.8':
- resolution: {integrity: sha512-VAUY6eMhiS4HkHDh0SCjVbwf2SUR/cHs0IzS02p4lYwuUaqPFQnraxMNZ6R2MNOK8NmtPbCpWvi7kYMxMJuL2A==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@snazzah/davey-win32-arm64-msvc@0.1.8':
- resolution: {integrity: sha512-4ZcEhyfuRH+ni4pHBrgm+2zumwgaac5+OGOKHEGezJmUd3omn/iKpcj9Z0+Y9qQ8UGslzBrgesW46ENXoOfv2Q==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@snazzah/davey-win32-ia32-msvc@0.1.8':
- resolution: {integrity: sha512-znL43C+hxocxLgk/zbgCukOSNW14HYQE5G6fNeWtANHVCstkTN7hrJVbZfBnuKD+Jw1RbCs4gxLsYja1n1iZnA==}
- engines: {node: '>= 10'}
- cpu: [ia32]
- os: [win32]
-
- '@snazzah/davey-win32-x64-msvc@0.1.8':
- resolution: {integrity: sha512-JKIco1miwtM4NgVwU/H9TJdUaSlJ+kdtydy3+tiV9cmJv0u1SM2NpwjV85H44xAQWW2zcRBHP0ZDriciHw09qQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
- '@snazzah/davey@0.1.8':
- resolution: {integrity: sha512-f4NkCtU/4r9DUohp636qkZkxCF19v8Xq6W/1m4IKY2emZm+M2IdhWIv4GQxog2bQBWLNRRLD4DNM/UXEUb8W/A==}
- engines: {node: '>= 10'}
-
- '@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
-
- '@types/fluent-ffmpeg@2.1.28':
- resolution: {integrity: sha512-5ovxsDwBcPfJ+eYs1I/ZpcYCnkce7pvH9AHSvrZllAp1ZPpTRDZAFjF3TRFbukxSgIYTTNYePbS0rKUmaxVbXw==}
-
- '@types/node@25.0.1':
- resolution: {integrity: sha512-czWPzKIAXucn9PtsttxmumiQ9N0ok9FrBwgRWrwmVLlp86BrMExzvXRLFYRJ+Ex3g6yqj+KuaxfX1JTgV2lpfg==}
-
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- aes-js@3.1.2:
- resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- asn1js@3.0.7:
- resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==}
- engines: {node: '>=12.0.0'}
-
- asyncc@2.0.9:
- resolution: {integrity: sha512-nTQfwHtnL+MSqPaUJhV22GWP3jThj0GnS4Nw1uJyBus6EQ40hQFnbBGUvWxC5P3m+1neSqH1p8asMXg/ypmsQw==}
- engines: {node: '>=6.0.0'}
-
- atomic-sleep@1.0.0:
- resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
- engines: {node: '>=8.0.0'}
-
- base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
- before-after-hook@2.2.3:
- resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
-
- bl@4.1.0:
- resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
-
- bluebird@3.7.2:
- resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
-
- buffer-crc32@1.0.0:
- resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
- engines: {node: '>=8.0.0'}
-
- buffer@5.7.1:
- resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
-
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
- call-me-maybe@1.0.2:
- resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
-
- camelcase@5.3.1:
- resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
- engines: {node: '>=6'}
-
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
- chownr@1.1.4:
- resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-
- cliui@6.0.0:
- resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
-
- cmake-ts@1.0.2:
- resolution: {integrity: sha512-5l++JHE7MxFuyV/OwJf3ek7ZZN1aGPFPM5oUz6AnK5inQAPe4TFXRMz5sA2qg2FRgByPWdqO+gSfIPo8GzoKNQ==}
- hasBin: true
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- commander@12.1.0:
- resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
- engines: {node: '>=18'}
-
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
- core-util-is@1.0.3:
- resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
-
- date-fns@2.30.0:
- resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
- engines: {node: '>=0.11'}
-
- debug-level@4.1.1:
- resolution: {integrity: sha512-r/T+zzVbsy4FL91zdUrxc1I788DRXwU4mg65Yk8F5ACHNu9ucTXiWrb4JaKHbNtwuOUKKpE8oEnDg0fcBFmmBw==}
- engines: {node: '>=18'}
-
- debug@4.4.0:
- resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- decamelize@1.2.0:
- resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
- engines: {node: '>=0.10.0'}
-
- decode-uri-component@0.4.1:
- resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==}
- engines: {node: '>=14.16'}
-
- decompress-response@6.0.0:
- resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
- engines: {node: '>=10'}
-
- deep-extend@0.6.0:
- resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
- engines: {node: '>=4.0.0'}
-
- deprecation@2.3.1:
- resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
-
- detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
-
- dijkstrajs@1.0.3:
- resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
-
- discord-api-types@0.38.37:
- resolution: {integrity: sha512-Cv47jzY1jkGkh5sv0bfHYqGgKOWO1peOrGMkDFM4UmaGMOTgOW8QSexhvixa9sVOiz8MnVOBryWYyw/CEVhj7w==}
-
- discord.js-selfbot-v13@3.7.1:
- resolution: {integrity: sha512-cq5AW/CVvNIUVTSBdZmhsob7v+wjxnkFjuNULcxBXvxutVBnSZqZupsT/9CDtdnT71iKUn9N8GGL6GPg9aZlGA==}
- engines: {node: '>=20.18'}
- deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
-
- dns-packet@5.6.1:
- resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
- engines: {node: '>=6'}
-
- duplexer2@0.1.4:
- resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- end-of-stream@1.4.5:
- resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
-
- execa@9.6.1:
- resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==}
- engines: {node: ^18.19.0 || >=20.5.0}
-
- expand-template@2.0.3:
- resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
- engines: {node: '>=6'}
-
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
- fast-safe-stringify@2.1.1:
- resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
-
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- fetch-cookie@3.1.0:
- resolution: {integrity: sha512-s/XhhreJpqH0ftkGVcQt8JE9bqk+zRn4jF5mPJXWZeQMCI5odV9K+wEWYbnzFPHgQZlvPSMjS4n4yawWE8RINw==}
-
- figures@6.1.0:
- resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
- engines: {node: '>=18'}
-
- filter-obj@5.1.0:
- resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==}
- engines: {node: '>=14.16'}
-
- find-process@2.0.0:
- resolution: {integrity: sha512-YUBQnteWGASJoEVVsOXy6XtKAY2O1FCsWnnvQ8y0YwgY1rZiKeVptnFvMu6RSELZAJOGklqseTnUGGs5D0bKmg==}
- hasBin: true
-
- find-up@4.1.0:
- resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
- engines: {node: '>=8'}
-
- flatstr@1.0.12:
- resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==}
-
- fluent-ffmpeg-simplified@0.1.0:
- resolution: {integrity: sha512-u3McLUh6H6/hhXYxfZcSGwCJAAlN8wsCCPZjVpaK9HIIvmjOB3G584H3PAWZb/ZQTHVKUrzhjNEYMXZXZjOR+g==}
-
- fs-constants@1.0.0:
- resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-
- fs-extra@11.3.3:
- resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
- engines: {node: '>=14.14'}
-
- generate-function@2.3.1:
- resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
-
- get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
-
- get-stream@9.0.1:
- resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
- engines: {node: '>=18'}
-
- github-from-package@0.0.0:
- resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
-
- human-signals@8.0.1:
- resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
- engines: {node: '>=18.18.0'}
-
- ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
- ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- ini@1.3.8:
- resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-
- int64-buffer@1.1.0:
- resolution: {integrity: sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw==}
-
- ip@2.0.1:
- resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==}
-
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
- is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
-
- is-plain-object@2.0.4:
- resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
- engines: {node: '>=0.10.0'}
-
- is-property@1.0.2:
- resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
-
- is-stream@4.0.1:
- resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
- engines: {node: '>=18'}
-
- is-unicode-supported@2.1.0:
- resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
- engines: {node: '>=18'}
-
- isarray@1.0.0:
- resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
- isbinaryfile@5.0.7:
- resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==}
- engines: {node: '>= 18.0.0'}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- isobject@3.0.1:
- resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
- engines: {node: '>=0.10.0'}
-
- jsonfile@6.2.0:
- resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
-
- locate-path@5.0.0:
- resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
- engines: {node: '>=8'}
-
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
- loglevel@1.9.2:
- resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
- engines: {node: '>= 0.6.0'}
-
- map-lru@2.1.0:
- resolution: {integrity: sha512-Fa9E3knqtjzLtgtz49B2LjEFUH1asuG4iX7nA4rrlRq6Ey75xvi3hqvHnhs6IAj06o8ldasoFLEQtTATGD/GgA==}
- engines: {node: '>=12'}
-
- mimic-response@3.1.0:
- resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
- engines: {node: '>=10'}
-
- minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
- mkdirp-classic@0.5.3:
- resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-
- mlly@1.8.0:
- resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
-
- mp4box@0.5.4:
- resolution: {integrity: sha512-GcCH0fySxBurJtvr0dfhz0IxHZjc1RP+F+I8xw+LIwkU1a+7HJx8NCDiww1I5u4Hz6g4eR1JlGADEGJ9r4lSfA==}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- multicast-dns@7.2.5:
- resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
- hasBin: true
-
- napi-build-utils@2.0.0:
- resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
-
- node-abi@3.87.0:
- resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==}
- engines: {node: '>=10'}
-
- node-addon-api@8.5.0:
- resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==}
- engines: {node: ^18 || ^20 || >= 21}
-
- node-av@5.2.2:
- resolution: {integrity: sha512-uon3CnM54pW2yiF0q8t1AKljNxXkUeafobXGyNIpOdGtRz/naqBz/uqX6j+d3IaTPyCHkJvq0SZPtA68XMlNRw==}
-
- node-int64@0.4.0:
- resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
-
- npm-run-path@6.0.0:
- resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
- engines: {node: '>=18'}
-
- once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
- otplib@12.0.1:
- resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==}
-
- p-cancelable@2.1.1:
- resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
- engines: {node: '>=8'}
-
- p-debounce@5.1.0:
- resolution: {integrity: sha512-3DNQmB7HPRMSuZ9P8JQFzEr7156s1S5Lqpi3mSrsZe5AHvl4ONfGrdB5azWqeOpNejQiemgQBkyU+IDKR5nwyg==}
- engines: {node: '>=20'}
-
- p-limit@2.3.0:
- resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
- engines: {node: '>=6'}
-
- p-locate@4.1.0:
- resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
- engines: {node: '>=8'}
-
- p-try@2.2.0:
- resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
- engines: {node: '>=6'}
-
- parse-ms@4.0.0:
- resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
- engines: {node: '>=18'}
-
- path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
-
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
- engines: {node: '>=12'}
-
- pkg-pr-new@0.0.62:
- resolution: {integrity: sha512-K2jtf1PLCJJFDimQIpasPXDdnRTZSYPy36Ldz+QhMpLz2YN1Wi0ZQkomVt5Wi3NdBZcYuYGXekyFWfJ6fAHYjg==}
- hasBin: true
-
- pkg-types@1.3.1:
- resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
- pngjs@5.0.0:
- resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
- engines: {node: '>=10.13.0'}
-
- prebuild-install@7.1.3:
- resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
- engines: {node: '>=10'}
- hasBin: true
-
- pretty-ms@9.3.0:
- resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==}
- engines: {node: '>=18'}
-
- prism-media@1.3.5:
- resolution: {integrity: sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==}
- peerDependencies:
- '@discordjs/opus': '>=0.8.0 <1.0.0'
- ffmpeg-static: ^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0
- node-opus: ^0.3.3
- opusscript: ^0.0.8
- peerDependenciesMeta:
- '@discordjs/opus':
- optional: true
- ffmpeg-static:
- optional: true
- node-opus:
- optional: true
- opusscript:
- optional: true
-
- process-nextick-args@2.0.1:
- resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
- pump@3.0.3:
- resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
-
- pvtsutils@1.3.6:
- resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
-
- pvutils@1.1.5:
- resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==}
- engines: {node: '>=16.0.0'}
-
- qrcode@1.5.4:
- resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
- engines: {node: '>=10.13.0'}
- hasBin: true
-
- query-registry@3.0.1:
- resolution: {integrity: sha512-M9RxRITi2mHMVPU5zysNjctUT8bAPx6ltEXo/ir9+qmiM47Y7f0Ir3+OxUO5OjYAWdicBQRew7RtHtqUXydqlg==}
- engines: {node: '>=20'}
-
- query-string@9.3.1:
- resolution: {integrity: sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==}
- engines: {node: '>=18'}
-
- quick-lru@7.3.0:
- resolution: {integrity: sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==}
- engines: {node: '>=18'}
-
- rc@1.2.8:
- resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
- hasBin: true
-
- readable-stream@2.3.8:
- resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
-
- reflect-metadata@0.2.2:
- resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
-
- require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
-
- require-main-filename@2.0.0:
- resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-
- rx.mini@1.4.0:
- resolution: {integrity: sha512-8w5cSc1mwNja7fl465DXOkVvIOkpvh2GW4jo31nAIvX4WTXCsRnKJGUfiDBzWtYRInEcHAUYIZfzusjIrea8gA==}
-
- safe-buffer@5.1.2:
- resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
- semver@7.7.3:
- resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
- engines: {node: '>=10'}
- hasBin: true
-
- set-blocking@2.0.0:
- resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-
- set-cookie-parser@2.7.2:
- resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
-
- sharp@0.34.5:
- resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- simple-concat@1.0.1:
- resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-
- simple-get@4.0.1:
- resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
-
- sonic-boom@4.2.0:
- resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
-
- split-on-first@3.0.0:
- resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==}
- engines: {node: '>=12'}
-
- string-argv@0.3.2:
- resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
- engines: {node: '>=0.6.19'}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string_decoder@1.1.1:
- resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-final-newline@4.0.0:
- resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
- engines: {node: '>=18'}
-
- strip-json-comments@2.0.1:
- resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
- engines: {node: '>=0.10.0'}
-
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
- tar-fs@2.1.4:
- resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==}
-
- tar-stream@2.2.0:
- resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
- engines: {node: '>=6'}
-
- thirty-two@1.0.2:
- resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==}
- engines: {node: '>=0.2.6'}
-
- thunky@1.1.0:
- resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
-
- tinyglobby@0.2.15:
- resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
- engines: {node: '>=12.0.0'}
-
- tldts-core@6.1.86:
- resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
-
- tldts@6.1.86:
- resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
- hasBin: true
-
- tough-cookie@5.1.2:
- resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
- engines: {node: '>=16'}
-
- tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
-
- ts-mixer@6.0.4:
- resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==}
-
- tslib@1.14.1:
- resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
-
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
- tsyringe@4.10.0:
- resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==}
- engines: {node: '>= 6.0.0'}
-
- tunnel-agent@0.6.0:
- resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
-
- tunnel@0.0.6:
- resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
- engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
-
- turbo-crc32@1.0.1:
- resolution: {integrity: sha512-8yyRd1ZdNp+AQLGqi3lTaA2k81JjlIZOyFQEsi7GQWBgirnQOxjqVtDEbYHM2Z4yFdJ5AQw0fxBLLnDCl6RXoQ==}
- engines: {node: '>=6'}
-
- tweetnacl@1.0.3:
- resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
-
- type-detect@4.1.0:
- resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
- engines: {node: '>=4'}
-
- typescript@5.9.3:
- resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- ufo@1.6.1:
- resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
-
- undici-types@7.16.0:
- resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
-
- undici@5.29.0:
- resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
- engines: {node: '>=14.0'}
-
- undici@6.22.0:
- resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==}
- engines: {node: '>=18.17'}
-
- undici@7.16.0:
- resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==}
- engines: {node: '>=20.18.1'}
-
- unicorn-magic@0.3.0:
- resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
- engines: {node: '>=18'}
-
- universal-user-agent@6.0.1:
- resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
-
- universalify@2.0.1:
- resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
- engines: {node: '>= 10.0.0'}
-
- unzipper@0.12.3:
- resolution: {integrity: sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==}
-
- url-join@5.0.0:
- resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- validate-npm-package-name@5.0.1:
- resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
- werift-common@0.0.3:
- resolution: {integrity: sha512-ma3E4BqKTyZVLhrdfTVs2T1tg9seeUtKMRn5e64LwgrogWa62+3LAUoLBUSl1yPWhgSkXId7GmcHuWDen9IJeQ==}
- engines: {node: '>=16'}
-
- werift-dtls@0.5.7:
- resolution: {integrity: sha512-z2fjbP7fFUFmu/Ky4bCKXzdgPTtmSY1DYi0TUf3GG2zJT4jMQ3TQmGY8y7BSSNGetvL4h3pRZ5un0EcSOWpPog==}
- engines: {node: '>=16'}
-
- werift-ice@0.2.2:
- resolution: {integrity: sha512-td52pHp+JmFnUn5jfDr/SSNO0dMCbknhuPdN1tFp9cfRj5jaktN63qnAdUuZC20QCC3ETWdsOthcm+RalHpFCQ==}
-
- werift-rtp@0.8.8:
- resolution: {integrity: sha512-GiYMSdvCyScQaw5bnEsraSoHUVZpjfokJAiLV4R1FsiB06t6XiebPYPpkqB9nYNNKiA8Z/cYWsym7wISq1sYSQ==}
- engines: {node: '>=10'}
-
- werift-sctp@0.0.6:
- resolution: {integrity: sha512-SaGrPvkXIPGHyY58Y8TV6vee3vpYHNyvMTWdu+c6SokG3ob8tfofHLKWdO1Zu3ypNV5pL9bxBuQMzOPM3N34fg==}
- engines: {node: '>=10'}
-
- werift@0.22.4:
- resolution: {integrity: sha512-N/Jgh82cjhxTusQSJzAmgQhrqPcUrytlybrh45VoggusHEsw7Q8S8uhPD+5nvgDM8FYyjJ0BcMGg5vbvalWi0A==}
- engines: {node: '>=16'}
-
- which-module@2.0.1:
- resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- wrap-ansi@6.2.0:
- resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
- engines: {node: '>=8'}
-
- wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
- ws@8.18.3:
- resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- y18n@4.0.3:
- resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
-
- yargs-parser@18.1.3:
- resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
- engines: {node: '>=6'}
-
- yargs@15.4.1:
- resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
- engines: {node: '>=8'}
-
- yoctocolors@2.1.2:
- resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
- engines: {node: '>=18'}
-
- zeromq@6.5.0:
- resolution: {integrity: sha512-vWOrt19lvcXTxu5tiHXfEGQuldSlU+qZn2TT+4EbRQzaciWGwNZ99QQTolQOmcwVgZLodv+1QfC6UZs2PX/6pQ==}
- engines: {node: '>= 12'}
-
- zod-package-json@1.2.0:
- resolution: {integrity: sha512-tamtgPM3MkP+obfO2dLr/G+nYoYkpJKmuHdYEy6IXRKfLybruoJ5NUj0lM0LxwOpC9PpoGLbll1ecoeyj43Wsg==}
- engines: {node: '>=20'}
-
- zod@3.25.76:
- resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
-
-snapshots:
-
- '@actions/core@1.11.1':
- dependencies:
- '@actions/exec': 1.1.1
- '@actions/http-client': 2.2.3
-
- '@actions/exec@1.1.1':
- dependencies:
- '@actions/io': 1.1.3
-
- '@actions/http-client@2.2.3':
- dependencies:
- tunnel: 0.0.6
- undici: 5.29.0
-
- '@actions/io@1.1.3': {}
-
- '@babel/runtime@7.28.6': {}
-
- '@biomejs/biome@2.3.8':
- optionalDependencies:
- '@biomejs/cli-darwin-arm64': 2.3.8
- '@biomejs/cli-darwin-x64': 2.3.8
- '@biomejs/cli-linux-arm64': 2.3.8
- '@biomejs/cli-linux-arm64-musl': 2.3.8
- '@biomejs/cli-linux-x64': 2.3.8
- '@biomejs/cli-linux-x64-musl': 2.3.8
- '@biomejs/cli-win32-arm64': 2.3.8
- '@biomejs/cli-win32-x64': 2.3.8
-
- '@biomejs/cli-darwin-arm64@2.3.8':
- optional: true
-
- '@biomejs/cli-darwin-x64@2.3.8':
- optional: true
-
- '@biomejs/cli-linux-arm64-musl@2.3.8':
- optional: true
-
- '@biomejs/cli-linux-arm64@2.3.8':
- optional: true
-
- '@biomejs/cli-linux-x64-musl@2.3.8':
- optional: true
-
- '@biomejs/cli-linux-x64@2.3.8':
- optional: true
-
- '@biomejs/cli-win32-arm64@2.3.8':
- optional: true
-
- '@biomejs/cli-win32-x64@2.3.8':
- optional: true
-
- '@discordjs/builders@1.13.1':
- dependencies:
- '@discordjs/formatters': 0.6.2
- '@discordjs/util': 1.2.0
- '@sapphire/shapeshift': 4.0.0
- discord-api-types: 0.38.37
- fast-deep-equal: 3.1.3
- ts-mixer: 6.0.4
- tslib: 2.8.1
-
- '@discordjs/collection@2.1.1': {}
-
- '@discordjs/formatters@0.6.2':
- dependencies:
- discord-api-types: 0.38.37
-
- '@discordjs/util@1.2.0':
- dependencies:
- discord-api-types: 0.38.37
-
- '@emnapi/core@1.7.1':
- dependencies:
- '@emnapi/wasi-threads': 1.1.0
- tslib: 2.8.1
- optional: true
-
- '@emnapi/runtime@1.7.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@emnapi/wasi-threads@1.1.0':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@fastify/busboy@2.1.1': {}
-
- '@fidm/asn1@1.0.4': {}
-
- '@fidm/x509@1.2.1':
- dependencies:
- '@fidm/asn1': 1.0.4
- tweetnacl: 1.0.3
-
- '@img/colour@1.0.0': {}
-
- '@img/sharp-darwin-arm64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-darwin-arm64': 1.2.4
- optional: true
-
- '@img/sharp-darwin-x64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-darwin-x64': 1.2.4
- optional: true
-
- '@img/sharp-libvips-darwin-arm64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-darwin-x64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-arm64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-arm@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-ppc64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-riscv64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-s390x@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-x64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linuxmusl-x64@1.2.4':
- optional: true
-
- '@img/sharp-linux-arm64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm64': 1.2.4
- optional: true
-
- '@img/sharp-linux-arm@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm': 1.2.4
- optional: true
-
- '@img/sharp-linux-ppc64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-ppc64': 1.2.4
- optional: true
-
- '@img/sharp-linux-riscv64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-riscv64': 1.2.4
- optional: true
-
- '@img/sharp-linux-s390x@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-s390x': 1.2.4
- optional: true
-
- '@img/sharp-linux-x64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-x64': 1.2.4
- optional: true
-
- '@img/sharp-linuxmusl-arm64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
- optional: true
-
- '@img/sharp-linuxmusl-x64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-x64': 1.2.4
- optional: true
-
- '@img/sharp-wasm32@0.34.5':
- dependencies:
- '@emnapi/runtime': 1.7.1
- optional: true
-
- '@img/sharp-win32-arm64@0.34.5':
- optional: true
-
- '@img/sharp-win32-ia32@0.34.5':
- optional: true
-
- '@img/sharp-win32-x64@0.34.5':
- optional: true
-
- '@jsdevtools/ez-spawn@3.0.4':
- dependencies:
- call-me-maybe: 1.0.2
- cross-spawn: 7.0.6
- string-argv: 0.3.2
- type-detect: 4.1.0
-
- '@leichtgewicht/ip-codec@2.0.5': {}
-
- '@lng2004/node-datachannel@0.32.0-20260202':
- dependencies:
- prebuild-install: 7.1.3
-
- '@minhducsun2002/leb128@1.0.0': {}
-
- '@napi-rs/wasm-runtime@1.1.0':
- dependencies:
- '@emnapi/core': 1.7.1
- '@emnapi/runtime': 1.7.1
- '@tybys/wasm-util': 0.10.1
- optional: true
-
- '@noble/curves@1.9.7':
- dependencies:
- '@noble/hashes': 1.8.0
-
- '@noble/hashes@1.8.0': {}
-
- '@octokit/action@6.1.0':
- dependencies:
- '@octokit/auth-action': 4.1.0
- '@octokit/core': 5.2.2
- '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.2)
- '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.2)
- '@octokit/types': 12.6.0
- undici: 6.22.0
-
- '@octokit/auth-action@4.1.0':
- dependencies:
- '@octokit/auth-token': 4.0.0
- '@octokit/types': 13.10.0
-
- '@octokit/auth-token@4.0.0': {}
-
- '@octokit/core@5.2.2':
- dependencies:
- '@octokit/auth-token': 4.0.0
- '@octokit/graphql': 7.1.1
- '@octokit/request': 8.4.1
- '@octokit/request-error': 5.1.1
- '@octokit/types': 13.10.0
- before-after-hook: 2.2.3
- universal-user-agent: 6.0.1
-
- '@octokit/endpoint@9.0.6':
- dependencies:
- '@octokit/types': 13.10.0
- universal-user-agent: 6.0.1
-
- '@octokit/graphql@7.1.1':
- dependencies:
- '@octokit/request': 8.4.1
- '@octokit/types': 13.10.0
- universal-user-agent: 6.0.1
-
- '@octokit/openapi-types@20.0.0': {}
-
- '@octokit/openapi-types@24.2.0': {}
-
- '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.2)':
- dependencies:
- '@octokit/core': 5.2.2
- '@octokit/types': 12.6.0
-
- '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.2)':
- dependencies:
- '@octokit/core': 5.2.2
- '@octokit/types': 12.6.0
-
- '@octokit/request-error@5.1.1':
- dependencies:
- '@octokit/types': 13.10.0
- deprecation: 2.3.1
- once: 1.4.0
-
- '@octokit/request@8.4.1':
- dependencies:
- '@octokit/endpoint': 9.0.6
- '@octokit/request-error': 5.1.1
- '@octokit/types': 13.10.0
- universal-user-agent: 6.0.1
-
- '@octokit/types@12.6.0':
- dependencies:
- '@octokit/openapi-types': 20.0.0
-
- '@octokit/types@13.10.0':
- dependencies:
- '@octokit/openapi-types': 24.2.0
-
- '@otplib/core@12.0.1': {}
-
- '@otplib/plugin-crypto@12.0.1':
- dependencies:
- '@otplib/core': 12.0.1
-
- '@otplib/plugin-thirty-two@12.0.1':
- dependencies:
- '@otplib/core': 12.0.1
- thirty-two: 1.0.2
-
- '@otplib/preset-default@12.0.1':
- dependencies:
- '@otplib/core': 12.0.1
- '@otplib/plugin-crypto': 12.0.1
- '@otplib/plugin-thirty-two': 12.0.1
-
- '@otplib/preset-v11@12.0.1':
- dependencies:
- '@otplib/core': 12.0.1
- '@otplib/plugin-crypto': 12.0.1
- '@otplib/plugin-thirty-two': 12.0.1
-
- '@peculiar/asn1-cms@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- '@peculiar/asn1-x509-attr': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-csr@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-ecc@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-pfx@2.6.0':
- dependencies:
- '@peculiar/asn1-cms': 2.6.0
- '@peculiar/asn1-pkcs8': 2.6.0
- '@peculiar/asn1-rsa': 2.6.0
- '@peculiar/asn1-schema': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-pkcs8@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-pkcs9@2.6.0':
- dependencies:
- '@peculiar/asn1-cms': 2.6.0
- '@peculiar/asn1-pfx': 2.6.0
- '@peculiar/asn1-pkcs8': 2.6.0
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- '@peculiar/asn1-x509-attr': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-rsa@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-schema@2.6.0':
- dependencies:
- asn1js: 3.0.7
- pvtsutils: 1.3.6
- tslib: 2.8.1
-
- '@peculiar/asn1-x509-attr@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- asn1js: 3.0.7
- tslib: 2.8.1
-
- '@peculiar/asn1-x509@2.6.0':
- dependencies:
- '@peculiar/asn1-schema': 2.6.0
- asn1js: 3.0.7
- pvtsutils: 1.3.6
- tslib: 2.8.1
-
- '@peculiar/x509@1.14.3':
- dependencies:
- '@peculiar/asn1-cms': 2.6.0
- '@peculiar/asn1-csr': 2.6.0
- '@peculiar/asn1-ecc': 2.6.0
- '@peculiar/asn1-pkcs9': 2.6.0
- '@peculiar/asn1-rsa': 2.6.0
- '@peculiar/asn1-schema': 2.6.0
- '@peculiar/asn1-x509': 2.6.0
- pvtsutils: 1.3.6
- reflect-metadata: 0.2.2
- tslib: 2.8.1
- tsyringe: 4.10.0
-
- '@sapphire/async-queue@1.5.5': {}
-
- '@sapphire/shapeshift@4.0.0':
- dependencies:
- fast-deep-equal: 3.1.3
- lodash: 4.17.21
-
- '@sec-ant/readable-stream@0.4.1': {}
-
- '@seydx/node-av-darwin-arm64@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-darwin-x64@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-linux-arm64@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-linux-x64@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-win32-arm64-mingw@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-win32-arm64-msvc@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-win32-x64-mingw@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@seydx/node-av-win32-x64-msvc@5.2.2':
- dependencies:
- unzipper: 0.12.3
- optional: true
-
- '@shinyoshiaki/binary-data@0.6.1':
- dependencies:
- generate-function: 2.3.1
- is-plain-object: 2.0.4
-
- '@shinyoshiaki/jspack@0.0.6': {}
-
- '@sindresorhus/merge-streams@4.0.0': {}
-
- '@snazzah/davey-android-arm-eabi@0.1.8':
- optional: true
-
- '@snazzah/davey-android-arm64@0.1.8':
- optional: true
-
- '@snazzah/davey-darwin-arm64@0.1.8':
- optional: true
-
- '@snazzah/davey-darwin-x64@0.1.8':
- optional: true
-
- '@snazzah/davey-freebsd-x64@0.1.8':
- optional: true
-
- '@snazzah/davey-linux-arm-gnueabihf@0.1.8':
- optional: true
-
- '@snazzah/davey-linux-arm64-gnu@0.1.8':
- optional: true
-
- '@snazzah/davey-linux-arm64-musl@0.1.8':
- optional: true
-
- '@snazzah/davey-linux-x64-gnu@0.1.8':
- optional: true
-
- '@snazzah/davey-linux-x64-musl@0.1.8':
- optional: true
-
- '@snazzah/davey-wasm32-wasi@0.1.8':
- dependencies:
- '@napi-rs/wasm-runtime': 1.1.0
- optional: true
-
- '@snazzah/davey-win32-arm64-msvc@0.1.8':
- optional: true
-
- '@snazzah/davey-win32-ia32-msvc@0.1.8':
- optional: true
-
- '@snazzah/davey-win32-x64-msvc@0.1.8':
- optional: true
-
- '@snazzah/davey@0.1.8':
- optionalDependencies:
- '@snazzah/davey-android-arm-eabi': 0.1.8
- '@snazzah/davey-android-arm64': 0.1.8
- '@snazzah/davey-darwin-arm64': 0.1.8
- '@snazzah/davey-darwin-x64': 0.1.8
- '@snazzah/davey-freebsd-x64': 0.1.8
- '@snazzah/davey-linux-arm-gnueabihf': 0.1.8
- '@snazzah/davey-linux-arm64-gnu': 0.1.8
- '@snazzah/davey-linux-arm64-musl': 0.1.8
- '@snazzah/davey-linux-x64-gnu': 0.1.8
- '@snazzah/davey-linux-x64-musl': 0.1.8
- '@snazzah/davey-wasm32-wasi': 0.1.8
- '@snazzah/davey-win32-arm64-msvc': 0.1.8
- '@snazzah/davey-win32-ia32-msvc': 0.1.8
- '@snazzah/davey-win32-x64-msvc': 0.1.8
-
- '@tybys/wasm-util@0.10.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@types/fluent-ffmpeg@2.1.28':
- dependencies:
- '@types/node': 25.0.1
-
- '@types/node@25.0.1':
- dependencies:
- undici-types: 7.16.0
-
- acorn@8.15.0: {}
-
- aes-js@3.1.2: {}
-
- ansi-regex@5.0.1: {}
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- asn1js@3.0.7:
- dependencies:
- pvtsutils: 1.3.6
- pvutils: 1.1.5
- tslib: 2.8.1
-
- asyncc@2.0.9: {}
-
- atomic-sleep@1.0.0: {}
-
- base64-js@1.5.1: {}
-
- before-after-hook@2.2.3: {}
-
- bl@4.1.0:
- dependencies:
- buffer: 5.7.1
- inherits: 2.0.4
- readable-stream: 3.6.2
-
- bluebird@3.7.2: {}
-
- buffer-crc32@1.0.0: {}
-
- buffer@5.7.1:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
- call-me-maybe@1.0.2: {}
-
- camelcase@5.3.1: {}
-
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
-
- chownr@1.1.4: {}
-
- cliui@6.0.0:
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 6.2.0
-
- cmake-ts@1.0.2: {}
-
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
- commander@12.1.0: {}
-
- confbox@0.1.8: {}
-
- core-util-is@1.0.3: {}
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- date-fns@2.30.0:
- dependencies:
- '@babel/runtime': 7.28.6
-
- debug-level@4.1.1:
- dependencies:
- asyncc: 2.0.9
- chalk: 4.1.2
- fast-safe-stringify: 2.1.1
- flatstr: 1.0.12
- map-lru: 2.1.0
- ms: 2.1.3
- sonic-boom: 4.2.0
- optionalDependencies:
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- debug@4.4.0:
- dependencies:
- ms: 2.1.3
-
- debug@4.4.3:
- dependencies:
- ms: 2.1.3
-
- decamelize@1.2.0: {}
-
- decode-uri-component@0.4.1: {}
-
- decompress-response@6.0.0:
- dependencies:
- mimic-response: 3.1.0
-
- deep-extend@0.6.0: {}
-
- deprecation@2.3.1: {}
-
- detect-libc@2.1.2: {}
-
- dijkstrajs@1.0.3: {}
-
- discord-api-types@0.38.37: {}
-
- discord.js-selfbot-v13@3.7.1:
- dependencies:
- '@discordjs/builders': 1.13.1
- '@discordjs/collection': 2.1.1
- '@sapphire/async-queue': 1.5.5
- '@sapphire/shapeshift': 4.0.0
- discord-api-types: 0.38.37
- fetch-cookie: 3.1.0
- find-process: 2.0.0
- otplib: 12.0.1
- prism-media: 1.3.5
- qrcode: 1.5.4
- tough-cookie: 5.1.2
- tree-kill: 1.2.2
- undici: 7.16.0
- werift-rtp: 0.8.8
- ws: 8.18.3
- transitivePeerDependencies:
- - '@discordjs/opus'
- - bufferutil
- - ffmpeg-static
- - node-opus
- - opusscript
- - utf-8-validate
-
- dns-packet@5.6.1:
- dependencies:
- '@leichtgewicht/ip-codec': 2.0.5
-
- duplexer2@0.1.4:
- dependencies:
- readable-stream: 2.3.8
-
- emoji-regex@8.0.0: {}
-
- end-of-stream@1.4.5:
- dependencies:
- once: 1.4.0
-
- execa@9.6.1:
- dependencies:
- '@sindresorhus/merge-streams': 4.0.0
- cross-spawn: 7.0.6
- figures: 6.1.0
- get-stream: 9.0.1
- human-signals: 8.0.1
- is-plain-obj: 4.1.0
- is-stream: 4.0.1
- npm-run-path: 6.0.0
- pretty-ms: 9.3.0
- signal-exit: 4.1.0
- strip-final-newline: 4.0.0
- yoctocolors: 2.1.2
-
- expand-template@2.0.3: {}
-
- fast-deep-equal@3.1.3: {}
-
- fast-safe-stringify@2.1.1: {}
-
- fdir@6.5.0(picomatch@4.0.3):
- optionalDependencies:
- picomatch: 4.0.3
-
- fetch-cookie@3.1.0:
- dependencies:
- set-cookie-parser: 2.7.2
- tough-cookie: 5.1.2
-
- figures@6.1.0:
- dependencies:
- is-unicode-supported: 2.1.0
-
- filter-obj@5.1.0: {}
-
- find-process@2.0.0:
- dependencies:
- chalk: 4.1.2
- commander: 12.1.0
- loglevel: 1.9.2
-
- find-up@4.1.0:
- dependencies:
- locate-path: 5.0.0
- path-exists: 4.0.0
-
- flatstr@1.0.12: {}
-
- fluent-ffmpeg-simplified@0.1.0:
- dependencies:
- execa: 9.6.1
- string-argv: 0.3.2
-
- fs-constants@1.0.0: {}
-
- fs-extra@11.3.3:
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.2.0
- universalify: 2.0.1
-
- generate-function@2.3.1:
- dependencies:
- is-property: 1.0.2
-
- get-caller-file@2.0.5: {}
-
- get-stream@9.0.1:
- dependencies:
- '@sec-ant/readable-stream': 0.4.1
- is-stream: 4.0.1
-
- github-from-package@0.0.0: {}
-
- graceful-fs@4.2.11: {}
-
- has-flag@4.0.0: {}
-
- human-signals@8.0.1: {}
-
- ieee754@1.2.1: {}
-
- ignore@5.3.2: {}
-
- inherits@2.0.4: {}
-
- ini@1.3.8: {}
-
- int64-buffer@1.1.0: {}
-
- ip@2.0.1: {}
-
- is-fullwidth-code-point@3.0.0: {}
-
- is-plain-obj@4.1.0: {}
-
- is-plain-object@2.0.4:
- dependencies:
- isobject: 3.0.1
-
- is-property@1.0.2: {}
-
- is-stream@4.0.1: {}
-
- is-unicode-supported@2.1.0: {}
-
- isarray@1.0.0: {}
-
- isbinaryfile@5.0.7: {}
-
- isexe@2.0.0: {}
-
- isobject@3.0.1: {}
-
- jsonfile@6.2.0:
- dependencies:
- universalify: 2.0.1
- optionalDependencies:
- graceful-fs: 4.2.11
-
- locate-path@5.0.0:
- dependencies:
- p-locate: 4.1.0
-
- lodash@4.17.21: {}
-
- loglevel@1.9.2: {}
-
- map-lru@2.1.0: {}
-
- mimic-response@3.1.0: {}
-
- minimist@1.2.8: {}
-
- mkdirp-classic@0.5.3: {}
-
- mlly@1.8.0:
- dependencies:
- acorn: 8.15.0
- pathe: 2.0.3
- pkg-types: 1.3.1
- ufo: 1.6.1
-
- mp4box@0.5.4: {}
-
- ms@2.1.3: {}
-
- multicast-dns@7.2.5:
- dependencies:
- dns-packet: 5.6.1
- thunky: 1.1.0
-
- napi-build-utils@2.0.0: {}
-
- node-abi@3.87.0:
- dependencies:
- semver: 7.7.3
-
- node-addon-api@8.5.0: {}
-
- node-av@5.2.2:
- dependencies:
- unzipper: 0.12.3
- werift: 0.22.4
- optionalDependencies:
- '@seydx/node-av-darwin-arm64': 5.2.2
- '@seydx/node-av-darwin-x64': 5.2.2
- '@seydx/node-av-linux-arm64': 5.2.2
- '@seydx/node-av-linux-x64': 5.2.2
- '@seydx/node-av-win32-arm64-mingw': 5.2.2
- '@seydx/node-av-win32-arm64-msvc': 5.2.2
- '@seydx/node-av-win32-x64-mingw': 5.2.2
- '@seydx/node-av-win32-x64-msvc': 5.2.2
- transitivePeerDependencies:
- - supports-color
-
- node-int64@0.4.0: {}
-
- npm-run-path@6.0.0:
- dependencies:
- path-key: 4.0.0
- unicorn-magic: 0.3.0
-
- once@1.4.0:
- dependencies:
- wrappy: 1.0.2
-
- otplib@12.0.1:
- dependencies:
- '@otplib/core': 12.0.1
- '@otplib/preset-default': 12.0.1
- '@otplib/preset-v11': 12.0.1
-
- p-cancelable@2.1.1: {}
-
- p-debounce@5.1.0: {}
-
- p-limit@2.3.0:
- dependencies:
- p-try: 2.2.0
-
- p-locate@4.1.0:
- dependencies:
- p-limit: 2.3.0
-
- p-try@2.2.0: {}
-
- parse-ms@4.0.0: {}
-
- path-exists@4.0.0: {}
-
- path-key@3.1.1: {}
-
- path-key@4.0.0: {}
-
- pathe@2.0.3: {}
-
- picomatch@4.0.3: {}
-
- pkg-pr-new@0.0.62:
- dependencies:
- '@actions/core': 1.11.1
- '@jsdevtools/ez-spawn': 3.0.4
- '@octokit/action': 6.1.0
- ignore: 5.3.2
- isbinaryfile: 5.0.7
- pkg-types: 1.3.1
- query-registry: 3.0.1
- tinyglobby: 0.2.15
-
- pkg-types@1.3.1:
- dependencies:
- confbox: 0.1.8
- mlly: 1.8.0
- pathe: 2.0.3
-
- pngjs@5.0.0: {}
-
- prebuild-install@7.1.3:
- dependencies:
- detect-libc: 2.1.2
- expand-template: 2.0.3
- github-from-package: 0.0.0
- minimist: 1.2.8
- mkdirp-classic: 0.5.3
- napi-build-utils: 2.0.0
- node-abi: 3.87.0
- pump: 3.0.3
- rc: 1.2.8
- simple-get: 4.0.1
- tar-fs: 2.1.4
- tunnel-agent: 0.6.0
-
- pretty-ms@9.3.0:
- dependencies:
- parse-ms: 4.0.0
-
- prism-media@1.3.5: {}
-
- process-nextick-args@2.0.1: {}
-
- pump@3.0.3:
- dependencies:
- end-of-stream: 1.4.5
- once: 1.4.0
-
- pvtsutils@1.3.6:
- dependencies:
- tslib: 2.8.1
-
- pvutils@1.1.5: {}
-
- qrcode@1.5.4:
- dependencies:
- dijkstrajs: 1.0.3
- pngjs: 5.0.0
- yargs: 15.4.1
-
- query-registry@3.0.1:
- dependencies:
- query-string: 9.3.1
- quick-lru: 7.3.0
- url-join: 5.0.0
- validate-npm-package-name: 5.0.1
- zod: 3.25.76
- zod-package-json: 1.2.0
-
- query-string@9.3.1:
- dependencies:
- decode-uri-component: 0.4.1
- filter-obj: 5.1.0
- split-on-first: 3.0.0
-
- quick-lru@7.3.0: {}
-
- rc@1.2.8:
- dependencies:
- deep-extend: 0.6.0
- ini: 1.3.8
- minimist: 1.2.8
- strip-json-comments: 2.0.1
-
- readable-stream@2.3.8:
- dependencies:
- core-util-is: 1.0.3
- inherits: 2.0.4
- isarray: 1.0.0
- process-nextick-args: 2.0.1
- safe-buffer: 5.1.2
- string_decoder: 1.1.1
- util-deprecate: 1.0.2
-
- readable-stream@3.6.2:
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.1.1
- util-deprecate: 1.0.2
-
- reflect-metadata@0.2.2: {}
-
- require-directory@2.1.1: {}
-
- require-main-filename@2.0.0: {}
-
- rx.mini@1.4.0: {}
-
- safe-buffer@5.1.2: {}
-
- semver@7.7.3: {}
-
- set-blocking@2.0.0: {}
-
- set-cookie-parser@2.7.2: {}
-
- sharp@0.34.5:
- dependencies:
- '@img/colour': 1.0.0
- detect-libc: 2.1.2
- semver: 7.7.3
- optionalDependencies:
- '@img/sharp-darwin-arm64': 0.34.5
- '@img/sharp-darwin-x64': 0.34.5
- '@img/sharp-libvips-darwin-arm64': 1.2.4
- '@img/sharp-libvips-darwin-x64': 1.2.4
- '@img/sharp-libvips-linux-arm': 1.2.4
- '@img/sharp-libvips-linux-arm64': 1.2.4
- '@img/sharp-libvips-linux-ppc64': 1.2.4
- '@img/sharp-libvips-linux-riscv64': 1.2.4
- '@img/sharp-libvips-linux-s390x': 1.2.4
- '@img/sharp-libvips-linux-x64': 1.2.4
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
- '@img/sharp-libvips-linuxmusl-x64': 1.2.4
- '@img/sharp-linux-arm': 0.34.5
- '@img/sharp-linux-arm64': 0.34.5
- '@img/sharp-linux-ppc64': 0.34.5
- '@img/sharp-linux-riscv64': 0.34.5
- '@img/sharp-linux-s390x': 0.34.5
- '@img/sharp-linux-x64': 0.34.5
- '@img/sharp-linuxmusl-arm64': 0.34.5
- '@img/sharp-linuxmusl-x64': 0.34.5
- '@img/sharp-wasm32': 0.34.5
- '@img/sharp-win32-arm64': 0.34.5
- '@img/sharp-win32-ia32': 0.34.5
- '@img/sharp-win32-x64': 0.34.5
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- signal-exit@4.1.0: {}
-
- simple-concat@1.0.1: {}
-
- simple-get@4.0.1:
- dependencies:
- decompress-response: 6.0.0
- once: 1.4.0
- simple-concat: 1.0.1
-
- sonic-boom@4.2.0:
- dependencies:
- atomic-sleep: 1.0.0
-
- split-on-first@3.0.0: {}
-
- string-argv@0.3.2: {}
-
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string_decoder@1.1.1:
- dependencies:
- safe-buffer: 5.1.2
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-final-newline@4.0.0: {}
-
- strip-json-comments@2.0.1: {}
-
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
-
- tar-fs@2.1.4:
- dependencies:
- chownr: 1.1.4
- mkdirp-classic: 0.5.3
- pump: 3.0.3
- tar-stream: 2.2.0
-
- tar-stream@2.2.0:
- dependencies:
- bl: 4.1.0
- end-of-stream: 1.4.5
- fs-constants: 1.0.0
- inherits: 2.0.4
- readable-stream: 3.6.2
-
- thirty-two@1.0.2: {}
-
- thunky@1.1.0: {}
-
- tinyglobby@0.2.15:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
-
- tldts-core@6.1.86: {}
-
- tldts@6.1.86:
- dependencies:
- tldts-core: 6.1.86
-
- tough-cookie@5.1.2:
- dependencies:
- tldts: 6.1.86
-
- tree-kill@1.2.2: {}
-
- ts-mixer@6.0.4: {}
-
- tslib@1.14.1: {}
-
- tslib@2.8.1: {}
-
- tsyringe@4.10.0:
- dependencies:
- tslib: 1.14.1
-
- tunnel-agent@0.6.0:
- dependencies:
- safe-buffer: 5.1.2
-
- tunnel@0.0.6: {}
-
- turbo-crc32@1.0.1: {}
-
- tweetnacl@1.0.3: {}
-
- type-detect@4.1.0: {}
-
- typescript@5.9.3: {}
-
- ufo@1.6.1: {}
-
- undici-types@7.16.0: {}
-
- undici@5.29.0:
- dependencies:
- '@fastify/busboy': 2.1.1
-
- undici@6.22.0: {}
-
- undici@7.16.0: {}
-
- unicorn-magic@0.3.0: {}
-
- universal-user-agent@6.0.1: {}
-
- universalify@2.0.1: {}
-
- unzipper@0.12.3:
- dependencies:
- bluebird: 3.7.2
- duplexer2: 0.1.4
- fs-extra: 11.3.3
- graceful-fs: 4.2.11
- node-int64: 0.4.0
-
- url-join@5.0.0: {}
-
- util-deprecate@1.0.2: {}
-
- validate-npm-package-name@5.0.1: {}
-
- werift-common@0.0.3:
- dependencies:
- '@shinyoshiaki/jspack': 0.0.6
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- werift-dtls@0.5.7:
- dependencies:
- '@fidm/x509': 1.2.1
- '@noble/curves': 1.9.7
- '@peculiar/x509': 1.14.3
- '@shinyoshiaki/binary-data': 0.6.1
- date-fns: 2.30.0
- lodash: 4.17.21
- rx.mini: 1.4.0
- tweetnacl: 1.0.3
-
- werift-ice@0.2.2:
- dependencies:
- '@shinyoshiaki/jspack': 0.0.6
- buffer-crc32: 1.0.0
- debug: 4.4.3
- int64-buffer: 1.1.0
- ip: 2.0.1
- lodash: 4.17.21
- multicast-dns: 7.2.5
- p-cancelable: 2.1.1
- rx.mini: 1.4.0
- transitivePeerDependencies:
- - supports-color
-
- werift-rtp@0.8.8:
- dependencies:
- '@minhducsun2002/leb128': 1.0.0
- '@shinyoshiaki/jspack': 0.0.6
- aes-js: 3.1.2
- buffer: 6.0.3
- mp4box: 0.5.4
-
- werift-sctp@0.0.6:
- dependencies:
- '@shinyoshiaki/binary-data': 0.6.1
- '@shinyoshiaki/jspack': 0.0.6
- lodash: 4.17.21
- rx.mini: 1.4.0
- turbo-crc32: 1.0.1
-
- werift@0.22.4:
- dependencies:
- '@fidm/x509': 1.2.1
- '@minhducsun2002/leb128': 1.0.0
- '@noble/curves': 1.9.7
- '@peculiar/x509': 1.14.3
- '@shinyoshiaki/binary-data': 0.6.1
- '@shinyoshiaki/jspack': 0.0.6
- aes-js: 3.1.2
- buffer: 6.0.3
- buffer-crc32: 1.0.0
- debug: 4.4.0
- fast-deep-equal: 3.1.3
- int64-buffer: 1.1.0
- ip: 2.0.1
- mp4box: 0.5.4
- multicast-dns: 7.2.5
- turbo-crc32: 1.0.1
- tweetnacl: 1.0.3
- werift-common: 0.0.3
- werift-dtls: 0.5.7
- werift-ice: 0.2.2
- werift-rtp: 0.8.8
- werift-sctp: 0.0.6
- transitivePeerDependencies:
- - supports-color
-
- which-module@2.0.1: {}
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- wrap-ansi@6.2.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrappy@1.0.2: {}
-
- ws@8.18.3: {}
-
- y18n@4.0.3: {}
-
- yargs-parser@18.1.3:
- dependencies:
- camelcase: 5.3.1
- decamelize: 1.2.0
-
- yargs@15.4.1:
- dependencies:
- cliui: 6.0.0
- decamelize: 1.2.0
- find-up: 4.1.0
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- require-main-filename: 2.0.0
- set-blocking: 2.0.0
- string-width: 4.2.3
- which-module: 2.0.1
- y18n: 4.0.3
- yargs-parser: 18.1.3
-
- yoctocolors@2.1.2: {}
-
- zeromq@6.5.0:
- dependencies:
- cmake-ts: 1.0.2
- node-addon-api: 8.5.0
-
- zod-package-json@1.2.0:
- dependencies:
- zod: 3.25.76
-
- zod@3.25.76: {}
diff --git a/vendor/discord-video-stream/src/client/GatewayEvents.ts b/vendor/discord-video-stream/src/client/GatewayEvents.ts
deleted file mode 100644
index 102a22b..0000000
--- a/vendor/discord-video-stream/src/client/GatewayEvents.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-type GatewayEventGeneric = {
- t: Type;
- d: Data;
-};
-
-export namespace GatewayEvent {
- export type VoiceStateUpdate = GatewayEventGeneric<
- "VOICE_STATE_UPDATE",
- {
- user_id: string;
- session_id: string;
- }
- >;
- export type VoiceServerUpdate = GatewayEventGeneric<
- "VOICE_SERVER_UPDATE",
- {
- guild_id: string;
- channel_id?: string;
- endpoint: string;
- token: string;
- }
- >;
- export type StreamCreate = GatewayEventGeneric<
- "STREAM_CREATE",
- {
- stream_key: string;
- rtc_server_id: string;
- }
- >;
- export type StreamServerUpdate = GatewayEventGeneric<
- "STREAM_SERVER_UPDATE",
- {
- stream_key: string;
- endpoint: string;
- token: string;
- }
- >;
-}
-
-export type GatewayEvent =
- | GatewayEvent.VoiceStateUpdate
- | GatewayEvent.VoiceServerUpdate
- | GatewayEvent.StreamCreate
- | GatewayEvent.StreamServerUpdate;
-
-export type GatewayEventMap = {
- [E in GatewayEvent as E["t"]]: [E["d"]];
-};
diff --git a/vendor/discord-video-stream/src/client/GatewayOpCodes.ts b/vendor/discord-video-stream/src/client/GatewayOpCodes.ts
deleted file mode 100644
index 2a83f15..0000000
--- a/vendor/discord-video-stream/src/client/GatewayOpCodes.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-export enum GatewayOpCodes {
- DISPATCH = 0,
- HEARTBEAT = 1,
- IDENTIFY = 2,
- PRESENCE_UPDATE = 3,
- VOICE_STATE_UPDATE = 4,
- VOICE_SERVER_PING = 5,
- RESUME = 6,
- RECONNECT = 7,
- REQUEST_GUILD_MEMBERS = 8,
- INVALID_SESSION = 9,
- HELLO = 10,
- HEARTBEAT_ACK = 11,
- CALL_CONNECT = 13,
- GUILD_SUBSCRIPTIONS = 14,
- LOBBY_CONNECT = 15,
- LOBBY_DISCONNECT = 16,
- LOBBY_VOICE_STATES_UPDATE = 17,
- STREAM_CREATE = 18,
- STREAM_DELETE = 19,
- STREAM_WATCH = 20,
- STREAM_PING = 21,
- STREAM_SET_PAUSED = 22,
- REQUEST_GUILD_APPLICATION_COMMANDS = 24,
- EMBEDDED_ACTIVITY_LAUNCH = 25,
- EMBEDDED_ACTIVITY_CLOSE = 26,
- EMBEDDED_ACTIVITY_UPDATE = 27,
- REQUEST_FORUM_UNREADS = 28,
- REMOTE_COMMAND = 29,
- GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH = 30,
- REQUEST_SOUNDBOARD_SOUNDS = 31,
- SPEED_TEST_CREATE = 32,
- SPEED_TEST_DELETE = 33,
- REQUEST_LAST_MESSAGES = 34,
- SEARCH_RECENT_MEMBERS = 35,
- REQUEST_CHANNEL_STATUSES = 36,
- GUILD_SUBSCRIPTIONS_BULK = 37,
- GUILD_CHANNELS_RESYNC = 38,
- REQUEST_CHANNEL_MEMBER_COUNT = 39,
-}
diff --git a/vendor/discord-video-stream/src/client/Streamer.ts b/vendor/discord-video-stream/src/client/Streamer.ts
deleted file mode 100644
index b3d2124..0000000
--- a/vendor/discord-video-stream/src/client/Streamer.ts
+++ /dev/null
@@ -1,259 +0,0 @@
-import { EventEmitter } from "node:events";
-import { VoiceConnection } from "./voice/VoiceConnection.js";
-import { StreamConnection } from "./voice/StreamConnection.js";
-import { GatewayOpCodes } from "./GatewayOpCodes.js";
-import type {
- Client,
- DMChannel,
- GroupDMChannel,
- VoiceBasedChannel,
-} from "discord.js-selfbot-v13";
-import type { GatewayEvent, GatewayEventMap } from "./GatewayEvents.js";
-import type { WebRtcConnWrapper } from "./voice/WebRtcWrapper.js";
-import { generateStreamKey, parseStreamKey } from "../utils.js";
-
-export class Streamer {
- private _voiceConnection?: VoiceConnection;
- private _client: Client;
- private _gatewayEmitter = new EventEmitter();
-
- constructor(client: Client) {
- this._client = client;
-
- //listen for messages
- this.client.on("raw", (packet: GatewayEvent) => {
- // @ts-expect-error I don't know how to make this work with TypeScript, so whatever
- this._gatewayEmitter.emit(packet.t, packet.d);
- });
- }
-
- public get client(): Client {
- return this._client;
- }
-
- public get opts() {
- return {};
- }
-
- public get voiceConnection(): VoiceConnection | undefined {
- return this._voiceConnection;
- }
-
- public sendOpcode(code: number, data: unknown): void {
- this.client.ws.broadcast({
- op: code,
- d: data,
- });
- }
-
- public joinVoiceChannel(
- channel: DMChannel | GroupDMChannel | VoiceBasedChannel,
- ): Promise {
- let guildId: string | null = null;
-
- if (
- channel.type === "GUILD_STAGE_VOICE" ||
- channel.type === "GUILD_VOICE"
- ) {
- guildId = channel.guildId;
- }
-
- return this.joinVoice(guildId, channel.id);
- }
-
- /**
- * Joins a voice channel and returns a WebRtcConnWrapper object.
- * @param guild_id the guild id of the voice channel. If null, it will join a DM voice channel.
- * @param channel_id the channel id of the voice channel
- * @returns the WebRtcConnWrapper object
- * @throws Error if the client is not logged in
- */
- public joinVoice(
- guild_id: string | null,
- channel_id: string,
- ): Promise {
- return new Promise((resolve, reject) => {
- if (!this.client.user) {
- reject("Client not logged in");
- return;
- }
- const user_id = this.client.user.id;
- const voiceConn = new VoiceConnection(
- this,
- guild_id,
- user_id,
- channel_id,
- (conn) => {
- resolve(conn);
- },
- );
- this._voiceConnection = voiceConn;
- this._gatewayEmitter.on("VOICE_STATE_UPDATE", (d) => {
- if (user_id !== d.user_id) return;
- voiceConn.setSession(d.session_id);
- });
- this._gatewayEmitter.on("VOICE_SERVER_UPDATE", (d) => {
- if (guild_id !== d.guild_id) return;
-
- // channel_id is not set for guild voice calls
- if (d.channel_id && channel_id !== d.channel_id) return;
-
- voiceConn.setTokens(d.endpoint, d.token);
- });
- this.signalVideo(false);
- });
- }
-
- public createStream(): Promise {
- return new Promise((resolve, reject) => {
- if (!this.client.user) {
- reject("Client not logged in");
- return;
- }
- if (!this.voiceConnection) {
- reject("cannot start stream without first joining voice channel");
- return;
- }
-
- this.signalStream();
- const {
- guildId: clientGuildId,
- channelId: clientChannelId,
- session_id,
- } = this.voiceConnection;
- const { id: clientUserId } = this.client.user;
-
- if (!session_id) throw new Error("Session doesn't exist yet");
- const streamConn = new StreamConnection(
- this,
- clientGuildId,
- clientUserId,
- clientChannelId,
- (conn) => {
- resolve(conn);
- },
- );
- this.voiceConnection.streamConnection = streamConn;
- this._gatewayEmitter.on("STREAM_CREATE", (d) => {
- const { channelId, guildId, userId } = parseStreamKey(d.stream_key);
-
- if (
- clientGuildId !== guildId ||
- clientChannelId !== channelId ||
- clientUserId !== userId
- )
- return;
-
- streamConn.serverId = d.rtc_server_id;
- streamConn.streamKey = d.stream_key;
- streamConn.setSession(session_id);
- });
- this._gatewayEmitter.on("STREAM_SERVER_UPDATE", (d) => {
- const { channelId, guildId, userId } = parseStreamKey(d.stream_key);
-
- if (
- clientGuildId !== guildId ||
- clientChannelId !== channelId ||
- clientUserId !== userId
- )
- return;
-
- streamConn.setTokens(d.endpoint, d.token);
- });
- });
- }
-
- public async setStreamPreview(image: Buffer): Promise {
- if (!this.client.token) throw new Error("Please login :)");
- if (!this.voiceConnection?.streamConnection?.guildId) return;
- const data = `data:image/jpeg;base64,${image.toString("base64")}`;
- const { guildId } = this.voiceConnection.streamConnection;
- const server = await this.client.guilds.fetch(guildId);
- await server.members.me?.voice.postPreview(data);
- }
-
- public stopStream(): void {
- const stream = this.voiceConnection?.streamConnection;
-
- if (!stream) return;
-
- stream.stop();
-
- this.signalStopStream();
-
- this.voiceConnection.streamConnection = undefined;
- this._gatewayEmitter.removeAllListeners("STREAM_CREATE");
- this._gatewayEmitter.removeAllListeners("STREAM_SERVER_UPDATE");
- }
-
- public leaveVoice(): void {
- this.voiceConnection?.stop();
-
- this.signalLeaveVoice();
-
- this._voiceConnection = undefined;
- this._gatewayEmitter.removeAllListeners("VOICE_STATE_UPDATE");
- this._gatewayEmitter.removeAllListeners("VOICE_SERVER_UPDATE");
- }
-
- public signalVideo(video_enabled: boolean): void {
- if (!this.voiceConnection) return;
- const { guildId: guild_id, channelId: channel_id } = this.voiceConnection;
- this.sendOpcode(GatewayOpCodes.VOICE_STATE_UPDATE, {
- guild_id: guild_id,
- channel_id,
- self_mute: false,
- self_deaf: true,
- self_video: video_enabled,
- });
- }
-
- public signalStream(): void {
- if (!this.voiceConnection) return;
- const {
- type,
- guildId: guild_id,
- channelId: channel_id,
- botId: user_id,
- } = this.voiceConnection;
-
- const streamKey = generateStreamKey(type, guild_id, channel_id, user_id);
-
- this.sendOpcode(GatewayOpCodes.STREAM_CREATE, {
- type,
- guild_id,
- channel_id,
- preferred_region: null,
- });
-
- this.sendOpcode(GatewayOpCodes.STREAM_SET_PAUSED, {
- stream_key: streamKey,
- paused: false,
- });
- }
-
- public signalStopStream(): void {
- if (!this.voiceConnection) return;
- const {
- type,
- guildId: guild_id,
- channelId: channel_id,
- botId: user_id,
- } = this.voiceConnection;
-
- const streamKey = generateStreamKey(type, guild_id, channel_id, user_id);
- this.sendOpcode(GatewayOpCodes.STREAM_DELETE, {
- stream_key: streamKey,
- });
- }
-
- public signalLeaveVoice(): void {
- this.sendOpcode(GatewayOpCodes.VOICE_STATE_UPDATE, {
- guild_id: null,
- channel_id: null,
- self_mute: true,
- self_deaf: false,
- self_video: false,
- });
- }
-}
diff --git a/vendor/discord-video-stream/src/client/index.ts b/vendor/discord-video-stream/src/client/index.ts
deleted file mode 100644
index 4589dcf..0000000
--- a/vendor/discord-video-stream/src/client/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from "./voice/index.js";
-export * from "./GatewayOpCodes.js";
-export * from "./Streamer.js";
diff --git a/vendor/discord-video-stream/src/client/processing/AnnexBBitstreamReaderWriter.ts b/vendor/discord-video-stream/src/client/processing/AnnexBBitstreamReaderWriter.ts
deleted file mode 100644
index 112c484..0000000
--- a/vendor/discord-video-stream/src/client/processing/AnnexBBitstreamReaderWriter.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-export class AnnexBBitstreamReader {
- private _buffer: Buffer;
- private _byteOffset = 0;
- private _bitOffset = 0;
-
- constructor(buffer: Buffer) {
- this._buffer = buffer;
- }
- public readBits(count: number) {
- if (count === 0) return 0;
- let result = 0;
- while (count > 0) {
- if (this._byteOffset >= this._buffer.length)
- throw new Error("Bad byte offset");
- if (
- this._bitOffset === 0 &&
- this._byteOffset >= 2 &&
- this._buffer[this._byteOffset - 2] === 0 &&
- this._buffer[this._byteOffset - 1] === 0 &&
- this._buffer[this._byteOffset] === 3
- ) {
- // Skip over emulation prevention
- this._byteOffset++;
- }
- if (this._bitOffset === 0 && count >= 8) {
- // We're byte aligned, read whole bytes and push in
- result = (result << 8) | this._buffer[this._byteOffset++];
- count -= 8;
- } else {
- // Read just enough to get us to the next byte
- const numBitsToRead = Math.min(count, 8 - this._bitOffset);
- const mask = (1 << numBitsToRead) - 1;
- const newBits =
- (this._buffer[this._byteOffset] >>
- (8 - this._bitOffset - numBitsToRead)) &
- mask;
- result = (result << numBitsToRead) | newBits;
- count -= numBitsToRead;
- this._bitOffset += numBitsToRead;
- if (this._bitOffset === 8) {
- this._bitOffset = 0;
- this._byteOffset++;
- }
- }
- }
- return result;
- }
- public readUnsigned(bits: number) {
- return this.readBits(bits);
- }
- public readSigned(bits: number) {
- const unsigned = this.readUnsigned(bits);
- if (unsigned & (1 << (bits - 1))) return unsigned - (1 << bits);
- return unsigned;
- }
- public readUnsignedExpGolomb() {
- let leading0 = 0;
- while (this.readBits(1) === 0) leading0++;
-
- return (1 << leading0) + this.readBits(leading0) - 1;
- }
- public readSignedExpGolomb() {
- // Mapping: x <= 0 => -2x, x > 0 => 2x - 1
- const unsigned = this.readUnsignedExpGolomb();
- if (unsigned % 2 === 0) return unsigned / -2;
- return (unsigned + 1) / 2;
- }
-}
-
-export class AnnexBBitstreamWriter {
- private _arr: number[] = [];
- private _pendingByte = 0;
- private _bitOffset = 0;
-
- public toBuffer() {
- return Buffer.from(this._arr);
- }
- public flush() {
- // Write the pending byte into the array and reset, taking care of emulation prevention
- if (
- this._pendingByte <= 3 &&
- this._arr.at(-1) === 0 &&
- this._arr.at(-2) === 0
- )
- this._arr.push(3);
- this._arr.push(this._pendingByte);
- this._pendingByte = 0;
- this._bitOffset = 0;
- }
- public writeBits(bits: number, count: number) {
- while (count > 0) {
- if (this._bitOffset === 0) {
- if (count >= 8) {
- // We're byte aligned and has more than 1 byte left to write, write a whole byte
- this._pendingByte = (bits >> (count - 8)) & 0xff;
- count -= 8;
- this.flush();
- } else {
- // We have less than 1 byte, write the rest in
- const mask = (1 << count) - 1;
- this._pendingByte |= (bits & mask) << (8 - count);
- this._bitOffset = count;
- count = 0;
- }
- } else {
- // Write the minimum number of bits to get us byte aligned again
- const numBitsToWrite = Math.min(8 - this._bitOffset, count);
- const bitsToWrite =
- (bits >> (count - numBitsToWrite)) & ((1 << numBitsToWrite) - 1);
- this._pendingByte |=
- bitsToWrite << (8 - this._bitOffset - numBitsToWrite);
- count -= numBitsToWrite;
- this._bitOffset += numBitsToWrite;
- if (this._bitOffset === 8) {
- this._bitOffset = 0;
- this.flush();
- }
- }
- }
- }
- public writeUnsigned(num: number, count: number) {
- if (num < 0) throw new Error("Expected a non-negative number");
- this.writeBits(num, count);
- }
- public writeSigned(num: number, count: number) {
- if (count <= 0) return;
- if (count > 32) throw new Error("writeSigned supports up to 32 bits");
-
- // Build mask for `count` bits. Handle 32-bit as a special case.
- const mask =
- count === 32 ? 0xffffffff >>> 0 : (((1 << count) >>> 0) - 1) >>> 0;
-
- // Convert to two's-complement unsigned representation and write
- const unsigned = (num & mask) >>> 0;
- this.writeBits(unsigned, count);
- }
- public writeUnsignedExpGolomb(num: number) {
- if (num < 0) throw new Error("Expected a non-negative number");
- num++;
- const bitCount = 32 - Math.clz32(num >>> 0);
- this.writeBits(0, bitCount - 1);
- this.writeBits(num, bitCount);
- }
- public writeSignedExpGolomb(num: number) {
- if (num < 0) this.writeUnsignedExpGolomb(-2 * num);
- else this.writeUnsignedExpGolomb(2 * num - 1);
- }
-}
diff --git a/vendor/discord-video-stream/src/client/processing/AnnexBHelper.ts b/vendor/discord-video-stream/src/client/processing/AnnexBHelper.ts
deleted file mode 100644
index 1a8fc17..0000000
--- a/vendor/discord-video-stream/src/client/processing/AnnexBHelper.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-export enum H264NalUnitTypes {
- Unspecified = 0,
- CodedSliceNonIDR = 1,
- CodedSlicePartitionA = 2,
- CodedSlicePartitionB = 3,
- CodedSlicePartitionC = 4,
- CodedSliceIdr = 5,
- SEI = 6,
- SPS = 7,
- PPS = 8,
- AccessUnitDelimiter = 9,
- EndOfSequence = 10,
- EndOfStream = 11,
- FillerData = 12,
- SEIExtenstion = 13,
- PrefixNalUnit = 14,
- SubsetSPS = 15,
-}
-
-export enum H265NalUnitTypes {
- TRAIL_N = 0,
- TRAIL_R = 1,
- TSA_N = 2,
- TSA_R = 3,
- STSA_N = 4,
- STSA_R = 5,
- RADL_N = 6,
- RADL_R = 7,
- RASL_N = 8,
- RASL_R = 9,
- RSV_VCL_N10 = 10,
- RSV_VCL_R11 = 11,
- RSV_VCL_N12 = 12,
- RSV_VCL_R13 = 13,
- RSV_VCL_N14 = 14,
- RSV_VCL_R15 = 15,
- BLA_W_LP = 16,
- BLA_W_RADL = 17,
- BLA_N_LP = 18,
- IDR_W_RADL = 19,
- IDR_N_LP = 20,
- CRA_NUT = 21,
- RSV_IRAP_VCL22 = 22,
- RSV_IRAP_VCL23 = 23,
- RSV_VCL24 = 24,
- RSV_VCL25 = 25,
- RSV_VCL26 = 26,
- RSV_VCL27 = 27,
- RSV_VCL28 = 28,
- RSV_VCL29 = 29,
- RSV_VCL30 = 30,
- RSV_VCL31 = 31,
- VPS_NUT = 32,
- SPS_NUT = 33,
- PPS_NUT = 34,
- AUD_NUT = 35,
- EOS_NUT = 36,
- EOB_NUT = 37,
- FD_NUT = 38,
- PREFIX_SEI_NUT = 39,
- SUFFIX_SEI_NUT = 40,
- RSV_NVCL41 = 41,
- RSV_NVCL42 = 42,
- RSV_NVCL43 = 43,
- RSV_NVCL44 = 44,
- RSV_NVCL45 = 45,
- RSV_NVCL46 = 46,
- RSV_NVCL47 = 47,
- UNSPEC48 = 48,
- UNSPEC49 = 49,
- UNSPEC50 = 50,
- UNSPEC51 = 51,
- UNSPEC52 = 52,
- UNSPEC53 = 53,
- UNSPEC54 = 54,
- UNSPEC55 = 55,
- UNSPEC56 = 56,
- UNSPEC57 = 57,
- UNSPEC58 = 58,
- UNSPEC59 = 59,
- UNSPEC60 = 60,
- UNSPEC61 = 61,
- UNSPEC62 = 62,
- UNSPEC63 = 63,
-}
-
-export interface AnnexBHelpers {
- getUnitType(frame: Buffer): number;
- splitHeader(frame: Buffer): [Buffer, Buffer];
- isAUD(unitType: number): boolean;
-}
-
-export const H264Helpers: AnnexBHelpers = {
- getUnitType(frame) {
- return frame[0] & 0x1f;
- },
- splitHeader(frame) {
- return [frame.subarray(0, 1), frame.subarray(1)];
- },
- isAUD(unitType) {
- return unitType === H264NalUnitTypes.AccessUnitDelimiter;
- },
-};
-
-export const H265Helpers: AnnexBHelpers = {
- getUnitType(frame) {
- return (frame[0] >> 1) & 0x3f;
- },
- splitHeader(frame) {
- return [frame.subarray(0, 2), frame.subarray(2)];
- },
- isAUD(unitType) {
- return unitType === H265NalUnitTypes.AUD_NUT;
- },
-};
-
-export const startCode3 = Buffer.from([0, 0, 1]);
-
-export function splitNalu(buf: Buffer) {
- let temp: Buffer | null = buf;
- const nalus: Buffer[] = [];
- while (temp?.byteLength) {
- let pos: number = temp.indexOf(startCode3);
- let length = 3;
- if (pos > 0 && temp[pos - 1] === 0) {
- pos--;
- length++;
- }
- const nalu = pos === -1 ? temp : temp.subarray(0, pos);
- temp = pos === -1 ? null : temp.subarray(pos + length);
- if (nalu.byteLength) nalus.push(nalu);
- }
- return nalus;
-}
diff --git a/vendor/discord-video-stream/src/client/processing/SPSVUIRewriter.ts b/vendor/discord-video-stream/src/client/processing/SPSVUIRewriter.ts
deleted file mode 100644
index a1a3fb1..0000000
--- a/vendor/discord-video-stream/src/client/processing/SPSVUIRewriter.ts
+++ /dev/null
@@ -1,332 +0,0 @@
-import {
- AnnexBBitstreamReader,
- AnnexBBitstreamWriter,
-} from "./AnnexBBitstreamReaderWriter.js";
-
-export function rewriteSPSVUI(buffer: Buffer) {
- const reader = new AnnexBBitstreamReader(buffer.subarray(1));
- const writer = new AnnexBBitstreamWriter();
-
- const readBit = (n = 1) => reader.readBits(n);
- const writeBit = (v: number, n = 1) => writer.writeBits(v, n);
- const readU = (n: number) => reader.readUnsigned(n);
- const writeU = (v: number, n: number) => writer.writeUnsigned(v, n);
- const readUE = () => reader.readUnsignedExpGolomb();
- const writeUE = (v: number) => writer.writeUnsignedExpGolomb(v);
- const readSE = () => reader.readSignedExpGolomb();
- const writeSE = (v: number) => writer.writeSignedExpGolomb(v);
-
- // Rewrite the NAL header
- writeU(buffer[0], 8);
-
- const profile_idc = readU(8);
- writeU(profile_idc, 8);
-
- const constraint_flags = readU(8);
- writeU(constraint_flags, 8);
-
- const level_idc = readU(8);
- writeU(level_idc, 8);
-
- const seq_parameter_set_id = readUE();
- writeUE(seq_parameter_set_id);
-
- // If profile in high profiles, additional fields
- const highProfiles = new Set([
- 100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 144,
- ]);
- if (highProfiles.has(profile_idc)) {
- const chroma_format_idc = readUE();
- writeUE(chroma_format_idc);
-
- if (chroma_format_idc === 3) {
- const separate_colour_plane_flag = readBit(1);
- writeBit(separate_colour_plane_flag, 1);
- }
-
- const bit_depth_luma_minus8 = readUE();
- writeUE(bit_depth_luma_minus8);
- const bit_depth_chroma_minus8 = readUE();
- writeUE(bit_depth_chroma_minus8);
-
- const qpprime_y_zero_transform_bypass_flag = readBit(1);
- writeBit(qpprime_y_zero_transform_bypass_flag, 1);
-
- const seq_scaling_matrix_present_flag = readBit(1);
- writeBit(seq_scaling_matrix_present_flag, 1);
- if (seq_scaling_matrix_present_flag) {
- const scalingCount = chroma_format_idc !== 3 ? 8 : 12;
- for (let i = 0; i < scalingCount; i++) {
- const seq_scaling_list_present_flag = readBit(1);
- writeBit(seq_scaling_list_present_flag, 1);
- if (seq_scaling_list_present_flag) {
- const size = i < 6 ? 16 : 64;
- // scaling_list(size)
- let lastScale = 8;
- let nextScale = 8;
- for (let j = 0; j < size; j++) {
- const delta = readSE();
- writeSE(delta);
- nextScale = (lastScale + delta + 256) % 256;
- if (nextScale !== 0) lastScale = nextScale;
- }
- }
- }
- }
- }
-
- const log2_max_frame_num_minus4 = readUE();
- writeUE(log2_max_frame_num_minus4);
-
- const pic_order_cnt_type = readUE();
- writeUE(pic_order_cnt_type);
- if (pic_order_cnt_type === 0) {
- const log2_max_pic_order_cnt_lsb_minus4 = readUE();
- writeUE(log2_max_pic_order_cnt_lsb_minus4);
- } else if (pic_order_cnt_type === 1) {
- const delta_pic_order_always_zero_flag = readBit(1);
- writeBit(delta_pic_order_always_zero_flag, 1);
- const offset_for_non_ref_pic = readSE();
- writeSE(offset_for_non_ref_pic);
- const offset_for_top_to_bottom_field = readSE();
- writeSE(offset_for_top_to_bottom_field);
- const num_ref_frames_in_pic_order_cnt_cycle = readUE();
- writeUE(num_ref_frames_in_pic_order_cnt_cycle);
- for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {
- const offset_for_ref_frame = readSE();
- writeSE(offset_for_ref_frame);
- }
- }
-
- const max_num_ref_frames = readUE();
- writeUE(max_num_ref_frames);
-
- const gaps_in_frame_num_value_allowed_flag = readBit(1);
- writeBit(gaps_in_frame_num_value_allowed_flag, 1);
-
- const pic_width_in_mbs_minus1 = readUE();
- writeUE(pic_width_in_mbs_minus1);
-
- const pic_height_in_map_units_minus1 = readUE();
- writeUE(pic_height_in_map_units_minus1);
-
- const frame_mbs_only_flag = readBit(1);
- writeBit(frame_mbs_only_flag, 1);
- if (frame_mbs_only_flag === 0) {
- const mb_adaptive_frame_field_flag = readBit(1);
- writeBit(mb_adaptive_frame_field_flag, 1);
- }
-
- const direct_8x8_inference_flag = readBit(1);
- writeBit(direct_8x8_inference_flag, 1);
-
- const frame_cropping_flag = readBit(1);
- writeBit(frame_cropping_flag, 1);
- if (frame_cropping_flag) {
- const frame_crop_left_offset = readUE();
- writeUE(frame_crop_left_offset);
- const frame_crop_right_offset = readUE();
- writeUE(frame_crop_right_offset);
- const frame_crop_top_offset = readUE();
- writeUE(frame_crop_top_offset);
- const frame_crop_bottom_offset = readUE();
- writeUE(frame_crop_bottom_offset);
- }
-
- // https://webrtc.googlesource.com/src/+/5f2c9278f35e47ff72eb191669d473b7400c9f3e/common_video/h264/sps_vui_rewriter.cc#283
- function addBitstreamRestriction() {
- // motion_vectors_over_pic_boundaries_flag: u(1)
- // Default is 1 when not present.
- writeBit(1, 1);
- // max_bytes_per_pic_denom: ue(v)
- // Default is 2 when not present.
- writeUE(2);
- // max_bits_per_mb_denom: ue(v)
- // Default is 1 when not present.
- writeUE(1);
- // log2_max_mv_length_horizontal: ue(v)
- // log2_max_mv_length_vertical: ue(v)
- // Both default to 16 when not present.
- writeUE(16);
- writeUE(16);
- // ********* IMPORTANT! **********
- // max_num_reorder_frames: ue(v)
- writeUE(0);
- // max_dec_frame_buffering: ue(v)
- writeUE(max_num_ref_frames);
- }
-
- const vui_parameters_present_flag = readBit(1);
- writeBit(1, 1);
- // If no VUI exists, write one
- if (!vui_parameters_present_flag) {
- // aspect_ratio_info_present_flag, overscan_info_present_flag. Both u(1).
- writeBit(0, 2);
-
- // video_signal_type_present_flag, u(1).
- // Just write 0 here because I'm not gonna bother myself with color space and whatnot
- writeBit(0, 1);
-
- // chroma_loc_info_present_flag, timing_info_present_flag,
- // nal_hrd_parameters_present_flag, vcl_hrd_parameters_present_flag,
- // pic_struct_present_flag, All u(1)
- writeBit(0, 5);
-
- // bitstream_restriction_flag: u(1)
- writeBit(1, 1);
-
- addBitstreamRestriction();
- } else {
- // VUI parsing and copying
- const aspect_ratio_info_present_flag = readBit(1);
- writeBit(aspect_ratio_info_present_flag, 1);
- if (aspect_ratio_info_present_flag) {
- const aspect_ratio_idc = readU(8);
- writeU(aspect_ratio_idc, 8);
- if (aspect_ratio_idc === 255) {
- // Extended_SAR
- const sar_width = readU(16);
- writeU(sar_width, 16);
- const sar_height = readU(16);
- writeU(sar_height, 16);
- }
- }
-
- const overscan_info_present_flag = readBit(1);
- writeBit(overscan_info_present_flag, 1);
- if (overscan_info_present_flag) {
- const overscan_appropriate_flag = readBit(1);
- writeBit(overscan_appropriate_flag, 1);
- }
-
- // Read the video signal type, but don't copy it
- const video_signal_type_present_flag = readBit(1);
- writeBit(0, 1);
- if (video_signal_type_present_flag) {
- const _video_format = readBit(3);
- // writeBit(video_format, 3);
- const _video_full_range_flag = readBit(1);
- // writeBit(video_full_range_flag, 1);
- const colour_description_present_flag = readBit(1);
- // writeBit(colour_description_present_flag, 1);
- if (colour_description_present_flag) {
- const _colour_primaries = readU(8);
- // writeU(colour_primaries, 8);
- const _transfer_characteristics = readU(8);
- // writeU(transfer_characteristics, 8);
- const _matrix_coeffs = readU(8);
- // writeU(matrix_coeffs, 8);
- }
- }
-
- const chroma_loc_info_present_flag = readBit(1);
- writeBit(chroma_loc_info_present_flag, 1);
- if (chroma_loc_info_present_flag) {
- const chroma_sample_loc_type_top_field = readUE();
- writeUE(chroma_sample_loc_type_top_field);
- const chroma_sample_loc_type_bottom_field = readUE();
- writeUE(chroma_sample_loc_type_bottom_field);
- }
-
- const timing_info_present_flag = readBit(1);
- writeBit(timing_info_present_flag, 1);
- if (timing_info_present_flag) {
- const num_units_in_tick = readU(32);
- writeU(num_units_in_tick, 32);
- const time_scale = readU(32);
- writeU(time_scale, 32);
- const fixed_frame_rate_flag = readBit(1);
- writeBit(fixed_frame_rate_flag, 1);
- }
-
- const nal_hrd_parameters_present_flag = readBit(1);
- writeBit(nal_hrd_parameters_present_flag, 1);
- if (nal_hrd_parameters_present_flag) {
- // hrd_parameters()
- const cpb_cnt_minus1 = readUE();
- writeUE(cpb_cnt_minus1);
- const bit_rate_scale = readBit(4);
- writeBit(bit_rate_scale, 4);
- const cpb_size_scale = readBit(4);
- writeBit(cpb_size_scale, 4);
- for (let i = 0; i <= cpb_cnt_minus1; i++) {
- const bit_rate_value_minus1 = readUE();
- writeUE(bit_rate_value_minus1);
- const cpb_size_value_minus1 = readUE();
- writeUE(cpb_size_value_minus1);
- const cbr_flag = readBit(1);
- writeBit(cbr_flag, 1);
- }
- const initial_cpb_removal_delay_length_minus1 = readBit(5);
- writeBit(initial_cpb_removal_delay_length_minus1, 5);
- const cpb_removal_delay_length_minus1 = readBit(5);
- writeBit(cpb_removal_delay_length_minus1, 5);
- const dpb_output_delay_length_minus1 = readBit(5);
- writeBit(dpb_output_delay_length_minus1, 5);
- const time_offset_length = readBit(5);
- writeBit(time_offset_length, 5);
- }
-
- const vcl_hrd_parameters_present_flag = readBit(1);
- writeBit(vcl_hrd_parameters_present_flag, 1);
- if (vcl_hrd_parameters_present_flag) {
- // hrd_parameters()
- const cpb_cnt_minus1 = readUE();
- writeUE(cpb_cnt_minus1);
- const bit_rate_scale = readBit(4);
- writeBit(bit_rate_scale, 4);
- const cpb_size_scale = readBit(4);
- writeBit(cpb_size_scale, 4);
- for (let i = 0; i <= cpb_cnt_minus1; i++) {
- const bit_rate_value_minus1 = readUE();
- writeUE(bit_rate_value_minus1);
- const cpb_size_value_minus1 = readUE();
- writeUE(cpb_size_value_minus1);
- const cbr_flag = readBit(1);
- writeBit(cbr_flag, 1);
- }
- const initial_cpb_removal_delay_length_minus1 = readBit(5);
- writeBit(initial_cpb_removal_delay_length_minus1, 5);
- const cpb_removal_delay_length_minus1 = readBit(5);
- writeBit(cpb_removal_delay_length_minus1, 5);
- const dpb_output_delay_length_minus1 = readBit(5);
- writeBit(dpb_output_delay_length_minus1, 5);
- const time_offset_length = readBit(5);
- writeBit(time_offset_length, 5);
- }
-
- if (nal_hrd_parameters_present_flag || vcl_hrd_parameters_present_flag) {
- const low_delay_hrd_flag = readBit(1);
- writeBit(low_delay_hrd_flag, 1);
- }
-
- const pic_struct_present_flag = readBit(1);
- writeBit(pic_struct_present_flag, 1);
-
- const bitstream_restriction_flag = readBit(1);
- writeBit(1, 1);
- if (!bitstream_restriction_flag) {
- addBitstreamRestriction();
- } else {
- const motion_vectors_over_pic_boundaries_flag = readBit(1);
- writeBit(motion_vectors_over_pic_boundaries_flag, 1);
- const max_bytes_per_pic_denom = readUE();
- writeUE(max_bytes_per_pic_denom);
- const max_bits_per_mb_denom = readUE();
- writeUE(max_bits_per_mb_denom);
- const log2_max_mv_length_horizontal = readUE();
- writeUE(log2_max_mv_length_horizontal);
- const log2_max_mv_length_vertical = readUE();
- writeUE(log2_max_mv_length_vertical);
- const _num_reorder_frames = readUE();
- writeUE(0);
- const _max_dec_frame_buffering = readUE();
- writeUE(max_num_ref_frames);
- }
- }
-
- writeBit(1, 1); // rbsp_stop_one_bit
- writer.flush();
- // return the rewritten RBSP as a buffer
- return writer.toBuffer();
-}
diff --git a/vendor/discord-video-stream/src/client/voice/BaseMediaConnection.ts b/vendor/discord-video-stream/src/client/voice/BaseMediaConnection.ts
deleted file mode 100644
index f36c2c0..0000000
--- a/vendor/discord-video-stream/src/client/voice/BaseMediaConnection.ts
+++ /dev/null
@@ -1,640 +0,0 @@
-import Davey from "@snazzah/davey";
-import EventEmitter from "node:events";
-import { Log } from "debug-level";
-import { randomUUID } from "node:crypto";
-import { CodecPayloadType } from "./CodecPayloadType.js";
-import { WebRtcConnWrapper } from "./WebRtcWrapper.js";
-import { VoiceOpCodes, VoiceOpCodesBinary } from "./VoiceOpCodes.js";
-import {
- STREAMS_SIMULCAST,
- type SupportedEncryptionModes,
-} from "../../utils.js";
-import type {
- Message,
- GatewayRequest,
- GatewayResponse,
-} from "./VoiceMessageTypes.js";
-import type { Streamer } from "../Streamer.js";
-
-type VoiceConnectionStatus = {
- hasSession: boolean;
- hasToken: boolean;
- started: boolean;
- resuming: boolean;
-};
-
-type WebRtcParameters = {
- address: string;
- port: number;
- audioSsrc: number;
- videoSsrc: number;
- rtxSsrc: number;
- supportedEncryptionModes: SupportedEncryptionModes[];
-};
-
-type ValueOf = T extends (infer U)[]
- ? U
- : T extends Record
- ? U
- : never;
-
-export type VideoAttributes = {
- width: number;
- height: number;
- fps: number;
-};
-
-export abstract class BaseMediaConnection extends EventEmitter {
- private interval: NodeJS.Timeout | null = null;
- public guildId: string | null = null;
- public channelId: string;
- public botId: string;
- public ws: WebSocket | null = null;
- public status: VoiceConnectionStatus;
- public server: string | null = null; //websocket url
- public token: string | null = null;
- public session_id: string | null = null;
-
- private _webRtcWrapper;
- private _webRtcParams: WebRtcParameters | null = null;
- private _closed = false;
- public ready: (conn: WebRtcConnWrapper) => void;
-
- private _streamer: Streamer;
- private _sequenceNumber = -1;
-
- private _daveSession: Davey.DaveSession | undefined;
- private _connectedUsers = new Set();
- private _daveProtocolVersion = 0;
- private _davePendingTransitions = new Map();
- private _daveDowngraded = false;
-
- private _logger = new Log("conn");
- private _loggerDave = new Log("conn:dave");
- constructor(
- streamer: Streamer,
- guildId: string | null,
- botId: string,
- channelId: string,
- callback: (conn: WebRtcConnWrapper) => void,
- ) {
- super();
- this._streamer = streamer;
- this.status = {
- hasSession: false,
- hasToken: false,
- started: false,
- resuming: false,
- };
-
- this.guildId = guildId;
- this.channelId = channelId;
- this.botId = botId;
- this.ready = callback;
- this._webRtcWrapper = new WebRtcConnWrapper(this);
- }
-
- public abstract get serverId(): string | null;
-
- public get type(): "guild" | "call" {
- return this.guildId ? "guild" : "call";
- }
-
- public get webRtcConn() {
- return this._webRtcWrapper;
- }
-
- public get webRtcParams() {
- return this._webRtcParams;
- }
-
- public get streamer() {
- return this._streamer;
- }
-
- public abstract get daveChannelId(): string;
-
- stop(): void {
- this._closed = true;
- this._webRtcWrapper.close();
- this.ws?.close();
- }
-
- setSession(session_id: string): void {
- this.session_id = session_id;
-
- this.status.hasSession = true;
- this.start();
- }
-
- setTokens(server: string, token: string): void {
- this.token = token;
- this.server = server;
-
- this.status.hasToken = true;
- this.start();
- }
-
- start(): void {
- /*
- ** Connection can only start once both
- ** session description and tokens have been gathered
- */
- if (this.status.hasSession && this.status.hasToken) {
- if (this.status.started) return;
- this.status.started = true;
-
- this.ws = new WebSocket(`wss://${this.server}/?v=8`);
- this.ws.binaryType = "arraybuffer";
- this.ws.addEventListener("open", () => {
- if (this.status.resuming) {
- this.status.resuming = false;
- this.resume();
- } else {
- this.identify();
- }
- });
- this.ws.addEventListener("error", (err) => {
- console.error(err);
- });
- this.ws.addEventListener("close", (e) => {
- const wasStarted = this.status.started;
-
- this.interval && clearInterval(this.interval);
- this.status.started = false;
- const canResume = e.code === 4_015 || e.code < 4_000;
-
- if (canResume && wasStarted) {
- this.status.resuming = true;
- this.start();
- } else {
- this._closed = true;
- this._webRtcWrapper?.close();
- }
- });
- this.setupEvents();
- }
- }
-
- handleReady(d: Message.Ready): void {
- // we hardcoded the STREAMS_SIMULCAST, which will always be array of 1
- const stream = d.streams[0];
- this._webRtcParams = {
- address: d.ip,
- port: d.port,
- audioSsrc: d.ssrc,
- videoSsrc: stream.ssrc,
- rtxSsrc: stream.rtx_ssrc,
- supportedEncryptionModes: d.modes,
- };
- }
-
- async handleProtocolAck(d: Message.SelectProtocolAck) {
- if (!("sdp" in d)) throw new Error("Only WebRTC connections are allowed");
- this._daveProtocolVersion = d.dave_protocol_version;
- this.initDave();
- // Discord's SDP is absolute garbage...Generate one ourselves
- let ip = "",
- port = "",
- iceUsername = "",
- icePassword = "",
- fingerprint = "",
- candidate = "";
- for (const line of d.sdp.split("\n")) {
- if (line.startsWith("c=")) ip = line;
- else if (line.startsWith("a=rtcp")) port = line.split(":")[1];
- else if (line.startsWith("a=ice-ufrag")) iceUsername = line;
- else if (line.startsWith("a=ice-pwd")) icePassword = line;
- else if (line.startsWith("a=fingerprint")) fingerprint = line;
- else if (line.startsWith("a=candidate")) candidate = line;
- }
- const audioPayloadType = CodecPayloadType.opus.payload_type;
- const audioSection = `
-m=audio ${port} UDP/TLS/RTP/SAVPF ${audioPayloadType}
-${ip}
-a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
-a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
-a=setup:passive
-a=mid:0
-a=maxptime:60
-a=inactive
-${iceUsername}
-${icePassword}
-${fingerprint}
-${candidate}
-a=rtcp-mux
-a=rtpmap:${audioPayloadType} opus/48000/2
-a=fmtp:${audioPayloadType} minptime=10;useinbandfec=1;usedtx=1
-a=rtcp-fb:${audioPayloadType} transport-cc
-a=rtcp-fb:${audioPayloadType} nack
-a=ice-lite
-`.trim();
- const videoPayloads = Object.values(CodecPayloadType).filter(
- (el) => el.type === "video",
- );
- const videoPayloadTypes = videoPayloads.flatMap((el) => [
- el.payload_type,
- el.rtx_payload_type,
- ]);
- const videoSection = `
-m=video ${port} UDP/TLS/RTP/SAVPF ${videoPayloadTypes.join(" ")}
-${ip}
-a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
-a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
-a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
-a=extmap:13 urn:3gpp:video-orientation
-a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
-a=setup:passive
-a=mid:1
-a=inactive
-${iceUsername}
-${icePassword}
-${fingerprint}
-${candidate}
-a=rtcp-mux
-a=ice-lite
-`.trim();
- const videoRtpMap = videoPayloads
- .flatMap((el) => [
- `a=rtpmap:${el.payload_type} ${el.name}/90000`,
- `a=rtpmap:${el.rtx_payload_type} rtx/90000`,
- `a=fmtp:${el.rtx_payload_type} apt=${el.payload_type}`,
- `a=rtcp-fb:${el.payload_type} ccm fir`,
- `a=rtcp-fb:${el.payload_type} nack`,
- `a=rtcp-fb:${el.payload_type} nack pli`,
- `a=rtcp-fb:${el.payload_type} goog-remb`,
- `a=rtcp-fb:${el.payload_type} transport-cc`,
- ])
- .join("\n");
- this._webRtcWrapper.webRtcConn?.setRemoteDescription(
- [audioSection, videoSection, videoRtpMap].join("\n"),
- "answer",
- );
- this.emit("select_protocol_ack");
- }
-
- initDave() {
- if (this._daveProtocolVersion) {
- if (this._daveSession) {
- this._daveSession.reinit(
- this._daveProtocolVersion,
- this.botId,
- this.daveChannelId,
- );
- this._loggerDave.debug(`Reinitialized DAVE`, {
- user_id: this.botId,
- channel_id: this.daveChannelId,
- });
- } else {
- this._daveSession = new Davey.DAVESession(
- this._daveProtocolVersion,
- this.botId,
- this.daveChannelId,
- );
- this._loggerDave.debug(`Initialized DAVE`, {
- user_id: this.botId,
- channel_id: this.daveChannelId,
- });
- }
- this.sendOpcodeBinary(
- VoiceOpCodesBinary.MLS_KEY_PACKAGE,
- this._daveSession.getSerializedKeyPackage(),
- );
- } else if (this._daveSession) {
- this._daveSession.reset();
- this._daveSession.setPassthroughMode(true, 10);
- }
- }
-
- processInvalidCommit(transitionId: number) {
- this._loggerDave.debug("Invalid commit received, reinitializing DAVE", {
- transitionId,
- });
- this.sendOpcode(VoiceOpCodes.MLS_INVALID_COMMIT_WELCOME, {
- transition_id: transitionId,
- });
- this.initDave();
- }
-
- executePendingTransition(transitionId: number) {
- const newVersion = this._davePendingTransitions.get(transitionId);
- if (newVersion === undefined) {
- this._loggerDave.error("Unrecognized transition ID", { transitionId });
- return;
- }
- const oldVersion = this._daveProtocolVersion;
- this._daveProtocolVersion = newVersion;
-
- if (oldVersion !== newVersion && newVersion === 0) {
- // Downgraded
- this._daveDowngraded = true;
- this._loggerDave.debug("Downgraded to non-E2E voice call");
- } else if (transitionId > 0 && this._daveDowngraded) {
- this._daveDowngraded = false;
- this._daveSession?.setPassthroughMode(true, 10);
- this._loggerDave.debug("Upgraded to E2E voice call");
- }
-
- this._davePendingTransitions.delete(transitionId);
- this._loggerDave.debug(`Pending transition ID ${transitionId} executed`, {
- transitionId,
- });
- }
-
- setupEvents(): void {
- this.ws?.addEventListener("message", async (e) => {
- if (e.data instanceof ArrayBuffer) {
- this.handleBinaryMessages(Buffer.from(e.data));
- return;
- }
- const { op, d, seq } = JSON.parse(e.data as string) as GatewayResponse;
- if (seq) this._sequenceNumber = seq;
-
- if (op === VoiceOpCodes.READY) {
- // ready
- this.handleReady(d);
- this.setProtocols().then(() => this.ready(this._webRtcWrapper));
- this.setVideoAttributes(false);
- } else if (op >= 4000) {
- console.error(`Error ${this.constructor.name} connection`, d);
- } else if (op === VoiceOpCodes.HELLO) {
- this.setupHeartbeat(d.heartbeat_interval);
- } else if (op === VoiceOpCodes.SELECT_PROTOCOL_ACK) {
- // session description
- this.handleProtocolAck(d);
- } else if (op === VoiceOpCodes.SPEAKING) {
- // ignore speaking updates
- } else if (op === VoiceOpCodes.HEARTBEAT_ACK) {
- // ignore heartbeat acknowledgements
- } else if (op === VoiceOpCodes.RESUMED) {
- this.status.started = true;
- } else if (op === VoiceOpCodes.CLIENTS_CONNECT) {
- d.user_ids.forEach((id) => {
- this._connectedUsers.add(id);
- });
- } else if (op === VoiceOpCodes.CLIENT_DISCONNECT) {
- this._connectedUsers.delete(d.user_id);
- } else if (op === VoiceOpCodes.DAVE_PREPARE_TRANSITION) {
- this._loggerDave.debug("Preparing for DAVE transition", d);
- this._davePendingTransitions.set(d.transition_id, d.protocol_version);
- if (d.transition_id === 0) {
- this.executePendingTransition(d.transition_id);
- } else {
- if (d.protocol_version === 0)
- this._daveSession?.setPassthroughMode(true, 120);
- this.sendOpcode(VoiceOpCodes.DAVE_TRANSITION_READY, {
- transition_id: d.transition_id,
- });
- }
- } else if (op === VoiceOpCodes.DAVE_EXECUTE_TRANSITION) {
- this.executePendingTransition(d.transition_id);
- } else if (op === VoiceOpCodes.DAVE_PREPARE_EPOCH) {
- this._loggerDave.debug("Preparing for DAVE epoch", d);
- if (d.epoch === 1) {
- this._daveProtocolVersion = d.protocol_version;
- this.initDave();
- }
- } else {
- //console.log("unhandled voice event", {op, d});
- }
- });
- }
-
- handleBinaryMessages(msg: Buffer) {
- this._sequenceNumber = msg.readUint16BE(0);
- const op = msg.readUint8(2);
- this._logger.trace(`Handling binary message with op ${op}`, { op });
- switch (op) {
- case VoiceOpCodesBinary.MLS_EXTERNAL_SENDER: {
- this._daveSession?.setExternalSender(msg.subarray(3));
- this._loggerDave.debug("Set MLS external sender");
- break;
- }
- case VoiceOpCodesBinary.MLS_PROPOSALS: {
- const optype = msg.readUint8(3);
- const { commit, welcome } = this._daveSession!.processProposals(
- optype,
- msg.subarray(4),
- [...this._connectedUsers],
- );
- if (commit) {
- this.sendOpcodeBinary(
- VoiceOpCodesBinary.MLS_COMMIT_WELCOME,
- welcome ? Buffer.concat([commit, welcome]) : commit,
- );
- }
- this._loggerDave.debug("Processed MLS proposal");
- break;
- }
- case VoiceOpCodesBinary.MLS_ANNOUNCE_COMMIT_TRANSITION: {
- const transitionId = msg.readUInt16BE(3);
- try {
- this._daveSession?.processCommit(msg.subarray(5));
- if (transitionId) {
- this._davePendingTransitions.set(
- transitionId,
- this._daveProtocolVersion,
- );
- this.sendOpcode(VoiceOpCodes.DAVE_TRANSITION_READY, {
- transition_id: transitionId,
- });
- }
- this._loggerDave.debug("MLS commit processed", { transitionId });
- } catch (e) {
- this._loggerDave.debug("MLS commit errored", e);
- this.processInvalidCommit(transitionId);
- }
- break;
- }
- case VoiceOpCodesBinary.MLS_WELCOME: {
- const transitionId = msg.readUInt16BE(3);
- try {
- this._daveSession?.processWelcome(msg.subarray(5));
- if (transitionId) {
- this._davePendingTransitions.set(
- transitionId,
- this._daveProtocolVersion,
- );
- this.sendOpcode(VoiceOpCodes.DAVE_TRANSITION_READY, {
- transition_id: transitionId,
- });
- }
- this._loggerDave.debug("MLS welcome processed", { transitionId });
- } catch (e) {
- this._loggerDave.debug("MLS welcome errored", e);
- this.processInvalidCommit(transitionId);
- }
- break;
- }
- }
- }
-
- public get daveReady() {
- return this._daveProtocolVersion && this._daveSession?.ready;
- }
-
- public get daveSession() {
- return this._daveSession;
- }
-
- setupHeartbeat(interval: number): void {
- if (this.interval) {
- clearInterval(this.interval);
- }
- this.interval = setInterval(() => {
- try {
- this.sendOpcode(VoiceOpCodes.HEARTBEAT, {
- t: Date.now(),
- seq_ack: this._sequenceNumber,
- });
- } catch {}
- }, interval);
- }
-
- sendOpcode(code: T["op"], data: T["d"]): void {
- if (this.ws?.readyState !== WebSocket.OPEN) return;
- this.ws.send(
- JSON.stringify({
- op: code,
- d: data,
- }),
- );
- }
- sendOpcodeBinary(code: VoiceOpCodesBinary, data: Buffer) {
- if (this.ws?.readyState !== WebSocket.OPEN) return;
- const buf = Buffer.allocUnsafe(data.length + 1);
- buf.writeUInt8(code);
- data.copy(buf, 1);
- this.ws.send(buf);
- }
-
- /*
- ** identifies with media server with credentials
- */
- identify(): void {
- if (!this.serverId) throw new Error("Server ID is null or empty");
- if (!this.session_id) throw new Error("Session ID is null or empty");
- if (!this.token) throw new Error("Token is null or empty");
- this.sendOpcode(VoiceOpCodes.IDENTIFY, {
- server_id: this.serverId,
- user_id: this.botId,
- session_id: this.session_id,
- token: this.token,
- video: true,
- streams: STREAMS_SIMULCAST,
- max_dave_protocol_version: Davey.DAVE_PROTOCOL_VERSION ?? 0,
- });
- }
-
- resume(): void {
- if (!this.serverId) throw new Error("Server ID is null or empty");
- if (!this.session_id) throw new Error("Session ID is null or empty");
- if (!this.token) throw new Error("Token is null or empty");
- this.sendOpcode(VoiceOpCodes.RESUME, {
- server_id: this.serverId,
- session_id: this.session_id,
- token: this.token,
- seq_ack: this._sequenceNumber,
- });
- }
-
- /*
- ** Sets protocols and ip data used for video and audio.
- ** Uses vp8 for video
- ** Uses opus for audio
- */
- public async setProtocols(): Promise {
- if (!this._webRtcParams) throw new Error("WebRTC parameters not set");
- // if (
- // this._webRtcParams.supportedEncryptionModes.includes(SupportedEncryptionModes.AES256) &&
- // !this._streamer.opts.forceChacha20Encryption
- // ) {
- // encryptionMode = SupportedEncryptionModes.AES256
- // } else {
- // encryptionMode = SupportedEncryptionModes.XCHACHA20
- // }
-
- const reconnect = () => {
- const webRtcConn = this._webRtcWrapper.initWebRtc();
- webRtcConn.onStateChange((state) => {
- if (state === "closed" && !this._closed) reconnect();
- });
- webRtcConn.onLocalDescription((sdp) => {
- const rtc_connection_id = randomUUID();
- this.sendOpcode(VoiceOpCodes.SELECT_PROTOCOL, {
- protocol: "webrtc",
- codecs: Object.values(CodecPayloadType) as ValueOf<
- typeof CodecPayloadType
- >[],
- data: sdp,
- sdp: sdp,
- rtc_connection_id,
- });
- });
- webRtcConn.setLocalDescription();
- };
- reconnect();
- return new Promise((resolve) => {
- this.once("select_protocol_ack", () => resolve());
- });
- }
-
- /*
- * Sets video attributes (width, height, frame rate).
- * enabled -> video on or off
- * attr -> video attributes
- * video and rtx sources are set to ssrc + 1 and ssrc + 2
- */
- public setVideoAttributes(enabled: false): void;
- public setVideoAttributes(enabled: true, attr: VideoAttributes): void;
- public setVideoAttributes(enabled: boolean, attr?: VideoAttributes): void {
- if (!this._webRtcParams) throw new Error("WebRTC parameters not set");
- const { audioSsrc, videoSsrc, rtxSsrc } = this._webRtcParams;
- if (!enabled) {
- this.sendOpcode(VoiceOpCodes.VIDEO, {
- audio_ssrc: audioSsrc,
- video_ssrc: 0,
- rtx_ssrc: 0,
- streams: [],
- });
- } else {
- if (!attr) throw new Error("Need to specify video attributes");
- this.sendOpcode(VoiceOpCodes.VIDEO, {
- audio_ssrc: audioSsrc,
- video_ssrc: videoSsrc,
- rtx_ssrc: rtxSsrc,
- streams: [
- {
- type: "video",
- rid: "100",
- ssrc: videoSsrc,
- active: true,
- quality: 100,
- rtx_ssrc: rtxSsrc,
- // hardcode the max bitrate because we don't really know anyway
- max_bitrate: 10000 * 1000,
- max_framerate: enabled ? attr.fps : 0,
- max_resolution: {
- type: "fixed",
- width: attr.width,
- height: attr.height,
- },
- },
- ],
- });
- }
- }
-
- /*
- ** Set speaking status
- ** speaking -> speaking status on or off
- */
- public setSpeaking(speaking: boolean): void {
- if (!this._webRtcParams) throw new Error("WebRTC connection not ready");
- this.sendOpcode(VoiceOpCodes.SPEAKING, {
- delay: 0,
- speaking: speaking ? 1 : 0,
- ssrc: this._webRtcParams.audioSsrc,
- });
- }
-}
diff --git a/vendor/discord-video-stream/src/client/voice/CodecPayloadType.ts b/vendor/discord-video-stream/src/client/voice/CodecPayloadType.ts
deleted file mode 100644
index 9844a21..0000000
--- a/vendor/discord-video-stream/src/client/voice/CodecPayloadType.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-export const CodecPayloadType = {
- opus: {
- name: "opus",
- type: "audio",
- clockRate: 48000,
- priority: 1000,
- payload_type: 120,
- },
- H264: {
- name: "H264",
- type: "video",
- clockRate: 90000,
- priority: 1000,
- payload_type: 101,
- rtx_payload_type: 102,
- encode: true,
- decode: true,
- },
- H265: {
- name: "H265",
- type: "video",
- clockRate: 90000,
- priority: 1000,
- payload_type: 103,
- rtx_payload_type: 104,
- encode: true,
- decode: true,
- },
- VP8: {
- name: "VP8",
- type: "video",
- clockRate: 90000,
- priority: 1000,
- payload_type: 105,
- rtx_payload_type: 106,
- encode: true,
- decode: true,
- },
- VP9: {
- name: "VP9",
- type: "video",
- clockRate: 90000,
- priority: 1000,
- payload_type: 107,
- rtx_payload_type: 108,
- encode: true,
- decode: true,
- },
- AV1: {
- name: "AV1",
- type: "video",
- clockRate: 90000,
- priority: 1000,
- payload_type: 109,
- rtx_payload_type: 110,
- encode: true,
- decode: true,
- },
-} as const;
diff --git a/vendor/discord-video-stream/src/client/voice/MediaUdp.ts.bak b/vendor/discord-video-stream/src/client/voice/MediaUdp.ts.bak
deleted file mode 100644
index d5d66d6..0000000
--- a/vendor/discord-video-stream/src/client/voice/MediaUdp.ts.bak
+++ /dev/null
@@ -1,171 +0,0 @@
-import udpCon from 'node:dgram';
-import { isIP } from 'node:net';
-import { AudioPacketizer } from '../packet/AudioPacketizer.js';
-import {
- VideoPacketizerH264,
- VideoPacketizerH265
-} from '../packet/VideoPacketizerAnnexB.js';
-import { VideoPacketizerVP8 } from '../packet/VideoPacketizerVP8.js';
-import { normalizeVideoCodec } from '../../utils.js';
-import type { BaseMediaPacketizer } from '../packet/BaseMediaPacketizer.js';
-import type { BaseMediaConnection } from './BaseMediaConnection.js';
-
-// credit to discord.js
-function parseLocalPacket(message: Buffer) {
- const packet = Buffer.from(message);
-
- const ip = packet.subarray(8, packet.indexOf(0, 8)).toString('utf8');
-
- if (!isIP(ip)) {
- throw new Error('Malformed IP address');
- }
-
- const port = packet.readUInt16BE(packet.length - 2);
-
- return { ip, port };
-}
-
-export class MediaUdp {
- private _mediaConnection: BaseMediaConnection;
- private _socket: udpCon.Socket | null = null;
- private _ready = false;
- private _audioPacketizer?: BaseMediaPacketizer;
- private _videoPacketizer?: BaseMediaPacketizer;
- private _ip?: string;
- private _port?: number;
-
- constructor(voiceConnection: BaseMediaConnection) {
- this._mediaConnection = voiceConnection;
- }
-
- public get audioPacketizer(): BaseMediaPacketizer | undefined {
- return this._audioPacketizer;
- }
-
- public get videoPacketizer(): BaseMediaPacketizer | undefined {
- // This will never be undefined anyway, so it's safe
- return this._videoPacketizer;
- }
-
- public get mediaConnection(): BaseMediaConnection {
- return this._mediaConnection;
- }
-
- public get ip()
- {
- return this._ip;
- }
-
- public get port()
- {
- return this._port;
- }
-
- public async sendAudioFrame(frame: Buffer, frametime: number): Promise {
- if(!this.ready) return;
- await this.audioPacketizer?.sendFrame(frame, frametime);
- }
-
- public async sendVideoFrame(frame: Buffer, frametime: number): Promise {
- if(!this.ready) return;
- await this.videoPacketizer?.sendFrame(frame, frametime);
- }
-
- public setPacketizer(videoCodec: string): void {
- if (!this.mediaConnection.webRtcParams)
- throw new Error("WebRTC connection not ready");
- const { audioSsrc, videoSsrc } = this.mediaConnection.webRtcParams;
- this._audioPacketizer = new AudioPacketizer(this, audioSsrc);
- switch (normalizeVideoCodec(videoCodec))
- {
- case "H264":
- this._videoPacketizer = new VideoPacketizerH264(this, videoSsrc);
- break;
- case "H265":
- this._videoPacketizer = new VideoPacketizerH265(this, videoSsrc);
- break;
- case "VP8":
- this._videoPacketizer = new VideoPacketizerVP8(this, videoSsrc);
- break;
- default:
- throw new Error(`Packetizer not implemented for ${videoCodec}`)
- }
- }
-
- public sendPacket(packet: Buffer): Promise {
- if (!this.mediaConnection.webRtcParams)
- throw new Error("WebRTC connection not ready");
- const { address, port } = this.mediaConnection.webRtcParams;
- return new Promise((resolve, reject) => {
- try {
- this._socket?.send(packet, 0, packet.length, port, address, (error, bytes) => {
- if (error) {
- console.log("ERROR", error);
- reject(error);
- }
- resolve();
- });
- } catch(e) {reject(e)}
- });
- }
-
- handleIncoming(buf: unknown): void {
- //console.log("RECEIVED PACKET", buf);
- }
-
- public get ready(): boolean {
- return this._ready;
- }
-
- public set ready(val: boolean) {
- this._ready = val;
- }
-
- public stop(): void {
- try {
- this.ready = false;
- this._socket?.disconnect();
- }catch(e) {}
- }
-
- public createUdp(): Promise {
- if (!this.mediaConnection.webRtcParams)
- throw new Error("WebRTC connection not ready");
- const { audioSsrc, address, port } = this.mediaConnection.webRtcParams;
- return new Promise((resolve, reject) => {
- this._socket = udpCon.createSocket('udp4');
-
- this._socket.on('error', (error: Error) => {
- console.error("Error connecting to media udp server", error);
- reject(error);
- });
-
- this._socket.once('message', (message) => {
- if (message.readUInt16BE(0) !== 2) {
- reject('wrong handshake packet for udp')
- }
- try {
- const packet = parseLocalPacket(message);
- this._ip = packet.ip;
- this._port = packet.port;
- this._ready = true;
- } catch(e) { reject(e) }
-
- resolve();
- this._socket?.on('message', this.handleIncoming);
- });
-
- const blank = Buffer.alloc(74);
-
- blank.writeUInt16BE(1, 0);
- blank.writeUInt16BE(70, 2);
- blank.writeUInt32BE(audioSsrc, 4);
-
- this._socket.send(blank, 0, blank.length, port, address, (error, bytes) => {
- if (error) {
- reject(error)
- }
- });
- });
- }
-}
diff --git a/vendor/discord-video-stream/src/client/voice/StreamConnection.ts b/vendor/discord-video-stream/src/client/voice/StreamConnection.ts
deleted file mode 100644
index 4e354d9..0000000
--- a/vendor/discord-video-stream/src/client/voice/StreamConnection.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { VoiceOpCodes } from "../voice/VoiceOpCodes.js";
-import { BaseMediaConnection } from "./BaseMediaConnection.js";
-
-export class StreamConnection extends BaseMediaConnection {
- private _streamKey: string | null = null;
- private _serverId: string | null = null;
-
- public override setSpeaking(speaking: boolean): void {
- if (!this.webRtcParams) throw new Error("WebRTC connection not ready");
- this.sendOpcode(VoiceOpCodes.SPEAKING, {
- delay: 0,
- speaking: speaking ? 2 : 0,
- ssrc: this.webRtcParams.audioSsrc,
- });
- }
-
- public override get daveChannelId() {
- if (this._serverId === null)
- throw new Error("Server ID not set (this shouldn't happen)");
- const channelId = BigInt(this._serverId) - 1n;
- return channelId.toString();
- }
-
- public override get serverId(): string | null {
- return this._serverId;
- }
-
- public set serverId(id: string) {
- this._serverId = id;
- }
-
- public get streamKey(): string | null {
- return this._streamKey;
- }
- public set streamKey(value: string) {
- this._streamKey = value;
- }
-}
diff --git a/vendor/discord-video-stream/src/client/voice/VoiceConnection.ts b/vendor/discord-video-stream/src/client/voice/VoiceConnection.ts
deleted file mode 100644
index 6ccb88d..0000000
--- a/vendor/discord-video-stream/src/client/voice/VoiceConnection.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { BaseMediaConnection } from "./BaseMediaConnection.js";
-import type { StreamConnection } from "./StreamConnection.js";
-
-export class VoiceConnection extends BaseMediaConnection {
- public streamConnection?: StreamConnection;
-
- public override get daveChannelId() {
- return this.channelId;
- }
-
- public override get serverId(): string {
- return this.guildId ?? this.channelId; // for guild vc it is the guild id, for dm voice it is the channel id
- }
-
- public override stop(): void {
- super.stop();
- this.streamConnection?.stop();
- }
-}
diff --git a/vendor/discord-video-stream/src/client/voice/VoiceMessageTypes.ts b/vendor/discord-video-stream/src/client/voice/VoiceMessageTypes.ts
deleted file mode 100644
index 30ad1f1..0000000
--- a/vendor/discord-video-stream/src/client/voice/VoiceMessageTypes.ts
+++ /dev/null
@@ -1,263 +0,0 @@
-import type { VoiceOpCodes } from "./VoiceOpCodes.js";
-import type { SupportedEncryptionModes } from "../../utils.js";
-
-type StreamInfo = {
- active: boolean;
- quality: number;
- rid: string;
- ssrc: number;
- rtx_ssrc: number;
- /**
- * always "video" from what I observed
- */
- type: string;
-};
-
-type SimulcastInfo = {
- type: string;
- rid: string;
- quality: number;
-};
-
-type CodecPayloadType =
- | {
- name: string;
- type: "audio";
- priority: number;
- payload_type: number;
- }
- | {
- name: string;
- type: "video";
- priority: number;
- payload_type: number;
- rtx_payload_type: number;
- encode: boolean;
- decode: boolean;
- };
-
-export namespace Message {
- // Request messages
- export type Identify = {
- server_id: string;
- user_id: string;
- session_id: string;
- token: string;
- video: boolean;
- streams: SimulcastInfo[];
- max_dave_protocol_version?: number;
- };
-
- export type Resume = {
- server_id: string;
- session_id: string;
- token: string;
- seq_ack: number;
- };
-
- export type Heartbeat = {
- t: number;
- seq_ack?: number;
- };
-
- export type SelectProtocol =
- | {
- protocol: "udp";
- codecs: CodecPayloadType[];
- data: {
- address: string;
- port: number;
- mode: SupportedEncryptionModes;
- };
- }
- | {
- protocol: "webrtc";
- codecs: CodecPayloadType[];
- data: string;
- sdp: string;
- rtc_connection_id: string;
- };
-
- export type Video = {
- audio_ssrc: number;
- video_ssrc: number;
- rtx_ssrc: number;
- streams: {
- type: "video";
- rid: string;
- ssrc: number;
- active: boolean;
- quality: number;
- rtx_ssrc: number;
- max_bitrate: number;
- max_framerate: number;
- max_resolution: {
- type: "fixed";
- width: number;
- height: number;
- };
- }[];
- };
-
- // Response messages
- export type Hello = {
- heartbeat_interval: number;
- };
-
- export type Ready = {
- ssrc: number;
- ip: string;
- port: number;
- modes: SupportedEncryptionModes[];
- experiments: string[];
- streams: StreamInfo[];
- };
-
- export type Speaking = {
- speaking: 0 | 1 | 2;
- delay: number;
- ssrc: number;
- };
-
- export type SelectProtocolAck = {
- audio_codec: string;
- video_codec: string;
- dave_protocol_version: number;
- } & (
- | {
- secret_key: number[];
- mode: string;
- }
- | {
- media_session_id: number;
- sdp: string;
- }
- );
-
- export type HeartbeatAck = {
- t: number;
- };
-
- export type ClientsConnect = {
- user_ids: string[];
- };
-
- export type ClientDisconnect = {
- user_id: string;
- };
-
- export type DavePrepareTransition = {
- transition_id: number;
- protocol_version: number;
- };
-
- export type DaveExecuteTransition = {
- transition_id: number;
- };
-
- export type DaveTransitionReady = {
- transition_id: number;
- };
-
- export type DavePrepareEpoch = {
- epoch: number;
- protocol_version: number;
- };
-
- export type MlsInvalidCommitWelcome = {
- transition_id: number;
- };
-}
-
-export namespace GatewayResponse {
- type Generic<
- Op extends VoiceOpCodes,
- T extends Record | null,
- > = {
- op: Op;
- d: T;
- seq?: number;
- };
- export type Hello = Generic;
- export type Ready = Generic;
- export type Resumed = Generic;
- export type Speaking = Generic;
- export type SelectProtocolAck = Generic<
- VoiceOpCodes.SELECT_PROTOCOL_ACK,
- Message.SelectProtocolAck
- >;
- export type HeartbeatAck = Generic<
- VoiceOpCodes.HEARTBEAT_ACK,
- Message.HeartbeatAck
- >;
- export type ClientsConnect = Generic<
- VoiceOpCodes.CLIENTS_CONNECT,
- Message.ClientsConnect
- >;
- export type ClientDisconnect = Generic<
- VoiceOpCodes.CLIENT_DISCONNECT,
- Message.ClientDisconnect
- >;
- export type DavePrepareTransition = Generic<
- VoiceOpCodes.DAVE_PREPARE_TRANSITION,
- Message.DavePrepareTransition
- >;
- export type DaveExecuteTransition = Generic<
- VoiceOpCodes.DAVE_EXECUTE_TRANSITION,
- Message.DaveExecuteTransition
- >;
- export type DavePrepareEpoch = Generic<
- VoiceOpCodes.DAVE_PREPARE_EPOCH,
- Message.DavePrepareEpoch
- >;
-}
-
-export type GatewayResponse =
- | GatewayResponse.Hello
- | GatewayResponse.Ready
- | GatewayResponse.Resumed
- | GatewayResponse.Speaking
- | GatewayResponse.SelectProtocolAck
- | GatewayResponse.HeartbeatAck
- | GatewayResponse.ClientsConnect
- | GatewayResponse.ClientDisconnect
- | GatewayResponse.DavePrepareTransition
- | GatewayResponse.DaveExecuteTransition
- | GatewayResponse.DavePrepareEpoch;
-
-export namespace GatewayRequest {
- type Generic<
- Op extends VoiceOpCodes,
- T extends Record | null,
- > = {
- op: Op;
- d: T;
- };
- export type Identify = Generic;
- export type Resume = Generic;
- export type Heartbeat = Generic;
- export type SelectProtocol = Generic<
- VoiceOpCodes.SELECT_PROTOCOL,
- Message.SelectProtocol
- >;
- export type Video = Generic;
- export type Speaking = Generic;
- export type DaveTransitionReady = Generic<
- VoiceOpCodes.DAVE_TRANSITION_READY,
- Message.DaveTransitionReady
- >;
- export type MlsInvalidCommitWelcome = Generic<
- VoiceOpCodes.MLS_INVALID_COMMIT_WELCOME,
- Message.MlsInvalidCommitWelcome
- >;
-}
-
-export type GatewayRequest =
- | GatewayRequest.Identify
- | GatewayRequest.Resume
- | GatewayRequest.Heartbeat
- | GatewayRequest.SelectProtocol
- | GatewayRequest.Video
- | GatewayRequest.Speaking
- | GatewayRequest.DaveTransitionReady
- | GatewayRequest.MlsInvalidCommitWelcome;
diff --git a/vendor/discord-video-stream/src/client/voice/VoiceOpCodes.ts b/vendor/discord-video-stream/src/client/voice/VoiceOpCodes.ts
deleted file mode 100644
index 5e5f2e3..0000000
--- a/vendor/discord-video-stream/src/client/voice/VoiceOpCodes.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-export enum VoiceOpCodes {
- IDENTIFY = 0,
- SELECT_PROTOCOL = 1,
- READY = 2,
- HEARTBEAT = 3,
- SELECT_PROTOCOL_ACK = 4,
- SPEAKING = 5,
- HEARTBEAT_ACK = 6,
- RESUME = 7,
- HELLO = 8,
- RESUMED = 9,
- CLIENTS_CONNECT = 11,
- VIDEO = 12,
- CLIENT_DISCONNECT = 13,
- SESSION_UPDATE = 14,
- MEDIA_SINK_WANTS = 15,
- VOICE_BACKEND_VERSION = 16,
- CHANNEL_OPTIONS_UPDATE = 17,
- FLAGS = 18,
- SPEED_TEST = 19,
- PLATFORM = 20,
- DAVE_PREPARE_TRANSITION = 21,
- DAVE_EXECUTE_TRANSITION = 22,
- DAVE_TRANSITION_READY = 23,
- DAVE_PREPARE_EPOCH = 24,
- MLS_INVALID_COMMIT_WELCOME = 31,
-}
-
-export enum VoiceOpCodesBinary {
- MLS_EXTERNAL_SENDER = 25,
- MLS_KEY_PACKAGE = 26,
- MLS_PROPOSALS = 27,
- MLS_COMMIT_WELCOME = 28,
- MLS_ANNOUNCE_COMMIT_TRANSITION = 29,
- MLS_WELCOME = 30,
-}
diff --git a/vendor/discord-video-stream/src/client/voice/WebRtcWrapper.ts b/vendor/discord-video-stream/src/client/voice/WebRtcWrapper.ts
deleted file mode 100644
index 9285211..0000000
--- a/vendor/discord-video-stream/src/client/voice/WebRtcWrapper.ts
+++ /dev/null
@@ -1,213 +0,0 @@
-import {
- PeerConnection,
- Audio,
- Video,
- PacingHandler,
- RtpPacketizer,
- H264RtpPacketizer,
- H265RtpPacketizer,
- AV1RtpPacketizer,
- RtpPacketizationConfig,
- RtcpNackResponder,
- RtcpSrReporter,
- type Track,
-} from "@lng2004/node-datachannel";
-import { Codec, MediaType } from "@snazzah/davey";
-import { CodecPayloadType } from "./CodecPayloadType.js";
-import { normalizeVideoCodec, type SupportedVideoCodec } from "../../utils.js";
-import {
- splitNalu,
- H264Helpers,
- H264NalUnitTypes,
- startCode3,
-} from "../processing/AnnexBHelper.js";
-import { rewriteSPSVUI } from "../processing/SPSVUIRewriter.js";
-import type { BaseMediaConnection } from "./BaseMediaConnection.js";
-
-export class WebRtcConnWrapper {
- private _mediaConn: BaseMediaConnection;
-
- private _webRtcConn?: PeerConnection;
- private _audioDef: Audio;
- private _videoDef: Video;
- private _audioTrack?: Track;
- private _videoTrack?: Track;
- private _audioPacketizer?: RtpPacketizer;
- private _videoPacketizer?: RtpPacketizer;
- private _videoCodec?: SupportedVideoCodec;
-
- constructor(mediaConn: BaseMediaConnection) {
- this._mediaConn = mediaConn;
- this._audioDef = new Audio("0", "SendRecv");
- this._videoDef = new Video("1", "SendRecv");
- this._audioDef.addOpusCodec(CodecPayloadType.opus.payload_type);
- for (const {
- name,
- payload_type,
- rtx_payload_type,
- clockRate,
- } of Object.values(CodecPayloadType).filter((el) => el.type === "video")) {
- switch (name) {
- case "H264":
- this._videoDef.addH264Codec(payload_type);
- break;
- case "H265":
- this._videoDef.addH265Codec(payload_type);
- break;
- case "VP8":
- this._videoDef.addVP8Codec(payload_type);
- break;
- case "VP9":
- this._videoDef.addVP9Codec(payload_type);
- break;
- case "AV1":
- this._videoDef.addAV1Codec(payload_type);
- break;
- }
- this._videoDef.addRTXCodec(rtx_payload_type, payload_type, clockRate);
- }
- }
-
- public initWebRtc() {
- this._webRtcConn = new PeerConnection("", {
- iceServers: ["stun:stun.l.google.com:19302"],
- });
- this._audioTrack = this._webRtcConn.addTrack(this._audioDef);
- this._videoTrack = this._webRtcConn.addTrack(this._videoDef);
- this._setMediaHandler();
- return this._webRtcConn;
- }
-
- private _setMediaHandler() {
- if (this._audioPacketizer)
- this._audioTrack?.setMediaHandler(this._audioPacketizer);
- if (this._videoPacketizer)
- this._videoTrack?.setMediaHandler(this._videoPacketizer);
- }
-
- public close() {
- this._webRtcConn?.close();
- }
-
- public get webRtcConn() {
- return this._webRtcConn;
- }
-
- public get ready() {
- return this._webRtcConn?.state() === "connected";
- }
-
- public get mediaConnection() {
- return this._mediaConn;
- }
-
- public sendAudioFrame(frame: Buffer, frametime: number) {
- if (!this.ready) return;
- if (!this._audioPacketizer) return;
- const { rtpConfig } = this._audioPacketizer;
- const { clockRate } = rtpConfig;
- if (this.mediaConnection.daveReady)
- frame = this.mediaConnection.daveSession!.encryptOpus(frame);
- this._audioTrack?.sendMessageBinary(frame);
- rtpConfig.timestamp += Math.round((frametime * clockRate) / 1000);
- }
-
- public sendVideoFrame(frame: Buffer, frametime: number) {
- if (!this.ready) return;
- if (!this._videoPacketizer) return;
- const { rtpConfig } = this._videoPacketizer;
- const { clockRate } = rtpConfig;
- if (this._videoCodec === "H264") {
- let spsRewritten = false;
- const nalus = splitNalu(frame).map((el) => {
- if (H264Helpers.getUnitType(el) === H264NalUnitTypes.SPS) {
- spsRewritten = true;
- return rewriteSPSVUI(el);
- }
- return el;
- });
- if (spsRewritten)
- frame = Buffer.concat(nalus.flatMap((el) => [startCode3, el]));
- }
- if (this.mediaConnection.daveReady) {
- let daveCodec = Codec.UNKNOWN;
- switch (this._videoCodec) {
- case "H264":
- daveCodec = Codec.H264;
- break;
- case "H265":
- daveCodec = Codec.H265;
- break;
- case "VP8":
- daveCodec = Codec.VP8;
- break;
- case "VP9":
- daveCodec = Codec.VP9;
- break;
- case "AV1":
- daveCodec = Codec.AV1;
- break;
- }
- frame = this.mediaConnection.daveSession!.encrypt(
- MediaType.VIDEO,
- daveCodec,
- frame,
- );
- }
- this._videoTrack?.sendMessageBinary(frame);
- rtpConfig.timestamp += Math.round((frametime * clockRate) / 1000);
- }
-
- public setPacketizer(videoCodec: string): void {
- if (!this.mediaConnection.webRtcParams)
- throw new Error("WebRTC connection not ready");
- const { audioSsrc, videoSsrc } = this.mediaConnection.webRtcParams;
- const rtpConfigAudio = new RtpPacketizationConfig(
- audioSsrc,
- "",
- CodecPayloadType.opus.payload_type,
- CodecPayloadType.opus.clockRate,
- );
- rtpConfigAudio.playoutDelayId = 5;
- rtpConfigAudio.playoutDelayMin = 0;
- rtpConfigAudio.playoutDelayMax = 1;
- this._audioPacketizer = new RtpPacketizer(rtpConfigAudio);
- this._audioPacketizer.addToChain(new RtcpSrReporter(rtpConfigAudio));
- this._audioPacketizer.addToChain(new RtcpNackResponder());
-
- this._videoCodec = normalizeVideoCodec(videoCodec);
- const rtpConfigVideo = new RtpPacketizationConfig(
- videoSsrc,
- "",
- CodecPayloadType[this._videoCodec].payload_type,
- CodecPayloadType[this._videoCodec].clockRate,
- );
- rtpConfigVideo.playoutDelayId = 5;
- rtpConfigVideo.playoutDelayMin = 0;
- rtpConfigVideo.playoutDelayMax = 10;
- switch (this._videoCodec) {
- case "H264":
- this._videoPacketizer = new H264RtpPacketizer(
- "StartSequence",
- rtpConfigVideo,
- );
- break;
- case "H265":
- this._videoPacketizer = new H265RtpPacketizer(
- "StartSequence",
- rtpConfigVideo,
- );
- break;
- case "AV1":
- this._videoPacketizer = new AV1RtpPacketizer("Obu", rtpConfigVideo);
- break;
- default:
- throw new Error(`Packetizer not implemented for ${this._videoCodec}`);
- }
- this._videoPacketizer.addToChain(new RtcpSrReporter(rtpConfigVideo));
- this._videoPacketizer.addToChain(new RtcpNackResponder());
- this._videoPacketizer.addToChain(new PacingHandler(25 * 1000 * 1000, 1));
-
- this._setMediaHandler();
- }
-}
diff --git a/vendor/discord-video-stream/src/client/voice/index.ts b/vendor/discord-video-stream/src/client/voice/index.ts
deleted file mode 100644
index 5e3282d..0000000
--- a/vendor/discord-video-stream/src/client/voice/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * from "./VoiceConnection.js";
-export * from "./VoiceOpCodes.js";
-// export * from './MediaUdp.js';
-export * from "./StreamConnection.js";
-export * from "./BaseMediaConnection.js";
diff --git a/vendor/discord-video-stream/src/index.ts b/vendor/discord-video-stream/src/index.ts
deleted file mode 100644
index 3240fe2..0000000
--- a/vendor/discord-video-stream/src/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from "./client/index.js";
-export * from "./media/index.js";
-export * as Utils from "./utils.js";
diff --git a/vendor/discord-video-stream/src/media/AudioStream.ts b/vendor/discord-video-stream/src/media/AudioStream.ts
deleted file mode 100644
index 2503030..0000000
--- a/vendor/discord-video-stream/src/media/AudioStream.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { BaseMediaStream } from "./BaseMediaStream.js";
-import type { WebRtcConnWrapper } from "../client/voice/WebRtcWrapper.js";
-
-export class AudioStream extends BaseMediaStream {
- private _conn: WebRtcConnWrapper;
-
- constructor(conn: WebRtcConnWrapper, noSleep = false) {
- super("audio", noSleep);
- this._conn = conn;
- }
-
- protected override async _sendFrame(
- frame: Buffer,
- frametime: number,
- ): Promise {
- this._conn.sendAudioFrame(frame, frametime);
- }
-}
diff --git a/vendor/discord-video-stream/src/media/BaseMediaStream.ts b/vendor/discord-video-stream/src/media/BaseMediaStream.ts
deleted file mode 100644
index 56291b3..0000000
--- a/vendor/discord-video-stream/src/media/BaseMediaStream.ts
+++ /dev/null
@@ -1,198 +0,0 @@
-import { Log } from "debug-level";
-import { setTimeout } from "node:timers/promises";
-import { Writable } from "node:stream";
-import type { Packet } from "node-av";
-
-export class BaseMediaStream extends Writable {
- private _pts?: number;
- private _syncTolerance = 20;
- private _loggerSend: Log;
- private _loggerSync: Log;
- private _loggerSleep: Log;
-
- private _noSleep: boolean;
- private _startTime?: number;
- private _startPts?: number;
- private _sync = true;
- private _syncStream?: BaseMediaStream;
-
- constructor(type: string, noSleep = false) {
- super({ objectMode: true, highWaterMark: 0 });
- this._loggerSend = new Log(`stream:${type}:send`);
- this._loggerSync = new Log(`stream:${type}:sync`);
- this._loggerSleep = new Log(`stream:${type}:sleep`);
- this._noSleep = noSleep;
- }
-
- get sync(): boolean {
- return this._sync;
- }
- set sync(val: boolean) {
- this._sync = val;
- if (val) this._loggerSync.debug("Sync enabled");
- else this._loggerSync.debug("Sync disabled");
- }
- get syncStream() {
- return this._syncStream;
- }
- set syncStream(stream: BaseMediaStream | undefined) {
- if (stream !== undefined && this === stream.syncStream)
- throw new Error("Cannot sync 2 streams with eachother");
- this._syncStream = stream;
- }
- get noSleep(): boolean {
- return this._noSleep;
- }
- set noSleep(val: boolean) {
- this._noSleep = val;
- if (!val) this.resetTimingCompensation();
- }
- get pts(): number | undefined {
- return this._pts;
- }
- get syncTolerance() {
- return this._syncTolerance;
- }
- set syncTolerance(n: number) {
- if (n < 0) return;
- this._syncTolerance = n;
- }
- protected async _sendFrame(
- _frame: Buffer,
- _frametime: number,
- ): Promise {
- throw new Error("Not implemented");
- }
- private ptsDelta() {
- if (this.pts !== undefined && this.syncStream?.pts !== undefined)
- return this.pts - this.syncStream.pts;
- return undefined;
- }
- private isAhead() {
- const delta = this.ptsDelta();
- return (
- this.syncStream?.writableEnded === false &&
- delta !== undefined &&
- delta > this.syncTolerance
- );
- }
- private isBehind() {
- const delta = this.ptsDelta();
- return (
- this.syncStream?.writableEnded === false &&
- delta !== undefined &&
- delta < -this.syncTolerance
- );
- }
- private resetTimingCompensation() {
- this._startTime = this._startPts = undefined;
- }
- async _write(
- frame: Packet,
- _: BufferEncoding,
- callback: (error?: Error | null) => void,
- ) {
- const { data, pts, duration, timeBase } = frame;
- if (!data) {
- frame.free();
- callback();
- return;
- }
-
- const frametime = (Number(duration) / timeBase.den) * timeBase.num * 1000;
-
- const start_sendFrame = performance.now();
- await this._sendFrame(Buffer.from(data), frametime);
- const end_sendFrame = performance.now();
-
- this._pts = (Number(pts) / timeBase.den) * timeBase.num * 1000;
- this.emit("pts", this._pts);
-
- const sendTime = end_sendFrame - start_sendFrame;
- const ratio = sendTime / frametime;
- this._loggerSend.debug(
- {
- stats: {
- pts: this._pts,
- frame_size: data.length,
- duration: sendTime,
- frametime,
- },
- },
- `Frame sent in ${sendTime.toFixed(2)}ms (${(ratio * 100).toFixed(2)}% frametime)`,
- );
- if (ratio > 1) {
- this._loggerSend.warn(
- {
- frame_size: data.length,
- duration: sendTime,
- frametime,
- },
- `Frame takes too long to send (${(ratio * 100).toFixed(2)}% frametime)`,
- );
- }
-
- this._startTime ??= start_sendFrame;
- this._startPts ??= this._pts;
- const sleep = Math.max(
- 0,
- this._pts -
- this._startPts +
- frametime -
- (end_sendFrame - this._startTime),
- );
- if (this._noSleep || sleep === 0) {
- callback(null);
- } else if (this.sync && this.isBehind()) {
- this._loggerSync.debug(
- {
- stats: {
- pts: this.pts,
- pts_other: this.syncStream?.pts,
- },
- },
- "Stream is behind. Not sleeping for this frame",
- );
- this.resetTimingCompensation();
- callback(null);
- } else if (this.sync && this.isAhead()) {
- do {
- this._loggerSync.debug(
- {
- stats: {
- pts: this.pts,
- pts_other: this.syncStream?.pts,
- frametime,
- },
- },
- `Stream is ahead. Waiting for ${frametime}ms`,
- );
- await setTimeout(frametime);
- } while (this.sync && this.isAhead());
- this.resetTimingCompensation();
- callback(null);
- } else {
- this._loggerSleep.debug(
- {
- stats: {
- pts: this._pts,
- startPts: this._startPts,
- time: end_sendFrame,
- startTime: this._startTime,
- frametime,
- },
- },
- `Sleeping for ${sleep}ms`,
- );
- setTimeout(sleep).then(() => callback(null));
- }
- frame.free();
- }
- _destroy(
- error: Error | null,
- callback: (error?: Error | null) => void,
- ): void {
- super._destroy(error, callback);
- this.syncStream = undefined;
- }
-}
diff --git a/vendor/discord-video-stream/src/media/LibavCodecId.ts b/vendor/discord-video-stream/src/media/LibavCodecId.ts
deleted file mode 100644
index a5f023b..0000000
--- a/vendor/discord-video-stream/src/media/LibavCodecId.ts
+++ /dev/null
@@ -1,564 +0,0 @@
-// https://ffmpeg.org/doxygen/7.0/codec__id_8h_source.html
-
-export enum AVCodecID {
- AV_CODEC_ID_NONE,
-
- /* video codecs */
- AV_CODEC_ID_MPEG1VIDEO,
- AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
- AV_CODEC_ID_H261,
- AV_CODEC_ID_H263,
- AV_CODEC_ID_RV10,
- AV_CODEC_ID_RV20,
- AV_CODEC_ID_MJPEG,
- AV_CODEC_ID_MJPEGB,
- AV_CODEC_ID_LJPEG,
- AV_CODEC_ID_SP5X,
- AV_CODEC_ID_JPEGLS,
- AV_CODEC_ID_MPEG4,
- AV_CODEC_ID_RAWVIDEO,
- AV_CODEC_ID_MSMPEG4V1,
- AV_CODEC_ID_MSMPEG4V2,
- AV_CODEC_ID_MSMPEG4V3,
- AV_CODEC_ID_WMV1,
- AV_CODEC_ID_WMV2,
- AV_CODEC_ID_H263P,
- AV_CODEC_ID_H263I,
- AV_CODEC_ID_FLV1,
- AV_CODEC_ID_SVQ1,
- AV_CODEC_ID_SVQ3,
- AV_CODEC_ID_DVVIDEO,
- AV_CODEC_ID_HUFFYUV,
- AV_CODEC_ID_CYUV,
- AV_CODEC_ID_H264,
- AV_CODEC_ID_INDEO3,
- AV_CODEC_ID_VP3,
- AV_CODEC_ID_THEORA,
- AV_CODEC_ID_ASV1,
- AV_CODEC_ID_ASV2,
- AV_CODEC_ID_FFV1,
- AV_CODEC_ID_4XM,
- AV_CODEC_ID_VCR1,
- AV_CODEC_ID_CLJR,
- AV_CODEC_ID_MDEC,
- AV_CODEC_ID_ROQ,
- AV_CODEC_ID_INTERPLAY_VIDEO,
- AV_CODEC_ID_XAN_WC3,
- AV_CODEC_ID_XAN_WC4,
- AV_CODEC_ID_RPZA,
- AV_CODEC_ID_CINEPAK,
- AV_CODEC_ID_WS_VQA,
- AV_CODEC_ID_MSRLE,
- AV_CODEC_ID_MSVIDEO1,
- AV_CODEC_ID_IDCIN,
- AV_CODEC_ID_8BPS,
- AV_CODEC_ID_SMC,
- AV_CODEC_ID_FLIC,
- AV_CODEC_ID_TRUEMOTION1,
- AV_CODEC_ID_VMDVIDEO,
- AV_CODEC_ID_MSZH,
- AV_CODEC_ID_ZLIB,
- AV_CODEC_ID_QTRLE,
- AV_CODEC_ID_TSCC,
- AV_CODEC_ID_ULTI,
- AV_CODEC_ID_QDRAW,
- AV_CODEC_ID_VIXL,
- AV_CODEC_ID_QPEG,
- AV_CODEC_ID_PNG,
- AV_CODEC_ID_PPM,
- AV_CODEC_ID_PBM,
- AV_CODEC_ID_PGM,
- AV_CODEC_ID_PGMYUV,
- AV_CODEC_ID_PAM,
- AV_CODEC_ID_FFVHUFF,
- AV_CODEC_ID_RV30,
- AV_CODEC_ID_RV40,
- AV_CODEC_ID_VC1,
- AV_CODEC_ID_WMV3,
- AV_CODEC_ID_LOCO,
- AV_CODEC_ID_WNV1,
- AV_CODEC_ID_AASC,
- AV_CODEC_ID_INDEO2,
- AV_CODEC_ID_FRAPS,
- AV_CODEC_ID_TRUEMOTION2,
- AV_CODEC_ID_BMP,
- AV_CODEC_ID_CSCD,
- AV_CODEC_ID_MMVIDEO,
- AV_CODEC_ID_ZMBV,
- AV_CODEC_ID_AVS,
- AV_CODEC_ID_SMACKVIDEO,
- AV_CODEC_ID_NUV,
- AV_CODEC_ID_KMVC,
- AV_CODEC_ID_FLASHSV,
- AV_CODEC_ID_CAVS,
- AV_CODEC_ID_JPEG2000,
- AV_CODEC_ID_VMNC,
- AV_CODEC_ID_VP5,
- AV_CODEC_ID_VP6,
- AV_CODEC_ID_VP6F,
- AV_CODEC_ID_TARGA,
- AV_CODEC_ID_DSICINVIDEO,
- AV_CODEC_ID_TIERTEXSEQVIDEO,
- AV_CODEC_ID_TIFF,
- AV_CODEC_ID_GIF,
- AV_CODEC_ID_DXA,
- AV_CODEC_ID_DNXHD,
- AV_CODEC_ID_THP,
- AV_CODEC_ID_SGI,
- AV_CODEC_ID_C93,
- AV_CODEC_ID_BETHSOFTVID,
- AV_CODEC_ID_PTX,
- AV_CODEC_ID_TXD,
- AV_CODEC_ID_VP6A,
- AV_CODEC_ID_AMV,
- AV_CODEC_ID_VB,
- AV_CODEC_ID_PCX,
- AV_CODEC_ID_SUNRAST,
- AV_CODEC_ID_INDEO4,
- AV_CODEC_ID_INDEO5,
- AV_CODEC_ID_MIMIC,
- AV_CODEC_ID_RL2,
- AV_CODEC_ID_ESCAPE124,
- AV_CODEC_ID_DIRAC,
- AV_CODEC_ID_BFI,
- AV_CODEC_ID_CMV,
- AV_CODEC_ID_MOTIONPIXELS,
- AV_CODEC_ID_TGV,
- AV_CODEC_ID_TGQ,
- AV_CODEC_ID_TQI,
- AV_CODEC_ID_AURA,
- AV_CODEC_ID_AURA2,
- AV_CODEC_ID_V210X,
- AV_CODEC_ID_TMV,
- AV_CODEC_ID_V210,
- AV_CODEC_ID_DPX,
- AV_CODEC_ID_MAD,
- AV_CODEC_ID_FRWU,
- AV_CODEC_ID_FLASHSV2,
- AV_CODEC_ID_CDGRAPHICS,
- AV_CODEC_ID_R210,
- AV_CODEC_ID_ANM,
- AV_CODEC_ID_BINKVIDEO,
- AV_CODEC_ID_IFF_ILBM,
- AV_CODEC_ID_IFF_BYTERUN1 = AV_CODEC_ID_IFF_ILBM,
- AV_CODEC_ID_KGV1,
- AV_CODEC_ID_YOP,
- AV_CODEC_ID_VP8,
- AV_CODEC_ID_PICTOR,
- AV_CODEC_ID_ANSI,
- AV_CODEC_ID_A64_MULTI,
- AV_CODEC_ID_A64_MULTI5,
- AV_CODEC_ID_R10K,
- AV_CODEC_ID_MXPEG,
- AV_CODEC_ID_LAGARITH,
- AV_CODEC_ID_PRORES,
- AV_CODEC_ID_JV,
- AV_CODEC_ID_DFA,
- AV_CODEC_ID_WMV3IMAGE,
- AV_CODEC_ID_VC1IMAGE,
- AV_CODEC_ID_UTVIDEO,
- AV_CODEC_ID_BMV_VIDEO,
- AV_CODEC_ID_VBLE,
- AV_CODEC_ID_DXTORY,
- AV_CODEC_ID_V410,
- AV_CODEC_ID_XWD,
- AV_CODEC_ID_CDXL,
- AV_CODEC_ID_XBM,
- AV_CODEC_ID_ZEROCODEC,
- AV_CODEC_ID_MSS1,
- AV_CODEC_ID_MSA1,
- AV_CODEC_ID_TSCC2,
- AV_CODEC_ID_MTS2,
- AV_CODEC_ID_CLLC,
- AV_CODEC_ID_MSS2,
- AV_CODEC_ID_VP9,
- AV_CODEC_ID_AIC,
- AV_CODEC_ID_ESCAPE130,
- AV_CODEC_ID_G2M,
- AV_CODEC_ID_WEBP,
- AV_CODEC_ID_HNM4_VIDEO,
- AV_CODEC_ID_HEVC,
- AV_CODEC_ID_H265 = AV_CODEC_ID_HEVC,
- AV_CODEC_ID_FIC,
- AV_CODEC_ID_ALIAS_PIX,
- AV_CODEC_ID_BRENDER_PIX,
- AV_CODEC_ID_PAF_VIDEO,
- AV_CODEC_ID_EXR,
- AV_CODEC_ID_VP7,
- AV_CODEC_ID_SANM,
- AV_CODEC_ID_SGIRLE,
- AV_CODEC_ID_MVC1,
- AV_CODEC_ID_MVC2,
- AV_CODEC_ID_HQX,
- AV_CODEC_ID_TDSC,
- AV_CODEC_ID_HQ_HQA,
- AV_CODEC_ID_HAP,
- AV_CODEC_ID_DDS,
- AV_CODEC_ID_DXV,
- AV_CODEC_ID_SCREENPRESSO,
- AV_CODEC_ID_RSCC,
- AV_CODEC_ID_AVS2,
- AV_CODEC_ID_PGX,
- AV_CODEC_ID_AVS3,
- AV_CODEC_ID_MSP2,
- AV_CODEC_ID_VVC,
- AV_CODEC_ID_H266 = AV_CODEC_ID_VVC,
- AV_CODEC_ID_Y41P,
- AV_CODEC_ID_AVRP,
- AV_CODEC_ID_012V,
- AV_CODEC_ID_AVUI,
- AV_CODEC_ID_TARGA_Y216,
- AV_CODEC_ID_V308,
- AV_CODEC_ID_V408,
- AV_CODEC_ID_YUV4,
- AV_CODEC_ID_AVRN,
- AV_CODEC_ID_CPIA,
- AV_CODEC_ID_XFACE,
- AV_CODEC_ID_SNOW,
- AV_CODEC_ID_SMVJPEG,
- AV_CODEC_ID_APNG,
- AV_CODEC_ID_DAALA,
- AV_CODEC_ID_CFHD,
- AV_CODEC_ID_TRUEMOTION2RT,
- AV_CODEC_ID_M101,
- AV_CODEC_ID_MAGICYUV,
- AV_CODEC_ID_SHEERVIDEO,
- AV_CODEC_ID_YLC,
- AV_CODEC_ID_PSD,
- AV_CODEC_ID_PIXLET,
- AV_CODEC_ID_SPEEDHQ,
- AV_CODEC_ID_FMVC,
- AV_CODEC_ID_SCPR,
- AV_CODEC_ID_CLEARVIDEO,
- AV_CODEC_ID_XPM,
- AV_CODEC_ID_AV1,
- AV_CODEC_ID_BITPACKED,
- AV_CODEC_ID_MSCC,
- AV_CODEC_ID_SRGC,
- AV_CODEC_ID_SVG,
- AV_CODEC_ID_GDV,
- AV_CODEC_ID_FITS,
- AV_CODEC_ID_IMM4,
- AV_CODEC_ID_PROSUMER,
- AV_CODEC_ID_MWSC,
- AV_CODEC_ID_WCMV,
- AV_CODEC_ID_RASC,
- AV_CODEC_ID_HYMT,
- AV_CODEC_ID_ARBC,
- AV_CODEC_ID_AGM,
- AV_CODEC_ID_LSCR,
- AV_CODEC_ID_VP4,
- AV_CODEC_ID_IMM5,
- AV_CODEC_ID_MVDV,
- AV_CODEC_ID_MVHA,
- AV_CODEC_ID_CDTOONS,
- AV_CODEC_ID_MV30,
- AV_CODEC_ID_NOTCHLC,
- AV_CODEC_ID_PFM,
- AV_CODEC_ID_MOBICLIP,
- AV_CODEC_ID_PHOTOCD,
- AV_CODEC_ID_IPU,
- AV_CODEC_ID_ARGO,
- AV_CODEC_ID_CRI,
- AV_CODEC_ID_SIMBIOSIS_IMX,
- AV_CODEC_ID_SGA_VIDEO,
- AV_CODEC_ID_GEM,
- AV_CODEC_ID_VBN,
- AV_CODEC_ID_JPEGXL,
- AV_CODEC_ID_QOI,
- AV_CODEC_ID_PHM,
- AV_CODEC_ID_RADIANCE_HDR,
- AV_CODEC_ID_WBMP,
- AV_CODEC_ID_MEDIA100,
- AV_CODEC_ID_VQC,
- AV_CODEC_ID_PDV,
- AV_CODEC_ID_EVC,
- AV_CODEC_ID_RTV1,
- AV_CODEC_ID_VMIX,
- AV_CODEC_ID_LEAD,
-
- /* various PCM "codecs" */
- AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
- AV_CODEC_ID_PCM_S16LE = 0x10000,
- AV_CODEC_ID_PCM_S16BE,
- AV_CODEC_ID_PCM_U16LE,
- AV_CODEC_ID_PCM_U16BE,
- AV_CODEC_ID_PCM_S8,
- AV_CODEC_ID_PCM_U8,
- AV_CODEC_ID_PCM_MULAW,
- AV_CODEC_ID_PCM_ALAW,
- AV_CODEC_ID_PCM_S32LE,
- AV_CODEC_ID_PCM_S32BE,
- AV_CODEC_ID_PCM_U32LE,
- AV_CODEC_ID_PCM_U32BE,
- AV_CODEC_ID_PCM_S24LE,
- AV_CODEC_ID_PCM_S24BE,
- AV_CODEC_ID_PCM_U24LE,
- AV_CODEC_ID_PCM_U24BE,
- AV_CODEC_ID_PCM_S24DAUD,
- AV_CODEC_ID_PCM_ZORK,
- AV_CODEC_ID_PCM_S16LE_PLANAR,
- AV_CODEC_ID_PCM_DVD,
- AV_CODEC_ID_PCM_F32BE,
- AV_CODEC_ID_PCM_F32LE,
- AV_CODEC_ID_PCM_F64BE,
- AV_CODEC_ID_PCM_F64LE,
- AV_CODEC_ID_PCM_BLURAY,
- AV_CODEC_ID_PCM_LXF,
- AV_CODEC_ID_S302M,
- AV_CODEC_ID_PCM_S8_PLANAR,
- AV_CODEC_ID_PCM_S24LE_PLANAR,
- AV_CODEC_ID_PCM_S32LE_PLANAR,
- AV_CODEC_ID_PCM_S16BE_PLANAR,
- AV_CODEC_ID_PCM_S64LE,
- AV_CODEC_ID_PCM_S64BE,
- AV_CODEC_ID_PCM_F16LE,
- AV_CODEC_ID_PCM_F24LE,
- AV_CODEC_ID_PCM_VIDC,
- AV_CODEC_ID_PCM_SGA,
-
- /* various ADPCM codecs */
- AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
- AV_CODEC_ID_ADPCM_IMA_WAV,
- AV_CODEC_ID_ADPCM_IMA_DK3,
- AV_CODEC_ID_ADPCM_IMA_DK4,
- AV_CODEC_ID_ADPCM_IMA_WS,
- AV_CODEC_ID_ADPCM_IMA_SMJPEG,
- AV_CODEC_ID_ADPCM_MS,
- AV_CODEC_ID_ADPCM_4XM,
- AV_CODEC_ID_ADPCM_XA,
- AV_CODEC_ID_ADPCM_ADX,
- AV_CODEC_ID_ADPCM_EA,
- AV_CODEC_ID_ADPCM_G726,
- AV_CODEC_ID_ADPCM_CT,
- AV_CODEC_ID_ADPCM_SWF,
- AV_CODEC_ID_ADPCM_YAMAHA,
- AV_CODEC_ID_ADPCM_SBPRO_4,
- AV_CODEC_ID_ADPCM_SBPRO_3,
- AV_CODEC_ID_ADPCM_SBPRO_2,
- AV_CODEC_ID_ADPCM_THP,
- AV_CODEC_ID_ADPCM_IMA_AMV,
- AV_CODEC_ID_ADPCM_EA_R1,
- AV_CODEC_ID_ADPCM_EA_R3,
- AV_CODEC_ID_ADPCM_EA_R2,
- AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
- AV_CODEC_ID_ADPCM_IMA_EA_EACS,
- AV_CODEC_ID_ADPCM_EA_XAS,
- AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
- AV_CODEC_ID_ADPCM_IMA_ISS,
- AV_CODEC_ID_ADPCM_G722,
- AV_CODEC_ID_ADPCM_IMA_APC,
- AV_CODEC_ID_ADPCM_VIMA,
- AV_CODEC_ID_ADPCM_AFC,
- AV_CODEC_ID_ADPCM_IMA_OKI,
- AV_CODEC_ID_ADPCM_DTK,
- AV_CODEC_ID_ADPCM_IMA_RAD,
- AV_CODEC_ID_ADPCM_G726LE,
- AV_CODEC_ID_ADPCM_THP_LE,
- AV_CODEC_ID_ADPCM_PSX,
- AV_CODEC_ID_ADPCM_AICA,
- AV_CODEC_ID_ADPCM_IMA_DAT4,
- AV_CODEC_ID_ADPCM_MTAF,
- AV_CODEC_ID_ADPCM_AGM,
- AV_CODEC_ID_ADPCM_ARGO,
- AV_CODEC_ID_ADPCM_IMA_SSI,
- AV_CODEC_ID_ADPCM_ZORK,
- AV_CODEC_ID_ADPCM_IMA_APM,
- AV_CODEC_ID_ADPCM_IMA_ALP,
- AV_CODEC_ID_ADPCM_IMA_MTF,
- AV_CODEC_ID_ADPCM_IMA_CUNNING,
- AV_CODEC_ID_ADPCM_IMA_MOFLEX,
- AV_CODEC_ID_ADPCM_IMA_ACORN,
- AV_CODEC_ID_ADPCM_XMD,
-
- /* AMR */
- AV_CODEC_ID_AMR_NB = 0x12000,
- AV_CODEC_ID_AMR_WB,
-
- /* RealAudio codecs*/
- AV_CODEC_ID_RA_144 = 0x13000,
- AV_CODEC_ID_RA_288,
-
- /* various DPCM codecs */
- AV_CODEC_ID_ROQ_DPCM = 0x14000,
- AV_CODEC_ID_INTERPLAY_DPCM,
- AV_CODEC_ID_XAN_DPCM,
- AV_CODEC_ID_SOL_DPCM,
- AV_CODEC_ID_SDX2_DPCM,
- AV_CODEC_ID_GREMLIN_DPCM,
- AV_CODEC_ID_DERF_DPCM,
- AV_CODEC_ID_WADY_DPCM,
- AV_CODEC_ID_CBD2_DPCM,
-
- /* audio codecs */
- AV_CODEC_ID_MP2 = 0x15000,
- AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
- AV_CODEC_ID_AAC,
- AV_CODEC_ID_AC3,
- AV_CODEC_ID_DTS,
- AV_CODEC_ID_VORBIS,
- AV_CODEC_ID_DVAUDIO,
- AV_CODEC_ID_WMAV1,
- AV_CODEC_ID_WMAV2,
- AV_CODEC_ID_MACE3,
- AV_CODEC_ID_MACE6,
- AV_CODEC_ID_VMDAUDIO,
- AV_CODEC_ID_FLAC,
- AV_CODEC_ID_MP3ADU,
- AV_CODEC_ID_MP3ON4,
- AV_CODEC_ID_SHORTEN,
- AV_CODEC_ID_ALAC,
- AV_CODEC_ID_WESTWOOD_SND1,
- AV_CODEC_ID_GSM, ///< as in Berlin toast format
- AV_CODEC_ID_QDM2,
- AV_CODEC_ID_COOK,
- AV_CODEC_ID_TRUESPEECH,
- AV_CODEC_ID_TTA,
- AV_CODEC_ID_SMACKAUDIO,
- AV_CODEC_ID_QCELP,
- AV_CODEC_ID_WAVPACK,
- AV_CODEC_ID_DSICINAUDIO,
- AV_CODEC_ID_IMC,
- AV_CODEC_ID_MUSEPACK7,
- AV_CODEC_ID_MLP,
- AV_CODEC_ID_GSM_MS /* as found in WAV */,
- AV_CODEC_ID_ATRAC3,
- AV_CODEC_ID_APE,
- AV_CODEC_ID_NELLYMOSER,
- AV_CODEC_ID_MUSEPACK8,
- AV_CODEC_ID_SPEEX,
- AV_CODEC_ID_WMAVOICE,
- AV_CODEC_ID_WMAPRO,
- AV_CODEC_ID_WMALOSSLESS,
- AV_CODEC_ID_ATRAC3P,
- AV_CODEC_ID_EAC3,
- AV_CODEC_ID_SIPR,
- AV_CODEC_ID_MP1,
- AV_CODEC_ID_TWINVQ,
- AV_CODEC_ID_TRUEHD,
- AV_CODEC_ID_MP4ALS,
- AV_CODEC_ID_ATRAC1,
- AV_CODEC_ID_BINKAUDIO_RDFT,
- AV_CODEC_ID_BINKAUDIO_DCT,
- AV_CODEC_ID_AAC_LATM,
- AV_CODEC_ID_QDMC,
- AV_CODEC_ID_CELT,
- AV_CODEC_ID_G723_1,
- AV_CODEC_ID_G729,
- AV_CODEC_ID_8SVX_EXP,
- AV_CODEC_ID_8SVX_FIB,
- AV_CODEC_ID_BMV_AUDIO,
- AV_CODEC_ID_RALF,
- AV_CODEC_ID_IAC,
- AV_CODEC_ID_ILBC,
- AV_CODEC_ID_OPUS,
- AV_CODEC_ID_COMFORT_NOISE,
- AV_CODEC_ID_TAK,
- AV_CODEC_ID_METASOUND,
- AV_CODEC_ID_PAF_AUDIO,
- AV_CODEC_ID_ON2AVC,
- AV_CODEC_ID_DSS_SP,
- AV_CODEC_ID_CODEC2,
- AV_CODEC_ID_FFWAVESYNTH,
- AV_CODEC_ID_SONIC,
- AV_CODEC_ID_SONIC_LS,
- AV_CODEC_ID_EVRC,
- AV_CODEC_ID_SMV,
- AV_CODEC_ID_DSD_LSBF,
- AV_CODEC_ID_DSD_MSBF,
- AV_CODEC_ID_DSD_LSBF_PLANAR,
- AV_CODEC_ID_DSD_MSBF_PLANAR,
- AV_CODEC_ID_4GV,
- AV_CODEC_ID_INTERPLAY_ACM,
- AV_CODEC_ID_XMA1,
- AV_CODEC_ID_XMA2,
- AV_CODEC_ID_DST,
- AV_CODEC_ID_ATRAC3AL,
- AV_CODEC_ID_ATRAC3PAL,
- AV_CODEC_ID_DOLBY_E,
- AV_CODEC_ID_APTX,
- AV_CODEC_ID_APTX_HD,
- AV_CODEC_ID_SBC,
- AV_CODEC_ID_ATRAC9,
- AV_CODEC_ID_HCOM,
- AV_CODEC_ID_ACELP_KELVIN,
- AV_CODEC_ID_MPEGH_3D_AUDIO,
- AV_CODEC_ID_SIREN,
- AV_CODEC_ID_HCA,
- AV_CODEC_ID_FASTAUDIO,
- AV_CODEC_ID_MSNSIREN,
- AV_CODEC_ID_DFPWM,
- AV_CODEC_ID_BONK,
- AV_CODEC_ID_MISC4,
- AV_CODEC_ID_APAC,
- AV_CODEC_ID_FTR,
- AV_CODEC_ID_WAVARC,
- AV_CODEC_ID_RKA,
- AV_CODEC_ID_AC4,
- AV_CODEC_ID_OSQ,
- AV_CODEC_ID_QOA,
-
- /* subtitle codecs */
- AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
- AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
- AV_CODEC_ID_DVB_SUBTITLE,
- AV_CODEC_ID_TEXT, ///< raw UTF-8 text
- AV_CODEC_ID_XSUB,
- AV_CODEC_ID_SSA,
- AV_CODEC_ID_MOV_TEXT,
- AV_CODEC_ID_HDMV_PGS_SUBTITLE,
- AV_CODEC_ID_DVB_TELETEXT,
- AV_CODEC_ID_SRT,
- AV_CODEC_ID_MICRODVD,
- AV_CODEC_ID_EIA_608,
- AV_CODEC_ID_JACOSUB,
- AV_CODEC_ID_SAMI,
- AV_CODEC_ID_REALTEXT,
- AV_CODEC_ID_STL,
- AV_CODEC_ID_SUBVIEWER1,
- AV_CODEC_ID_SUBVIEWER,
- AV_CODEC_ID_SUBRIP,
- AV_CODEC_ID_WEBVTT,
- AV_CODEC_ID_MPL2,
- AV_CODEC_ID_VPLAYER,
- AV_CODEC_ID_PJS,
- AV_CODEC_ID_ASS,
- AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
- AV_CODEC_ID_TTML,
- AV_CODEC_ID_ARIB_CAPTION,
-
- /* other specific kind of codecs (generally used for attachments) */
- AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
- AV_CODEC_ID_TTF = 0x18000,
-
- AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
- AV_CODEC_ID_EPG,
- AV_CODEC_ID_BINTEXT,
- AV_CODEC_ID_XBIN,
- AV_CODEC_ID_IDF,
- AV_CODEC_ID_OTF,
- AV_CODEC_ID_SMPTE_KLV,
- AV_CODEC_ID_DVD_NAV,
- AV_CODEC_ID_TIMED_ID3,
- AV_CODEC_ID_BIN_DATA,
- AV_CODEC_ID_SMPTE_2038,
-
- AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
-
- AV_CODEC_ID_MPEG2TS = 0x20000 /**< _FAKE_ codec to indicate a raw MPEG-2 TS
- * stream (only used by libavformat) */,
- AV_CODEC_ID_MPEG4SYSTEMS = 0x20001 /**< _FAKE_ codec to indicate a MPEG-4 Systems
- * stream (only used by libavformat) */,
- AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
- AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
- /**
- * Dummy null video codec, useful mainly for development and debugging.
- * Null encoder/decoder discard all input and never return any output.
- */
- AV_CODEC_ID_VNULL,
- /**
- * Dummy null audio codec, useful mainly for development and debugging.
- * Null encoder/decoder discard all input and never return any output.
- */
- AV_CODEC_ID_ANULL,
-}
diff --git a/vendor/discord-video-stream/src/media/LibavDecoder.ts b/vendor/discord-video-stream/src/media/LibavDecoder.ts
deleted file mode 100644
index a1896a6..0000000
--- a/vendor/discord-video-stream/src/media/LibavDecoder.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import {
- Decoder,
- FilterAPI,
- type Frame,
- type Packet,
- type Stream,
-} from "node-av";
-
-export async function createDecoder(stream: Stream) {
- const decoder = await Decoder.create(stream);
- let freed = false;
- let serializer: Promise | null = null;
- const serialize = (f: () => Promise) => {
- let p: Promise;
- if (serializer) {
- p = serializer.catch(() => {}).then(() => f());
- } else {
- p = f();
- }
- serializer = p = p.finally(() => {
- if (serializer === p) serializer = null;
- });
- return p;
- };
- const filter = FilterAPI.create("format=pix_fmts=rgba");
- return {
- decode: async (packets: Packet) => {
- if (freed) return [];
-
- return serialize(async () => {
- const frames = await decoder.decodeAll(packets);
- let filtered: Frame[] = [];
- for (const frame of frames) {
- filtered = [...filtered, ...(await filter.processAll(frame))];
- }
- return filtered;
- });
- },
- free: () => {
- freed = true;
- return serialize(async () => {
- decoder.close();
- filter.close();
- });
- },
- };
-}
diff --git a/vendor/discord-video-stream/src/media/LibavDemuxer.ts b/vendor/discord-video-stream/src/media/LibavDemuxer.ts
deleted file mode 100644
index f5d9c1c..0000000
--- a/vendor/discord-video-stream/src/media/LibavDemuxer.ts
+++ /dev/null
@@ -1,291 +0,0 @@
-import pDebounce from "p-debounce";
-import {
- BitStreamFilterAPI,
- Demuxer,
- avGetCodecName,
- type Stream,
-} from "node-av";
-import { Log } from "debug-level";
-import { randomUUID } from "node:crypto";
-import { AVCodecID } from "./LibavCodecId.js";
-import { PassThrough } from "node:stream";
-import type { CodecParameters, Packet } from "node-av";
-import type { Readable } from "node:stream";
-
-type MediaStreamInfoCommon = {
- index: number;
- codec: AVCodecID;
- codecpar: CodecParameters;
- avStream: Stream;
-};
-
-export type VideoStreamInfo = MediaStreamInfoCommon & {
- width: number;
- height: number;
- framerate_num: number;
- framerate_den: number;
-};
-export type AudioStreamInfo = MediaStreamInfoCommon & {
- sample_rate: number;
-};
-
-const allowedVideoCodec = new Set([
- AVCodecID.AV_CODEC_ID_H264,
- AVCodecID.AV_CODEC_ID_H265,
- AVCodecID.AV_CODEC_ID_VP8,
- AVCodecID.AV_CODEC_ID_VP9,
- AVCodecID.AV_CODEC_ID_AV1,
-]);
-
-const allowedAudioCodec = new Set([AVCodecID.AV_CODEC_ID_OPUS]);
-
-function parseOpusPacketDuration(frame: Uint8Array) {
- // https://datatracker.ietf.org/doc/html/rfc6716#section-3.1
- const frameSizes = [
- // SILK only, narrow band
- 10, 20, 40, 60,
-
- // SILK only, medium band
- 10, 20, 40, 60,
-
- // SILK only, wide band
- 10, 20, 40, 60,
-
- // Hybrid, super wide band
- 10, 20,
-
- // Hybrid, full band
- 10, 20,
-
- // CELT only, narrow band
- 2.5, 5, 10, 20,
-
- // CELT only, wide band
- 2.5, 5, 10, 20,
-
- // CELT only, super wide band
- 2.5, 5, 10, 20,
-
- // CELT only, full band
- 2.5, 5, 10, 20,
- ];
-
- const frameSize = (48000 / 1000) * frameSizes[frame[0] >> 3];
-
- let frameCount = 0;
- const c = frame[0] & 0b11;
- switch (c) {
- case 0:
- frameCount = 1;
- break;
-
- case 1:
- case 2:
- frameCount = 2;
- break;
-
- case 3:
- frameCount = frame[1] & 0b111111;
- break;
- }
-
- return frameSize * frameCount;
-}
-
-type DemuxerOptions = {
- format: "matroska" | "nut";
-};
-
-export async function demux(input: Readable, { format }: DemuxerOptions) {
- const loggerFormat = new Log("demux:format");
- const loggerFrameCommon = new Log("demux:frame:common");
- const loggerFrameVideo = new Log("demux:frame:video");
- const loggerFrameAudio = new Log("demux:frame:audio");
-
- const filename = randomUUID();
- const demuxer = await Demuxer.open(input, {
- options: {
- fflags: "nobuffer",
- },
- format,
- bufferSize: 8192,
- });
-
- const cleanup = () => {
- input.destroy();
- demuxer.close();
- vPipe.off("drain", readFrame);
- aPipe.off("drain", readFrame);
- vPipe.end();
- aPipe.end();
- vbsf.forEach((e) => {
- e.close();
- });
- };
-
- const vStream = demuxer.video();
- const aStream = demuxer.audio();
-
- let vInfo: VideoStreamInfo | undefined;
- let aInfo: AudioStreamInfo | undefined;
- const vPipe = new PassThrough({
- objectMode: true,
- writableHighWaterMark: 128,
- });
- const aPipe = new PassThrough({
- objectMode: true,
- writableHighWaterMark: 128,
- });
-
- const vbsf: BitStreamFilterAPI[] = [];
- if (vStream) {
- const codecId = vStream.codecpar.codecId;
- if (!allowedVideoCodec.has(codecId)) {
- const codecName = avGetCodecName(codecId);
- cleanup();
- throw new Error(`Video codec ${codecName} is not allowed`);
- }
- try {
- switch (codecId) {
- case AVCodecID.AV_CODEC_ID_H264:
- vbsf.push(BitStreamFilterAPI.create("h264_mp4toannexb", vStream));
- vbsf.push(
- BitStreamFilterAPI.create("h264_metadata", vStream, {
- options: {
- aud: "remove",
- },
- }),
- );
- vbsf.push(BitStreamFilterAPI.create("dump_extra", vStream));
- break;
- case AVCodecID.AV_CODEC_ID_HEVC:
- vbsf.push(BitStreamFilterAPI.create("hevc_mp4toannexb", vStream));
- vbsf.push(
- BitStreamFilterAPI.create("hevc_metadata", vStream, {
- options: {
- aud: "remove",
- },
- }),
- );
- vbsf.push(BitStreamFilterAPI.create("dump_extra", vStream));
- break;
- default:
- vbsf.push(BitStreamFilterAPI.create("null", vStream));
- break;
- }
- } catch (e) {
- cleanup();
- throw new Error(`Failed to construct bitstream filterchain`, {
- cause: (e as Error).cause,
- });
- }
-
- const codecpar = vbsf.at(-1)?.outputCodecParameters ?? vStream.codecpar;
- vInfo = {
- index: vStream.index,
- codec: codecId,
- codecpar,
- width: codecpar.width ?? 0,
- height: codecpar.height ?? 0,
- framerate_num: codecpar.frameRate.num,
- framerate_den: codecpar.frameRate.den,
- avStream: vStream,
- };
- loggerFormat.info(
- {
- info: vInfo,
- },
- `Found video stream in input ${filename}`,
- );
- }
- if (aStream) {
- const codecId = aStream.codecpar.codecId;
- if (!allowedAudioCodec.has(codecId)) {
- const codecName = avGetCodecName(codecId);
- cleanup();
- throw new Error(`Audio codec ${codecName} is not allowed`);
- }
- aInfo = {
- index: aStream.index,
- codec: codecId,
- codecpar: aStream.codecpar,
- sample_rate: aStream.codecpar.sampleRate || 0,
- avStream: aStream,
- };
- loggerFormat.info(
- {
- info: aInfo,
- },
- `Found audio stream in input ${filename}`,
- );
- }
-
- const packetIterator = demuxer.packets();
- const applyBitStreamFilters = async (
- input: Packet | null,
- filters: BitStreamFilterAPI[],
- ) => {
- let packets = [input];
- for (const filter of filters) {
- let newPackets: (Packet | null)[] = [];
- for (const packet of packets) {
- newPackets = [...newPackets, ...(await filter.filterAll(packet))];
- packet?.free();
- }
- if (!input) newPackets.push(null);
- packets = newPackets;
- }
- return packets;
- };
- const readFrame = pDebounce.promise(async () => {
- let resume = true;
- while (resume) {
- try {
- const { value: inPacket, done } = await packetIterator.next();
- if (done) {
- loggerFrameCommon.info("Reached end of stream. Stopping");
- const packets = await applyBitStreamFilters(null, vbsf);
- for (const packet of packets) {
- if (packet) vPipe.write(packet);
- }
- cleanup();
- return;
- } else if (inPacket) {
- const streamIndex = inPacket.streamIndex;
- if (vInfo && vInfo.index === streamIndex) {
- loggerFrameVideo.trace("Received a video packet");
- const packets = await applyBitStreamFilters(inPacket.clone(), vbsf);
- for (const packet of packets) {
- if (packet) resume &&= vPipe.write(packet);
- }
- } else if (aInfo && aInfo.index === streamIndex) {
- const packet = inPacket.clone()!;
- packet.duration ||= BigInt(parseOpusPacketDuration(packet.data!));
- resume &&= aPipe.write(packet);
- }
- inPacket.free();
- }
- } catch (e) {
- loggerFrameCommon.info(
- { error: e },
- "Received an error during frame extraction. Stopping",
- );
- cleanup();
- return;
- }
- }
- });
- vPipe.on("drain", () => {
- loggerFrameVideo.trace("Video pipe drained");
- readFrame();
- });
- aPipe.on("drain", () => {
- loggerFrameAudio.trace("Audio pipe drained");
- readFrame();
- });
- readFrame();
- return {
- video: vInfo ? { ...vInfo, stream: vPipe as Readable } : undefined,
- audio: aInfo ? { ...aInfo, stream: aPipe as Readable } : undefined,
- };
-}
diff --git a/vendor/discord-video-stream/src/media/VideoStream.ts b/vendor/discord-video-stream/src/media/VideoStream.ts
deleted file mode 100644
index 140ace7..0000000
--- a/vendor/discord-video-stream/src/media/VideoStream.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { BaseMediaStream } from "./BaseMediaStream.js";
-import type { WebRtcConnWrapper } from "../client/voice/WebRtcWrapper.js";
-
-export class VideoStream extends BaseMediaStream {
- private _conn: WebRtcConnWrapper;
- constructor(conn: WebRtcConnWrapper, noSleep = false) {
- super("video", noSleep);
- this._conn = conn;
- }
-
- protected override async _sendFrame(
- frame: Buffer,
- frametime: number,
- ): Promise {
- this._conn.sendVideoFrame(frame, frametime);
- }
-}
diff --git a/vendor/discord-video-stream/src/media/encoders/index.ts b/vendor/discord-video-stream/src/media/encoders/index.ts
deleted file mode 100644
index 373036e..0000000
--- a/vendor/discord-video-stream/src/media/encoders/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { SupportedVideoCodec } from "../../utils.js";
-
-export type EncoderSettings = {
- name: string;
- options: string[];
- globalOptions?: string[];
- outFilters?: string[];
-};
-
-export type EncoderSettingsGetter = (
- bitrate: number,
- bitrateMax: number,
-) => Partial>;
-
-import { software } from "./software.js";
-import { nvenc } from "./nvenc.js";
-import { vaapi } from "./vaapi.js";
-import { merge } from "./merge.js";
-
-const Encoders = {
- software,
- nvenc,
- vaapi,
- merge,
-};
-
-export { Encoders };
diff --git a/vendor/discord-video-stream/src/media/encoders/merge.ts b/vendor/discord-video-stream/src/media/encoders/merge.ts
deleted file mode 100644
index b48ff8b..0000000
--- a/vendor/discord-video-stream/src/media/encoders/merge.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import type { EncoderSettingsGetter } from "./index.js";
-import type { SupportedVideoCodec } from "../../utils.js";
-
-export const merge = (
- encoder: Partial>,
-) => {
- return ((bitrate, bitrateMax) => ({
- H264: encoder.H264?.(bitrate, bitrateMax),
- H265: encoder.H265?.(bitrate, bitrateMax),
- VP8: encoder.VP8?.(bitrate, bitrateMax),
- VP9: encoder.VP9?.(bitrate, bitrateMax),
- AV1: encoder.AV1?.(bitrate, bitrateMax),
- })) as EncoderSettingsGetter;
-};
diff --git a/vendor/discord-video-stream/src/media/encoders/nvenc.ts b/vendor/discord-video-stream/src/media/encoders/nvenc.ts
deleted file mode 100644
index 629fd59..0000000
--- a/vendor/discord-video-stream/src/media/encoders/nvenc.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { EncoderSettingsGetter } from "./index.js";
-
-type NvencPreset = "p1" | "p2" | "p3" | "p4" | "p5" | "p6" | "p7";
-
-type NvencSettings = {
- preset: NvencPreset;
- spatialAq: boolean;
- temporalAq: boolean;
- gpu: number;
-};
-
-export function nvenc({
- preset = "p4",
- spatialAq = false,
- temporalAq = false,
- gpu,
-}: Partial = {}) {
- const options = [
- `-preset ${preset}`,
- `-spatial-aq ${spatialAq}`,
- `-temporal-aq ${temporalAq}`,
- ...(gpu !== undefined ? [`-gpu ${gpu}`] : []),
- ];
- return (() => ({
- H264: {
- name: "h264_nvenc",
- options,
- },
- H265: {
- name: "hevc_nvenc",
- options,
- },
- AV1: {
- name: "av1_nvenc",
- options,
- },
- })) as EncoderSettingsGetter;
-}
diff --git a/vendor/discord-video-stream/src/media/encoders/software.ts b/vendor/discord-video-stream/src/media/encoders/software.ts
deleted file mode 100644
index ee3e97c..0000000
--- a/vendor/discord-video-stream/src/media/encoders/software.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import type { EncoderSettingsGetter } from "./index.js";
-
-type DeepPartial = T extends unknown[]
- ? T
- : { [P in keyof T]?: DeepPartial };
-type x26xPreset =
- | "ultrafast"
- | "superfast"
- | "veryfast"
- | "faster"
- | "fast"
- | "medium"
- | "slow"
- | "slower"
- | "veryslow"
- | "placebo";
-
-export type SoftwareEncoderSettings = {
- x264: {
- preset: x26xPreset;
- tune:
- | "film"
- | "animation"
- | "grain"
- | "stillimage"
- | "fastdecode"
- | "zerolatency"
- | "psnr"
- | "ssim";
- };
- x265: {
- preset: x26xPreset;
- tune:
- | "psnr"
- | "ssim"
- | "grain"
- | "fastdecode"
- | "zerolatency"
- | "animation";
- };
-};
-
-export const software = ({
- x264,
- x265,
-}: DeepPartial = {}) => {
- const { preset: x264Preset = "superfast", tune: x264Tune = "film" } =
- x264 ?? {};
- const { preset: x265Preset = "superfast", tune: x265Tune } = x265 ?? {};
- return (() => ({
- H264: {
- name: "libx264",
- options: ["-forced-idr 1", `-tune ${x264Tune}`, `-preset ${x264Preset}`],
- },
- H265: {
- name: "libx265",
- options: [
- "-forced-idr 1",
- ...(x265Tune ? [`-tune ${x265Tune}`] : []),
- `-preset ${x265Preset}`,
- ],
- },
- VP8: {
- name: "libvpx",
- options: ["-deadline 20000"],
- },
- VP9: {
- name: "libvpx-vp9",
- options: ["-deadline 20000"],
- },
- AV1: {
- name: "libsvtav1",
- options: [],
- },
- })) as EncoderSettingsGetter;
-};
diff --git a/vendor/discord-video-stream/src/media/encoders/vaapi.ts b/vendor/discord-video-stream/src/media/encoders/vaapi.ts
deleted file mode 100644
index 72d7efb..0000000
--- a/vendor/discord-video-stream/src/media/encoders/vaapi.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { EncoderSettingsGetter } from "./index.js";
-
-type VaapiSettings = {
- device?: string;
-};
-
-export function vaapi({
- device = "/dev/dri/renderD128",
-}: Partial = {}) {
- const props = {
- options: [],
- globalOptions: ["-vaapi_device", device],
- outFilters: ["format=nv12|vaapi", "hwupload"],
- };
- return (() => ({
- H264: {
- name: "h264_vaapi",
- ...props,
- },
- H265: {
- name: "hevc_vaapi",
- ...props,
- },
- AV1: {
- name: "av1_vaapi",
- ...props,
- },
- })) as EncoderSettingsGetter;
-}
diff --git a/vendor/discord-video-stream/src/media/index.ts b/vendor/discord-video-stream/src/media/index.ts
deleted file mode 100644
index 52e45db..0000000
--- a/vendor/discord-video-stream/src/media/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from "./LibavDemuxer.js";
-export * from "./newApi.js";
-export * as NewApi from "./newApi.js";
-export * from "./encoders/index.js";
diff --git a/vendor/discord-video-stream/src/media/newApi.ts b/vendor/discord-video-stream/src/media/newApi.ts
deleted file mode 100644
index e9fae8d..0000000
--- a/vendor/discord-video-stream/src/media/newApi.ts
+++ /dev/null
@@ -1,653 +0,0 @@
-import pDebounce from "p-debounce";
-import sharp from "sharp";
-import Log from "debug-level";
-import { FFmpegCommand } from "fluent-ffmpeg-simplified";
-import { type Packet, AV_PKT_FLAG_KEY } from "node-av";
-import { PassThrough, type Readable } from "node:stream";
-import { demux } from "./LibavDemuxer.js";
-import { VideoStream } from "./VideoStream.js";
-import { AudioStream } from "./AudioStream.js";
-import { isBun, isDeno, isFiniteNonZero } from "../utils.js";
-import { AVCodecID } from "./LibavCodecId.js";
-import { createDecoder } from "./LibavDecoder.js";
-import { Encoders } from "./encoders/index.js";
-
-import type { Request } from "zeromq";
-import type { SupportedVideoCodec } from "../utils.js";
-import type { Streamer } from "../client/index.js";
-import type { EncoderSettingsGetter } from "./encoders/index.js";
-import type { VideoStreamInfo } from "./LibavDemuxer.js";
-import type { WebRtcConnWrapper } from "../client/voice/WebRtcWrapper.js";
-
-export type PrepareStreamOptions = {
- /**
- * Disable video transcoding
- * If enabled, all video related settings have no effects, and the input
- * video stream is used as-is.
- *
- * You need to ensure that the video stream has the right properties
- * (keyframe every 1s, B-frames disabled). Failure to do so will result in
- * a glitchy stream, or degraded performance
- */
- noTranscoding: boolean;
-
- /**
- * Video width
- */
- width: number;
-
- /**
- * Video height
- */
- height: number;
-
- /**
- * Video frame rate
- */
- frameRate?: number;
-
- /**
- * Video codec
- */
- videoCodec: SupportedVideoCodec;
-
- /**
- * Video average bitrate in kbps
- */
- bitrateVideo: number;
-
- /**
- * Video max bitrate in kbps
- */
- bitrateVideoMax: number;
-
- /**
- * Audio bitrate in kbps
- */
- bitrateAudio: number;
-
- /**
- * Enable audio output
- */
- includeAudio: boolean;
-
- /**
- * Functions to get encoder settings
- * This function will receive the average and max bitrate as the input, and
- * returns an object containing encoder settings for the supported codecs
- */
- encoder: EncoderSettingsGetter;
-
- /**
- * Enable hardware accelerated decoding
- */
- hardwareAcceleratedDecoding: boolean;
-
- /**
- * Add some options to minimize latency
- */
- minimizeLatency: boolean;
-
- /**
- * Custom headers for HTTP requests
- */
- customHeaders: Record;
-
- /**
- * Custom input options to pass directly to ffmpeg
- * These will be added to the command before other options
- */
- customInputOptions: string[];
-
- /**
- * Custom ffmpeg flags/options to pass directly to ffmpeg
- * These will be added to the command after other options
- */
- customFfmpegFlags: string[];
-
- /**
- * FFmpeg log level
- */
- logLevel:
- | "quiet"
- | "panic"
- | "fatal"
- | "error"
- | "warning"
- | "info"
- | "verbose"
- | "debug"
- | "trace";
-};
-
-export type Controller = {
- volume: number;
- setVolume(newVolume: number): Promise;
-};
-
-export function prepareStream(
- input: string | Readable,
- options: Partial = {},
- cancelSignal?: AbortSignal,
-) {
- cancelSignal?.throwIfAborted();
-
- const logger = new Log("prepareStream");
- const loggerFFmpeg = new Log("prepareStream:ffmpeg");
- const defaultOptions = {
- noTranscoding: false,
- // negative values = resize by aspect ratio, see https://trac.ffmpeg.org/wiki/Scaling
- width: -2,
- height: -2,
- frameRate: undefined,
- videoCodec: "H264",
- bitrateVideo: 5000,
- bitrateVideoMax: 7000,
- bitrateAudio: 128,
- includeAudio: true,
- encoder: Encoders.software(),
- hardwareAcceleratedDecoding: false,
- minimizeLatency: false,
- customHeaders: {
- "User-Agent":
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.3",
- Connection: "keep-alive",
- },
- customInputOptions: [],
- customFfmpegFlags: [],
- logLevel: "verbose",
- } satisfies PrepareStreamOptions;
-
- function mergeOptions(opts: Partial) {
- return {
- noTranscoding: opts.noTranscoding ?? defaultOptions.noTranscoding,
-
- width: isFiniteNonZero(opts.width)
- ? Math.round(opts.width)
- : defaultOptions.width,
-
- height: isFiniteNonZero(opts.height)
- ? Math.round(opts.height)
- : defaultOptions.height,
-
- frameRate:
- isFiniteNonZero(opts.frameRate) && opts.frameRate > 0
- ? opts.frameRate
- : defaultOptions.frameRate,
-
- videoCodec: opts.videoCodec ?? defaultOptions.videoCodec,
-
- bitrateVideo:
- isFiniteNonZero(opts.bitrateVideo) && opts.bitrateVideo > 0
- ? Math.round(opts.bitrateVideo)
- : defaultOptions.bitrateVideo,
-
- bitrateVideoMax:
- isFiniteNonZero(opts.bitrateVideoMax) && opts.bitrateVideoMax > 0
- ? Math.round(opts.bitrateVideoMax)
- : defaultOptions.bitrateVideoMax,
-
- bitrateAudio:
- isFiniteNonZero(opts.bitrateAudio) && opts.bitrateAudio > 0
- ? Math.round(opts.bitrateAudio)
- : defaultOptions.bitrateAudio,
-
- encoder: opts.encoder ?? defaultOptions.encoder,
-
- includeAudio: opts.includeAudio ?? defaultOptions.includeAudio,
-
- hardwareAcceleratedDecoding:
- opts.hardwareAcceleratedDecoding ??
- defaultOptions.hardwareAcceleratedDecoding,
-
- minimizeLatency: opts.minimizeLatency ?? defaultOptions.minimizeLatency,
-
- customHeaders: {
- ...defaultOptions.customHeaders,
- ...opts.customHeaders,
- },
-
- customInputOptions:
- opts.customInputOptions ?? defaultOptions.customInputOptions,
-
- customFfmpegFlags:
- opts.customFfmpegFlags ?? defaultOptions.customFfmpegFlags,
-
- logLevel: opts.logLevel ?? defaultOptions.logLevel,
- } satisfies PrepareStreamOptions;
- }
-
- const mergedOptions = mergeOptions(options);
-
- let isHttpUrl = false;
- let isHls = false;
- let isSrt = false;
-
- if (typeof input === "string") {
- isHttpUrl = input.startsWith("http") || input.startsWith("https");
- isHls = input.includes("m3u");
- isSrt = input.startsWith("srt://");
- }
-
- const output = new PassThrough();
-
- // command creation
- const command = new FFmpegCommand();
- command.on("stderr", (line) => {
- loggerFFmpeg.debug(line);
- });
- command.input(input);
- command.inputOptions("-y", "-loglevel", mergedOptions.logLevel, "-nostats");
-
- // input options
- if (
- mergedOptions.customInputOptions &&
- mergedOptions.customInputOptions.length > 0
- ) {
- command.inputOptions(mergedOptions.customInputOptions);
- }
-
- const { hardwareAcceleratedDecoding, minimizeLatency, customHeaders } =
- mergedOptions;
- if (hardwareAcceleratedDecoding) command.inputOptions("-hwaccel", "auto");
-
- if (minimizeLatency) {
- command.inputOptions(
- "-fflags nobuffer",
- "-flags lowdelay",
- "-flush_packets 1",
- "-max_delay 100000",
- );
- }
-
- if (isHttpUrl) {
- const headersString = Object.entries(customHeaders)
- .map(([k, v]) => `${k}: ${v}`)
- .join("\r\n");
- command.inputOptions(`-headers "${headersString}"`);
- if (!isHls) {
- command.inputOptions([
- "-reconnect 1",
- "-reconnect_at_eof 1",
- "-reconnect_streamed 1",
- "-reconnect_delay_max 4294",
- ]);
- }
- }
-
- if (isSrt) {
- command.inputOptions("-scan_all_pmts 0");
- }
-
- // general output options
- command.output(output).format("nut");
-
- // video setup
- const {
- noTranscoding,
- width,
- height,
- frameRate,
- bitrateVideo,
- bitrateVideoMax,
- videoCodec,
- encoder,
- } = mergedOptions;
- command.outputOptions("-map 0:v");
-
- if (noTranscoding) {
- command.videoCodec("copy");
- } else {
- command.videoFilters(`scale=${width}:${height}`);
-
- if (frameRate) command.fps(frameRate);
-
- command.outputOptions([
- "-b:v",
- `${bitrateVideo}k`,
- "-maxrate:v",
- `${bitrateVideoMax}k`,
- "-bufsize:v",
- `${Math.round(bitrateVideo / 2)}k`,
- "-bf",
- "0",
- "-pix_fmt",
- "yuv420p",
- "-force_key_frames",
- "expr:gte(t,n_forced*1)",
- ]);
-
- const encoderSettings = encoder(bitrateVideo, bitrateVideoMax)[videoCodec];
- if (!encoderSettings)
- throw new Error(`Encoder settings not specified for ${videoCodec}`);
- command
- .videoCodec(encoderSettings.name)
- .videoFilters(encoderSettings.outFilters ?? [])
- .outputOptions(encoderSettings.options)
- .outputOptions(encoderSettings.globalOptions ?? []);
- }
-
- // audio setup
- const { includeAudio, bitrateAudio } = mergedOptions;
- if (includeAudio)
- command
- .outputOptions("-map 0:a:0?")
- .audioChannels(2)
- /*
- * I don't have much surround sound material to test this with,
- * if you do and you have better settings for this, feel free to
- * contribute!
- */
- .outputOptions("-lfe_mix_level 1")
- .audioFrequency(48000)
- .audioCodec("libopus")
- .audioBitrate(`${bitrateAudio}k`)
- .audioFilters("volume@internal_lib=1.0");
-
- // Add custom ffmpeg flags
- if (
- mergedOptions.customFfmpegFlags &&
- mergedOptions.customFfmpegFlags.length > 0
- ) {
- command.outputOptions(mergedOptions.customFfmpegFlags);
- }
-
- // realtime control mechanism
- let currentVolume = 1;
- let zmqClientPromise: Promise | undefined;
- if (includeAudio && !isBun() && !isDeno()) {
- function randomInclusive(start: number, end: number) {
- return Math.floor(Math.random() * (end - start + 1)) + start;
- }
- // Last octet is from 2 to 254 to avoid WSL2 shenanigans
- const loopbackIp = [
- 127,
- randomInclusive(0, 255),
- randomInclusive(0, 255),
- randomInclusive(2, 254),
- ].join(".");
- const zmqEndpoint = `tcp://${loopbackIp}:42069`;
- command.audioFilters(`azmq=b=${zmqEndpoint.replaceAll(":", "\\\\:")}`);
- zmqClientPromise = import("zeromq").then((zmq) => {
- const client = new zmq.Request({
- sendTimeout: 5000,
- receiveTimeout: 5000,
- });
- client.connect(zmqEndpoint);
- promise.catch(() => {}).finally(() => client.disconnect(zmqEndpoint));
- return client;
- });
- }
-
- command.once("start", (cmdline) => {
- logger.debug(`Starting ffmpeg: ${cmdline}`);
- });
- const promise = command.run(cancelSignal);
-
- return {
- command,
- output,
- promise: promise as Promise,
- controller: {
- get volume() {
- return currentVolume;
- },
- async setVolume(newVolume: number) {
- if (newVolume < 0) return false;
- try {
- if (!zmqClientPromise) return false;
- const client = await zmqClientPromise;
- await client.send(`volume@internal_lib volume ${newVolume}`);
- const [res] = await client.receive();
- if (res.toString("utf-8").split(" ")[0] !== "0") return false;
- currentVolume = newVolume;
- return true;
- } catch {
- return false;
- }
- },
- } satisfies Controller,
- };
-}
-
-export type PlayStreamOptions = {
- /**
- * Set stream type as "Go Live" or camera stream
- */
- type: "go-live" | "camera";
-
- /**
- * Set format of the stream
- */
- format: "matroska" | "nut";
-
- /**
- * Override video width sent to Discord.
- *
- * DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
- */
- width: number | ((v: VideoStreamInfo) => number);
-
- /**
- * Override video height sent to Discord.
- *
- * DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
- */
- height: number | ((v: VideoStreamInfo) => number);
-
- /**
- * Override video frame rate sent to Discord.
- *
- * DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
- */
- frameRate: number | ((v: VideoStreamInfo) => number);
-
- /**
- * Same as ffmpeg's `readrate_initial_burst` command line flag
- *
- * See https://ffmpeg.org/ffmpeg.html#:~:text=%2Dreadrate_initial_burst
- */
- readrateInitialBurst: number | undefined;
-
- /**
- * Enable stream preview from input stream (experimental)
- */
- streamPreview: boolean;
-};
-
-export async function playStream(
- input: Readable,
- streamer: Streamer,
- options: Partial = {},
- cancelSignal?: AbortSignal,
-) {
- const logger = new Log("playStream");
- cancelSignal?.throwIfAborted();
- if (!streamer.voiceConnection)
- throw new Error("Bot is not connected to a voice channel");
-
- const defaultOptions = {
- type: "go-live",
- format: "nut",
- width: (video) => video.width,
- height: (video) => video.height,
- frameRate: (video) => video.framerate_num / video.framerate_den,
- readrateInitialBurst: undefined,
- streamPreview: false,
- } satisfies PlayStreamOptions;
-
- function mergeOptions(opts: Partial) {
- return {
- type: opts.type ?? defaultOptions.type,
-
- format: opts.format ?? defaultOptions.format,
-
- width:
- typeof opts.width === "function" ||
- (isFiniteNonZero(opts.width) && opts.width > 0)
- ? opts.width
- : defaultOptions.width,
-
- height:
- typeof opts.height === "function" ||
- (isFiniteNonZero(opts.height) && opts.height > 0)
- ? opts.height
- : defaultOptions.height,
-
- frameRate:
- typeof opts.frameRate === "function" ||
- (isFiniteNonZero(opts.frameRate) && opts.frameRate > 0)
- ? opts.frameRate
- : defaultOptions.frameRate,
-
- readrateInitialBurst:
- isFiniteNonZero(opts.readrateInitialBurst) &&
- opts.readrateInitialBurst > 0
- ? opts.readrateInitialBurst
- : defaultOptions.readrateInitialBurst,
-
- streamPreview: opts.streamPreview ?? defaultOptions.streamPreview,
- } satisfies PlayStreamOptions;
- }
-
- const mergedOptions = mergeOptions(options);
- logger.debug({ options: mergedOptions }, "Merged options");
-
- logger.debug("Initializing demuxer");
- const { video, audio } = await demux(input, {
- format: mergedOptions.format,
- });
- cancelSignal?.throwIfAborted();
-
- if (!video) throw new Error("No video stream in media");
-
- const cleanupFuncs: (() => unknown)[] = [];
- const videoCodecMap: Record = {
- [AVCodecID.AV_CODEC_ID_H264]: "H264",
- [AVCodecID.AV_CODEC_ID_H265]: "H265",
- [AVCodecID.AV_CODEC_ID_VP8]: "VP8",
- [AVCodecID.AV_CODEC_ID_VP9]: "VP9",
- [AVCodecID.AV_CODEC_ID_AV1]: "AV1",
- };
-
- let conn: WebRtcConnWrapper;
- let stopStream: () => unknown;
- if (mergedOptions.type === "go-live") {
- conn = await streamer.createStream();
- stopStream = () => streamer.stopStream();
- } else {
- conn = streamer.voiceConnection.webRtcConn;
- streamer.signalVideo(true);
- stopStream = () => streamer.signalVideo(false);
- }
- conn.setPacketizer(videoCodecMap[video.codec]);
- conn.mediaConnection.setSpeaking(true);
- const { width, height, frameRate } = mergedOptions;
- conn.mediaConnection.setVideoAttributes(true, {
- width: Math.round(typeof width === "function" ? width(video) : width),
- height: Math.round(typeof height === "function" ? height(video) : height),
- fps: Math.round(
- typeof frameRate === "function" ? frameRate(video) : frameRate,
- ),
- });
-
- const vStream = new VideoStream(conn);
- video.stream.pipe(vStream);
- if (audio) {
- const aStream = new AudioStream(conn);
- audio.stream.pipe(aStream);
- vStream.syncStream = aStream;
-
- const burstTime = mergedOptions.readrateInitialBurst;
- if (typeof burstTime === "number") {
- vStream.sync = false;
- vStream.noSleep = aStream.noSleep = true;
- const stopBurst = (pts: number) => {
- if (pts < burstTime * 1000) return;
- vStream.sync = true;
- vStream.noSleep = aStream.noSleep = false;
- vStream.off("pts", stopBurst);
- };
- vStream.on("pts", stopBurst);
- }
- }
- if (mergedOptions.streamPreview && mergedOptions.type === "go-live") {
- (async () => {
- const logger = new Log("playStream:preview");
- logger.debug("Initializing decoder for stream preview");
- const decoder = await createDecoder(video.avStream);
- if (!decoder) {
- logger.warn(
- "Failed to initialize decoder. Stream preview will be disabled",
- );
- return;
- }
- cleanupFuncs.push(() => {
- logger.debug("Freeing decoder");
- decoder.free();
- });
- const updatePreview = pDebounce.promise(async (packet: Packet) => {
- if (!(packet.flags !== undefined && packet.flags & AV_PKT_FLAG_KEY))
- return;
- const decodeStart = performance.now();
- const frames = await decoder.decode(packet).catch((e) => {
- logger.error(e, "Failed to decode the frame");
- return [];
- });
- if (!frames.length) return;
-
- const decodeEnd = performance.now();
- logger.debug(`Decoding a frame took ${decodeEnd - decodeStart}ms`);
- const frame = frames[0];
-
- return sharp(frame.toBuffer(), {
- raw: {
- width: frame.width ?? 0,
- height: frame.height ?? 0,
- channels: 4,
- },
- })
- .resize(1024, 576, { fit: "inside" })
- .jpeg()
- .toBuffer()
- .then((image) => streamer.setStreamPreview(image))
- .catch(() => {})
- .finally(() => {
- frames.forEach((frame) => {
- frame.free();
- });
- });
- });
- video.stream.on("data", updatePreview);
- cleanupFuncs.push(() => video.stream.off("data", updatePreview));
- })();
- }
- const promise = new Promise((resolve, reject) => {
- cleanupFuncs.push(() => {
- stopStream();
- conn.mediaConnection.setSpeaking(false);
- conn.mediaConnection.setVideoAttributes(false);
- });
- let cleanedUp = false;
- const cleanup = () => {
- if (cleanedUp) return;
- cleanedUp = true;
- for (const f of cleanupFuncs) f();
- };
- cancelSignal?.addEventListener(
- "abort",
- () => {
- cleanup();
- reject(cancelSignal.reason);
- },
- { once: true },
- );
- vStream.once("finish", () => {
- if (cancelSignal?.aborted) return;
- cleanup();
- resolve();
- });
- });
- promise.catch(() => {});
- return promise;
-}
diff --git a/vendor/discord-video-stream/src/utils.ts b/vendor/discord-video-stream/src/utils.ts
deleted file mode 100644
index 949b975..0000000
--- a/vendor/discord-video-stream/src/utils.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-import type {
- AnyChannel,
- DMChannel,
- GroupDMChannel,
- VoiceBasedChannel,
-} from "discord.js-selfbot-v13";
-
-export function normalizeVideoCodec(
- codec: string,
-): "H264" | "H265" | "VP8" | "VP9" | "AV1" {
- if (/H\.?264|AVC/i.test(codec)) return "H264";
- if (/H\.?265|HEVC/i.test(codec)) return "H265";
- if (/VP(8|9)/i.test(codec)) return codec.toUpperCase() as "VP8" | "VP9";
- if (/AV1/i.test(codec)) return "AV1";
- throw new Error(`Unknown codec: ${codec}`);
-}
-
-// The available video streams are sent by client on connection to voice gateway using OpCode Identify (0)
-// The server then replies with the ssrc and rtxssrc for each available stream using OpCode Ready (2)
-// RID is used specifically to distinguish between different simulcast streams of the same video source,
-// but we don't really care about sending multiple quality streams, so we hardcode a single one
-export const STREAMS_SIMULCAST = [{ type: "screen", rid: "100", quality: 100 }];
-
-export enum SupportedEncryptionModes {
- AES256 = "aead_aes256_gcm_rtpsize",
- XCHACHA20 = "aead_xchacha20_poly1305_rtpsize",
-}
-
-export type SupportedVideoCodec = "H264" | "H265" | "VP8" | "VP9" | "AV1";
-
-export const max_int16bit = 2 ** 16;
-export const max_int32bit = 2 ** 32;
-
-export function isFiniteNonZero(n: unknown): n is number {
- return !!n && Number.isFinite(n);
-}
-
-export function parseStreamKey(streamKey: string): {
- type: "guild" | "call";
- channelId: string;
- guildId: string | null;
- userId: string;
-} {
- const streamKeyArray = streamKey.split(":");
-
- const type = streamKeyArray.shift();
-
- if (type !== "guild" && type !== "call") {
- throw new Error(`Invalid stream key type: ${type}`);
- }
-
- if (
- (type === "guild" && streamKeyArray.length < 3) ||
- (type === "call" && streamKey.length < 2)
- )
- throw new Error(`Invalid stream key: ${streamKey}`); // invalid stream key
-
- let guildId: string | null = null;
- if (type === "guild") {
- guildId = streamKeyArray.shift() ?? null;
- }
- const channelId = streamKeyArray.shift();
- const userId = streamKeyArray.shift();
-
- if (!channelId || !userId) {
- throw new Error(`Invalid stream key: ${streamKey}`);
- }
- return { type, channelId, guildId, userId };
-}
-
-export function generateStreamKey(
- type: "guild" | "call",
- guildId: string | null,
- channelId: string,
- userId: string,
-): string {
- const streamKey = `${type}${type === "guild" ? `:${guildId}` : ""}:${channelId}:${userId}`;
-
- return streamKey;
-}
-
-export function isVoiceChannel(
- channel: AnyChannel,
-): channel is DMChannel | GroupDMChannel | VoiceBasedChannel {
- return (
- channel.type === "DM" ||
- channel.type === "GROUP_DM" ||
- channel.type === "GUILD_STAGE_VOICE" ||
- channel.type === "GUILD_VOICE"
- );
-}
-
-export function isDeno() {
- // @ts-expect-error
- return typeof Deno !== "undefined";
-}
-
-export function isBun() {
- // @ts-expect-error
- return typeof Bun !== "undefined";
-}
diff --git a/vendor/discord-video-stream/tsconfig.json b/vendor/discord-video-stream/tsconfig.json
deleted file mode 100644
index 0b19c6c..0000000
--- a/vendor/discord-video-stream/tsconfig.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "Node16", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- "moduleResolution": "Node16", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- "resolveJsonModule": true, /* Enable importing .json files. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- "outDir": "./dist", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
- // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- },
- "include": [
- "src/**/*"
- ]
-}
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13 b/vendor/discord.js-selfbot-v13
new file mode 160000
index 0000000..78a089b
--- /dev/null
+++ b/vendor/discord.js-selfbot-v13
@@ -0,0 +1 @@
+Subproject commit 78a089bd06b2fd7c57ef1cb6bc7301bafdee5dd3
diff --git a/vendor/discord.js-selfbot-v13/.eslintignore b/vendor/discord.js-selfbot-v13/.eslintignore
deleted file mode 100644
index 3886241..0000000
--- a/vendor/discord.js-selfbot-v13/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "ignorePatterns": ["node_modules/*"]
-}
diff --git a/vendor/discord.js-selfbot-v13/.gitattributes b/vendor/discord.js-selfbot-v13/.gitattributes
deleted file mode 100644
index dfe0770..0000000
--- a/vendor/discord.js-selfbot-v13/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
diff --git a/vendor/discord.js-selfbot-v13/.github/FUNDING.yml b/vendor/discord.js-selfbot-v13/.github/FUNDING.yml
deleted file mode 100644
index 7452b47..0000000
--- a/vendor/discord.js-selfbot-v13/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: [aiko-chan-ai]
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/bug_report.yml b/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 23127ae..0000000
--- a/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,91 +0,0 @@
-name: Bug report
-description: Report incorrect or unexpected behavior of a package
-labels: [bug, need repro]
-body:
- - type: dropdown
- id: package
- attributes:
- label: Which package has the bugs?
- options:
- - The core library
- - The documentation
- - WebEmbed x Shorten API
- validations:
- required: true
- - type: textarea
- id: description
- attributes:
- label: Issue description
- description: |
- Describe the issue in as much detail as possible.
-
- Tip: You can attach images or log files by clicking this area to highlight it and then dragging files into it.
- placeholder: |
- Steps to reproduce with below code sample:
- 1. do thing
- 2. do thing in Discord client
- 3. observe behavior
- 4. see error logs below
- validations:
- required: true
- - type: textarea
- id: codesample
- attributes:
- label: Code sample
- description: Include a reproducible, minimal code sample. This will be automatically formatted into code, so no need for backticks.
- render: typescript
- placeholder: |
- Your code sample should be...
- ... Minimal - Use as little code as possible that still produces the same problem (and is understandable)
- ... Complete - Provide all parts someone else needs to reproduce your problem
- ... Reproducible - Test the code you're about to provide to make sure it reproduces the problem
- - type: input
- id: djs-version
- attributes:
- label: Package version
- description: Which version of are you using? Run `npm list ` in your project directory and paste the output.
- placeholder: Older versions are not supported.
- validations:
- required: true
- - type: input
- id: node-version
- attributes:
- label: Node.js version
- description: |
- Which version of Node.js are you using? Run `node --version` in your project directory and paste the output.
- If you are using TypeScript, please include its version (`npm list typescript`) as well.
- placeholder: Node.js version 16.9+ is required for version 14.0.0+
- validations:
- required: true
- - type: input
- id: os
- attributes:
- label: Operating system
- description: Which OS does your application run on?
- - type: dropdown
- id: priority
- attributes:
- label: Priority this issue should have
- description: Please be realistic. If you need to elaborate on your reasoning, please use the Issue description field above.
- options:
- - Low (slightly annoying)
- - Medium (should be fixed soon)
- - High (immediate attention needed)
- validations:
- required: true
- - type: checkboxes
- attributes:
- label: Checklist
- description: >
- Let's make sure this issue is valid!
- options:
- - label: I have searched the open issues for duplicates.
- required: true
- - label: I have shared the entire traceback.
- required: true
- - label: I am using a user token (and it isn't visible in the code).
- required: true
- - type: textarea
- attributes:
- label: Additional Information
- description: Put any extra context, weird configurations, or other important info here.
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/config.yml b/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index f18fee9..0000000
--- a/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: Discord.js Repo
- url: https://github.com/discordjs/discord.js
- about: A powerful JavaScript library for interacting with the Discord API [Bot].
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/feature_request.yml b/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 0de1917..0000000
--- a/vendor/discord.js-selfbot-v13/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-name: Feature request
-description: Request a new feature
-labels: [Feature]
-body:
- - type: markdown
- attributes:
- value: |
- We can only implement features that Discord publishes, documents and merges into the Discord API documentation.
- For unreleased API features, you need more documents (Unofficial Discord API) or things you know.
- - type: dropdown
- id: package
- attributes:
- label: Which package is the feature request for?
- options:
- - The core library
- - The documentation
- - WebEmbed x Shorten API
- validations:
- required: true
- - type: textarea
- id: description
- attributes:
- label: Feature
- description: A clear and concise description of what the problem is, or what feature you want to be implemented.
- placeholder: I'm always frustrated when..., Discord has recently released..., A good addition would be...
- validations:
- required: true
- - type: textarea
- id: solution
- attributes:
- label: Ideal solution or implementation
- description: A clear and concise description of what you want to happen.
- validations:
- required: true
- - type: textarea
- id: alternatives
- attributes:
- label: Alternative solutions or implementations
- description: A clear and concise description of any alternative solutions or features you have considered.
- - type: textarea
- id: additional-context
- attributes:
- label: Other context
- description: Any other context, screenshots, or file uploads that help us understand your feature request.
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/.github/dependabot.yml b/vendor/discord.js-selfbot-v13/.github/dependabot.yml
deleted file mode 100644
index 084f44b..0000000
--- a/vendor/discord.js-selfbot-v13/.github/dependabot.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-version: 2
-updates:
-- package-ecosystem: npm
- directory: "/"
- schedule:
- interval: daily
- time: "12:00"
- open-pull-requests-limit: 15
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/.github/workflows/lint.yml b/vendor/discord.js-selfbot-v13/.github/workflows/lint.yml
deleted file mode 100644
index 4f29140..0000000
--- a/vendor/discord.js-selfbot-v13/.github/workflows/lint.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Lint
-on:
- push:
- branches:
- - '*'
- pull_request:
- branches:
- - '*'
-jobs:
- eslint:
- name: ESLint
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Install Node.js v24
- uses: actions/setup-node@v4
- with:
- node-version: 24
- - run: npm install --verbose
- - run: npx patch-package
- - run: npm run test
diff --git a/vendor/discord.js-selfbot-v13/.github/workflows/release.yml b/vendor/discord.js-selfbot-v13/.github/workflows/release.yml
deleted file mode 100644
index 1d4bc60..0000000
--- a/vendor/discord.js-selfbot-v13/.github/workflows/release.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-name: Release
-
-on:
- push:
- tags:
- - '3*' # Trigger on version 3.x.x tags
- workflow_dispatch:
-
-permissions:
- id-token: write
- contents: read
-
-jobs:
- release:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Install Node.js v22
- uses: actions/setup-node@v4
- with:
- node-version: 22
-
- - name: Configure npm for publishing
- run: |
- echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
-
- - name: Get current published version (if any)
- id: current_version
- run: |
- version=$(npm view discord.js-selfbot-v13 version || echo "none")
- echo "version=$version" >> $GITHUB_OUTPUT
-
- - name: Deprecate previous version
- if: steps.current_version.outputs.version != 'none'
- run: |
- echo "Deprecating version ${{ steps.current_version.outputs.version }}"
- npm deprecate discord.js-selfbot-v13@${{ steps.current_version.outputs.version }} "Deprecated: Please use the latest version."
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- - name: Publish to NPM
- run: npm publish --provenance --access public
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/vendor/discord.js-selfbot-v13/.gitignore b/vendor/discord.js-selfbot-v13/.gitignore
deleted file mode 100644
index 6a92432..0000000
--- a/vendor/discord.js-selfbot-v13/.gitignore
+++ /dev/null
@@ -1,85 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
-
-# Packages
-node_modules/
-djs/
-
-# Log files
-logs/
-*.log
-npm-debug.log*
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Env
-.env
-test/auth.json
-test/auth.js
-docs/deploy/deploy_key
-docs/deploy/deploy_key.pub
-deploy/deploy_key
-deploy/deploy_key.pub
-
-# Dist
-dist/
-docs/docs.json
-
-# Next.js build output
-.next
-
-# Nuxt.js build / generate output
-.nuxt
-dist
-
-# Gatsby files
-.cache/
-# Comment in the public line in if your project uses Gatsby and *not* Next.js
-# https://nextjs.org/blog/next-9-1#public-directory-support
-# public
-
-# vuepress build output
-.vuepress/dist
-
-# Serverless directories
-.serverless/
-
-# FuseBox cache
-.fusebox/
-
-# DynamoDB Local files
-.dynamodb/
-
-# TernJS port file
-.tern-port
-
-# Env
-.env
-test/
-docs/deploy/deploy_key
-docs/deploy/deploy_key.pub
-deploy/deploy_key
-deploy/deploy_key.pub
-
-# Miscellaneous
-.tmp/
-.idea/
-.DS_Store
-
-# Custom
-data/
-update.mjs
-yarn.lock
-package-lock.json
diff --git a/vendor/discord.js-selfbot-v13/LICENSE b/vendor/discord.js-selfbot-v13/LICENSE
deleted file mode 100644
index 16a0271..0000000
--- a/vendor/discord.js-selfbot-v13/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
-GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2022 aiko-chan-ai and discordjs
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- Copyright (C)
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/vendor/discord.js-selfbot-v13/README.md b/vendor/discord.js-selfbot-v13/README.md
deleted file mode 100644
index 1355d07..0000000
--- a/vendor/discord.js-selfbot-v13/README.md
+++ /dev/null
@@ -1,124 +0,0 @@
-> [!IMPORTANT]
-> ## Project Archival
->
-> **This project is no longer actively maintained and this repository has been archived.**
->
-> You can read the full announcement [here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/discussions/1743)
-
-
-
-
-
-
-
-
-> [!CAUTION]
-> **The use of this module under a different name on NPM (or another source besides this Github) is not associated with this library.**
-> **When using these libraries, you accept the risk of exposing your Discord Token.**
-
-## About
-
-Welcome to `discord.js-selfbot-v13@v3.7`, based on `discord.js@13.17` and backport `discord.js@14.21.0`
-
-- discord.js-selfbot-v13 is a [Node.js](https://nodejs.org) module that allows user accounts to interact with the Discord API v9.
-
-
-
-
-
-
-
-
-
-
-> [!WARNING]
-> **I don't take any responsibility for blocked Discord accounts that used this module.**
-
-> [!CAUTION]
-> **Using this on a user account is prohibited by the [Discord TOS](https://discord.com/terms) and can lead to the account block.**
-
-### [Document Website](https://discordjs-self-v13.netlify.app/)
-
-### [Example Code](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/tree/main/examples)
-
-## Features (User)
-- [x] Message
-- [x] ClientUser: Status, Activity, RemoteAuth, etc.
-- [X] Guild: Fetch Members, Join / Leave, Top emojis, etc.
-- [X] Interactions: Slash Commands, Buttons, Menu, Modal.
-- [X] Captcha & TOTP Handler
-- [X] Documentation
-- [x] Voice & Video
-- [ ] Everything
-
-## Installation
-
-> [!NOTE]
-> **Node.js 20.18.0 or newer is required**
-
-```sh-session
-npm install discord.js-selfbot-v13@latest
-```
-
-## Example
-
-```js
-const { Client } = require('discord.js-selfbot-v13');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
-})
-
-client.login('token');
-```
-
-## Get Token ?
-
-- Based: [findByProps](https://discord.com/channels/603970300668805120/1085682686607249478/1085682686607249478)
-
-Run code (Discord Console - [Ctrl + Shift + I])
-
-```js
-window.webpackChunkdiscord_app.push([
- [Symbol()],
- {},
- req => {
- if (!req.c) return;
- for (let m of Object.values(req.c)) {
- try {
- if (!m.exports || m.exports === window) continue;
- if (m.exports?.getToken) return copy(m.exports.getToken());
- for (let ex in m.exports) {
- if (m.exports?.[ex]?.getToken && m.exports[ex][Symbol.toStringTag] !== 'IntlMessagesProxy') return copy(m.exports[ex].getToken());
- }
- } catch {}
- }
- },
-]);
-
-window.webpackChunkdiscord_app.pop();
-console.log('%cWorked!', 'font-size: 50px');
-console.log(`%cYou now have your token in the clipboard!`, 'font-size: 16px');
-```
-
-## Contributing
-
-- Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the
-[documentation](https://discordjs-self-v13.netlify.app/).
-- See [the contribution guide](https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md) if you'd like to submit a PR.
-
-## Need help?
-Github Discussion: [Here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/discussions)
-
-## Credits
-- [Discord.js](https://github.com/discordjs/discord.js)
-
-## Other project(s)
-
-- 📘 [***aiko-chan-ai/DiscordBotClient***](https://github.com/aiko-chan-ai/DiscordBotClient)
- A patched version of discord, with bot login support
-
-## Star History
-
-[](https://star-history.com/#aiko-chan-ai/discord.js-selfbot-v13&Date)
diff --git a/vendor/discord.js-selfbot-v13/biome.json b/vendor/discord.js-selfbot-v13/biome.json
deleted file mode 100644
index 75cad86..0000000
--- a/vendor/discord.js-selfbot-v13/biome.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
- "files": {
- "includes": ["src/**/*.js", "typings/**/*.ts", "*.json"]
- },
- "formatter": {
- "enabled": true,
- "indentStyle": "space",
- "indentWidth": 2
- },
- "javascript": {
- "formatter": {
- "quoteStyle": "single",
- "semicolons": "always"
- }
- },
- "linter": {
- "enabled": true,
- "rules": {
- "recommended": false,
- "style": {
- "useNodejsImportProtocol": "warn"
- },
- "suspicious": {
- "noExplicitAny": "warn"
- }
- }
- }
-}
diff --git a/vendor/discord.js-selfbot-v13/docs/index.yml b/vendor/discord.js-selfbot-v13/docs/index.yml
deleted file mode 100644
index 0aea5a7..0000000
--- a/vendor/discord.js-selfbot-v13/docs/index.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-- name: General
- files:
- - name: Welcome
- id: welcome
- path: ../../README.md
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/docs/logo.svg b/vendor/discord.js-selfbot-v13/docs/logo.svg
deleted file mode 100644
index 81feb17..0000000
--- a/vendor/discord.js-selfbot-v13/docs/logo.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
diff --git a/vendor/discord.js-selfbot-v13/docs/main.json b/vendor/discord.js-selfbot-v13/docs/main.json
deleted file mode 100644
index a8e871e..0000000
--- a/vendor/discord.js-selfbot-v13/docs/main.json
+++ /dev/null
@@ -1 +0,0 @@
-{"meta":{"generator":"0.11.1","format":20,"date":1760178765772},"custom":{"general":{"name":"General","files":{"welcome":{"name":"Welcome","type":"md","content":"
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n> [!CAUTION]\r\n> **The use of this module under a different name on NPM (or another source besides this Github) is not associated with this library.**\r\n> **When using these libraries, you accept the risk of exposing your Discord Token.**\r\n\r\n## About\r\n\r\nWelcome to `discord.js-selfbot-v13@v3.7`, based on `discord.js@13.17` and backport `discord.js@14.21.0`\r\n\r\n- discord.js-selfbot-v13 is a [Node.js](https://nodejs.org) module that allows user accounts to interact with the Discord API v9.\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n> [!WARNING]\r\n> **I don't take any responsibility for blocked Discord accounts that used this module.**\r\n\r\n> [!CAUTION]\r\n> **Using this on a user account is prohibited by the [Discord TOS](https://discord.com/terms) and can lead to the account block.**\r\n\r\n## Project Status\r\n\r\n> [!IMPORTANT]\r\n> `discord.js-selfbot-v13` is currently in maintenance mode. New features are not actively being added but existing features and new versions of discord are supported as possible. There are some major architectural changes which need to be added to improve the stability and security of the project. I don't have as much spare time as I did when I started this project, so there is not currently any plan for these improvements.\r\n\r\n### [Document Website](https://discordjs-self-v13.netlify.app/)\r\n\r\n### [Example Code](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/tree/main/examples)\r\n\r\n## Features (User)\r\n- [x] Message\r\n- [x] ClientUser: Status, Activity, RemoteAuth, etc.\r\n- [X] Guild: Fetch Members, Join / Leave, Top emojis, etc.\r\n- [X] Interactions: Slash Commands, Buttons, Menu, Modal.\r\n- [X] Captcha & TOTP Handler\r\n- [X] Documentation\r\n- [x] Voice & Video\r\n- [ ] Everything\r\n\r\n## Installation\r\n\r\n> [!NOTE]\r\n> **Node.js 20.18.0 or newer is required**\r\n\r\n```sh-session\r\nnpm install discord.js-selfbot-v13@latest\r\n```\r\n\r\n## Example\r\n\r\n```js\r\nconst { Client } = require('discord.js-selfbot-v13');\r\nconst client = new Client();\r\n\r\nclient.on('ready', async () => {\r\n console.log(`${client.user.username} is ready!`);\r\n})\r\n\r\nclient.login('token');\r\n```\r\n\r\n## Get Token ?\r\n\r\n- Based: [findByProps](https://discord.com/channels/603970300668805120/1085682686607249478/1085682686607249478)\r\n\r\nRun code (Discord Console - [Ctrl + Shift + I])\r\n\r\n```js\r\nwindow.webpackChunkdiscord_app.push([\r\n\t[Symbol()],\r\n\t{},\r\n\treq => {\r\n\t\tif (!req.c) return;\r\n\t\tfor (let m of Object.values(req.c)) {\r\n\t\t\ttry {\r\n\t\t\t\tif (!m.exports || m.exports === window) continue;\r\n\t\t\t\tif (m.exports?.getToken) return copy(m.exports.getToken());\r\n\t\t\t\tfor (let ex in m.exports) {\r\n\t\t\t\t\tif (m.exports?.[ex]?.getToken && m.exports[ex][Symbol.toStringTag] !== 'IntlMessagesProxy') return copy(m.exports[ex].getToken());\r\n\t\t\t\t}\r\n\t\t\t} catch {}\r\n\t\t}\r\n\t},\r\n]);\r\n\r\nwindow.webpackChunkdiscord_app.pop();\r\nconsole.log('%cWorked!', 'font-size: 50px');\r\nconsole.log(`%cYou now have your token in the clipboard!`, 'font-size: 16px');\r\n```\r\n\r\n## Contributing\r\n\r\n- Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the\r\n[documentation](https://discordjs-self-v13.netlify.app/). \r\n- See [the contribution guide](https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md) if you'd like to submit a PR.\r\n\r\n## Need help?\r\nGithub Discussion: [Here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/discussions)\r\n\r\n## Credits\r\n- [Discord.js](https://github.com/discordjs/discord.js)\r\n\r\n## Other project(s)\r\n\r\n- 📘 [***aiko-chan-ai/DiscordBotClient***](https://github.com/aiko-chan-ai/DiscordBotClient) \r\n A patched version of discord, with bot login support\r\n\r\n## Star History\r\n\r\n[](https://star-history.com/#aiko-chan-ai/discord.js-selfbot-v13&Date)\r\n","path":"README.md"}}}},"classes":[{"name":"BaseClient","description":"The base class for all clients.","extends":[[["EventEmitter"]]],"props":[{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":25,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":32,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":41,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"destroy","description":"Destroys all assets used by the base client.","returns":[[["void"]]],"meta":{"line":49,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","meta":{"line":57,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","meta":{"line":68,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":82,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":138,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":189,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":221,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":298,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":13,"file":"BaseClient.js","path":"src/client"}},{"name":"Client","description":"The main hub for interacting with the Discord API, and the starting point for any bot.","extends":[[["BaseClient"]]],"construct":{"name":"Client","params":[{"name":"options","description":"Options for the client","optional":true,"type":[[["ClientOptions"]]]}]},"props":[{"name":"_cleanups","description":"Functions called when a cache is garbage collected or the Client is destroyed","access":"private","type":[[["Set","<"],["function","()>"]]],"meta":{"line":60,"file":"Client.js","path":"src/client"}},{"name":"_finalizers","description":"The finalizers used to cleanup items.","access":"private","type":[[["FinalizationRegistry"]]],"meta":{"line":67,"file":"Client.js","path":"src/client"}},{"name":"ws","description":"The WebSocket manager of the client","type":[[["WebSocketManager"]]],"meta":{"line":73,"file":"Client.js","path":"src/client"}},{"name":"actions","description":"The action manager of the client","access":"private","type":[[["ActionsManager"]]],"meta":{"line":80,"file":"Client.js","path":"src/client"}},{"name":"voice","description":"The voice manager of the client","type":[[["ClientVoiceManager"]]],"meta":{"line":86,"file":"Client.js","path":"src/client"}},{"name":"voiceStates","description":"A manager of the voice states of this client (Support DM / Group DM)","type":[[["VoiceStateManager"]]],"meta":{"line":92,"file":"Client.js","path":"src/client"}},{"name":"shard","description":"Shard helpers for the client (only if the process was spawned from a {@link ShardingManager})","nullable":true,"type":[[["ShardClientUtil"]]],"meta":{"line":98,"file":"Client.js","path":"src/client"}},{"name":"users","description":"The user manager of this client","type":[[["UserManager"]]],"meta":{"line":106,"file":"Client.js","path":"src/client"}},{"name":"guilds","description":"A manager of all the guilds the client is currently handling -\nas long as sharding isn't being used, this will be *every* guild the bot is a member of","type":[[["GuildManager"]]],"meta":{"line":113,"file":"Client.js","path":"src/client"}},{"name":"channels","description":"All of the {@link Channel}s that the client is currently handling -\nas long as sharding isn't being used, this will be *every* channel in *every* guild the bot\nis a member of. Note that DM channels will not be initially cached, and thus not be present\nin the Manager without their explicit fetching or use.","type":[[["ChannelManager"]]],"meta":{"line":122,"file":"Client.js","path":"src/client"}},{"name":"sweepers","description":"The sweeping functions and their intervals used to periodically sweep caches","type":[[["Sweepers"]]],"meta":{"line":128,"file":"Client.js","path":"src/client"}},{"name":"presence","description":"The presence of the Client","access":"private","type":[[["ClientPresence"]]],"meta":{"line":135,"file":"Client.js","path":"src/client"}},{"name":"presences","description":"A manager of the presences belonging to this client","type":[[["PresenceManager"]]],"meta":{"line":141,"file":"Client.js","path":"src/client"}},{"name":"notes","description":"All of the note that have been cached at any point, mapped by their ids","type":[[["UserManager"]]],"meta":{"line":147,"file":"Client.js","path":"src/client"}},{"name":"relationships","description":"All of the relationships {@link User}","type":[[["RelationshipManager"]]],"meta":{"line":153,"file":"Client.js","path":"src/client"}},{"name":"billing","description":"Manages the API methods","type":[[["BillingManager"]]],"meta":{"line":159,"file":"Client.js","path":"src/client"}},{"name":"sessions","description":"All of the sessions of the client","type":[[["SessionManager"]]],"meta":{"line":165,"file":"Client.js","path":"src/client"}},{"name":"settings","description":"All of the settings {@link Object}","type":[[["ClientUserSettingManager"]]],"meta":{"line":171,"file":"Client.js","path":"src/client"}},{"name":"token","description":"Authorization token for the logged in bot.\nIf present, this defaults to `process.env.DISCORD_TOKEN` when instantiating the client\nThis should be kept private at all times.","nullable":true,"type":[[["string"]]],"meta":{"line":181,"file":"Client.js","path":"src/client"}},{"name":"user","description":"User that the client is logged in as","nullable":true,"type":[[["ClientUser"]]],"meta":{"line":190,"file":"Client.js","path":"src/client"}},{"name":"readyAt","description":"Time at which the client was last regarded as being in the `READY` state\n(each time the client disconnects and successfully reconnects, this will be overwritten)","nullable":true,"type":[[["Date"]]],"meta":{"line":197,"file":"Client.js","path":"src/client"}},{"name":"authenticator","description":"The authenticator used for TOTP","type":[[["Object"]]],"meta":{"line":203,"file":"Client.js","path":"src/client"}},{"name":"emojis","description":"A manager of all the custom emojis that the client has access to","readonly":true,"type":[[["BaseGuildEmojiManager"]]],"meta":{"line":228,"file":"Client.js","path":"src/client"}},{"name":"readyTimestamp","description":"Timestamp of the time the client was last `READY` at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":241,"file":"Client.js","path":"src/client"}},{"name":"uptime","description":"How long it has been since the client last entered the `READY` state in milliseconds","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":250,"file":"Client.js","path":"src/client"}},{"name":"sessionId","description":"The current session id of the shard","nullable":true,"type":[[["string"]]],"meta":{"line":599,"file":"Client.js","path":"src/client"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":25,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":32,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":41,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"login","description":"Logs the client in, establishing a WebSocket connection to Discord.","examples":["client.login('my token');"],"params":[{"name":"token","description":"Token of the account to log in with","optional":true,"default":"this.token","type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Token of the account used"},"meta":{"line":261,"file":"Client.js","path":"src/client"}},{"name":"passLogin","description":"Logs the client in, establishing a WebSocket connection to Discord.","examples":["client.passLogin(\"test@gmail.com\", \"SuperSecretPa$$word\", 1234)"],"deprecated":"This method will not be updated until I find the most convenient way to implement MFA.","params":[{"name":"email","description":"The email associated with the account","type":[[["string"]]]},{"name":"password","description":"The password assicated with the account","type":[[["string"]]]}],"async":true,"returns":{"types":[[["string"]],[["null"]]],"description":"Token of the account used"},"meta":{"line":311,"file":"Client.js","path":"src/client"}},{"name":"isReady","description":"Returns whether the client has logged in, indicative of being able to access\nproperties such as `user` and `application`.","returns":[[["boolean"]]],"meta":{"line":341,"file":"Client.js","path":"src/client"}},{"name":"destroy","description":"Logs out, terminates the connection to Discord, and destroys the client.","returns":[[["void"]]],"meta":{"line":349,"file":"Client.js","path":"src/client"}},{"name":"logout","description":"Logs out, terminates the connection to Discord, destroys the client and destroys the token.","async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":366,"file":"Client.js","path":"src/client"}},{"name":"fetchInvite","description":"Obtains an invite from Discord.","examples":["client.fetchInvite('https://discord.gg/djs')\n .then(invite => console.log(`Obtained invite with code: ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]},{"name":"options","description":"Options for fetching the invite","optional":true,"type":[[["ClientFetchInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":393,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildTemplate","description":"Obtains a template from Discord.","examples":["client.fetchGuildTemplate('https://discord.new/FKvmczH2HyUf')\n .then(template => console.log(`Obtained template with code: ${template.code}`))\n .catch(console.error);"],"params":[{"name":"template","description":"Template code or URL","type":[[["GuildTemplateResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":410,"file":"Client.js","path":"src/client"}},{"name":"fetchWebhook","description":"Obtains a webhook from Discord.","examples":["client.fetchWebhook('id', 'token')\n .then(webhook => console.log(`Obtained webhook with name: ${webhook.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]]},{"name":"token","description":"Token for the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":426,"file":"Client.js","path":"src/client"}},{"name":"fetchVoiceRegions","description":"Obtains the available voice regions from Discord.","examples":["client.fetchVoiceRegions()\n .then(regions => console.log(`Available regions are: ${regions.map(region => region.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["VoiceRegion",">>"]]],"meta":{"line":439,"file":"Client.js","path":"src/client"}},{"name":"fetchSticker","description":"Obtains a sticker from Discord.","examples":["client.fetchSticker('id')\n .then(sticker => console.log(`Obtained sticker with name: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":455,"file":"Client.js","path":"src/client"}},{"name":"fetchPremiumStickerPacks","description":"Obtains the list of sticker packs available to Nitro subscribers from Discord.","examples":["client.fetchPremiumStickerPacks()\n .then(packs => console.log(`Available sticker packs are: ${packs.map(pack => pack.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["StickerPack",">>"]]],"meta":{"line":468,"file":"Client.js","path":"src/client"}},{"name":"_finalize","description":"A last ditch cleanup function for garbage collection.","access":"private","params":[{"name":"options.cleanup","description":"The function called to GC","type":[[["function"]]]},{"name":"options.message","description":"The message to send after a successful GC","optional":true,"type":[[["string"]]]},{"name":"options.name","description":"The name of the item being GCed","optional":true,"type":[[["string"]]]}],"meta":{"line":479,"file":"Client.js","path":"src/client"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones older than the max message lifetime.\nIf the message has been edited, the time of the edit is used rather than the time of the original message.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = client.sweepMessages(1800);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"lifetime","description":"Messages that are older than this (in seconds)\nwill be removed from the caches. The default is based on {@link ClientOptions#messageCacheLifetime}","optional":true,"default":"this.options.messageCacheLifetime","type":[[["number"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches,\nor -1 if the message cache lifetime is unlimited"},"meta":{"line":503,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildPreview","description":"Obtains a guild preview from Discord, available for all guilds the bot is in and all Discoverable guilds.","params":[{"name":"guild","description":"The guild to fetch the preview for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":522,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildWidget","description":"Obtains the widget data of a guild from Discord, available for guilds with the widget enabled.","params":[{"name":"guild","description":"The guild to fetch the widget data for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":534,"file":"Client.js","path":"src/client"}},{"name":"refreshAttachmentURL","description":"Refresh the Discord CDN links with hashes so they can be usable.","params":[{"name":"urls","description":"Discord CDN URLs","variable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<{"],["original",": "],["string",", "],["refreshed",": "],["string","}>>"]]],"meta":{"line":546,"file":"Client.js","path":"src/client"}},{"name":"sleep","description":"The sleep function in JavaScript returns a promise that resolves after a specified timeout.","params":[{"name":"timeout","description":"The timeout parameter is the amount of time, in milliseconds, that the sleep\nfunction will wait before resolving the promise and continuing execution.","type":[[["number"]]]}],"returns":{"types":[[["void"]]],"description":"The `sleep` function is returning a Promise."},"meta":{"line":585,"file":"Client.js","path":"src/client"}},{"name":"acceptInvite","description":"Join this Guild / GroupDMChannel using this invite","examples":["await client.acceptInvite('https://discord.gg/genshinimpact', { bypassOnboarding: true, bypassVerify: true })"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]},{"name":"options","description":"Options","optional":true,"type":[[["AcceptInviteOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Guild","|"],["DMChannel","|"],["GroupDMChannel",")>"]]],"meta":{"line":618,"file":"Client.js","path":"src/client"}},{"name":"redeemNitro","description":"Redeem nitro from code or url.","params":[{"name":"nitro","description":"Nitro url or code","type":[[["string"]]]},{"name":"channel","description":"Channel that the code was sent in","optional":true,"type":[[["TextChannelResolvable"]]]},{"name":"paymentSourceId","description":"Payment source id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":706,"file":"Client.js","path":"src/client"}},{"name":"authorizeURL","description":"Authorize an application.","examples":["client.authorizeURL(`https://discord.com/api/oauth2/authorize?client_id=botID&permissions=8&scope=applications.commands%20bot`, {\n guild_id: \"guildID\",\n })"],"params":[{"name":"urlOAuth2","description":"Discord Auth URL","type":[[["string"]]]},{"name":"options","description":"Oauth2 options","optional":true,"type":[[["OAuth2AuthorizeOptions"]]]}],"returns":[[["Promise","<{"],["location",": "],["string","}>"]]],"meta":{"line":739,"file":"Client.js","path":"src/client"}},{"name":"installUserApps","description":"Install User Apps","params":[{"name":"applicationId","description":"Discord Application id","type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":773,"file":"Client.js","path":"src/client"}},{"name":"deauthorize","description":"Deauthorizes an application or token.","params":[{"name":"id","description":"The ID of the Discord Application or Token.","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the ID provided. Defaults to 'application'.","optional":true,"default":"'application'","type":[[["application","'"]],[["token","'"]]]}],"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"A promise that resolves when the deauthorization is complete."},"meta":{"line":807,"file":"Client.js","path":"src/client"}},{"name":"authorizedApplications","description":"Retrieves the list of authorized applications (OAuth2 tokens).","returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["AuthorizedApplicationData",">>"]]],"meta":{"line":830,"file":"Client.js","path":"src/client"}},{"name":"_eval","description":"Calls {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script\nwith the client as `this`.","access":"private","params":[{"name":"script","description":"Script to eval","type":[[["string"]]]}],"returns":[["*"]],"meta":{"line":854,"file":"Client.js","path":"src/client"}},{"name":"_validateOptions","description":"Validates the client options.","access":"private","params":[{"name":"options","description":"Options to validate","optional":true,"default":"this.options","type":[[["ClientOptions"]]]}],"meta":{"line":863,"file":"Client.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":57,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":68,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"applicationCommandPermissionsUpdate","description":"Emitted whenever permissions for an application command in a guild were updated.\nThis includes permission updates for other applications in addition to the logged in client,\ncheck `data.applicationId` to verify which application the update is for","params":[{"name":"data","description":"The updated permissions","type":[[["ApplicationCommandPermissionsUpdateData"]]]}],"meta":{"line":18,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"autoModerationActionExecution","description":"Emitted whenever an auto moderation rule is triggered.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","deprecated":"This event is not received by user accounts.","params":[{"name":"autoModerationActionExecution","description":"The data of the execution","type":[[["AutoModerationActionExecution"]]]}],"meta":{"line":13,"file":"AutoModerationActionExecution.js","path":"src/client/actions"}},{"name":"autoModerationRuleCreate","description":"Emitted whenever an auto moderation rule is created.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","deprecated":"This event is not received by user accounts.","params":[{"name":"autoModerationRule","description":"The created auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":14,"file":"AutoModerationRuleCreate.js","path":"src/client/actions"}},{"name":"autoModerationRuleDelete","description":"Emitted whenever an auto moderation rule is deleted.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","deprecated":"This event is not received by user accounts.","params":[{"name":"autoModerationRule","description":"The deleted auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":17,"file":"AutoModerationRuleDelete.js","path":"src/client/actions"}},{"name":"autoModerationRuleUpdate","description":"Emitted whenever an auto moderation rule gets updated.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","deprecated":"This event is not received by user accounts.","params":[{"name":"oldAutoModerationRule","description":"The auto moderation rule before the update","nullable":true,"type":[[["AutoModerationRule"]]]},{"name":"newAutoModerationRule","description":"The auto moderation rule after the update","type":[[["AutoModerationRule"]]]}],"meta":{"line":15,"file":"AutoModerationRuleUpdate.js","path":"src/client/actions"}},{"name":"channelCreate","description":"Emitted whenever a guild channel is created.","params":[{"name":"channel","description":"The channel that was created","type":[[["GuildChannel"]]]}],"meta":{"line":12,"file":"ChannelCreate.js","path":"src/client/actions"}},{"name":"channelDelete","description":"Emitted whenever a channel is deleted.","params":[{"name":"channel","description":"The channel that was deleted","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":27,"file":"ChannelDelete.js","path":"src/client/actions"}},{"name":"guildAuditLogEntryCreate","description":"Emitted whenever a guild audit log entry is created.","params":[{"name":"auditLogEntry","description":"The entry that was created","type":[[["GuildAuditLogsEntry"]]]},{"name":"guild","description":"The guild where the entry was created","type":[[["Guild"]]]}],"meta":{"line":16,"file":"GuildAuditLogEntryCreate.js","path":"src/client/actions"}},{"name":"guildBanAdd","description":"Emitted whenever a member is banned from a guild.","params":[{"name":"ban","description":"The ban that occurred","type":[[["GuildBan"]]]}],"meta":{"line":11,"file":"GuildBanAdd.js","path":"src/client/actions"}},{"name":"guildBanRemove","description":"Emitted whenever a member is unbanned from a guild.","params":[{"name":"ban","description":"The ban that was removed","type":[[["GuildBan"]]]}],"meta":{"line":12,"file":"GuildBanRemove.js","path":"src/client/actions"}},{"name":"guildUnavailable","description":"Emitted whenever a guild becomes unavailable, likely due to a server outage.","params":[{"name":"guild","description":"The guild that has become unavailable","type":[[["Guild"]]]}],"meta":{"line":23,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"guildDelete","description":"Emitted whenever a guild kicks the client or the guild is deleted/left.","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"emojiCreate","description":"Emitted whenever a custom emoji is created in a guild.","params":[{"name":"emoji","description":"The emoji that was created","type":[[["GuildEmoji"]]]}],"meta":{"line":10,"file":"GuildEmojiCreate.js","path":"src/client/actions"}},{"name":"emojiDelete","description":"Emitted whenever a custom emoji is deleted in a guild.","params":[{"name":"emoji","description":"The emoji that was deleted","type":[[["GuildEmoji"]]]}],"meta":{"line":11,"file":"GuildEmojiDelete.js","path":"src/client/actions"}},{"name":"emojiUpdate","description":"Emitted whenever a custom emoji is updated in a guild.","params":[{"name":"oldEmoji","description":"The old emoji","type":[[["GuildEmoji"]]]},{"name":"newEmoji","description":"The new emoji","type":[[["GuildEmoji"]]]}],"meta":{"line":9,"file":"GuildEmojiUpdate.js","path":"src/client/actions"}},{"name":"guildIntegrationsUpdate","description":"Emitted whenever a guild integration is updated","params":[{"name":"guild","description":"The guild whose integrations were updated","type":[[["Guild"]]]}],"meta":{"line":10,"file":"GuildIntegrationsUpdate.js","path":"src/client/actions"}},{"name":"guildMemberRemove","description":"Emitted whenever a member leaves a guild, or is kicked.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has left/been kicked from the guild","type":[[["GuildMember"]]]}],"meta":{"line":18,"file":"GuildMemberRemove.js","path":"src/client/actions"}},{"name":"guildMemberUpdate","description":"Emitted whenever a guild member changes - i.e. new role, removed role, nickname.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"oldMember","description":"The member before the update","type":[[["GuildMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["GuildMember"]]]}],"meta":{"line":23,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"guildMemberAvailable","description":"Emitted whenever a member becomes available.","params":[{"name":"member","description":"The member that became available","type":[[["GuildMember"]]]}],"meta":{"line":33,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"roleCreate","description":"Emitted whenever a role is created.","params":[{"name":"role","description":"The role that was created","type":[[["Role"]]]}],"meta":{"line":14,"file":"GuildRoleCreate.js","path":"src/client/actions"}},{"name":"roleDelete","description":"Emitted whenever a guild role is deleted.","params":[{"name":"role","description":"The role that was deleted","type":[[["Role"]]]}],"meta":{"line":18,"file":"GuildRoleDelete.js","path":"src/client/actions"}},{"name":"roleUpdate","description":"Emitted whenever a guild role is updated.","params":[{"name":"oldRole","description":"The role before the update","type":[[["Role"]]]},{"name":"newRole","description":"The role after the update","type":[[["Role"]]]}],"meta":{"line":17,"file":"GuildRoleUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventCreate","description":"Emitted whenever a guild scheduled event is created.","params":[{"name":"guildScheduledEvent","description":"The created guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":13,"file":"GuildScheduledEventCreate.js","path":"src/client/actions"}},{"name":"guildScheduledEventDelete","description":"Emitted whenever a guild scheduled event is deleted.","params":[{"name":"guildScheduledEvent","description":"The deleted guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":16,"file":"GuildScheduledEventDelete.js","path":"src/client/actions"}},{"name":"guildScheduledEventUpdate","description":"Emitted whenever a guild scheduled event gets updated.","params":[{"name":"oldGuildScheduledEvent","description":"The guild scheduled event object before the update","nullable":true,"type":[[["GuildScheduledEvent"]]]},{"name":"newGuildScheduledEvent","description":"The guild scheduled event object after the update","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":15,"file":"GuildScheduledEventUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserAdd","description":"Emitted whenever a user subscribes to a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who subscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserAdd.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserRemove","description":"Emitted whenever a user unsubscribes from a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who unsubscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserRemove.js","path":"src/client/actions"}},{"name":"stickerCreate","description":"Emitted whenever a custom sticker is created in a guild.","params":[{"name":"sticker","description":"The sticker that was created","type":[[["Sticker"]]]}],"meta":{"line":10,"file":"GuildStickerCreate.js","path":"src/client/actions"}},{"name":"stickerDelete","description":"Emitted whenever a custom sticker is deleted in a guild.","params":[{"name":"sticker","description":"The sticker that was deleted","type":[[["Sticker"]]]}],"meta":{"line":11,"file":"GuildStickerDelete.js","path":"src/client/actions"}},{"name":"stickerUpdate","description":"Emitted whenever a custom sticker is updated in a guild.","params":[{"name":"oldSticker","description":"The old sticker","type":[[["Sticker"]]]},{"name":"newSticker","description":"The new sticker","type":[[["Sticker"]]]}],"meta":{"line":9,"file":"GuildStickerUpdate.js","path":"src/client/actions"}},{"name":"guildUpdate","description":"Emitted whenever a guild is updated - e.g. name change.","params":[{"name":"oldGuild","description":"The guild before the update","type":[[["Guild"]]]},{"name":"newGuild","description":"The guild after the update","type":[[["Guild"]]]}],"meta":{"line":13,"file":"GuildUpdate.js","path":"src/client/actions"}},{"name":"inviteCreate","description":"Emitted when an invite is created.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was created","type":[[["Invite"]]]}],"meta":{"line":16,"file":"InviteCreate.js","path":"src/client/actions"}},{"name":"inviteDelete","description":"Emitted when an invite is deleted.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was deleted","type":[[["Invite"]]]}],"meta":{"line":18,"file":"InviteDelete.js","path":"src/client/actions"}},{"name":"messageCreate","description":"Emitted whenever a message is created.","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":25,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"message","description":"Emitted whenever a message is created.","deprecated":"Use {@link Client#event:messageCreate} instead","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":32,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"messageDelete","description":"Emitted whenever a message is deleted.","params":[{"name":"message","description":"The deleted message","type":[[["Message"]]]}],"meta":{"line":19,"file":"MessageDelete.js","path":"src/client/actions"}},{"name":"messageDeleteBulk","description":"Emitted whenever messages are deleted in bulk.","params":[{"name":"messages","description":"The deleted messages, mapped by their id","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]}],"meta":{"line":34,"file":"MessageDeleteBulk.js","path":"src/client/actions"}},{"name":"messagePollVoteAdd","description":"Emitted whenever a user votes in a poll.","params":[{"name":"pollAnswer","description":"The answer that was voted on","type":[[["PollAnswer"]]]},{"name":"userId","description":"The id of the user that voted","type":[[["Snowflake"]]]}],"meta":{"line":21,"file":"MessagePollVoteAdd.js","path":"src/client/actions"}},{"name":"messagePollVoteRemove","description":"Emitted whenever a user removes their vote in a poll.","params":[{"name":"pollAnswer","description":"The answer where the vote was removed","type":[[["PollAnswer"]]]},{"name":"userId","description":"The id of the user that removed their vote","type":[[["Snowflake"]]]}],"meta":{"line":21,"file":"MessagePollVoteRemove.js","path":"src/client/actions"}},{"name":"messageReactionAdd","description":"Emitted whenever a reaction is added to a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that applied the guild or reaction emoji","type":[[["User"]]]},{"name":"details","description":"Details of adding the reaction","type":[[["MessageReactionEventDetails"]]]}],"meta":{"line":55,"file":"MessageReactionAdd.js","path":"src/client/actions"}},{"name":"messageReactionRemove","description":"Emitted whenever a reaction is removed from a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user whose emoji or reaction emoji was removed","type":[[["User"]]]},{"name":"details","description":"Details of removing the reaction","type":[[["MessageReactionEventDetails"]]]}],"meta":{"line":37,"file":"MessageReactionRemove.js","path":"src/client/actions"}},{"name":"messageReactionRemoveAll","description":"Emitted whenever all reactions are removed from a cached message.","params":[{"name":"message","description":"The message the reactions were removed from","type":[[["Message"]]]},{"name":"reactions","description":"The cached message reactions that were removed.","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]]}],"meta":{"line":26,"file":"MessageReactionRemoveAll.js","path":"src/client/actions"}},{"name":"messageReactionRemoveEmoji","description":"Emitted when a bot removes an emoji reaction from a cached message.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]}],"meta":{"line":18,"file":"MessageReactionRemoveEmoji.js","path":"src/client/actions"}},{"name":"presenceUpdate","description":"Emitted whenever a guild member's presence (e.g. status, activity) is changed.","params":[{"name":"oldPresence","description":"The presence before the update, if one at all","nullable":true,"type":[[["Presence"]]]},{"name":"newPresence","description":"The presence after the update","type":[[["Presence"]]]}],"meta":{"line":39,"file":"PresenceUpdate.js","path":"src/client/actions"}},{"name":"stageInstanceCreate","description":"Emitted whenever a stage instance is created.","params":[{"name":"stageInstance","description":"The created stage instance","type":[[["StageInstance"]]]}],"meta":{"line":14,"file":"StageInstanceCreate.js","path":"src/client/actions"}},{"name":"stageInstanceDelete","description":"Emitted whenever a stage instance is deleted.","params":[{"name":"stageInstance","description":"The deleted stage instance","type":[[["StageInstance"]]]}],"meta":{"line":18,"file":"StageInstanceDelete.js","path":"src/client/actions"}},{"name":"stageInstanceUpdate","description":"Emitted whenever a stage instance gets updated - e.g. change in topic or privacy level","params":[{"name":"oldStageInstance","description":"The stage instance before the update","nullable":true,"type":[[["StageInstance"]]]},{"name":"newStageInstance","description":"The stage instance after the update","type":[[["StageInstance"]]]}],"meta":{"line":15,"file":"StageInstanceUpdate.js","path":"src/client/actions"}},{"name":"threadCreate","description":"Emitted whenever a thread is created or when the client user is added to a thread.","params":[{"name":"thread","description":"The thread that was created","type":[[["ThreadChannel"]]]},{"name":"newlyCreated","description":"Whether the thread was newly created","type":[[["boolean"]]]}],"meta":{"line":12,"file":"ThreadCreate.js","path":"src/client/actions"}},{"name":"threadDelete","description":"Emitted whenever a thread is deleted.","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"meta":{"line":20,"file":"ThreadDelete.js","path":"src/client/actions"}},{"name":"threadListSync","description":"Emitted whenever the client user gains access to a text or news channel that contains threads","params":[{"name":"threads","description":"The threads that were synced","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]}],"meta":{"line":38,"file":"ThreadListSync.js","path":"src/client/actions"}},{"name":"threadMembersUpdate","description":"Emitted whenever members are added or removed from a thread. Requires `GUILD_MEMBERS` privileged intent","params":[{"name":"oldMembers","description":"The members before the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]},{"name":"newMembers","description":"The members after the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]}],"meta":{"line":22,"file":"ThreadMembersUpdate.js","path":"src/client/actions"}},{"name":"threadMemberUpdate","description":"Emitted whenever the client user's thread member is updated.","params":[{"name":"oldMember","description":"The member before the update","type":[[["ThreadMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["ThreadMember"]]]}],"meta":{"line":18,"file":"ThreadMemberUpdate.js","path":"src/client/actions"}},{"name":"typingStart","description":"Emitted whenever a user starts typing in a channel.","params":[{"name":"typing","description":"The typing state","type":[[["Typing"]]]}],"meta":{"line":19,"file":"TypingStart.js","path":"src/client/actions"}},{"name":"userUpdate","description":"Emitted whenever a user's details (e.g. username) are changed.\nTriggered by the Discord gateway events USER_UPDATE, GUILD_MEMBER_UPDATE, and PRESENCE_UPDATE.","params":[{"name":"oldUser","description":"The user before the update","type":[[["User"]]]},{"name":"newUser","description":"The user after the update","type":[[["User"]]]}],"meta":{"line":14,"file":"UserUpdate.js","path":"src/client/actions"}},{"name":"voiceStateUpdate","description":"Emitted whenever a member changes voice state - e.g. joins/leaves a channel, mutes/unmutes.","params":[{"name":"oldState","description":"The voice state before the update","type":[[["VoiceState"]]]},{"name":"newState","description":"The voice state after the update","type":[[["VoiceState"]]]}],"meta":{"line":26,"file":"VoiceStateUpdate.js","path":"src/client/actions"}},{"name":"webhookUpdate","description":"Emitted whenever a channel has its webhooks changed.","params":[{"name":"channel","description":"The channel that had a webhook update","type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]],[["MediaChannel"]]]}],"meta":{"line":10,"file":"WebhooksUpdate.js","path":"src/client/actions"}},{"name":"warn","description":"Emitted for general warnings.","params":[{"name":"info","description":"The warning","type":[[["string"]]]}],"meta":{"line":925,"file":"Client.js","path":"src/client"}},{"name":"guildMemberSpeaking","description":"Emitted once a guild member changes speaking state.","params":[{"name":"member","description":"The member that started/stopped speaking","type":[[["GuildMember"]]]},{"name":"speaking","description":"The speaking state of the member","type":[[["Readonly","<"],["Speaking",">"]]]}],"meta":{"line":657,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"applicationCommandCreate","description":"Emitted when a guild application command is created.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was created","type":[[["ApplicationCommand"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandDelete","description":"Emitted when a guild application command is deleted.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was deleted","type":[[["ApplicationCommand"]]]}],"meta":{"line":13,"file":"APPLICATION_COMMAND_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandUpdate","description":"Emitted when a guild application command is updated.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"oldCommand","description":"The command before the update","nullable":true,"type":[[["ApplicationCommand"]]]},{"name":"newCommand","description":"The command after the update","type":[[["ApplicationCommand"]]]}],"meta":{"line":12,"file":"APPLICATION_COMMAND_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"callCreate","description":"Emitted whenever received a call","params":[{"name":"call","description":"Call","type":[[["CallState"]]]}],"meta":{"line":8,"file":"CALL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"callDelete","description":"Emitted whenever delete a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"callUpdate","description":"Emitted whenever update a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelPinsUpdate","description":"Emitted whenever the pins of a channel are updated. Due to the nature of the WebSocket event,\nnot much information can be provided easily here - you need to manually check the pins yourself.","params":[{"name":"channel","description":"The channel that the pins update occurred in","type":[[["TextBasedChannels"]]]},{"name":"time","description":"The time of the pins update","type":[[["Date"]]]}],"meta":{"line":13,"file":"CHANNEL_PINS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientAdd","description":"Emitted whenever a recipient is added from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["GroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":10,"file":"CHANNEL_RECIPIENT_ADD.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientRemove","description":"Emitted whenever a recipient is removed from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["GroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":8,"file":"CHANNEL_RECIPIENT_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"channelUpdate","description":"Emitted whenever a channel is updated - e.g. name change, topic change, channel type change.","params":[{"name":"oldChannel","description":"The channel before the update","type":[[["DMChannel"]],[["GuildChannel"]]]},{"name":"newChannel","description":"The channel after the update","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":8,"file":"CHANNEL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildAvailable","description":"Emitted whenever a guild becomes available.","params":[{"name":"guild","description":"The guild that became available","type":[[["Guild"]]]}],"meta":{"line":31,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildCreate","description":"Emitted whenever the client joins a guild.","params":[{"name":"guild","description":"The created guild","type":[[["Guild"]]]}],"meta":{"line":43,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberAdd","description":"Emitted whenever a user joins a guild.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has joined a guild","type":[[["GuildMember"]]]}],"meta":{"line":11,"file":"GUILD_MEMBER_ADD.js","path":"src/client/websocket/handlers"}},{"name":"guildMembersChunk","description":"Emitted whenever a chunk of guild members is received (all members come from the same guild).","params":[{"name":"members","description":"The members in the chunk","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"The guild related to the member chunk","type":[[["Guild"]]]},{"name":"chunk","description":"Properties of the received chunk","type":[[["GuildMembersChunk"]]]}],"meta":{"line":26,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"interactionModalCreate","description":"Emitted whenever client user receive interaction.showModal()","params":[{"name":"modal","description":"The modal (extended)","type":[[["Modal"]]]}],"meta":{"line":6,"file":"INTERACTION_MODAL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"messageUpdate","description":"Emitted whenever a message is updated - e.g. embed or content change.","params":[{"name":"oldMessage","description":"The message before the update","type":[[["Message"]]]},{"name":"newMessage","description":"The message after the update","type":[[["Message"]]]}],"meta":{"line":8,"file":"MESSAGE_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipAdd","description":"Emitted when a relationship is created, relevant to the current user.","params":[{"name":"user","description":"Target userId","type":[[["Snowflake"]]]},{"name":"shouldNotify","description":"Whether the client should notify the user of this relationship's creation","type":[[["boolean"]]]}],"meta":{"line":12,"file":"RELATIONSHIP_ADD.js","path":"src/client/websocket/handlers"}},{"name":"relationshipRemove","description":"Emitted when a relationship is removed, relevant to the current user.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the old relationship","type":[[["RelationshipType"]]]},{"name":"nickname","description":"The nickname of the user in this relationship (1-32 characters)","type":[[["string"]],[["null"]]]}],"meta":{"line":9,"file":"RELATIONSHIP_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipUpdate","description":"Emitted when a relationship is updated, relevant to the current user (e.g. friend nickname changed).\nThis is not sent when the type of a relationship changes; see {@link Client#relationshipAdd} and {@link Client#relationshipRemove} for that.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"oldData","description":"Old data","type":[[["RelationshipUpdateObject"]]]},{"name":"newData","description":"New data","type":[[["RelationshipUpdateObject"]]]}],"meta":{"line":12,"file":"RELATIONSHIP_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardResume","description":"Emitted when a shard resumes successfully.","params":[{"name":"id","description":"The shard id that resumed","type":[[["number"]]]},{"name":"replayedEvents","description":"The amount of replayed events","type":[[["number"]]]}],"meta":{"line":7,"file":"RESUMED.js","path":"src/client/websocket/handlers"}},{"name":"threadUpdate","description":"Emitted whenever a thread is updated - e.g. name change, archive state change, locked state change.","params":[{"name":"oldThread","description":"The thread before the update","type":[[["ThreadChannel"]]]},{"name":"newThread","description":"The thread after the update","type":[[["ThreadChannel"]]]}],"meta":{"line":8,"file":"THREAD_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"voiceChannelEffectSend","description":"Emmited when someone sends an effect, such as an emoji reaction, in a voice channel the client is connected to.","params":[{"name":"voiceChannelEffect","description":"The sent voice channel effect","type":[[["VoiceChannelEffect"]]]}],"meta":{"line":10,"file":"VOICE_CHANNEL_EFFECT_SEND.js","path":"src/client/websocket/handlers"}},{"name":"shardReady","description":"Emitted when a shard turns ready.","params":[{"name":"id","description":"The shard id that turned ready","type":[[["number"]]]},{"name":"unavailableGuilds","description":"Set of unavailable guild ids, if any","nullable":true,"type":[[["Set","<"],["Snowflake",">"]]]}],"meta":{"line":179,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardDisconnect","description":"Emitted when a shard's WebSocket disconnects and will no longer reconnect.","params":[{"name":"event","description":"The WebSocket close event","type":[[["CloseEvent"]]]},{"name":"id","description":"The shard id that disconnected","type":[[["number"]]]}],"meta":{"line":193,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardReconnecting","description":"Emitted when a shard is attempting to reconnect or re-identify.","params":[{"name":"id","description":"The shard id that is attempting to reconnect","type":[[["number"]]]}],"meta":{"line":209,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"invalidated","description":"Emitted when the client's session becomes invalidated.\nYou are expected to handle closing the process gracefully and preventing a boot loop\nif you are listening to this event.","meta":{"line":283,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"unhandledPacket","description":"Emitted whenever a packet isn't handled.","params":[{"name":"packet","description":"The packet (t: EVENT_NAME, d: any)","type":[[["Object"]]]},{"name":"shard","description":"The shard that received the packet (Shard 0)","type":[[["Number"]]]}],"meta":{"line":347,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the client becomes ready to start working.","params":[{"name":"client","description":"The client","type":[[["Client"]]]}],"meta":{"line":381,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardError","description":"Emitted whenever a shard's WebSocket encounters a connection error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]},{"name":"shardId","description":"The shard that encountered this error","type":[[["number"]]]}],"meta":{"line":344,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"error","description":"Emitted when the client encounters an error.\nErrors thrown within this event do not have a catch handler, it is\nrecommended to not use async functions as `error` event handlers. See the\n[Node.js docs](https://nodejs.org/api/events.html#capture-rejections-of-promises) for details.","params":[{"name":"error","description":"The error encountered","type":[[["Error"]]]}],"meta":{"line":212,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":82,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":138,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":189,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":221,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":298,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":46,"file":"Client.js","path":"src/client"}},{"name":"ClientVoiceManager","description":"Manages voice connections for the client\nFeat: Support both lib & djs/voice","props":[{"name":"client","description":"The client that instantiated this voice manager","readonly":true,"type":[[["Client"]]],"meta":{"line":13,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"connection","description":"A current connection objects","nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":25,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"adapters","description":"Maps guild ids to voice adapters created for use with @discordjs/voice.","type":[[["Map","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":31,"file":"ClientVoiceManager.js","path":"src/client/voice"}}],"methods":[{"name":"joinChannel","description":"Sets up a request to join a voice channel.","params":[{"name":"channel","description":"The voice channel to join","type":[[["VoiceChannel"]],[["StageChannel"]],[["DMChannel"]],[["GroupDMChannel"]],[["Snowflake"]]]},{"name":"config","description":"Config to join voice channel","type":[[["JoinChannelConfig"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":102,"file":"ClientVoiceManager.js","path":"src/client/voice"}}],"meta":{"line":11,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"AudioDispatcher","description":"The class that sends voice packet data to the voice connection.\n```js\n// Obtained using:\nclient.voice.joinChannel(channel).then(connection => {\n // You can play a file or a stream here:\n const dispatcher = connection.playAudio('/home/hydrabolt/audio.mp3');\n});\n```","extends":[[["BaseDispatcher"]]],"implements":[[["VolumeInterface"]]],"props":[{"name":"bitrateEditable","description":"Whether or not the Opus bitrate of this stream is editable","readonly":true,"type":[[["boolean"]]],"meta":{"line":102,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"volumeEditable","description":"Whether or not the volume of this stream is editable","readonly":true,"type":[[["boolean"]]],"meta":{"line":21,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"volume","description":"The current volume of the stream","readonly":true,"type":[[["number"]]],"meta":{"line":30,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"volumeDecibels","description":"The current volume of the stream in decibels","readonly":true,"type":[[["number"]]],"meta":{"line":39,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"volumeLogarithmic","description":"The current volume of the stream from a logarithmic scale","readonly":true,"type":[[["number"]]],"meta":{"line":48,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"player","description":"The Player that controls this dispatcher","type":[[["MediaPlayer"]]],"meta":{"line":32,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pausedSince","description":"The time that the stream was paused at (null if not paused)","nullable":true,"type":[[["number"]]],"meta":{"line":43,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"paused","description":"Whether or not playback is paused","readonly":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pausedTime","description":"Total time that this dispatcher has been paused in milliseconds","readonly":true,"type":[[["number"]]],"meta":{"line":181,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"totalStreamTime","description":"The time (in milliseconds) that the dispatcher has been playing audio for, taking into account skips and pauses","readonly":true,"type":[[["number"]]],"meta":{"line":211,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"methods":[{"name":"getTypeDispatcher","description":"Get the type of the dispatcher","returns":[[["audio","'"]]],"meta":{"line":54,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"setBitrate","description":"Set the bitrate of the current Opus encoder if using a compatible Opus stream.","params":[{"name":"value","description":"New bitrate, in kbps\nIf set to 'auto', the voice channel's bitrate will be used","type":[[["number"]]]}],"returns":{"types":[[["boolean"]]],"description":"true if the bitrate has been successfully changed."},"meta":{"line":64,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"setPLP","description":"Sets the expected packet loss percentage if using a compatible Opus stream.","params":[{"name":"value","description":"between 0 and 1","type":[[["number"]]]}],"returns":{"types":[[["boolean"]]],"description":"Returns true if it was successfully set."},"meta":{"line":76,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"setFEC","description":"Enables or disables forward error correction if using a compatible Opus stream.","params":[{"name":"enabled","description":"true to enable","type":[[["boolean"]]]}],"returns":{"types":[[["boolean"]]],"description":"Returns true if it was successfully set."},"meta":{"line":87,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"setSyncVideoDispatcher","description":"Sync with another video dispatcher to ensure that the audio and video are played at the same time.","params":[{"name":"otherDispatcher","description":"The video dispatcher to sync with","type":[[["VideoDispatcher"]]]}],"meta":{"line":128,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"setVolume","description":"Sets the volume relative to the input stream - i.e. 1 is normal, 0.5 is half, 2 is double.","implements":["VolumeInterface#setVolume"],"params":[{"name":"volume","description":"The volume that you want to set","type":[[["number"]]]}],"meta":{"line":70,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"setVolumeDecibels","description":"Sets the volume in decibels.","implements":["VolumeInterface#setVolumeDecibels"],"params":[{"name":"db","description":"The decibels","type":[[["number"]]]}],"meta":{"line":85,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"setVolumeLogarithmic","description":"Sets the volume so that a perceived value of 0.5 is half the perceived volume etc.","implements":["VolumeInterface#setVolumeLogarithmic"],"params":[{"name":"value","description":"The value for the volume","type":[[["number"]]]}],"meta":{"line":93,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"pause","description":"Pauses playback","inherits":"BaseDispatcher#pause","inherited":true,"params":[{"name":"silence","description":"Whether to play silence while paused to prevent audio glitches","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":149,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"resume","description":"Resumes playback","inherits":"BaseDispatcher#resume","inherited":true,"meta":{"line":188,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"createHeaderExtension","description":"Creates a one-byte extension header\nhttps://www.rfc-editor.org/rfc/rfc5285#section-4.2","inherits":"BaseDispatcher#createHeaderExtension","inherited":true,"returns":{"types":[[["Buffer"]]],"description":""},"meta":{"line":251,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"createPayloadExtension","description":"Creates a one-byte extension header & a single extension of type playout-delay","see":["https://docs.discord.food/topics/voice-connections#sending-and-receiving-voice\nDiscord expects a playout delay RTP extension header on every video packet.","https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/playout-delay"],"inherits":"BaseDispatcher#createPayloadExtension","inherited":true,"returns":{"types":[[["Buffer"]]],"description":"playout-delay extension "},"meta":{"line":273,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"events":[{"name":"volumeChange","description":"Emitted when the volume of this dispatcher changes.","params":[{"name":"oldVolume","description":"The old volume of this dispatcher","type":[[["number"]]]},{"name":"newVolume","description":"The new volume of this dispatcher","type":[[["number"]]]}],"meta":{"line":113,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"speaking","description":"Emitted when the dispatcher starts/stops speaking.","params":[{"name":"value","description":"Whether or not the dispatcher is speaking","type":[[["boolean"]]]}],"meta":{"line":426,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"error","description":"Emitted when the dispatcher encounters an error.","meta":{"line":54,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"start","description":"Emitted once the stream has started to play.","meta":{"line":99,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"debug","description":"Emitted whenever the dispatcher has debug information.","params":[{"name":"info","description":"The debug info","type":[[["string"]]]}],"meta":{"line":396,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"meta":{"line":27,"file":"AudioDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"BaseDispatcher","extends":[[["Writable"]]],"props":[{"name":"player","description":"The Player that controls this dispatcher","type":[[["MediaPlayer"]]],"meta":{"line":32,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pausedSince","description":"The time that the stream was paused at (null if not paused)","nullable":true,"type":[[["number"]]],"meta":{"line":43,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"paused","description":"Whether or not playback is paused","readonly":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pausedTime","description":"Total time that this dispatcher has been paused in milliseconds","readonly":true,"type":[[["number"]]],"meta":{"line":181,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"totalStreamTime","description":"The time (in milliseconds) that the dispatcher has been playing audio for, taking into account skips and pauses","readonly":true,"type":[[["number"]]],"meta":{"line":211,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"methods":[{"name":"pause","description":"Pauses playback","params":[{"name":"silence","description":"Whether to play silence while paused to prevent audio glitches","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":149,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"resume","description":"Resumes playback","meta":{"line":188,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"createHeaderExtension","description":"Creates a one-byte extension header\nhttps://www.rfc-editor.org/rfc/rfc5285#section-4.2","returns":{"types":[[["Buffer"]]],"description":""},"meta":{"line":251,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"createPayloadExtension","description":"Creates a one-byte extension header & a single extension of type playout-delay","see":["https://docs.discord.food/topics/voice-connections#sending-and-receiving-voice\nDiscord expects a playout delay RTP extension header on every video packet.","https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/playout-delay"],"returns":{"types":[[["Buffer"]]],"description":"playout-delay extension "},"meta":{"line":273,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"events":[{"name":"error","description":"Emitted when the dispatcher encounters an error.","meta":{"line":54,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"start","description":"Emitted once the stream has started to play.","meta":{"line":99,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"debug","description":"Emitted whenever the dispatcher has debug information.","params":[{"name":"info","description":"The debug info","type":[[["string"]]]}],"meta":{"line":396,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"meta":{"line":22,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"VideoDispatcher","description":"The class that sends video packet data to the voice connection.\n```js\n// Obtained using:\nclient.voice.joinChannel(channel).then(connection => {\n // You can play a file or a stream here:\n const dispatcher = connection.playVideo('/home/hydrabolt/video.mp4', { fps: 60, preset: 'ultrafast' });\n});\n```","extends":[[["BaseDispatcher"]]],"props":[{"name":"fps","description":"Video FPS","type":[[["number"]]],"meta":{"line":23,"file":"VideoDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"player","description":"The Player that controls this dispatcher","type":[[["MediaPlayer"]]],"meta":{"line":32,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pausedSince","description":"The time that the stream was paused at (null if not paused)","nullable":true,"type":[[["number"]]],"meta":{"line":43,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"paused","description":"Whether or not playback is paused","readonly":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pausedTime","description":"Total time that this dispatcher has been paused in milliseconds","readonly":true,"type":[[["number"]]],"meta":{"line":181,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"totalStreamTime","description":"The time (in milliseconds) that the dispatcher has been playing audio for, taking into account skips and pauses","readonly":true,"type":[[["number"]]],"meta":{"line":211,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"methods":[{"name":"getTypeDispatcher","description":"Get the type of the dispatcher","returns":[[["video","'"]]],"meta":{"line":40,"file":"VideoDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"setFPSSource","description":"Set FPS","params":[{"name":"value","description":"fps","type":[[["number"]]]}],"meta":{"line":59,"file":"VideoDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"pause","description":"Pauses playback","inherits":"BaseDispatcher#pause","inherited":true,"params":[{"name":"silence","description":"Whether to play silence while paused to prevent audio glitches","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":149,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"resume","description":"Resumes playback","inherits":"BaseDispatcher#resume","inherited":true,"meta":{"line":188,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"createHeaderExtension","description":"Creates a one-byte extension header\nhttps://www.rfc-editor.org/rfc/rfc5285#section-4.2","inherits":"BaseDispatcher#createHeaderExtension","inherited":true,"returns":{"types":[[["Buffer"]]],"description":""},"meta":{"line":251,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"createPayloadExtension","description":"Creates a one-byte extension header & a single extension of type playout-delay","see":["https://docs.discord.food/topics/voice-connections#sending-and-receiving-voice\nDiscord expects a playout delay RTP extension header on every video packet.","https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/playout-delay"],"inherits":"BaseDispatcher#createPayloadExtension","inherited":true,"returns":{"types":[[["Buffer"]]],"description":"playout-delay extension "},"meta":{"line":273,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"events":[{"name":"videoStatus","description":"Emitted when the dispatcher starts/stops video.","params":[{"name":"value","description":"Whether or not the dispatcher is enable video","type":[[["boolean"]]]}],"meta":{"line":438,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"streamStatus","description":"Emitted when the dispatcher starts/stops video.","params":[{"name":"isPaused","description":"Whether or not the dispatcher is pause video","type":[[["boolean"]]]}],"meta":{"line":450,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"error","description":"Emitted when the dispatcher encounters an error.","meta":{"line":54,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"start","description":"Emitted once the stream has started to play.","meta":{"line":99,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"debug","description":"Emitted whenever the dispatcher has debug information.","params":[{"name":"info","description":"The debug info","type":[[["string"]]]}],"meta":{"line":396,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}}],"meta":{"line":16,"file":"VideoDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"VoiceConnectionUDPClient","description":"Represents a UDP client for a Voice Connection.","extends":[[["EventEmitter"]]],"access":"private","props":[{"name":"voiceConnection","description":"The voice connection that this UDP client serves","type":[[["VoiceConnection"]]],"meta":{"line":24,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}},{"name":"socket","description":"The UDP socket","nullable":true,"type":[[["Socket"]]],"meta":{"line":30,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}},{"name":"discordAddress","description":"The address of the Discord voice server","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}},{"name":"localAddress","description":"The local IP address","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}},{"name":"localPort","description":"The local port","nullable":true,"type":[[["string"]]],"meta":{"line":48,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}},{"name":"discordPort","description":"The port of the Discord voice server","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}}],"methods":[{"name":"send","description":"Send a packet to the UDP client.","params":[{"name":"packet","description":"The packet to send","type":[[["Object"]]]}],"returns":[[["Promise","<"],["Object",">"]]],"meta":{"line":79,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}}],"meta":{"line":16,"file":"VoiceUDPClient.js","path":"src/client/voice/networking"}},{"name":"VoiceWebSocket","description":"Represents a Voice Connection's WebSocket.","extends":[[["EventEmitter"]]],"access":"private","props":[{"name":"connection","description":"The Voice Connection that this WebSocket serves","type":[[["VoiceConnection"]]],"meta":{"line":21,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"attempts","description":"How many connection attempts have been made","type":[[["number"]]],"meta":{"line":27,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"client","description":"The client of this voice WebSocket","readonly":true,"type":[[["Client"]]],"meta":{"line":40,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"ws","description":"The actual WebSocket used to connect to the Voice WebSocket Server.","type":[[["WebSocket"]]],"meta":{"line":80,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}}],"methods":[{"name":"reset","description":"Resets the current WebSocket.","meta":{"line":53,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"connect","description":"Starts connecting to the Voice WebSocket Server.","meta":{"line":65,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"send","description":"Sends data to the WebSocket if it is open.","params":[{"name":"data","description":"The data to send to the WebSocket","type":[[["string"]]]}],"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":93,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"sendPacket","description":"JSON.stringify's a packet and then sends it to the WebSocket Server.","params":[{"name":"packet","description":"The packet to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":109,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"onOpen","description":"Called whenever the WebSocket opens.","meta":{"line":117,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"onMessage","description":"Called whenever a message is received from the WebSocket.","params":[{"name":"event","description":"The message event that was received","type":[[["MessageEvent"]]]}],"returns":[[["void"]]],"meta":{"line":139,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"onClose","description":"Called whenever the connection to the WebSocket server is lost.","params":[{"name":"event","description":"The WebSocket close event","type":[[["CloseEvent"]]]}],"meta":{"line":151,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"onError","description":"Called whenever an error occurs with the WebSocket.","params":[{"name":"error","description":"The error that occurred","type":[[["Error"]]]}],"meta":{"line":160,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"onPacket","description":"Called whenever a valid packet is received from the WebSocket.","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":169,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"setHeartbeat","description":"Sets an interval at which to send a heartbeat packet to the WebSocket.","params":[{"name":"interval","description":"The interval at which to send a heartbeat packet","type":[[["number"]]]}],"meta":{"line":240,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"clearHeartbeat","description":"Clears a heartbeat interval, if one exists.","meta":{"line":260,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"sendHeartbeat","description":"Sends a heartbeat packet.","meta":{"line":272,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}}],"events":[{"name":"ready","description":"Emitted once the voice WebSocket receives the ready packet.","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":177,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"sessionDescription","description":"Emitted once the Voice Websocket receives a description of this voice session.","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":188,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"startSpeaking","description":"Emitted whenever a speaking packet is received.","params":[{"name":"data","type":[[["Object"]]]}],"meta":{"line":210,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"startStreaming","description":"Emitted whenever a streaming packet is received.","params":[{"name":"data","type":[[["Object"]]]}],"meta":{"line":218,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"unknownPacket","description":"Emitted when an unhandled packet is received.","params":[{"name":"packet","type":[[["Object"]]]}],"meta":{"line":226,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"warn","description":"Emitted whenever the voice WebSocket encounters a non-fatal error.","params":[{"name":"warn","description":"The warning","type":[[["string"]]]}],"meta":{"line":246,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}}],"meta":{"line":14,"file":"VoiceWebSocket.js","path":"src/client/voice/networking"}},{"name":"MediaPlayer","description":"Player for a Voice Connection.","extends":[[["EventEmitter"]]],"access":"private","props":[{"name":"voiceConnection","description":"The voice connection that the player serves","type":[[["VoiceConnection"]]],"meta":{"line":94,"file":"MediaPlayer.js","path":"src/client/voice/player"}}],"methods":[{"name":"createVideoDispatcher","description":"Create","access":"private","params":[{"name":"options","description":"any","type":[[["Object"]]]},{"name":"streams","description":"any","type":[[["Object"]]]}],"returns":[[["VideoDispatcher"]]],"meta":{"line":293,"file":"MediaPlayer.js","path":"src/client/voice/player"}}],"meta":{"line":83,"file":"MediaPlayer.js","path":"src/client/voice/player"}},{"name":"VoiceReceiver","description":"Receives audio packets from a voice connection.","methods":[{"name":"createStream","description":"Creates a new audio receiving stream. If a stream already exists for a user, then that stream will be returned\nrather than generating a new one.","params":[{"name":"user","description":"The user to start listening to.","type":[[["UserResolvable"]]]},{"name":"options","description":"Options.","type":[[["ReceiveStreamOptions"]]]}],"returns":[[["ReadableStream"]]],"meta":{"line":48,"file":"Receiver.js","path":"src/client/voice/receiver"}},{"name":"createVideoStream","description":"Creates a new video receiving stream. If a stream already exists for a user, then that stream will be returned\nrather than generating a new one.\nProof of concept - Requires a very good internet connection","params":[{"name":"user","description":"The user to start listening to.","type":[[["UserResolvable"]]]},{"name":"output","description":"Output stream or file path to write the video stream to.","type":[[["WritableStream"]],[["string"]]]}],"returns":{"types":[[["Recorder"]]],"description":"The video stream for the specified user."},"meta":{"line":81,"file":"Receiver.js","path":"src/client/voice/receiver"}}],"events":[{"name":"debug","description":"Emitted whenever there is a warning","params":[{"name":"error","description":"The error or message to debug","type":[[["Error"]],[["string"]]]}],"meta":{"line":21,"file":"Receiver.js","path":"src/client/voice/receiver"}}],"meta":{"line":16,"file":"Receiver.js","path":"src/client/voice/receiver"}},{"name":"Recorder","description":"Represents a FFmpeg handler","extends":[[["EventEmitter"]]],"props":[{"name":"userId","description":"The user ID","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Recorder.js","path":"src/client/voice/receiver"}},{"name":"output","description":"The output of the stream","type":[[["string"]],[["Readable"]]],"meta":{"line":49,"file":"Recorder.js","path":"src/client/voice/receiver"}},{"name":"ready","description":"The FFmpeg process is ready or not","type":[[["boolean"]]],"meta":{"line":55,"file":"Recorder.js","path":"src/client/voice/receiver"}},{"name":"stream","description":"The FFmpeg process","type":[[["ChildProcessWithoutNullStreams"]]],"meta":{"line":109,"file":"Recorder.js","path":"src/client/voice/receiver"}}],"methods":[{"name":"feed","description":"Send a payload to FFmpeg via UDP","params":[{"name":"payload","description":"The payload","type":[[["RtpPacket"]],[["string"]],[["Buffer"]]]},{"name":"callback","description":"Callback","type":[["*"]]}],"meta":{"line":123,"file":"Recorder.js","path":"src/client/voice/receiver"}}],"meta":{"line":19,"file":"Recorder.js","path":"src/client/voice/receiver"}},{"name":"PlayInterface","description":"An interface class to allow you to play audio over VoiceConnections.","methods":[{"name":"playAudio","description":"Play an audio resource.","examples":["// Play a local audio file\nconnection.playAudio('/home/hydrabolt/audio.mp3', { volume: 0.5 });","// Play a ReadableStream\nconnection.playAudio(ytdl('https://www.youtube.com/watch?v=ZlAU_w7-Xp8', { quality: 'highestaudio' }));","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playAudio('http://www.sample-videos.com/audio/mp3/wave.mp3');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["StreamOptions"]]]}],"returns":[[["AudioDispatcher"]]],"meta":{"line":57,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"playVideo","description":"Play a video resource.","examples":["// Play a local video file\nconnection.playVideo('/home/hydrabolt/video.mp4');","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playVideo('http://www.sample-videos.com/video/mp4/wave.mp4');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["VideoOptions"]]]}],"returns":[[["VideoDispatcher"]]],"meta":{"line":108,"file":"PlayInterface.js","path":"src/client/voice/util"}}],"meta":{"line":37,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"VolumeInterface","description":"An interface class for volume transformation.","extends":[[["EventEmitter"]]],"props":[{"name":"volumeEditable","description":"Whether or not the volume of this stream is editable","readonly":true,"type":[[["boolean"]]],"meta":{"line":21,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"volume","description":"The current volume of the stream","readonly":true,"type":[[["number"]]],"meta":{"line":30,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"volumeDecibels","description":"The current volume of the stream in decibels","readonly":true,"type":[[["number"]]],"meta":{"line":39,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"volumeLogarithmic","description":"The current volume of the stream from a logarithmic scale","readonly":true,"type":[[["number"]]],"meta":{"line":48,"file":"VolumeInterface.js","path":"src/client/voice/util"}}],"methods":[{"name":"setVolume","description":"Sets the volume relative to the input stream - i.e. 1 is normal, 0.5 is half, 2 is double.","params":[{"name":"volume","description":"The volume that you want to set","type":[[["number"]]]}],"meta":{"line":70,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"setVolumeDecibels","description":"Sets the volume in decibels.","params":[{"name":"db","description":"The decibels","type":[[["number"]]]}],"meta":{"line":85,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"setVolumeLogarithmic","description":"Sets the volume so that a perceived value of 0.5 is half the perceived volume etc.","params":[{"name":"value","description":"The value for the volume","type":[[["number"]]]}],"meta":{"line":93,"file":"VolumeInterface.js","path":"src/client/voice/util"}}],"events":[{"name":"volumeChange","description":"Emitted when the volume of this interface changes.","params":[{"name":"oldVolume","description":"The old volume of this interface","type":[[["number"]]]},{"name":"newVolume","description":"The new volume of this interface","type":[[["number"]]]}],"meta":{"line":71,"file":"VolumeInterface.js","path":"src/client/voice/util"}}],"meta":{"line":10,"file":"VolumeInterface.js","path":"src/client/voice/util"}},{"name":"VoiceConnection","description":"Represents a connection to a guild's voice server.\n```js\n// Obtained using:\nclient.voice.joinChannel(channel)\n .then(connection => {\n\n });\n```","extends":[[["EventEmitter"]]],"implements":[[["PlayInterface"]]],"props":[{"name":"voiceManager","description":"The voice manager that instantiated this connection","type":[[["ClientVoiceManager"]]],"meta":{"line":56,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"channel","description":"The voice channel this connection is currently serving","type":[[["VoiceChannel"]]],"meta":{"line":62,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"status","description":"The current status of the voice connection","type":[[["VoiceStatus"]]],"meta":{"line":68,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"speaking","description":"Our current speaking state","type":[[["Readonly","<"],["Speaking",">"]]],"meta":{"line":74,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoStatus","description":"Our current video state","type":[[["boolean"]],[["null"]]],"meta":{"line":80,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authentication","description":"The authentication data needed to connect to the voice server","access":"private","type":[[["Object"]]],"meta":{"line":87,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"player","description":"The audio player for this voice connection","type":[[["MediaPlayer"]]],"meta":{"line":93,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"ssrcMap","description":"Map SSRC values to user IDs","access":"private","type":[[["Map","<"],["number",", {"],["userId",": "],["Snowflake",", "],["speaking",": "],["boolean",", "],["hasVideo",": "],["boolean","}>"]]],"meta":{"line":120,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"_speaking","description":"Tracks which users are talking","access":"private","type":[[["Map","<"],["Snowflake",", "],["Readonly","<"],["Speaking",">>"]]],"meta":{"line":127,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sockets","description":"Object that wraps contains the `ws` and `udp` sockets of this voice connection","access":"private","type":[[["Object"]]],"meta":{"line":134,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"receiver","description":"The voice receiver of this connection","type":[[["VoiceReceiver"]]],"meta":{"line":140,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoCodec","description":"Video codec (encoded) of this connection","type":[[["VideoCodec"]]],"meta":{"line":156,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamConnection","description":"Create a stream connection ?","nullable":true,"type":[[["StreamConnection"]]],"meta":{"line":162,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamWatchConnection","description":"All stream watch connection","type":[[["Collection","<"],["Snowflake",", "],["StreamConnectionReadonly",">"]]],"meta":{"line":168,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"client","description":"The client that instantiated this connection","readonly":true,"type":[[["Client"]]],"meta":{"line":176,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"dispatcher","description":"The current audio dispatcher (if any)","readonly":true,"nullable":true,"type":[[["AudioDispatcher"]]],"meta":{"line":185,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoDispatcher","description":"The current video dispatcher (if any)","readonly":true,"nullable":true,"type":[[["VideoDispatcher"]]],"meta":{"line":194,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"voice","description":"The voice state of this connection","nullable":true,"type":[[["VoiceState"]]],"meta":{"line":290,"file":"VoiceConnection.js","path":"src/client/voice"}}],"methods":[{"name":"setSpeaking","description":"Sets whether the voice connection should display as \"speaking\", \"soundshare\" or \"none\".","params":[{"name":"value","description":"The new speaking state","type":[[["BitFieldResolvable"]]]}],"meta":{"line":202,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setVideoCodec","description":"Set video codec before select protocol","params":[{"name":"value","description":"Codec","type":[[["VideoCodec"]]]}],"returns":[[["VoiceConnection"]]],"meta":{"line":225,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setVideoStatus","description":"Sets video status","params":[{"name":"value","description":"Video on or off","type":[[["boolean"]]]}],"meta":{"line":235,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sendVoiceStateUpdate","description":"Sends a request to the main gateway to join a voice channel.","access":"private","params":[{"name":"options","description":"The options to provide","optional":true,"type":[[["Object"]]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":300,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setTokenAndEndpoint","description":"Set the token and endpoint required to connect to the voice servers.","access":"private","params":[{"name":"token","description":"The voice token","type":[[["string"]]]},{"name":"endpoint","description":"The voice endpoint","type":[[["string"]]]}],"returns":[[["void"]]],"meta":{"line":328,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setSessionId","description":"Sets the Session ID for the connection.","access":"private","params":[{"name":"sessionId","description":"The voice session ID","type":[[["string"]]]}],"meta":{"line":362,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"checkAuthenticated","description":"Checks whether the voice connection is authenticated.","access":"private","meta":{"line":387,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticateFailed","description":"Invoked when we fail to initiate a voice connection.","access":"private","params":[{"name":"reason","description":"The reason for failure","type":[[["string"]]]}],"meta":{"line":406,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"updateChannel","description":"Move to a different voice channel in the same guild.","access":"private","params":[{"name":"channel","description":"The channel to move to","type":[[["VoiceChannel"]]]}],"meta":{"line":432,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticate","description":"Attempts to authenticate to the voice server.","access":"private","params":[{"name":"options","description":"Join config","type":[[["Object"]]]}],"meta":{"line":442,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"reconnect","description":"Attempts to reconnect to the voice server (typically after a region change).","access":"private","params":[{"name":"token","description":"The voice token","type":[[["string"]]]},{"name":"endpoint","description":"The voice endpoint","type":[[["string"]]]}],"meta":{"line":453,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"disconnect","description":"Disconnects the voice connection, causing a disconnect and closing event to be emitted.","meta":{"line":470,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"_disconnect","description":"Internally disconnects (doesn't send disconnect packet).","access":"private","meta":{"line":486,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"cleanup","description":"Cleans up after disconnect.","access":"private","meta":{"line":500,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"connect","description":"Connect the voice connection.","access":"private","meta":{"line":525,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onReady","description":"Invoked when the voice websocket is ready.","access":"private","params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":557,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onSessionDescription","description":"Invoked when a session description is received.","access":"private","params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":574,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onSpeaking","description":"Invoked when a speaking event is received.","access":"private","params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":635,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"createStreamConnection","description":"Create new connection to screenshare stream","returns":[[["Promise","<"],["StreamConnection",">"]]],"meta":{"line":675,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"joinStreamConnection","description":"Watch user stream","params":[{"name":"user","description":"Discord user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["StreamConnectionReadonly",">"]]],"meta":{"line":779,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"playAudio","description":"Play an audio resource.","implements":["PlayInterface#playAudio"],"examples":["// Play a local audio file\nconnection.playAudio('/home/hydrabolt/audio.mp3', { volume: 0.5 });","// Play a ReadableStream\nconnection.playAudio(ytdl('https://www.youtube.com/watch?v=ZlAU_w7-Xp8', { quality: 'highestaudio' }));","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playAudio('http://www.sample-videos.com/audio/mp3/wave.mp3');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["StreamOptions"]]]}],"returns":[[["AudioDispatcher"]]],"meta":{"line":57,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"playVideo","description":"Play a video resource.","implements":["PlayInterface#playVideo"],"examples":["// Play a local video file\nconnection.playVideo('/home/hydrabolt/video.mp4');","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playVideo('http://www.sample-videos.com/video/mp4/wave.mp4');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["VideoOptions"]]]}],"returns":[[["VideoDispatcher"]]],"meta":{"line":108,"file":"PlayInterface.js","path":"src/client/voice/util"}}],"events":[{"name":"debug","description":"Debug info from the connection.","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":96,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"warn","description":"Warning info from the connection.","params":[{"name":"warning","description":"The warning","type":[[["string"]],[["Error"]]]}],"meta":{"line":105,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"newSession","description":"Emitted when a new session ID is received.","meta":{"line":374,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticated","description":"Emitted when we successfully initiate a voice connection.","meta":{"line":392,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"failed","description":"Emitted when we fail to initiate a voice connection.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]}],"meta":{"line":410,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"error","description":"Emitted whenever the connection encounters an error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]}],"meta":{"line":417,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"reconnecting","description":"Emitted when the voice connection is reconnecting (typically after a region change).","meta":{"line":459,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"disconnect","description":"Emitted when the voice connection disconnects.","meta":{"line":489,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"ready","description":"Emitted once the connection is ready, when a promise to join a voice channel resolves,\nthe connection will already be ready.","meta":{"line":580,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"speaking","description":"Emitted whenever a user changes speaking state.","params":[{"name":"user","description":"The user that has changed speaking state","type":[[["User"]]]},{"name":"speaking","description":"The speaking state of the user","type":[[["Readonly","<"],["Speaking",">"]]]}],"meta":{"line":641,"file":"VoiceConnection.js","path":"src/client/voice"}}],"meta":{"line":48,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"StreamConnection","description":"Represents a connection to a guild's voice server.\n```js\n// Obtained using:\nclient.voice.joinChannel(channel)\n .then(connection => connection.createStreamConnection())\n .then(connection => {\n\n });\n```","extends":[[["VoiceConnection"]]],"construct":{"name":"StreamConnection","params":[{"name":"voiceManager","description":"Voice manager","type":[[["ClientVoiceManager"]]]},{"name":"channel","description":"any channel (joinable)","type":[[["Channel"]]]},{"name":"voiceConnection","description":"parent","type":[[["VoiceConnection"]]]}]},"props":[{"name":"voiceConnection","description":"Current voice connection","type":[[["VoiceConnection"]]],"meta":{"line":930,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"serverId","description":"Server Id","type":[[["string"]],[["null"]]],"meta":{"line":941,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"isPaused","description":"Stream state","type":[[["boolean"]],[["null"]]],"meta":{"line":947,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"viewerIds","description":"Viewer IDs","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":953,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"region","description":"Voice region name","type":[[["string"]],[["null"]]],"meta":{"line":959,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamKey","description":"Current stream key","type":[[["string"]]],"meta":{"line":1081,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"voiceManager","description":"The voice manager that instantiated this connection","type":[[["ClientVoiceManager"]]],"meta":{"line":56,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"channel","description":"The voice channel this connection is currently serving","type":[[["VoiceChannel"]]],"meta":{"line":62,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"status","description":"The current status of the voice connection","type":[[["VoiceStatus"]]],"meta":{"line":68,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"speaking","description":"Our current speaking state","type":[[["Readonly","<"],["Speaking",">"]]],"meta":{"line":74,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoStatus","description":"Our current video state","type":[[["boolean"]],[["null"]]],"meta":{"line":80,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authentication","description":"The authentication data needed to connect to the voice server","access":"private","type":[[["Object"]]],"meta":{"line":87,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"player","description":"The audio player for this voice connection","type":[[["MediaPlayer"]]],"meta":{"line":93,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"ssrcMap","description":"Map SSRC values to user IDs","access":"private","type":[[["Map","<"],["number",", {"],["userId",": "],["Snowflake",", "],["speaking",": "],["boolean",", "],["hasVideo",": "],["boolean","}>"]]],"meta":{"line":120,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"_speaking","description":"Tracks which users are talking","access":"private","type":[[["Map","<"],["Snowflake",", "],["Readonly","<"],["Speaking",">>"]]],"meta":{"line":127,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sockets","description":"Object that wraps contains the `ws` and `udp` sockets of this voice connection","access":"private","type":[[["Object"]]],"meta":{"line":134,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"receiver","description":"The voice receiver of this connection","type":[[["VoiceReceiver"]]],"meta":{"line":140,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoCodec","description":"Video codec (encoded) of this connection","type":[[["VideoCodec"]]],"meta":{"line":156,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamConnection","description":"Create a stream connection ?","nullable":true,"type":[[["StreamConnection"]]],"meta":{"line":162,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamWatchConnection","description":"All stream watch connection","type":[[["Collection","<"],["Snowflake",", "],["StreamConnectionReadonly",">"]]],"meta":{"line":168,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"client","description":"The client that instantiated this connection","readonly":true,"type":[[["Client"]]],"meta":{"line":176,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"dispatcher","description":"The current audio dispatcher (if any)","readonly":true,"nullable":true,"type":[[["AudioDispatcher"]]],"meta":{"line":185,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoDispatcher","description":"The current video dispatcher (if any)","readonly":true,"nullable":true,"type":[[["VideoDispatcher"]]],"meta":{"line":194,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"voice","description":"The voice state of this connection","nullable":true,"type":[[["VoiceState"]]],"meta":{"line":290,"file":"VoiceConnection.js","path":"src/client/voice"}}],"methods":[{"name":"sendSignalScreenshare","description":"Create new stream connection (WS packet)","returns":[[["void"]]],"meta":{"line":1000,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sendScreenshareState","description":"Send screenshare state... (WS)","params":[{"name":"isPaused","description":"screenshare paused ?","default":false,"type":[[["boolean"]]]}],"returns":[[["void"]]],"meta":{"line":1019,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sendStopScreenshare","description":"Stop screenshare, delete this connection (WS)","access":"private","returns":[[["void"]]],"meta":{"line":1049,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setSpeaking","description":"Sets whether the voice connection should display as \"speaking\", \"soundshare\" or \"none\".","inherits":"VoiceConnection#setSpeaking","inherited":true,"params":[{"name":"value","description":"The new speaking state","type":[[["BitFieldResolvable"]]]}],"meta":{"line":202,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setVideoCodec","description":"Set video codec before select protocol","inherits":"VoiceConnection#setVideoCodec","inherited":true,"params":[{"name":"value","description":"Codec","type":[[["VideoCodec"]]]}],"returns":[[["VoiceConnection"]]],"meta":{"line":225,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setVideoStatus","description":"Sets video status","inherits":"VoiceConnection#setVideoStatus","inherited":true,"params":[{"name":"value","description":"Video on or off","type":[[["boolean"]]]}],"meta":{"line":235,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sendVoiceStateUpdate","description":"Sends a request to the main gateway to join a voice channel.","access":"private","inherits":"VoiceConnection#sendVoiceStateUpdate","inherited":true,"params":[{"name":"options","description":"The options to provide","optional":true,"type":[[["Object"]]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":300,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setTokenAndEndpoint","description":"Set the token and endpoint required to connect to the voice servers.","access":"private","inherits":"VoiceConnection#setTokenAndEndpoint","inherited":true,"params":[{"name":"token","description":"The voice token","type":[[["string"]]]},{"name":"endpoint","description":"The voice endpoint","type":[[["string"]]]}],"returns":[[["void"]]],"meta":{"line":328,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setSessionId","description":"Sets the Session ID for the connection.","access":"private","inherits":"VoiceConnection#setSessionId","inherited":true,"params":[{"name":"sessionId","description":"The voice session ID","type":[[["string"]]]}],"meta":{"line":362,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"checkAuthenticated","description":"Checks whether the voice connection is authenticated.","access":"private","inherits":"VoiceConnection#checkAuthenticated","inherited":true,"meta":{"line":387,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticateFailed","description":"Invoked when we fail to initiate a voice connection.","access":"private","inherits":"VoiceConnection#authenticateFailed","inherited":true,"params":[{"name":"reason","description":"The reason for failure","type":[[["string"]]]}],"meta":{"line":406,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"updateChannel","description":"Move to a different voice channel in the same guild.","access":"private","inherits":"VoiceConnection#updateChannel","inherited":true,"params":[{"name":"channel","description":"The channel to move to","type":[[["VoiceChannel"]]]}],"meta":{"line":432,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticate","description":"Attempts to authenticate to the voice server.","access":"private","inherits":"VoiceConnection#authenticate","inherited":true,"params":[{"name":"options","description":"Join config","type":[[["Object"]]]}],"meta":{"line":442,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"reconnect","description":"Attempts to reconnect to the voice server (typically after a region change).","access":"private","inherits":"VoiceConnection#reconnect","inherited":true,"params":[{"name":"token","description":"The voice token","type":[[["string"]]]},{"name":"endpoint","description":"The voice endpoint","type":[[["string"]]]}],"meta":{"line":453,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"disconnect","description":"Disconnects the voice connection, causing a disconnect and closing event to be emitted.","inherits":"VoiceConnection#disconnect","inherited":true,"meta":{"line":470,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"_disconnect","description":"Internally disconnects (doesn't send disconnect packet).","access":"private","inherits":"VoiceConnection#_disconnect","inherited":true,"meta":{"line":486,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"cleanup","description":"Cleans up after disconnect.","access":"private","inherits":"VoiceConnection#cleanup","inherited":true,"meta":{"line":500,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"connect","description":"Connect the voice connection.","access":"private","inherits":"VoiceConnection#connect","inherited":true,"meta":{"line":525,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onReady","description":"Invoked when the voice websocket is ready.","access":"private","inherits":"VoiceConnection#onReady","inherited":true,"params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":557,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onSessionDescription","description":"Invoked when a session description is received.","access":"private","inherits":"VoiceConnection#onSessionDescription","inherited":true,"params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":574,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onSpeaking","description":"Invoked when a speaking event is received.","access":"private","inherits":"VoiceConnection#onSpeaking","inherited":true,"params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":635,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"createStreamConnection","description":"Create new connection to screenshare stream","inherits":"VoiceConnection#createStreamConnection","inherited":true,"returns":[[["Promise","<"],["StreamConnection",">"]]],"meta":{"line":675,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"joinStreamConnection","description":"Watch user stream","inherits":"VoiceConnection#joinStreamConnection","inherited":true,"params":[{"name":"user","description":"Discord user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["StreamConnectionReadonly",">"]]],"meta":{"line":779,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"playAudio","description":"Play an audio resource.","inherits":"VoiceConnection#playAudio","inherited":true,"implements":["PlayInterface#playAudio"],"examples":["// Play a local audio file\nconnection.playAudio('/home/hydrabolt/audio.mp3', { volume: 0.5 });","// Play a ReadableStream\nconnection.playAudio(ytdl('https://www.youtube.com/watch?v=ZlAU_w7-Xp8', { quality: 'highestaudio' }));","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playAudio('http://www.sample-videos.com/audio/mp3/wave.mp3');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["StreamOptions"]]]}],"returns":[[["AudioDispatcher"]]],"meta":{"line":57,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"playVideo","description":"Play a video resource.","inherits":"VoiceConnection#playVideo","inherited":true,"implements":["PlayInterface#playVideo"],"examples":["// Play a local video file\nconnection.playVideo('/home/hydrabolt/video.mp4');","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playVideo('http://www.sample-videos.com/video/mp4/wave.mp4');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["VideoOptions"]]]}],"returns":[[["VideoDispatcher"]]],"meta":{"line":108,"file":"PlayInterface.js","path":"src/client/voice/util"}}],"events":[{"name":"debug","description":"Debug info from the connection.","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":96,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"warn","description":"Warning info from the connection.","params":[{"name":"warning","description":"The warning","type":[[["string"]],[["Error"]]]}],"meta":{"line":105,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"newSession","description":"Emitted when a new session ID is received.","meta":{"line":374,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticated","description":"Emitted when we successfully initiate a voice connection.","meta":{"line":392,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"failed","description":"Emitted when we fail to initiate a voice connection.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]}],"meta":{"line":410,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"error","description":"Emitted whenever the connection encounters an error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]}],"meta":{"line":417,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"reconnecting","description":"Emitted when the voice connection is reconnecting (typically after a region change).","meta":{"line":459,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"disconnect","description":"Emitted when the voice connection disconnects.","meta":{"line":489,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"ready","description":"Emitted once the connection is ready, when a promise to join a voice channel resolves,\nthe connection will already be ready.","meta":{"line":580,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"speaking","description":"Emitted whenever a user changes speaking state.","params":[{"name":"user","description":"The user that has changed speaking state","type":[[["User"]]]},{"name":"speaking","description":"The speaking state of the user","type":[[["Readonly","<"],["Speaking",">"]]]}],"meta":{"line":641,"file":"VoiceConnection.js","path":"src/client/voice"}}],"meta":{"line":916,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"StreamConnectionReadonly","description":"Represents a connection to a guild's voice server.\n```js\n// Obtained using:\nclient.voice.joinChannel(channel)\n .then(connection => connection.createStreamConnection())\n .then(connection => {\n\n });\n```","extends":[[["VoiceConnection"]]],"construct":{"name":"StreamConnectionReadonly","params":[{"name":"voiceManager","description":"Voice manager","type":[[["ClientVoiceManager"]]]},{"name":"channel","description":"any channel (joinable)","type":[[["Channel"]]]},{"name":"voiceConnection","description":"parent","type":[[["VoiceConnection"]]]},{"name":"userId","description":"User ID","type":[[["Snowflake"]]]}]},"props":[{"name":"voiceConnection","description":"Current voice connection","type":[[["VoiceConnection"]]],"meta":{"line":1115,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"userId","description":"User ID (who started the stream)","type":[[["Snowflake"]]],"meta":{"line":1121,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"serverId","description":"Server Id","type":[[["string"]],[["null"]]],"meta":{"line":1132,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"isPaused","description":"Stream state","type":[[["boolean"]]],"meta":{"line":1138,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"viewerIds","description":"Viewer IDs","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":1144,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"region","description":"Voice region name","type":[[["string"]],[["null"]]],"meta":{"line":1150,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamKey","description":"Current stream key","type":[[["string"]]],"meta":{"line":1239,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"voiceManager","description":"The voice manager that instantiated this connection","type":[[["ClientVoiceManager"]]],"meta":{"line":56,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"channel","description":"The voice channel this connection is currently serving","type":[[["VoiceChannel"]]],"meta":{"line":62,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"status","description":"The current status of the voice connection","type":[[["VoiceStatus"]]],"meta":{"line":68,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"speaking","description":"Our current speaking state","type":[[["Readonly","<"],["Speaking",">"]]],"meta":{"line":74,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoStatus","description":"Our current video state","type":[[["boolean"]],[["null"]]],"meta":{"line":80,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authentication","description":"The authentication data needed to connect to the voice server","access":"private","type":[[["Object"]]],"meta":{"line":87,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"player","description":"The audio player for this voice connection","type":[[["MediaPlayer"]]],"meta":{"line":93,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"ssrcMap","description":"Map SSRC values to user IDs","access":"private","type":[[["Map","<"],["number",", {"],["userId",": "],["Snowflake",", "],["speaking",": "],["boolean",", "],["hasVideo",": "],["boolean","}>"]]],"meta":{"line":120,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"_speaking","description":"Tracks which users are talking","access":"private","type":[[["Map","<"],["Snowflake",", "],["Readonly","<"],["Speaking",">>"]]],"meta":{"line":127,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sockets","description":"Object that wraps contains the `ws` and `udp` sockets of this voice connection","access":"private","type":[[["Object"]]],"meta":{"line":134,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"receiver","description":"The voice receiver of this connection","type":[[["VoiceReceiver"]]],"meta":{"line":140,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoCodec","description":"Video codec (encoded) of this connection","type":[[["VideoCodec"]]],"meta":{"line":156,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamConnection","description":"Create a stream connection ?","nullable":true,"type":[[["StreamConnection"]]],"meta":{"line":162,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"streamWatchConnection","description":"All stream watch connection","type":[[["Collection","<"],["Snowflake",", "],["StreamConnectionReadonly",">"]]],"meta":{"line":168,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"client","description":"The client that instantiated this connection","readonly":true,"type":[[["Client"]]],"meta":{"line":176,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"dispatcher","description":"The current audio dispatcher (if any)","readonly":true,"nullable":true,"type":[[["AudioDispatcher"]]],"meta":{"line":185,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"videoDispatcher","description":"The current video dispatcher (if any)","readonly":true,"nullable":true,"type":[[["VideoDispatcher"]]],"meta":{"line":194,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"voice","description":"The voice state of this connection","nullable":true,"type":[[["VoiceState"]]],"meta":{"line":290,"file":"VoiceConnection.js","path":"src/client/voice"}}],"methods":[{"name":"sendSignalScreenshare","description":"Create new stream connection (WS packet)","returns":[[["void"]]],"meta":{"line":1191,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sendStopScreenshare","description":"Stop screenshare, delete this connection (WS)","access":"private","returns":[[["void"]]],"meta":{"line":1206,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setSpeaking","description":"Sets whether the voice connection should display as \"speaking\", \"soundshare\" or \"none\".","inherits":"VoiceConnection#setSpeaking","inherited":true,"params":[{"name":"value","description":"The new speaking state","type":[[["BitFieldResolvable"]]]}],"meta":{"line":202,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setVideoCodec","description":"Set video codec before select protocol","inherits":"VoiceConnection#setVideoCodec","inherited":true,"params":[{"name":"value","description":"Codec","type":[[["VideoCodec"]]]}],"returns":[[["VoiceConnection"]]],"meta":{"line":225,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setVideoStatus","description":"Sets video status","inherits":"VoiceConnection#setVideoStatus","inherited":true,"params":[{"name":"value","description":"Video on or off","type":[[["boolean"]]]}],"meta":{"line":235,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"sendVoiceStateUpdate","description":"Sends a request to the main gateway to join a voice channel.","access":"private","inherits":"VoiceConnection#sendVoiceStateUpdate","inherited":true,"params":[{"name":"options","description":"The options to provide","optional":true,"type":[[["Object"]]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":300,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setTokenAndEndpoint","description":"Set the token and endpoint required to connect to the voice servers.","access":"private","inherits":"VoiceConnection#setTokenAndEndpoint","inherited":true,"params":[{"name":"token","description":"The voice token","type":[[["string"]]]},{"name":"endpoint","description":"The voice endpoint","type":[[["string"]]]}],"returns":[[["void"]]],"meta":{"line":328,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"setSessionId","description":"Sets the Session ID for the connection.","access":"private","inherits":"VoiceConnection#setSessionId","inherited":true,"params":[{"name":"sessionId","description":"The voice session ID","type":[[["string"]]]}],"meta":{"line":362,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"checkAuthenticated","description":"Checks whether the voice connection is authenticated.","access":"private","inherits":"VoiceConnection#checkAuthenticated","inherited":true,"meta":{"line":387,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticateFailed","description":"Invoked when we fail to initiate a voice connection.","access":"private","inherits":"VoiceConnection#authenticateFailed","inherited":true,"params":[{"name":"reason","description":"The reason for failure","type":[[["string"]]]}],"meta":{"line":406,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"updateChannel","description":"Move to a different voice channel in the same guild.","access":"private","inherits":"VoiceConnection#updateChannel","inherited":true,"params":[{"name":"channel","description":"The channel to move to","type":[[["VoiceChannel"]]]}],"meta":{"line":432,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticate","description":"Attempts to authenticate to the voice server.","access":"private","inherits":"VoiceConnection#authenticate","inherited":true,"params":[{"name":"options","description":"Join config","type":[[["Object"]]]}],"meta":{"line":442,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"reconnect","description":"Attempts to reconnect to the voice server (typically after a region change).","access":"private","inherits":"VoiceConnection#reconnect","inherited":true,"params":[{"name":"token","description":"The voice token","type":[[["string"]]]},{"name":"endpoint","description":"The voice endpoint","type":[[["string"]]]}],"meta":{"line":453,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"disconnect","description":"Disconnects the voice connection, causing a disconnect and closing event to be emitted.","inherits":"VoiceConnection#disconnect","inherited":true,"meta":{"line":470,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"_disconnect","description":"Internally disconnects (doesn't send disconnect packet).","access":"private","inherits":"VoiceConnection#_disconnect","inherited":true,"meta":{"line":486,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"cleanup","description":"Cleans up after disconnect.","access":"private","inherits":"VoiceConnection#cleanup","inherited":true,"meta":{"line":500,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"connect","description":"Connect the voice connection.","access":"private","inherits":"VoiceConnection#connect","inherited":true,"meta":{"line":525,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onReady","description":"Invoked when the voice websocket is ready.","access":"private","inherits":"VoiceConnection#onReady","inherited":true,"params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":557,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onSessionDescription","description":"Invoked when a session description is received.","access":"private","inherits":"VoiceConnection#onSessionDescription","inherited":true,"params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":574,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"onSpeaking","description":"Invoked when a speaking event is received.","access":"private","inherits":"VoiceConnection#onSpeaking","inherited":true,"params":[{"name":"data","description":"The received data","type":[[["Object"]]]}],"meta":{"line":635,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"createStreamConnection","description":"Create new connection to screenshare stream","inherits":"VoiceConnection#createStreamConnection","inherited":true,"returns":[[["Promise","<"],["StreamConnection",">"]]],"meta":{"line":675,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"joinStreamConnection","description":"Watch user stream","inherits":"VoiceConnection#joinStreamConnection","inherited":true,"params":[{"name":"user","description":"Discord user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["StreamConnectionReadonly",">"]]],"meta":{"line":779,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"playAudio","description":"Play an audio resource.","inherits":"VoiceConnection#playAudio","inherited":true,"implements":["PlayInterface#playAudio"],"examples":["// Play a local audio file\nconnection.playAudio('/home/hydrabolt/audio.mp3', { volume: 0.5 });","// Play a ReadableStream\nconnection.playAudio(ytdl('https://www.youtube.com/watch?v=ZlAU_w7-Xp8', { quality: 'highestaudio' }));","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playAudio('http://www.sample-videos.com/audio/mp3/wave.mp3');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["StreamOptions"]]]}],"returns":[[["AudioDispatcher"]]],"meta":{"line":57,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"playVideo","description":"Play a video resource.","inherits":"VoiceConnection#playVideo","inherited":true,"implements":["PlayInterface#playVideo"],"examples":["// Play a local video file\nconnection.playVideo('/home/hydrabolt/video.mp4');","// Using different protocols: https://ffmpeg.org/ffmpeg-protocols.html\nconnection.playVideo('http://www.sample-videos.com/video/mp4/wave.mp4');"],"params":[{"name":"resource","description":"The resource to play.","type":[[["ReadableStream"]],[["string"]]]},{"name":"options","description":"The options to play.","optional":true,"type":[[["VideoOptions"]]]}],"returns":[[["VideoDispatcher"]]],"meta":{"line":108,"file":"PlayInterface.js","path":"src/client/voice/util"}}],"events":[{"name":"debug","description":"Debug info from the connection.","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":96,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"warn","description":"Warning info from the connection.","params":[{"name":"warning","description":"The warning","type":[[["string"]],[["Error"]]]}],"meta":{"line":105,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"newSession","description":"Emitted when a new session ID is received.","meta":{"line":374,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"authenticated","description":"Emitted when we successfully initiate a voice connection.","meta":{"line":392,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"failed","description":"Emitted when we fail to initiate a voice connection.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]}],"meta":{"line":410,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"error","description":"Emitted whenever the connection encounters an error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]}],"meta":{"line":417,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"reconnecting","description":"Emitted when the voice connection is reconnecting (typically after a region change).","meta":{"line":459,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"disconnect","description":"Emitted when the voice connection disconnects.","meta":{"line":489,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"ready","description":"Emitted once the connection is ready, when a promise to join a voice channel resolves,\nthe connection will already be ready.","meta":{"line":580,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"speaking","description":"Emitted whenever a user changes speaking state.","params":[{"name":"user","description":"The user that has changed speaking state","type":[[["User"]]]},{"name":"speaking","description":"The speaking state of the user","type":[[["Readonly","<"],["Speaking",">"]]]}],"meta":{"line":641,"file":"VoiceConnection.js","path":"src/client/voice"}}],"meta":{"line":1100,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"WebhookClient","description":"The webhook client.","extends":[[["BaseClient"]]],"implements":[[["Webhook"]]],"construct":{"name":"WebhookClient","params":[{"name":"data","description":"The data of the webhook","type":[[["WebhookClientData"]]]},{"name":"options","description":"Options for the client","optional":true,"type":[[["ClientOptions"]]]}]},"props":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":411,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":420,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":429,"file":"Webhook.js","path":"src/structures"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":25,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":32,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":41,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":191,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"implements":["Webhook#sendSlackMessage"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":235,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","implements":["Webhook#edit"],"params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":262,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":296,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":332,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","implements":["Webhook#delete"],"params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":372,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":382,"file":"Webhook.js","path":"src/structures"}},{"name":"destroy","description":"Destroys all assets used by the base client.","inherits":"BaseClient#destroy","inherited":true,"returns":[[["void"]]],"meta":{"line":49,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":57,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":68,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":82,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":138,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":189,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":221,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":298,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":12,"file":"WebhookClient.js","path":"src/client"}},{"name":"WebSocketManager","description":"The WebSocket manager for this client.\nThis class forwards raw dispatch events,\nread more about it here {@link https://discord.com/developers/docs/topics/gateway}","extends":[[["EventEmitter"]]],"props":[{"name":"client","description":"The client that instantiated this WebSocketManager","readonly":true,"type":[[["Client"]]],"meta":{"line":40,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"gateway","description":"The gateway this manager uses","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"totalShards","description":"The amount of shards this manager handles","access":"private","type":[[["number"]]],"meta":{"line":59,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shards","description":"A collection of all shards this manager handles","type":[[["Collection","<"],["number",", "],["WebSocketShard",">"]]],"meta":{"line":65,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardQueue","description":"An array of shards to be connected or that need to reconnect","access":"private","type":[[["Set","<"],["WebSocketShard",">"]]],"meta":{"line":67,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"packetQueue","description":"An array of queued events before this WebSocketManager became ready","access":"private","type":[[["Array","<"],["Object",">"]]],"meta":{"line":75,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of this WebSocketManager","type":[[["Status"]]],"meta":{"line":87,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroyed","description":"If this manager was destroyed. It will prevent shards from reconnecting","access":"private","type":[[["boolean"]]],"meta":{"line":94,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnecting","description":"If this manager is currently reconnecting one or multiple shards","access":"private","type":[[["boolean"]]],"meta":{"line":101,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ping","description":"The average ping of all WebSocketShards","readonly":true,"type":[[["number"]]],"meta":{"line":109,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug message.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]},{"name":"shard","description":"The shard that emitted this message, if any","optional":true,"nullable":true,"type":[[["WebSocketShard"]]]}],"meta":{"line":120,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects this manager to the gateway.","access":"private","async":true,"meta":{"line":128,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"createShards","description":"Handles the creation of a shard.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":169,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnect","description":"Handles reconnects for this manager.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":268,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"broadcast","description":"Broadcasts a packet to every shard this manager handles.","access":"private","params":[{"name":"packet","description":"The packet to send","type":[[["Object"]]]}],"meta":{"line":306,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this manager and all its shards.","access":"private","meta":{"line":314,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"handlePacket","description":"Processes a packet and queues it if this WebSocketManager is not ready.","access":"private","params":[{"name":"packet","description":"The packet to be handled","optional":true,"type":[[["Object"]]]},{"name":"shard","description":"The shard that will handle this packet","optional":true,"type":[[["WebSocketShard"]]]}],"returns":[[["boolean"]]],"meta":{"line":329,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"checkShardsReady","description":"Checks whether the client is ready to be marked as ready.","access":"private","meta":{"line":363,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"triggerClientReady","description":"Causes the client to be marked as ready and emits the ready event.","access":"private","meta":{"line":376,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"meta":{"line":36,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"WebSocketShard","description":"Represents a Shard's WebSocket connection","extends":[[["EventEmitter"]]],"props":[{"name":"manager","description":"The WebSocketManager of the shard","type":[[["WebSocketManager"]]],"meta":{"line":31,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"id","description":"The shard's id","type":[[["number"]]],"meta":{"line":37,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumeURL","description":"The resume URL for this shard","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of the shard","type":[[["Status"]]],"meta":{"line":50,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sequence","description":"The current sequence of the shard","access":"private","type":[[["number"]]],"meta":{"line":57,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeSequence","description":"The sequence of the shard after close","access":"private","type":[[["number"]]],"meta":{"line":64,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sessionId","description":"The current session id of the shard","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":71,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ping","description":"The previous heartbeat ping of the shard","type":[[["number"]]],"meta":{"line":77,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastPingTimestamp","description":"The last time a ping was sent (a timestamp)","access":"private","type":[[["number"]]],"meta":{"line":84,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastHeartbeatAcked","description":"If we received a heartbeat ack back. Used to identify zombie connections","access":"private","type":[[["boolean"]]],"meta":{"line":91,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeEmitted","description":"Used to prevent calling {@link WebSocketShard#event:close} twice while closing or terminating the WebSocket.","access":"private","type":[[["boolean"]]],"meta":{"line":98,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ratelimit","description":"Contains the rate limit queue and metadata","access":"private","type":[[["Object"]]],"meta":{"line":100,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connection","description":"The WebSocket connection for the current shard","access":"private","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":116,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"inflate","description":"The compression to use","access":"private","nullable":true,"type":[[["Inflate"]]],"meta":{"line":129,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"helloTimeout","description":"The HELLO timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":137,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"wsCloseTimeout","description":"The WebSocket timeout.","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":145,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"eventsAttached","description":"If the manager attached its event handlers on the shard","access":"private","type":[[["boolean"]]],"meta":{"line":153,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"expectedGuilds","description":"A set of guild ids this shard expects to receive","access":"private","nullable":true,"type":[[["Set","<"],["string",">"]]],"meta":{"line":161,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"readyTimeout","description":"The ready timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":169,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connectedAt","description":"Time when the WebSocket connection was opened","access":"private","type":[[["number"]]],"meta":{"line":177,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug event.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":191,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects the shard to the gateway.","access":"private","returns":{"types":[[["Promise","<"],["void",">"]]],"description":"A promise that will resolve if the shard turns ready successfully,\nor reject if we couldn't connect"},"meta":{"line":201,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onOpen","description":"Called whenever a connection is opened to the gateway.","access":"private","meta":{"line":299,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onMessage","description":"Called whenever a message is received.","access":"private","params":[{"name":"event","description":"Event received","type":[[["MessageEvent"]]]}],"meta":{"line":309,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onError","description":"Called whenever an error occurs with the WebSocket.","access":"private","params":[{"name":"event","description":"The error that occurred","type":[[["ErrorEvent"]]]}],"meta":{"line":340,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onClose","description":"Called whenever a connection to the gateway is closed.","access":"private","params":[{"name":"event","description":"Close event that was received","type":[[["CloseEvent"]]]}],"meta":{"line":373,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"emitClose","description":"This method is responsible to emit close event for this shard.\nThis method helps the shard reconnect.","params":[{"name":"event","description":"Close event that was received","optional":true,"type":[[["CloseEvent"]]]}],"meta":{"line":396,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onPacket","description":"Called whenever a packet is received.","access":"private","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":421,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"checkReady","description":"Checks if the shard can be marked as ready","access":"private","meta":{"line":510,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHelloTimeout","description":"Sets the HELLO packet timeout.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the hello timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":564,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setWsCloseTimeout","description":"Sets the WebSocket Close timeout.\nThis method is responsible for detecting any zombie connections if the WebSocket fails to close properly.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":586,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHeartbeatTimer","description":"Sets the heartbeat timer for this shard.","access":"private","params":[{"name":"time","description":"If -1, clears the interval, any other number sets an interval","type":[[["number"]]]}],"meta":{"line":626,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sendHeartbeat","description":"Sends a heartbeat to the WebSocket.\nIf this shard didn't receive a heartbeat last time, it will destroy it and reconnect","access":"private","params":[{"name":"tag","description":"What caused this heartbeat to be sent","optional":true,"default":"'HeartbeatTimer'","type":[[["string"]]]},{"name":"ignoreHeartbeatAck","description":"If we should send the heartbeat forcefully.","optional":true,"type":[[["boolean"]]]}],"meta":{"line":648,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ackHeartbeat","description":"Acknowledges a heartbeat.","access":"private","meta":{"line":675,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identify","description":"Identifies the client on the connection.","access":"private","returns":[[["void"]]],"meta":{"line":687,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyNew","description":"Identifies as a new connection on the gateway.","access":"private","meta":{"line":695,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyResume","description":"Resumes a session on the gateway.","access":"private","meta":{"line":729,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"send","description":"Adds a packet to the queue to be sent to the gateway.\nIf you use this method, make sure you understand that you need to provide\na full [Payload](https://discord.com/developers/docs/topics/gateway-events#payload-structure).\nDo not use this method if you don't know what you're doing.","params":[{"name":"data","description":"The full packet to send","type":[[["Object"]]]},{"name":"important","description":"If this packet should be added first in queue","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":757,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_send","description":"Sends data, bypassing the queue.","access":"private","params":[{"name":"data","description":"Packet to send","type":[[["Object"]]]}],"returns":[[["void"]]],"meta":{"line":768,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"processQueue","description":"Processes the current WebSocket queue.","access":"private","returns":[[["void"]]],"meta":{"line":786,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this shard and closes its WebSocket connection.","access":"private","params":[{"name":"options","description":"Options for destroying the shard","optional":true,"default":"{ closeCode: 1000, reset: false, emit: true, log: true }","type":[[["Object"]]]}],"meta":{"line":808,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_cleanupConnection","description":"Cleans up the WebSocket connection listeners.","access":"private","meta":{"line":888,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_emitDestroyed","description":"Emits the DESTROYED event on the shard","access":"private","meta":{"line":897,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"events":[{"name":"close","description":"Emitted when a shard's WebSocket closes.","params":[{"name":"event","description":"The received event","type":[[["CloseEvent"]]]}],"meta":{"line":407,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the shard receives the READY payload and is now waiting for guilds","meta":{"line":429,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumed","description":"Emitted when the shard resumes successfully","meta":{"line":444,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"invalidSession","description":"Emitted when the session has been invalidated.","meta":{"line":485,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"allReady","description":"Emitted when the shard is fully ready.\nThis event is emitted if:\n* all guilds were received by this shard\n* the ready timeout expired, and some guilds are unavailable","params":[{"name":"unavailableGuilds","description":"Set of unavailable guilds, if any","nullable":true,"type":[[["Set","<"],["string",">"]]]}],"meta":{"line":521,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroyed","description":"Emitted when a shard is destroyed, but no WebSocket connection was present.","meta":{"line":898,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"meta":{"line":23,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ApplicationCommandManager","description":"Manages API methods for application commands and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"permissions","description":"The manager for permissions of arbitrary commands on arbitrary guilds","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":24,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":132,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":161,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":183,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""],["ApplicationCommand",">"]]],"meta":{"line":205,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}},{"name":"transformCommand","description":"Transforms an {@link ApplicationCommandData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"command","description":"The command to transform","type":[[["ApplicationCommandDataResolvable"]]]}],"returns":[[["APIApplicationCommand"]]],"meta":{"line":222,"file":"ApplicationCommandManager.js","path":"src/managers"}}],"meta":{"line":16,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionsManager","description":"Manages API methods for permissions of Application Commands.","extends":[[["BaseManager"]]],"props":[{"name":"manager","description":"The manager or command that this manager belongs to","access":"private","type":[[["ApplicationCommandManager"]],[["ApplicationCommand"]]],"meta":{"line":21,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guild","description":"The guild that this manager acts on","nullable":true,"type":[[["Guild"]]],"meta":{"line":27,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guildId","description":"The id of the guild that this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":33,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"commandId","description":"The id of the command this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":39,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"permissionsPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"guildId","description":"The guild's id to use in the path,","type":[[["Snowflake"]]]},{"name":"commandId","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":49,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the permissions for one or multiple commands.","examples":["// Fetch permissions for one command\nguild.commands.permissions.fetch({ command: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.length} users`))\n .catch(console.error);","// Fetch permissions for all commands in a guild\nclient.application.commands.permissions.fetch({ guild: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.size} commands`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to fetch permissions","optional":true,"type":[[["BaseApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":95,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"set","description":"Sets the permissions for one or more commands.","examples":["// Set the permissions for one command\nclient.application.commands.permissions.set({ guild: '892455839386304532', command: '123456789012345678',\n permissions: [\n {\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n },\n]})\n .then(console.log)\n .catch(console.error);","// Set the permissions for all commands\nguild.commands.permissions.set({ fullPermissions: [\n {\n id: '123456789012345678',\n permissions: [{\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n }],\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to set permissions","type":[[["SetApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":161,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"add","description":"Add permissions to a command.","examples":["// Block a role from the command permissions\nguild.commands.permissions.add({ command: '123456789012345678', permissions: [\n {\n id: '876543211234567890',\n type: 'ROLE',\n permission: false\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to add permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":222,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"remove","description":"Remove permissions from a command.","examples":["// Remove a user permission from this command\nguild.commands.permissions.remove({ command: '123456789012345678', users: '876543210123456789' })\n .then(console.log)\n .catch(console.error);","// Remove multiple roles from this command\nguild.commands.permissions.remove({\n command: '123456789012345678', roles: ['876543210123456789', '765432101234567890']\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to remove permissions","type":[[["RemoveApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":273,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"has","description":"Check whether a permission exists for a user or role","examples":["// Check whether a user has permission to use a command\nguild.commands.permissions.has({ command: '123456789012345678', permissionId: '876543210123456789' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to check permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":348,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"transformPermissions","description":"Transforms an {@link ApplicationCommandPermissionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"permissions","description":"The permissions to transform","type":[[["ApplicationCommandPermissionData"]]]},{"name":"received","description":"Whether these permissions have been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandPermissions"]]],"meta":{"line":399,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationRuleManager","description":"Manages API methods for auto moderation rules and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to.","type":[[["Guild"]]],"meta":{"line":25,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["AutoModerationRule"]]],"nullable":true},"meta":{"line":28,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":37,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new auto moderation rule.","params":[{"name":"options","description":"Options for creating the auto moderation rule","type":[[["AutoModerationRuleCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":108,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to edit","type":[[["AutoModerationRuleResolvable"]]]},{"name":"options","description":"Options for editing the auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":174,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches auto moderation rules from Discord.","examples":["// Fetch all auto moderation rules from a guild without caching\nguild.autoModerationRules.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule\nguild.autoModerationRules.fetch('979083472868098119')\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule without checking cache and without caching\nguild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true })\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"options","description":"Options for fetching auto moderation rule(s)","optional":true,"type":[[["AutoModerationRuleResolvable"]],[["FetchAutoModerationRuleOptions"]],[["FetchAutoModerationRulesOptions"]]]}],"returns":[[["Promise","<("],["AutoModerationRule","|"],["Collection","<"],["Snowflake",", "],["AutoModerationRule",">)>"]]],"meta":{"line":255,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to delete","type":[[["AutoModerationRuleResolvable"]]]},{"name":"reason","description":"The reason for deleting the auto moderation rule","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":290,"file":"AutoModerationRuleManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"BaseGuildEmojiManager","description":"Holds methods to resolve GuildEmojis and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"BaseManager","description":"Manages the API methods of a data model.","abstract":true,"props":[{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":7,"file":"BaseManager.js","path":"src/managers"}},{"name":"BillingManager","description":"Manages the API methods of a data model.","extends":[[["CachedManager"]]],"props":[{"name":"paymentSources","description":"All the payment sources of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":18,"file":"BillingManager.js","path":"src/managers"}},{"name":"guildBoosts","description":"All the guild boosts of the client","type":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":23,"file":"BillingManager.js","path":"src/managers"}},{"name":"currentSubscription","description":"The current subscription of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":28,"file":"BillingManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchPaymentSources","description":"Fetches all the payment sources of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":35,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchGuildBoosts","description":"Fetches all the guild boosts of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":47,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchCurrentSubscription","description":"Fetches the current subscription of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":58,"file":"BillingManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"BillingManager.js","path":"src/managers"}},{"name":"CachedManager","description":"Manages the API methods of a data model with a mutable cache of instances.","extends":[[["DataManager"]]],"abstract":true,"props":[{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"CachedManager.js","path":"src/managers"}},{"name":"ChannelManager","description":"A manager of channels belonging to a client","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Channels","type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":30,"file":"ChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a ChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Channel"]]],"nullable":true},"meta":{"line":82,"file":"ChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a ChannelResolvable to a channel id string.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":91,"file":"ChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a channel from Discord, or the channel cache if it's already available.","examples":["// Fetch a channel by its id\nclient.channels.fetch('222109930545610754')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchChannelOptions"]]]}],"async":true,"returns":[[["Promise",""],["Channel",">"]]],"meta":{"line":118,"file":"ChannelManager.js","path":"src/managers"}},{"name":"createGroupDM","description":"Create Group DM","examples":["client.channels.createGroupDM();"],"params":[{"name":"recipients","description":"Array of recipients","optional":true,"default":"[]","type":[[["Array","<"],["UserResolvable",">"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["GroupDMChannel",">"]]],"description":"Channel"},"meta":{"line":135,"file":"ChannelManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"ChannelManager.js","path":"src/managers"}},{"name":"ClientUserSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"addFriendFrom","description":"WHO CAN ADD YOU AS A FRIEND ?","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":23,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"locale","description":"The user's chosen language option","see":["{@link https://discord.com/developers/docs/reference#locales}"],"nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"activityDisplay","description":"Show playing status for detected/added games\nSetting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"allowDMsFromGuild","description":"Allow DMs from guild members by default on guild join","nullable":true,"type":[[["boolean"]]],"meta":{"line":59,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"displayImage","description":"Display images and video when uploaded directly","nullable":true,"type":[[["boolean"]]],"meta":{"line":66,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"linkedImageDisplay","description":"Display images and video when linked","nullable":true,"type":[[["boolean"]]],"meta":{"line":73,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"autoplayGIF","description":"Play GIFs without hovering over them\nSetting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"previewLink","description":"Show embeds and preview website links pasted into chat","nullable":true,"type":[[["boolean"]]],"meta":{"line":88,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"animatedEmoji","description":"Play animated emoji without hovering over them\nSetting => APP SETTINGS => Accessibility => Play Animated Emojis","nullable":true,"type":[[["boolean"]]],"meta":{"line":96,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"allowTTS","description":"Enable /tts command and playback\nSetting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback","nullable":true,"type":[[["boolean"]]],"meta":{"line":104,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"compactMode","description":"Use compact mode\nSetting => APP SETTINGS => Appearance => Message Display => Compact Mode","nullable":true,"type":[[["boolean"]]],"meta":{"line":112,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"convertEmoticons","description":"Convert \"old fashioned\" emoticons to emojis\nSetting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons","nullable":true,"type":[[["boolean"]]],"meta":{"line":120,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMScanLevel","description":"Content filter level\n\n* `0`: Off\n* `1`: Friends excluded\n* `2`: Scan everyone\n","nullable":true,"type":[[["number"]]],"meta":{"line":132,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"theme","description":"Client theme\nSetting => APP SETTINGS => Appearance => Theme\n* `dark`\n* `light`\n","nullable":true,"type":[[["string"]]],"meta":{"line":143,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"developerMode","description":"Show the option to copy ids in right click menus","nullable":true,"type":[[["boolean"]]],"meta":{"line":150,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"afkTimeout","description":"How many seconds being idle before the user is marked as \"AFK\"; this handles when push notifications are sent","nullable":true,"type":[[["number"]]],"meta":{"line":157,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"stickerAnimationMode","description":"When stickers animate\n\n* `0`: Always\n* `1`: On hover/focus\n* `2`: Never\n","nullable":true,"type":[[["number"]]],"meta":{"line":169,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"showEmojiReactions","description":"Display reactions\nSetting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions","nullable":true,"type":[[["boolean"]]],"meta":{"line":177,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"disableDMfromGuilds","description":"Disable Direct Message from servers","type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":214,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"raw","description":"Raw data","type":[[["Object"]]],"meta":{"line":224,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file\nhttps://luna.gitlab.io/discord-unofficial-docs/docs/user_settings","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":35,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit data","params":[{"name":"data","description":"Data to edit","type":[[["any"]]]}],"async":true,"meta":{"line":238,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"toggleCompactMode","description":"Toggle compact mode","returns":[[["Promise","<"],["this",">"]]],"meta":{"line":248,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setTheme","description":"Discord Theme","params":[{"name":"value","description":"Theme to set (dark | light)","type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":256,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setCustomStatus","description":"Set custom status","params":[{"name":"options","description":"CustomStatus","type":[[["CustomStatus"]],[["CustomStatusOption"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":278,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"restrictedGuilds","description":"Restricted guilds setting","params":[{"name":"status","description":"Restricted status","type":[[["boolean"]]]}],"returns":[[["Promise"]]],"meta":{"line":337,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addRestrictedGuild","description":"Add a guild to the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to add","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":351,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"removeRestrictedGuild","description":"Remove a guild from the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to remove","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":366,"file":"ClientUserSettingManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DataManager","description":"Manages the API methods of a data model along with a collection of instances.","extends":[[["BaseManager"]]],"abstract":true,"props":[{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":30,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"DataManager.js","path":"src/managers"}},{"name":"GuildBanManager","description":"Manages API methods for GuildBans and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":24,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildBan",">"]]],"meta":{"line":27,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildBanResolvable to a GuildBan object.","params":[{"name":"ban","description":"The ban that is in the guild","type":[[["GuildBanResolvable"]]]}],"returns":{"types":[[["GuildBan"]]],"nullable":true},"meta":{"line":49,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches ban(s) from Discord.","examples":["// Fetch multiple bans from a guild\nguild.bans.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a maximum of 5 bans from a guild without caching\nguild.bans.fetch({ limit: 5, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single ban\nguild.bans.fetch('351871113346809860')\n .then(console.log)\n .catch(console.error);","// Fetch a single ban without checking cache\nguild.bans.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single ban without caching\nguild.bans.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild ban(s)","optional":true,"type":[[["UserResolvable"]],[["FetchBanOptions"]],[["FetchBansOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildBan","|"],["Collection","<"],["Snowflake",", "],["GuildBan",">)>"]]],"meta":{"line":98,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"create","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.bans.create('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result."},"meta":{"line":151,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"remove","description":"Unbans a user from the guild.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.bans.remove('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise",""],["User",">"]]],"meta":{"line":196,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"bulkCreate","description":"Bulk ban users from a guild, and optionally delete previous messages sent by them.","examples":["// Bulk ban users by ids (or with user/guild member objects) and delete all their messages from the past 7 days\nguild.bans.bulkCreate(['84484653687267328'], { deleteMessageSeconds: 7 * 24 * 60 * 60 })\n .then(result => {\n console.log(`Banned ${result.bannedUsers.length} users, failed to ban ${result.failedUsers.length} users.`)\n })\n .catch(console.error);"],"deprecated":"This method will not be usable until an effective MFA implementation is in place.","params":[{"name":"users","description":"The users to ban","type":[[["Collection","<"],["Snowflake",", "],["UserResolvable",">"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"options","description":"The options for bulk banning users","optional":true,"type":[[["BulkBanOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["BulkBanResult",">"]]],"description":"Returns an object with `bannedUsers` key containing the IDs of the banned users\nand the key `failedUsers` with the IDs that could not be banned or were already banned."},"meta":{"line":233,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":16,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelManager","description":"Manages API methods for GuildChannels and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":49,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"channelCountWithoutThreads","description":"The number of channels in this managers cache excluding thread channels\nthat do not count towards a guild's maximum channels restriction.","readonly":true,"type":[[["number"]]],"meta":{"line":58,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":65,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]]],"nullable":true},"meta":{"line":91,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a GuildChannelResolvable to a channel id.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":101,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new channel in the guild.","examples":["// Create a new text channel\nguild.channels.create('new-general', { reason: 'Needed a cool new channel' })\n .then(console.log)\n .catch(console.error);","// Create a new channel with permission overwrites\nguild.channels.create('new-voice', {\n type: 'GUILD_VOICE',\n permissionOverwrites: [\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n ],\n})"],"params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","optional":true,"default":"{}","type":[[["GuildChannelCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":134,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nguild.channels.createWebhook('222197033908436994', 'Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"channel","description":"The channel to create the webhook for","type":[[["GuildChannelResolvable"]]]},{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":216,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"addFollower","description":"Adds the target channel to a channel's followers.","params":[{"name":"channel","description":"The channel to follow","type":[[["NewsChannel"]],[["Snowflake"]]]},{"name":"targetChannel","description":"The channel where published announcements will be posted at","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Snowflake",">"]]],"description":"Returns created target webhook id."},"meta":{"line":239,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nguild.channels.edit('222197033908436994', { name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to edit","type":[[["GuildChannelResolvable"]]]},{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nguild.channels.setPosition('222078374472843266', 2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to set the position for","type":[[["GuildChannelResolvable"]]]},{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":358,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild channels from Discord, or the channel cache if they're already available.","examples":["// Fetch all channels from the guild (excluding threads)\nmessage.guild.channels.fetch()\n .then(channels => console.log(`There are ${channels.size} channels.`))\n .catch(console.error);","// Fetch a single channel\nmessage.guild.channels.fetch('222197033908436994')\n .then(channel => console.log(`The channel name is: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["GuildChannel","|"],["ThreadChannel","|"],["Collection","<"],["Snowflake",", ?"],["GuildChannel",">)>"]]],"meta":{"line":393,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nguild.channels.fetchWebhooks('769862166131245066')\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to fetch webhooks for","type":[[["GuildChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":422,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time","examples":["guild.channels.setPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":455,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes the channel.","examples":["// Delete the channel\nguild.channels.delete('858850993013260338', 'making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to delete","type":[[["GuildChannelResolvable"]]]},{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":481,"file":"GuildChannelManager.js","path":"src/managers"}}],"meta":{"line":30,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildEmojiManager","description":"Manages API methods for GuildEmojis and stores their cache.","extends":[[["BaseGuildEmojiManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom emoji in the guild.","examples":["// Create a new emoji from a URL\nguild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);","// Create a new emoji from a file on your computer\nguild.emojis.create('./memes/banana.png', 'banana')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);"],"params":[{"name":"attachment","description":"The image for the emoji","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"The name for the emoji","type":[[["string"]]]},{"name":"options","description":"Options for creating the emoji","optional":true,"type":[[["GuildEmojiCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Emoji",">"]]],"description":"The created emoji"},"meta":{"line":52,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more emojis from Discord, or the emoji cache if they're already available.","examples":["// Fetch all emojis from the guild\nmessage.guild.emojis.fetch()\n .then(emojis => console.log(`There are ${emojis.size} emojis.`))\n .catch(console.error);","// Fetch a single emoji\nmessage.guild.emojis.fetch('222078108977594368')\n .then(emoji => console.log(`The emoji name is: ${emoji.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The emoji's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildEmoji","|"],["Collection","<"],["Snowflake",", "],["GuildEmoji",">)>"]]],"meta":{"line":89,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to delete","type":[[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":111,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to edit","type":[[["EmojiResolvable"]]]},{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":124,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetchAuthor","description":"Fetches the author for this emoji","params":[{"name":"emoji","description":"The emoji to fetch the author of","type":[[["EmojiResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":152,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","inherits":"BaseGuildEmojiManager#resolve","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","inherits":"BaseGuildEmojiManager#resolveId","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","inherits":"BaseGuildEmojiManager#resolveIdentifier","inherited":true,"params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildEmojiRoleManager","description":"Manages API methods for roles belonging to emojis and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"emoji","description":"The emoji belonging to this manager","type":[[["GuildEmoji"]]],"meta":{"line":20,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":25,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of roles belonging to this emoji","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":33,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":42,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":63,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the role(s) that can use this emoji.","examples":["// Set the emoji's roles to a single role\nguildEmoji.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all roles from an emoji\nguildEmoji.roles.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":94,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"_patch","description":"Patches the roles for this manager's cache","access":"private","params":[{"name":"roles","description":"The new roles","type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":109,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"GuildForumThreadManager","description":"Manages API methods for threads in forum channels and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["ForumChannel"]],[["MediaChannel"]]],"meta":{"line":13,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":22,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new forum post\nforum.threads\n .create({\n name: 'Food Talk',\n autoArchiveDuration: 60,\n message: {\n content: 'Discuss your favorite food!',\n },\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildForumThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":51,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":42,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":51,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","("],["ThreadChannel","|"],["FetchedThreads",")>"]]],"meta":{"line":79,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":121,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":141,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildInviteManager","description":"Manages API methods for GuildInvites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":24,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an InviteResolvable to an Invite object.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["Invite"]]],"nullable":true},"meta":{"line":53,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an InviteResolvable to an invite code string.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":62,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches invite(s) from Discord.","examples":["// Fetch all invites from a guild\nguild.invites.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a guild without caching\nguild.invites.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a channel\nguild.invites.fetch({ channelId: '222197033908436994' })\n .then(console.log)\n .catch(console.error);","// Fetch a single invite\nguild.invites.fetch('bRCvFy9')\n .then(console.log)\n .catch(console.error);","// Fetch a single invite without checking cache\nguild.invites.fetch({ code: 'bRCvFy9', force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single invite without caching\nguild.invites.fetch({ code: 'bRCvFy9', cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild invite(s)","optional":true,"type":[[["InviteResolvable"]],[["FetchInviteOptions"]],[["FetchInvitesOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Invite","|"],["Collection","<"],["string",", "],["Invite",">)>"]]],"meta":{"line":122,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"create","description":"Create an invite to the guild from the provided channel.","examples":["// Create an invite to a selected channel\nguild.invites.create('599942732013764608')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The options for creating the invite from a channel.","type":[[["GuildInvitableChannelResolvable"]]]},{"name":"options","description":"The options for creating the invite from a channel.","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":178,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an invite.","params":[{"name":"invite","description":"The invite to delete","type":[[["InviteResolvable"]]]},{"name":"reason","description":"Reason for deleting the invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":206,"file":"GuildInviteManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildManager","description":"Manages API methods for Guilds and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":47,"file":"GuildManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildResolvable to a Guild object.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Guild"]]],"nullable":true},"meta":{"line":105,"file":"GuildManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildResolvable} to a {@link Guild} id string.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":126,"file":"GuildManager.js","path":"src/managers"}},{"name":"create","description":"Creates a guild.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"options","description":"Options for creating the guild","optional":true,"type":[[["GuildCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Guild",">"]]],"description":"The guild that was created"},"meta":{"line":170,"file":"GuildManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple guilds from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The guild's id or options","optional":true,"type":[[["GuildResolvable"]],[["FetchGuildOptions"]],[["FetchGuildsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Guild","|"],["Collection","<"],["Snowflake",", "],["OAuth2Guild",">)>"]]],"meta":{"line":287,"file":"GuildManager.js","path":"src/managers"}},{"name":"setIncidentActions","description":"Sets the incident actions for a guild.","params":[{"name":"guild","description":"The guild","type":[[["GuildResolvable"]]]},{"name":"incidentActions","description":"The incident actions to set","type":[[["IncidentActionsEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["IncidentActions",">"]]],"meta":{"line":317,"file":"GuildManager.js","path":"src/managers"}}],"meta":{"line":35,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":33,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a GuildMember of this guild","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":130,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link GuildMemberResolvable} to a {@link GuildMember} object.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":55,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildMemberResolvable} to a member id.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":68,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a user to the guild using OAuth2. Requires the `CREATE_INSTANT_INVITE` permission.","params":[{"name":"user","description":"The user to add to the guild","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for adding the user to the guild","type":[[["AddGuildMemberOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["null",")>"]]],"meta":{"line":95,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) from Discord, even if they're offline.","examples":["// Fetch all members from a guild\nguild.members.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a single member\nguild.members.fetch('66564597481480192')\n .then(console.log)\n .catch(console.error);","// Fetch a single member without checking cache\nguild.members.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single member without caching\nguild.members.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch by an array of users including their presences\nguild.members.fetch({ user: ['66564597481480192', '191615925336670208'], withPresences: true })\n .then(console.log)\n .catch(console.error);","// Fetch by query\nguild.members.fetch({ query: 'hydra', limit: 1 })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"If a UserResolvable, the user to fetch.\nIf undefined, fetches all members.\nIf a query, it limits the results to users with similar usernames.","optional":true,"type":[[["UserResolvable"]],[["FetchMemberOptions"]],[["FetchMembersOptions"]]]}],"returns":[[["Promise","<("],["GuildMember","|"],["Collection","<"],["Snowflake",", "],["GuildMember",">)>"]]],"meta":{"line":194,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMe","description":"Fetches the client user as a GuildMember of the guild.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":225,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"search","description":"Searches for members in the guild based on a query.","params":[{"name":"options","description":"Options for searching members","type":[[["GuildSearchMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":242,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a member of the guild.\nThe user must be a member of the guild","params":[{"name":"user","description":"The member to edit","type":[[["UserResolvable"]]]},{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":272,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"prune","description":"Prunes members from the guild based on how long they have been inactive.","examples":["// See how many members will be pruned\nguild.members.prune({ dry: true })\n .then(pruned => console.log(`This will prune ${pruned} people!`))\n .catch(console.error);","// Actually prune the members\nguild.members.prune({ days: 1, reason: 'too many people!' })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);","// Include members with a specified role\nguild.members.prune({ days: 7, roles: ['657259391652855808'] })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for pruning","optional":true,"type":[[["GuildPruneMembersOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["number","|"],["null",")>"]]],"description":"The number of members that were/will be kicked"},"meta":{"line":354,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"kick","description":"Kicks a user from the guild.\nThe user must be a member of the guild","examples":["// Kick a user by id (or with a user/guild member object)\nguild.members.kick('84484653687267328')\n .then(kickInfo => console.log(`Kicked ${kickInfo.user?.tag ?? kickInfo.tag ?? kickInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The member to kick","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for kicking","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user's id will be the result."},"meta":{"line":395,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"ban","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.members.ban('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result.\nInternally calls the GuildBanManager#create method."},"meta":{"line":418,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"unban","description":"Unbans a user from the guild. Internally calls the {@link GuildBanManager#remove} method.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.members.unban('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["Promise",""],["User",">"]]],"description":"The user that was unbanned"},"meta":{"line":433,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"addRole","description":"Adds a role to a member.","params":[{"name":"user","description":"The user to add the role from","type":[[["GuildMemberResolvable"]]]},{"name":"role","description":"The role to add","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for adding the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":454,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"removeRole","description":"Removes a role from a member.","params":[{"name":"user","description":"The user to remove the role from","type":[[["UserResolvable"]]]},{"name":"role","description":"The role to remove","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for removing the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":470,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchByMemberSafety","description":"Experimental method to fetch members from the guild.\nLists up to 10000 members of the guild.","params":[{"name":"timeout","description":"Timeout for receipt of members in ms","optional":true,"default":"15_000","type":[[["number"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":485,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"bulkBan","description":"Bulk ban users from a guild, and optionally delete previous messages sent by them.","examples":["// Bulk ban users by ids (or with user/guild member objects) and delete all their messages from the past 7 days\nguild.members.bulkBan(['84484653687267328'], { deleteMessageSeconds: 7 * 24 * 60 * 60 })\n .then(result => {\n console.log(`Banned ${result.bannedUsers.length} users, failed to ban ${result.failedUsers.length} users.`)\n })\n .catch(console.error);"],"deprecated":"This method will not be usable until an effective MFA implementation is in place.","params":[{"name":"users","description":"The users to ban","type":[[["Collection","<"],["Snowflake",", "],["UserResolvable",">"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"options","description":"The options for bulk banning users","optional":true,"type":[[["BulkBanOptions"]]]}],"returns":{"types":[[["Promise","<"],["BulkBanResult",">"]]],"description":"Returns an object with `bannedUsers` key containing the IDs of the banned users\nand the key `failedUsers` with the IDs that could not be banned or were already banned.\nInternally calls the GuildBanManager#bulkCreate method."},"meta":{"line":594,"file":"GuildMemberManager.js","path":"src/managers"}}],"meta":{"line":22,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberRoleManager","description":"Manages API methods for roles of a GuildMember and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"member","description":"The GuildMember this manager belongs to","type":[[["GuildMember"]]],"meta":{"line":20,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The Guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":26,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The roles of this member","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":34,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"hoist","description":"The role of the member used to hoist them in a separate category in the users list","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":44,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"icon","description":"The role of the member used to set their role icon","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":55,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"color","description":"The role of the member used to set their color","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":66,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role of the member with the highest position","readonly":true,"type":[[["Role"]]],"meta":{"line":77,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if present on the member","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":86,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"botRole","description":"The managed role this member created when joining the guild, if any\nOnly ever available on bots","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":96,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the member.\n\nUses the idempotent PUT route for singular roles, otherwise PATCHes the underlying guild member","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for adding the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":109,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the member.\n\nUses the idempotent DELETE route for singular roles, otherwise PATCHes the underlying guild member","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for removing the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":142,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the roles applied to the member.","examples":["// Set the member's roles to a single role\nguildMember.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all the roles from a member\nguildMember.roles.set([])\n .then(member => console.log(`Member roles is now of ${member.roles.cache.size} size`))\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for applying the roles","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":184,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"GuildScheduledEventManager","description":"Manages API methods for GuildScheduledEvents and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":23,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">"]]],"meta":{"line":26,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new guild scheduled event.","params":[{"name":"options","description":"Options for creating the guild scheduled event","type":[[["GuildScheduledEventCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":84,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild scheduled events from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The id of the guild scheduled event or options","optional":true,"type":[[["GuildScheduledEventResolvable"]],[["FetchGuildScheduledEventOptions"]],[["FetchGuildScheduledEventsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildScheduledEvent","|"],["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">)>"]]],"meta":{"line":153,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to edit","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":205,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to delete","type":[[["GuildScheduledEventResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":261,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetchSubscribers","description":"Fetches subscribers of a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch subscribers of","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options for fetching the subscribers","optional":true,"default":"{}","type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":292,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"guildId","description":"Guild Id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":17,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"raw","description":"Raw data","type":[[["Object"]]],"meta":{"line":24,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guild","description":"Get the guild","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":33,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressEveryone","description":"Notification setting > Suppress `@everyone` and `@here`","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressRoles","description":"Notification setting > Suppress all role `@mention`","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteScheduledEvents","description":"Notification setting > Mute new events","nullable":true,"type":[[["boolean"]]],"meta":{"line":64,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"messageNotifications","description":"Notification setting > Message notifications\n* `0`: All messages\n* `1`: Only @mentions\n* `2`: Nothing","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"flags","description":"Flags (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"mobilePush","description":"Notification setting > Mobile push notifications","nullable":true,"type":[[["boolean"]]],"meta":{"line":88,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muted","description":"Mute server","nullable":true,"type":[[["boolean"]]],"meta":{"line":95,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteConfig","description":"Mute config (muted = true)\n* `muteConfig.endTime`: End time (Date)\n* `muteConfig.selectedTimeWindow`: Selected time window (seconds) (number)","nullable":true,"type":[[["Object"]]],"meta":{"line":104,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"hideMutedChannels","description":"Hide muted channels","nullable":true,"type":[[["boolean"]]],"meta":{"line":116,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"channelOverrides","description":"Channel overrides (unknown)","nullable":true,"type":[[["Array"]]],"meta":{"line":123,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"notifyHighlights","description":"Notification setting > Suppress highlights\n* `0`: ??? (unknown)\n* `1`: Enable\n* `2`: Disable","nullable":true,"type":[[["number"]]],"meta":{"line":133,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"version","description":"Version (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":140,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":42,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit guild settings","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["GuildSettingManager",">"]]],"meta":{"line":148,"file":"GuildSettingManager.js","path":"src/managers"}}],"meta":{"line":9,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"GuildStickerManager","description":"Manages API methods for Guild Stickers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Guild Stickers","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":24,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom sticker in the guild.","examples":["// Create a new sticker from a URL\nguild.stickers.create('https://i.imgur.com/w3duR07.png', 'rip', 'headstone')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);","// Create a new sticker from a file on your computer\nguild.stickers.create('./memes/banana.png', 'banana', 'banana')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);"],"params":[{"name":"file","description":"The file for the sticker","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]},{"name":"name","description":"The name for the sticker","type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","type":[[["string"]]]},{"name":"options","description":"Options","optional":true,"type":[[["GuildStickerCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Sticker",">"]]],"description":"The created sticker"},"meta":{"line":59,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a StickerResolvable to a Sticker object.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Sticker"]]],"nullable":true},"meta":{"line":79,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a StickerResolvable to a Sticker id string.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":88,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a sticker.","params":[{"name":"sticker","description":"The sticker to edit","type":[[["StickerResolvable"]]]},{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":104,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a sticker.","params":[{"name":"sticker","description":"The sticker to delete","type":[[["StickerResolvable"]]]},{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":128,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more stickers from Discord, or the sticker cache if they're already available.","examples":["// Fetch all stickers from the guild\nmessage.guild.stickers.fetch()\n .then(stickers => console.log(`There are ${stickers.size} stickers.`))\n .catch(console.error);","// Fetch a single sticker\nmessage.guild.stickers.fetch('222078108977594368')\n .then(sticker => console.log(`The sticker name is: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The Sticker's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Sticker","|"],["Collection","<"],["Snowflake",", "],["Sticker",">)>"]]],"meta":{"line":151,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","params":[{"name":"sticker","description":"The sticker to fetch the user for","type":[[["StickerResolvable"]]]}],"async":true,"returns":[[["Promise",""],["User",">"]]],"meta":{"line":170,"file":"GuildStickerManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["TextChannel"]],[["NewsChannel"]]],"meta":{"line":13,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":22,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new public thread\nchannel.threads\n .create({\n name: 'food-talk',\n autoArchiveDuration: 60,\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);","// Create a new private thread\nchannel.threads\n .create({\n name: 'mod-talk',\n autoArchiveDuration: 60,\n type: 'GUILD_PRIVATE_THREAD',\n reason: 'Needed a separate thread for moderation',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildTextThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":58,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":42,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":51,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","("],["ThreadChannel","|"],["FetchedThreads",")>"]]],"meta":{"line":79,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":121,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":141,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"InteractionManager","description":"Manages API methods for InteractionResponse and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":18,"file":"InteractionManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of InteractionResponse","type":[[["Collection","<"],["Snowflake",", "],["InteractionResponse",">"]]],"meta":{"line":21,"file":"InteractionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"InteractionManager.js","path":"src/managers"}},{"name":"MessageManager","description":"Manages API methods for Messages and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":22,"file":"MessageManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]],"meta":{"line":25,"file":"MessageManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Gets a message, or messages, from this channel.\nThe returned Collection does not contain reaction users of the messages if they were not cached.\nThose need to be fetched separately in such a case.","examples":["// Get message\nchannel.messages.fetch('99539446449315840')\n .then(message => console.log(message.content))\n .catch(console.error);","// Get messages\nchannel.messages.fetch({ limit: 10 })\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);","// Get messages and filter by user id\nchannel.messages.fetch()\n .then(messages => console.log(`${messages.filter(m => m.author.id === '84484653687267328').size} messages`))\n .catch(console.error);"],"params":[{"name":"message","description":"The id of the message to fetch, or query parameters.","optional":true,"type":[[["Snowflake"]],[["ChannelLogsQueryOptions"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["Collection","<"],["Snowflake",", "],["Message",">)>"]]],"meta":{"line":68,"file":"MessageManager.js","path":"src/managers"}},{"name":"fetchPinned","description":"Fetches the pinned messages of this channel and returns a collection of them.\nThe returned Collection does not contain any reaction data of the messages.\nThose need to be fetched separately.","examples":["// Get pinned messages\nchannel.messages.fetchPinned()\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the message(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":84,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link MessageResolvable} to a {@link Message} object.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Message"]]],"nullable":true},"meta":{"line":100,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageResolvable} to a {@link Message} id.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":109,"file":"MessageManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a message, even if it's not cached.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]]]},{"name":"options","description":"The options to edit the message","type":[[["string"]],[["MessageEditOptions"]],[["MessagePayload"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":124,"file":"MessageManager.js","path":"src/managers"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it, even if it's not cached.","params":[{"name":"message","description":"The message to publish","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":169,"file":"MessageManager.js","path":"src/managers"}},{"name":"pin","description":"Pins a message to the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to pin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":183,"file":"MessageManager.js","path":"src/managers"}},{"name":"unpin","description":"Unpins a message from the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to unpin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":196,"file":"MessageManager.js","path":"src/managers"}},{"name":"react","description":"Adds a reaction to a message, even if it's not cached.","params":[{"name":"message","description":"The message to react to","type":[[["MessageResolvable"]]]},{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":210,"file":"MessageManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a message, even if it's not cached.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":238,"file":"MessageManager.js","path":"src/managers"}},{"name":"search","description":"Search Messages in the channel.","params":[{"name":"options","description":"Performs a search within the channel.","type":[[["MessageSearchOptions"]]]}],"async":true,"returns":[[["MessageSearchResult"]]],"meta":{"line":297,"file":"MessageManager.js","path":"src/managers"}},{"name":"endPoll","description":"Ends a poll.","params":[{"name":"messageId","description":"The id of the message","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":397,"file":"MessageManager.js","path":"src/managers"}},{"name":"fetchPollAnswerVoters","description":"Fetches the users that voted for a poll answer.","params":[{"name":"options","description":"The options for fetching the poll answer voters","type":[[["FetchPollAnswerVotersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":414,"file":"MessageManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"MessageManager.js","path":"src/managers"}},{"name":"PermissionOverwriteManager","description":"Manages API methods for guild channel permission overwrites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel of the permission overwrite this manager belongs to","type":[[["GuildChannel"]]],"meta":{"line":32,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["PermissionOverwrites",">"]]],"meta":{"line":41,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"set","description":"Replaces the permission overwrites in this channel.","examples":["message.channel.permissionOverwrites.set([\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n], 'Needed to change permissions');"],"params":[{"name":"overwrites","description":"Permission overwrites the channel gets updated with","type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"reason","description":"Reason for updating the channel overwrites","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":65,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"upsert","description":"Creates or edits permission overwrites for a user or role in this channel.","access":"private","params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]},{"name":"existing","description":"The existing overwrites to merge with this update","optional":true,"type":[[["PermissionOverwrites"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":89,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"create","description":"Creates permission overwrites for a user or role in this channel, or replaces them if already present.","examples":["// Create or Replace permission overwrites for a message author\nmessage.channel.permissionOverwrites.create(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":124,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"edit","description":"Edits permission overwrites for a user or role in this channel, or creates an entry if not already present.","examples":["// Edit or Create permission overwrites for a message author\nmessage.channel.permissionOverwrites.edit(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":142,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes permission overwrites for a user or role in this channel.","params":[{"name":"userOrRole","description":"The user or role to delete","type":[[["UserResolvable"]],[["RoleResolvable"]]]},{"name":"reason","description":"The reason for deleting the overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":155,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceManager","description":"Manages API methods for Presences and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Presences","type":[[["Collection","<"],["Snowflake",", "],["Presence",">"]]],"meta":{"line":15,"file":"PresenceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} object.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Presence"]]],"nullable":true},"meta":{"line":38,"file":"PresenceManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} id.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"PresenceManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the overall user presence for all of the user's non-offline friends and implicit relationships.","async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Presence",">>"]]],"meta":{"line":61,"file":"PresenceManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"PresenceManager.js","path":"src/managers"}},{"name":"ReactionManager","description":"Manages API methods for reactions and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"message","description":"The message that this manager belongs to","type":[[["Message"]]],"meta":{"line":18,"file":"ReactionManager.js","path":"src/managers"}},{"name":"cache","description":"The reaction cache of this manager","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]],"meta":{"line":25,"file":"ReactionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} object.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["MessageReaction"]]],"nullable":true},"meta":{"line":39,"file":"ReactionManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} id.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":48,"file":"ReactionManager.js","path":"src/managers"}},{"name":"removeAll","description":"Removes all reactions from a message.","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":61,"file":"ReactionManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"ReactionManager.js","path":"src/managers"}},{"name":"ReactionUserManager","description":"Manages API methods for users who reacted to a reaction and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"reaction","description":"The reaction that this manager belongs to","type":[[["MessageReaction"]]],"meta":{"line":21,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":24,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the users that gave this reaction. Resolves with a collection of users, mapped by their ids.","params":[{"name":"options","description":"Options for fetching the users","optional":true,"type":[[["FetchReactionUsersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":43,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a user from this reaction.","params":[{"name":"user","description":"The user to remove the reaction of","optional":true,"default":"this.client.user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":62,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RelationshipManager","description":"Manages API methods for Relationships and stores their cache.","props":[{"name":"cache","description":"A collection of users this manager is caching. (Type: Number)","type":[[["Collection","<"],["Snowflake",", "],["RelationshipType",">"]]],"meta":{"line":21,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"friendNicknames","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":25,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"sinceCache","type":[[["Collection","<"],["Snowflake",", "],["Date",">"]]],"meta":{"line":29,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"friendCache","description":"Get all friends","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":38,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"blockedCache","description":"Get all blocked users","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":50,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"incomingCache","description":"Get all incoming friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":62,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"outgoingCache","description":"Get all outgoing friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":74,"file":"RelationshipManager.js","path":"src/managers"}}],"methods":[{"name":"toJSON","description":"Return array of cache","returns":[[["Array","<"],["RelationshipJSONData",">"]]],"meta":{"line":93,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"_setup","access":"private","params":[{"name":"users","description":"An array of users to add to the cache","type":[[["Array","<"],["User",">"]]]}],"returns":[[["void"]]],"meta":{"line":107,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":121,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"resolveUsername","description":"Resolves a {@link UserResolvable} to a {@link User} username.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":134,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","optional":true,"type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["RelationshipType","|"],["RelationshipManager",")>"]]],"meta":{"line":148,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteRelationship","description":"Deletes a friend / blocked relationship with a client user or cancels a friend request.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":170,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"sendFriendRequest","description":"Sends a friend request.","params":[{"name":"options","description":"Target (User Object, Username, User Id)","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":192,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addFriend","description":"Accepts a friend request.","params":[{"name":"user","description":"The user to add as a friend","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":220,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"setNickname","description":"Changes the nickname of a friend.","params":[{"name":"user","description":"The user to change the nickname","type":[[["UserResolvable"]]]},{"name":"nickname","description":"New nickname","default":null,"nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":241,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addBlocked","description":"Blocks a user.","params":[{"name":"user","description":"User to block","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":262,"file":"RelationshipManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"RoleManager","description":"Manages API methods for roles and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":36,"file":"RoleManager.js","path":"src/managers"}},{"name":"cache","description":"The role cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":39,"file":"RoleManager.js","path":"src/managers"}},{"name":"everyone","description":"The `@everyone` role of the guild","readonly":true,"type":[[["Role"]]],"meta":{"line":425,"file":"RoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if any","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":434,"file":"RoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role with the highest position in the cache","readonly":true,"type":[[["Role"]]],"meta":{"line":443,"file":"RoleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Obtains a role from Discord, or the role cache if they're already available.","examples":["// Fetch all roles from the guild\nmessage.guild.roles.fetch()\n .then(roles => console.log(`There are ${roles.size} roles.`))\n .catch(console.error);","// Fetch a single role\nmessage.guild.roles.fetch('222078108977594368')\n .then(role => console.log(`The role color is: ${role.colors.primaryColor}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The role's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["Role","|"],["Collection","<"],["Snowflake",", "],["Role",">)>"]]],"meta":{"line":65,"file":"RoleManager.js","path":"src/managers"}},{"name":"fetchMemberCounts","description":"Fetches the member counts for each role in the guild.","async":true,"returns":[[["Promise","<"],["Record","<"],["Snowflake",", "],["number",">>"]]],"meta":{"line":82,"file":"RoleManager.js","path":"src/managers"}},{"name":"fetchMemberIds","description":"Fetches the member ids for a role in the guild.\nThis only returns 100 member ids","params":[{"name":"role","description":"The role to fetch member ids for","type":[[["RoleResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["Snowflake",">>"]]],"meta":{"line":94,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link RoleResolvable} to a {@link Role} object.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":110,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link RoleResolvable} to a {@link Role} id.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":119,"file":"RoleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new role in the guild with given information.\nThe position will silently reset to 1 if an invalid one is provided, or none.","examples":["// Create a new role\nguild.roles.create()\n .then(console.log)\n .catch(console.error);","// Create a new role with data and a reason\nguild.roles.create({\n name: 'Super Cool Blue People',\n colors: {\n primaryColor: 'BLUE',\n },\n reason: 'we needed a role for Super Cool People',\n})\n .then(console.log)\n .catch(console.error);","// Create a role with holographic colors\nguild.roles.create({\n name: 'Holographic Role',\n reason: 'Creating a role with holographic effect',\n colors: {\n primaryColor: Constants.HolographicStyles.PRIMARY,\n secondaryColor: Constants.HolographicStyles.SECONDARY,\n tertiaryColor: Constants.HolographicStyles.TERTIARY,\n },\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for creating the new role","optional":true,"type":[[["CreateRoleOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":192,"file":"RoleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a role of the guild.","examples":["// Edit a role\nguild.roles.edit('222079219327434752', { name: 'buddies' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to edit","type":[[["RoleResolvable"]]]},{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":255,"file":"RoleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a role.","examples":["// Delete a role\nguild.roles.delete('222079219327434752', 'The role needed to go')\n .then(() => console.log('Deleted the role.'))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to delete","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for deleting the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":316,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nguild.roles.setPosition('222197033908436994', 1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to change the position of","type":[[["RoleResolvable"]]]},{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":334,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's role positions","examples":["guild.roles.setPositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":369,"file":"RoleManager.js","path":"src/managers"}},{"name":"comparePositions","description":"Compares the positions of two roles.","params":[{"name":"role1","description":"First role to compare","type":[[["RoleResolvable"]]]},{"name":"role2","description":"Second role to compare","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":393,"file":"RoleManager.js","path":"src/managers"}},{"name":"botRoleFor","description":"Gets the managed role a user created when joining the guild, if any\nOnly ever available for bots","params":[{"name":"user","description":"The user to access the bot role for","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":414,"file":"RoleManager.js","path":"src/managers"}}],"meta":{"line":21,"file":"RoleManager.js","path":"src/managers"}},{"name":"SessionManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"currentSessionIdHash","description":"The current session ID hash of the client.","type":[[["string"]]],"meta":{"line":18,"file":"SessionManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Sessions","type":[[["Collection","<"],["string",", "],["Session",">"]]],"meta":{"line":20,"file":"SessionManager.js","path":"src/managers"}},{"name":"currentSession","description":"Get the current session of the client.\nYou must call `fetch()` first to populate the cache.","nullable":true,"type":[[["Session"]]],"meta":{"line":58,"file":"SessionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetch all sessions of the client.","returns":[[["Promise","<"],["Collection","<"],["string",", "],["Session",">>"]]],"meta":{"line":30,"file":"SessionManager.js","path":"src/managers"}},{"name":"logoutAllDevices","description":"Logout all client (remote).","returns":[[["Promise","<"],["void",">"]]],"meta":{"line":45,"file":"SessionManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"SessionManager.js","path":"src/managers"}},{"name":"StageInstanceManager","description":"Manages API methods for {@link StageInstance} objects and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":20,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["StageInstance",">"]]],"meta":{"line":23,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new stage instance.","examples":["// Create a stage instance\nguild.stageInstances.create('1234567890123456789', {\n topic: 'A very creative topic',\n privacyLevel: 'GUILD_ONLY'\n})\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel to associate the created stage instance to","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":60,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the stage instance associated with a stage channel, if it exists.","examples":["// Fetch a stage instance\nguild.stageInstances.fetch('1234567890123456789')\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be fetched","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":93,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an existing stage instance.","examples":["// Edit a stage instance\nguild.stageInstances.edit('1234567890123456789', { topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be edited","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":124,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an existing stage instance.","params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be deleted","type":[[["StageChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":154,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["NewsChannel"]],[["TextChannel"]]],"meta":{"line":19,"file":"ThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":22,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":42,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":51,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","("],["ThreadChannel","|"],["FetchedThreads",")>"]]],"meta":{"line":79,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":121,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":141,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"thread","description":"The thread this manager belongs to","type":[[["ThreadChannel"]]],"meta":{"line":23,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]],"meta":{"line":26,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a ThreadMember of this ThreadChannel","readonly":true,"nullable":true,"type":[[["ThreadMember"]]],"meta":{"line":56,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchMe","description":"Fetches the client user as a ThreadMember of the thread.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["ThreadMember",">"]]],"meta":{"line":47,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} object.","params":[{"name":"member","description":"The user that is part of the thread","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":72,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} id string.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":85,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a member to the thread.","params":[{"name":"member","description":"The member to add","type":[[["UserResolvable"]],[["me","'"]]]},{"name":"reason","description":"The reason for adding this member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":98,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"remove","description":"Remove a user from the thread.","params":[{"name":"id","description":"The id of the member to remove","type":[[["Snowflake"]],[["me","'"]]]},{"name":"reason","description":"The reason for removing this member from the thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":111,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) for the thread from Discord.","params":[{"name":"member","description":"The member to fetch. If `undefined`, all members\nin the thread are fetched, and will be cached based on `options.cache`.","optional":true,"type":[[["UserResolvable"]],[["FetchThreadMembersOptions"]],[["boolean"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchThreadMemberOptions"]],[["FetchThreadMembersOptions"]]]}],"returns":[[["Promise","<("],["ThreadMember","|"],["Collection","<"],["Snowflake",", "],["ThreadMember",">)>"]]],"meta":{"line":171,"file":"ThreadMemberManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":19,"file":"UserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"dmChannel","description":"The DM between the client's user and a user","access":"private","params":[{"name":"userId","description":"The user id","type":[[["Snowflake"]]]}],"returns":{"types":[[["DMChannel"]]],"nullable":true},"meta":{"line":41,"file":"UserManager.js","path":"src/managers"}},{"name":"createDM","description":"Creates a {@link DMChannel} between the client and a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":51,"file":"UserManager.js","path":"src/managers"}},{"name":"deleteDM","description":"Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":76,"file":"UserManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":91,"file":"UserManager.js","path":"src/managers"}},{"name":"send","description":"Sends a message to a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":108,"file":"UserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link UserResolvable} to a {@link User} object.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["User"]]],"nullable":true},"meta":{"line":117,"file":"UserManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":128,"file":"UserManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"UserManager.js","path":"src/managers"}},{"name":"UserNoteManager","description":"Manages API methods for Client and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"cache","description":"Cache User Note","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":17,"file":"UserNoteManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":38,"file":"UserNoteManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"UserNoteManager.js","path":"src/managers"}},{"name":"VoiceStateManager","description":"Manages API methods for VoiceStates and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["VoiceState",">"]]],"meta":{"line":21,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Obtains a user's voice state from discord or from the cache if it's already available.","examples":["// Fetch a member's voice state\nguild.voiceStates.fetch(\"66564597481480192\")\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"member","description":"The member whose voice state is to be fetched","type":[[["GuildMemberResolvable"]],[["me","'"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["VoiceState",">"]]],"meta":{"line":47,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"DiscordAPIError","description":"Represents an error from the Discord API.","extends":[[["Error"]]],"props":[{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":18,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":24,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned by Discord","type":[[["number"]]],"meta":{"line":30,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"httpStatus","description":"The HTTP status code","type":[[["number"]]],"meta":{"line":36,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":42,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"retries","description":"The number of times this request has been retried","type":[[["number"]]],"meta":{"line":52,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"captcha","description":"Captcha response data if the request requires a captcha","type":[[["Captcha"]],[["null"]]],"meta":{"line":67,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"isBlockedByCloudflare","description":"A special `40333` JSON error code is returned if your request is blocked by Cloudflare.\nThis may be due to a malformed request or improper user agent.\nThe response resembles a normal error structure:","type":[[["boolean"]]],"meta":{"line":81,"file":"DiscordAPIError.js","path":"src/rest"}}],"methods":[{"name":"flattenErrors","description":"Flattens an errors object returned from the API into an array.","scope":"static","access":"private","params":[{"name":"obj","description":"Discord errors object","type":[[["APIError"]]]},{"name":"key","description":"Used internally to determine key names of nested fields","optional":true,"type":[[["string"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":92,"file":"DiscordAPIError.js","path":"src/rest"}}],"meta":{"line":7,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPError","description":"Represents an HTTP error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"HTTPError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned from the request","type":[[["number"]]],"meta":{"line":21,"file":"HTTPError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"HTTPError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"HTTPError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":54,"file":"HTTPError.js","path":"src/rest"}}],"meta":{"line":7,"file":"HTTPError.js","path":"src/rest"}},{"name":"RateLimitError","description":"Represents a RateLimit error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"RateLimitError.js","path":"src/rest"}},{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]],"meta":{"line":21,"file":"RateLimitError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"RateLimitError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"RateLimitError.js","path":"src/rest"}},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":39,"file":"RateLimitError.js","path":"src/rest"}},{"name":"global","description":"Whether this rate limit is global","type":[[["boolean"]]],"meta":{"line":45,"file":"RateLimitError.js","path":"src/rest"}},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]],"meta":{"line":51,"file":"RateLimitError.js","path":"src/rest"}}],"meta":{"line":7,"file":"RateLimitError.js","path":"src/rest"}},{"name":"Shard","description":"A self-contained shard created by the {@link ShardingManager}. Each one has a {@link ChildProcess} that contains\nan instance of the bot and its {@link Client}. When its child process/worker exits for any reason, the shard will\nspawn a new one to replace it as necessary.","extends":[[["EventEmitter"]]],"deprecated":true,"props":[{"name":"manager","description":"Manager that created the shard","type":[[["ShardingManager"]]],"meta":{"line":31,"file":"Shard.js","path":"src/sharding"}},{"name":"id","description":"The shard's id in the manager","type":[[["number"]]],"meta":{"line":37,"file":"Shard.js","path":"src/sharding"}},{"name":"args","description":"Arguments for the shard's process (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":43,"file":"Shard.js","path":"src/sharding"}},{"name":"execArgv","description":"Arguments for the shard's process executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":49,"file":"Shard.js","path":"src/sharding"}},{"name":"env","description":"Environment variables for the shard's process, or workerData for the shard's worker","type":[[["Object"]]],"meta":{"line":55,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Whether the shard's {@link Client} is ready","type":[[["boolean"]]],"meta":{"line":66,"file":"Shard.js","path":"src/sharding"}},{"name":"process","description":"Process of the shard (if {@link ShardingManager#mode} is `process`)","nullable":true,"type":[[["ChildProcess"]]],"meta":{"line":72,"file":"Shard.js","path":"src/sharding"}},{"name":"worker","description":"Worker of the shard (if {@link ShardingManager#mode} is `worker`)","nullable":true,"type":[[["Worker"]]],"meta":{"line":78,"file":"Shard.js","path":"src/sharding"}},{"name":"_evals","description":"Ongoing promises for calls to {@link Shard#eval}, mapped by the `script` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":85,"file":"Shard.js","path":"src/sharding"}},{"name":"_fetches","description":"Ongoing promises for calls to {@link Shard#fetchClientValue}, mapped by the `prop` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":92,"file":"Shard.js","path":"src/sharding"}},{"name":"_exitListener","description":"Listener function for the {@link ChildProcess}' `exit` event","access":"private","type":[[["function"]]],"meta":{"line":99,"file":"Shard.js","path":"src/sharding"}}],"methods":[{"name":"spawn","description":"Forks a child process or creates a worker thread for the shard.\nYou should not need to call this manually.","params":[{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready\nbefore resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":109,"file":"Shard.js","path":"src/sharding"}},{"name":"kill","description":"Immediately kills the shard's process/worker and does not restart it.","meta":{"line":180,"file":"Shard.js","path":"src/sharding"}},{"name":"respawn","description":"Kills and restarts the shard's process/worker.","params":[{"name":"options","description":"Options for respawning the shard","optional":true,"type":[[["ShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":206,"file":"Shard.js","path":"src/sharding"}},{"name":"send","description":"Sends a message to the shard's process/worker.","params":[{"name":"message","description":"Message to send to the shard","type":[["*"]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":217,"file":"Shard.js","path":"src/sharding"}},{"name":"fetchClientValue","description":"Fetches a client property value of the shard.","examples":["shard.fetchClientValue('guilds.cache.size')\n .then(count => console.log(`${count} guilds in shard ${shard.id}`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["*",">"]]],"meta":{"line":240,"file":"Shard.js","path":"src/sharding"}},{"name":"eval","description":"Evaluates a script or function on the shard, in the context of the {@link Client}.","params":[{"name":"script","description":"JavaScript to run on the shard","type":[[["string"]],[["function"]]]},{"name":"context","description":"The context for the eval","optional":true,"type":[["*"]]}],"async":true,"returns":{"types":[[["Promise","<"],["*",">"]]],"description":"Result of the script execution"},"meta":{"line":280,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles a message received from the child process/worker.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"meta":{"line":322,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleExit","description":"Handles the shard's process/worker exiting.","access":"private","params":[{"name":"respawn","description":"Whether to spawn the shard again","optional":true,"default":"this.manager.respawn","type":[[["boolean"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready (`-1` or `Infinity` for no wait)","optional":true,"type":[[["number"]]]}],"meta":{"line":402,"file":"Shard.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":424,"file":"Shard.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":436,"file":"Shard.js","path":"src/sharding"}}],"events":[{"name":"spawn","description":"Emitted upon the creation of the shard's child process/worker.","params":[{"name":"process","description":"Child process/worker that was created","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":134,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Emitted upon the shard's {@link Client#event:shardReady} event.","meta":{"line":327,"file":"Shard.js","path":"src/sharding"}},{"name":"disconnect","description":"Emitted upon the shard's {@link Client#event:shardDisconnect} event.","meta":{"line":338,"file":"Shard.js","path":"src/sharding"}},{"name":"reconnecting","description":"Emitted upon the shard's {@link Client#event:shardReconnecting} event.","meta":{"line":349,"file":"Shard.js","path":"src/sharding"}},{"name":"message","description":"Emitted upon receiving a message from the child process/worker.","params":[{"name":"message","description":"Message that was received","type":[["*"]]}],"meta":{"line":387,"file":"Shard.js","path":"src/sharding"}},{"name":"death","description":"Emitted upon the shard's child process/worker exiting.","params":[{"name":"process","description":"Child process/worker that exited","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":403,"file":"Shard.js","path":"src/sharding"}}],"meta":{"line":20,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardClientUtil","description":"Helper class for sharded clients spawned as a child process/worker, such as from a {@link ShardingManager}.\nUtilizes IPC to send and receive data to/from the master process and other shards.","deprecated":true,"props":[{"name":"client","description":"Client for the shard","type":[[["Client"]]],"meta":{"line":19,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]],"meta":{"line":25,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"parentPort","description":"Message port for the master process (only when {@link ShardClientUtil#mode} is `worker`)","nullable":true,"type":[[["MessagePort"]]],"meta":{"line":31,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ids","description":"Array of shard ids of this client","readonly":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":64,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"count","description":"Total number of shards","readonly":true,"type":[[["number"]]],"meta":{"line":73,"file":"ShardClientUtil.js","path":"src/sharding"}}],"methods":[{"name":"send","description":"Sends a message to the master process.","emits":["Shard#event:message"],"params":[{"name":"message","description":"Message to send","type":[["*"]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":83,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","see":["{@link ShardingManager#fetchClientValues}"],"examples":["client.shard.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":108,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script or function on all shards, or a given shard, in the context of the {@link Client}s.","see":["{@link ShardingManager#broadcastEval}"],"examples":["client.shard.broadcastEval(client => client.guilds.cache.size)\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":141,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"respawnAll","description":"Requests a respawn of all shards.","see":["{@link ShardingManager#respawnAll}"],"params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the message being sent"},"meta":{"line":173,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles an IPC message.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"async":true,"meta":{"line":182,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_respond","description":"Sends a message to the master process, emitting an error from the client upon failure.","access":"private","params":[{"name":"type","description":"Type of response to send","type":[[["string"]]]},{"name":"message","description":"Message to send","type":[["*"]]}],"meta":{"line":208,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":259,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":271,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"singleton","description":"Creates/gets the singleton of this class.","scope":"static","params":[{"name":"client","description":"The client to use","type":[[["Client"]]]},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]]}],"returns":[[["ShardClientUtil"]]],"meta":{"line":230,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"shardIdForGuildId","description":"Get the shard id for a given guild id.","scope":"static","params":[{"name":"guildId","description":"Snowflake guild id to get shard id for","type":[[["Snowflake"]]]},{"name":"shardCount","description":"Number of shards","type":[[["number"]]]}],"returns":[[["number"]]],"meta":{"line":248,"file":"ShardClientUtil.js","path":"src/sharding"}}],"meta":{"line":13,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ShardingManager","description":"This is a utility class that makes multi-process sharding of a bot an easy and painless experience.\nIt works by spawning a self-contained {@link ChildProcess} or {@link Worker} for each individual shard, each\ncontaining its own instance of your bot's {@link Client}. They all have a line of communication with the master\nprocess, and there are several useful methods that utilize it in order to simplify tasks that are normally difficult\nwith sharding. It can spawn a specific number of shards or the amount that Discord suggests for the bot, and takes a\npath to your main bot script to launch for each one.","extends":[[["EventEmitter"]]],"deprecated":true,"construct":{"name":"ShardingManager","params":[{"name":"file","description":"Path to your shard script file","type":[[["string"]]]},{"name":"options","description":"Options for the sharding manager","optional":true,"type":[[["ShardingManagerOptions"]]]}]},"props":[{"name":"file","description":"Path to the shard script file","type":[[["string"]]],"meta":{"line":67,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardList","description":"List of shards this sharding manager spawns","type":[[["string"]],[["Array","<"],["number",">"]]],"meta":{"line":77,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"totalShards","description":"Amount of shards that all sharding managers spawn in total","type":[[["number"]]],"meta":{"line":97,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"mode","description":"Mode for shards to spawn with","type":[[["ShardingManagerMode"]]],"meta":{"line":112,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","type":[[["boolean"]]],"meta":{"line":121,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardArgs","description":"An array of arguments to pass to shards (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":127,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"execArgv","description":"An array of arguments to pass to the executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":133,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"token","description":"Token to use for obtaining the automatic shard count, and passing to shards","nullable":true,"type":[[["string"]]],"meta":{"line":139,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shards","description":"A collection of shards that this manager has spawned","type":[[["Collection","<"],["number",", "],["Shard",">"]]],"meta":{"line":145,"file":"ShardingManager.js","path":"src/sharding"}}],"methods":[{"name":"createShard","description":"Creates a single shard.\nUsing this method is usually not necessary if you use the spawn method.","params":[{"name":"id","description":"Id of the shard to create\nThis is usually not necessary to manually specify.","optional":true,"default":"this.shards.size","type":[[["number"]]]}],"returns":{"types":[[["Shard"]]],"description":"Note that the created shard needs to be explicitly spawned using its spawn method."},"meta":{"line":159,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"spawn","description":"Spawns multiple shards.","params":[{"name":"options","description":"Options for spawning shards","optional":true,"type":[[["MultipleShardSpawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":184,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcast","description":"Sends a message to all shards.","params":[{"name":"message","description":"Message to be sent to the shards","type":[["*"]]}],"returns":[[["Promise","<"],["Array","<"],["Shard",">>"]]],"meta":{"line":232,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script on all shards, or a given shard, in the context of the {@link Client}s.","params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":251,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","examples":["manager.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":266,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"_performOnShards","description":"Runs a method with given arguments on all shards, or a given shard.","access":"private","params":[{"name":"method","description":"Method name to run on each shard","type":[[["string"]]]},{"name":"args","description":"Arguments to pass through to the method call","type":[[["Array","<"],["*",">"]]]},{"name":"shard","description":"Shard to run on, all if undefined","optional":true,"type":[[["number"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the method execution"},"meta":{"line":278,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawnAll","description":"Kills all running shards and respawns them.","params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":308,"file":"ShardingManager.js","path":"src/sharding"}}],"events":[{"name":"shardCreate","description":"Emitted upon creating a shard.","params":[{"name":"shard","description":"Shard that was created","type":[[["Shard"]]]}],"meta":{"line":162,"file":"ShardingManager.js","path":"src/sharding"}}],"meta":{"line":23,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"AnonymousGuild","description":"Bundles common attributes and methods between {@link Guild} and {@link InviteGuild}","extends":[[["BaseGuild"]]],"abstract":true,"props":[{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"ApplicationCommand","description":"Represents an application command.","extends":[[["Base"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]],"meta":{"line":21,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"applicationId","description":"The parent application's id","type":[[["Snowflake"]]],"meta":{"line":27,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guild","description":"The guild this command is part of","nullable":true,"type":[[["Guild"]]],"meta":{"line":33,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guildId","description":"The guild's id this command is part of, this may be non-null when `guild` is `null` if the command\nwas fetched from the `ApplicationCommandManager`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":40,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"permissions","description":"The manager for permissions of this command on its guild or arbitrary guilds when the command is global","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":46,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"type","description":"The type of this application command","type":[[["ApplicationCommandType"]]],"meta":{"line":52,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"name","description":"The name of this command","type":[[["string"]]],"meta":{"line":63,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalizations","description":"The name localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":71,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalized","description":"The localized name for this command","nullable":true,"type":[[["string"]]],"meta":{"line":81,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"description","description":"The description of this command","type":[[["string"]]],"meta":{"line":91,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalizations","description":"The description localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":99,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalized","description":"The localized description for this command","nullable":true,"type":[[["string"]]],"meta":{"line":109,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"options","description":"The options of this command","type":[[["Array","<"],["ApplicationCommandOption",">"]]],"meta":{"line":119,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","deprecated":"Use {@link ApplicationCommand.defaultMemberPermissions} and {@link ApplicationCommand.dmPermission} instead.","type":[[["boolean"]]],"meta":{"line":131,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultMemberPermissions","description":"The default bitfield used to determine whether this command be used in a guild","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":140,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"dmPermission","description":"Whether the command can be used in DMs\nThis property is always `null` on guild commands","nullable":true,"type":[[["boolean"]]],"meta":{"line":153,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"version","description":"Autoincrementing version identifier updated during substantial record changes","type":[[["Snowflake"]]],"meta":{"line":163,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the command was created at","readonly":true,"type":[[["number"]]],"meta":{"line":172,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdAt","description":"The time the command was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":181,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"manager","description":"The manager that this command belongs to","readonly":true,"type":[[["ApplicationCommandManager"]]],"meta":{"line":190,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this application command.","examples":["// Edit the description of this command\ncommand.edit({\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":254,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of this ApplicationCommand","params":[{"name":"name","description":"The new name of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":263,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setNameLocalizations","description":"Edits the localized names of this ApplicationCommand","examples":["// Edit the name localizations of this command\ncommand.setLocalizedNames({\n 'en-GB': 'test',\n 'pt-BR': 'teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"nameLocalizations","description":"The new localized names for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":280,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescription","description":"Edits the description of this ApplicationCommand","params":[{"name":"description","description":"The new description of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":289,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescriptionLocalizations","description":"Edits the localized descriptions of this ApplicationCommand","examples":["// Edit the description localizations of this command\ncommand.setLocalizedDescriptions({\n 'en-GB': 'A test command',\n 'pt-BR': 'Um comando de teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"descriptionLocalizations","description":"The new localized descriptions for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":306,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultPermission","description":"Edits the default permission of this ApplicationCommand","deprecated":"Use {@link ApplicationCommand#setDefaultMemberPermissions} and {@link ApplicationCommand#setDMPermission} instead.","params":[{"name":"defaultPermission","description":"The default permission for this command","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":317,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultMemberPermissions","description":"Edits the default member permissions of this ApplicationCommand","params":[{"name":"defaultMemberPermissions","description":"The default member permissions required to run this command","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":327,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDMPermission","description":"Edits the DM permission of this ApplicationCommand","params":[{"name":"dmPermission","description":"Whether the command can be used in DMs","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":336,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setOptions","description":"Edits the options of this ApplicationCommand","params":[{"name":"options","description":"The options to set for this command","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":345,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"delete","description":"Deletes this command.","examples":["// Delete this command\ncommand.delete()\n .then(console.log)\n .catch(console.error);"],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":358,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"equals","description":"Whether this command equals another command. It compares all properties, so for most operations\nit is advisable to just compare `command.id === command2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"command","description":"The command to compare with","type":[[["ApplicationCommand"]],[["ApplicationCommandData"]],[["APIApplicationCommand"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":371,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"optionsEqual","description":"Recursively checks that all options for an {@link ApplicationCommand} are equal to the provided options.\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","params":[{"name":"existing","description":"The options on the existing command,\nshould be {@link ApplicationCommand#options}","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"options","description":"The options to compare against","type":[[["Array","<"],["ApplicationCommandOptionData",">"]],[["Array","<"],["APIApplicationCommandOption",">"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":423,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"_optionEquals","description":"Checks that an option for an {@link ApplicationCommand} is equal to the provided option\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","access":"private","params":[{"name":"existing","description":"The option on the existing command,\nshould be from {@link ApplicationCommand#options}","type":[[["ApplicationCommandOptionData"]]]},{"name":"option","description":"The option to compare against","type":[[["ApplicationCommandOptionData"]],[["APIApplicationCommandOption"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options or choices are in the same\norder in their array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":447,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an {@link ApplicationCommandOptionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"option","description":"The option to transform","type":[[["ApplicationCommandOptionData"]],[["ApplicationCommandOption"]]]},{"name":"received","description":"Whether this option has been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandOption"]]],"meta":{"line":540,"file":"ApplicationCommand.js","path":"src/structures"}}],"meta":{"line":13,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationRoleConnectionMetadata","description":"Role connection metadata object for an application.","props":[{"name":"name","description":"The name of this metadata field","type":[[["string"]]],"meta":{"line":14,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}},{"name":"nameLocalizations","description":"The name localizations for this metadata field","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":20,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}},{"name":"description","description":"The description of this metadata field","type":[[["string"]]],"meta":{"line":26,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}},{"name":"descriptionLocalizations","description":"The description localizations for this metadata field","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":32,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}},{"name":"key","description":"The dictionary key for this metadata field","type":[[["string"]]],"meta":{"line":38,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}},{"name":"type","description":"The type of this metadata field","type":[[["ApplicationRoleConnectionMetadataType"]]],"meta":{"line":44,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}}],"meta":{"line":8,"file":"ApplicationRoleConnectionMetadata.js","path":"src/structures"}},{"name":"AutocompleteInteraction","description":"Represents an autocomplete interaction.","extends":[[["Interaction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":16,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":32,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"responded","description":"Whether this interaction has already received a response","type":[[["boolean"]]],"meta":{"line":38,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"options","description":"The options passed to the command","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":44,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":54,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":65,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"respond","description":"Sends results for the autocomplete of this interaction.","examples":["// respond to autocomplete interaction\ninteraction.respond([\n {\n name: 'Option 1',\n value: 'option1',\n },\n])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the autocomplete","type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":93,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":12,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"AutoModerationActionExecution","description":"Represents the structure of an executed action when an {@link AutoModerationRule} is triggered.","props":[{"name":"guild","description":"The guild where this action was executed from.","type":[[["Guild"]]],"meta":{"line":14,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"action","description":"The action that was executed.","type":[[["AutoModerationAction"]]],"meta":{"line":20,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleId","description":"The id of the auto moderation rule this action belongs to.","type":[[["Snowflake"]]],"meta":{"line":26,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleTriggerType","description":"The trigger type of the auto moderation rule which was triggered.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":32,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"userId","description":"The id of the user that triggered this action.","type":[[["Snowflake"]]],"meta":{"line":38,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel where this action was triggered from.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":44,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"messageId","description":"The id of the message that triggered this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"alertSystemMessageId","description":"The id of any system auto moderation messages posted as a result of this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"content","description":"The content that triggered this action.\nThis property requires the {@link Intents.FLAGS.MESSAGE_CONTENT} privileged gateway intent.","type":[[["string"]]],"meta":{"line":64,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedKeyword","description":"The word or phrase configured in the rule that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedContent","description":"The substring in content that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":76,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"autoModerationRule","description":"The auto moderation rule this action belongs to.","readonly":true,"nullable":true,"type":[[["AutoModerationRule"]]],"meta":{"line":84,"file":"AutoModerationActionExecution.js","path":"src/structures"}}],"meta":{"line":8,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"AutoModerationRule","description":"Represents an auto moderation rule.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":24,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"guild","description":"The guild this auto moderation rule is for.","type":[[["Guild"]]],"meta":{"line":30,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"creatorId","description":"The user that created this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":36,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerType","description":"The trigger type of this auto moderation rule.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":42,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"name","description":"The name of this auto moderation rule.","type":[[["string"]]],"meta":{"line":53,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"eventType","description":"The event type of this auto moderation rule.","type":[[["AutoModerationRuleEventType"]]],"meta":{"line":61,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerMetadata","description":"The trigger metadata of the rule.","type":[[["AutoModerationTriggerMetadata"]]],"meta":{"line":83,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"actions","description":"The actions of this auto moderation rule.","type":[[["Array","<"],["AutoModerationAction",">"]]],"meta":{"line":113,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"enabled","description":"Whether this auto moderation rule is enabled.","type":[[["boolean"]]],"meta":{"line":128,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptRoles","description":"The roles exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":136,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptChannels","description":"The channels exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":146,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this auto moderation rule.","params":[{"name":"options","description":"Options for editing this auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":157,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"delete","description":"Deletes this auto moderation rule.","params":[{"name":"reason","description":"The reason for deleting this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setName","description":"Sets the name for this auto moderation rule.","params":[{"name":"name","description":"The name of this auto moderation rule","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":176,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEventType","description":"Sets the event type for this auto moderation rule.","params":[{"name":"eventType","description":"The event type of this auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"reason","description":"The reason for changing the event type of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":186,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setKeywordFilter","description":"Sets the keyword filter for this auto moderation rule.","params":[{"name":"keywordFilter","description":"The keyword filter of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the keyword filter of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":196,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setRegexPatterns","description":"Sets the regular expression patterns for this auto moderation rule.","params":[{"name":"regexPatterns","description":"The regular expression patterns of this auto moderation rule\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the regular expression patterns of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":207,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setPresets","description":"Sets the presets for this auto moderation rule.","params":[{"name":"presets","description":"The presets of this auto moderation rule","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"reason","description":"The reason for changing the presets of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":217,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setAllowList","description":"Sets the allow list for this auto moderation rule.","params":[{"name":"allowList","description":"The allow list of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the allow list of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":227,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionTotalLimit","description":"Sets the mention total limit for this auto moderation rule.","params":[{"name":"mentionTotalLimit","description":"The mention total limit of this auto moderation rule","type":[[["number"]]]},{"name":"reason","description":"The reason for changing the mention total limit of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":237,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionRaidProtectionEnabled","description":"Sets whether to enable mention raid protection for this auto moderation rule.","params":[{"name":"mentionRaidProtectionEnabled","description":"Whether to enable mention raid protection for this auto moderation rule","type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the mention raid protection of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":248,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setActions","description":"Sets the actions for this auto moderation rule.","params":[{"name":"actions","description":"The actions of this auto moderation rule","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"reason","description":"The reason for changing the actions of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":258,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEnabled","description":"Sets whether this auto moderation rule should be enabled.","params":[{"name":"enabled","description":"Whether to enable this auto moderation rule","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for enabling or disabling this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":268,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptRoles","description":"Sets the exempt roles for this auto moderation rule.","params":[{"name":"exemptRoles","description":"The exempt roles of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt roles of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":278,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptChannels","description":"Sets the exempt channels for this auto moderation rule.","params":[{"name":"exemptChannels","description":"The exempt channels of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt channels of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":289,"file":"AutoModerationRule.js","path":"src/structures"}}],"meta":{"line":16,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"Base","description":"Represents a data model that is identifiable by a Snowflake (i.e. Discord API data models).","abstract":true,"props":[{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"Base.js","path":"src/structures"}},{"name":"BaseCommandInteraction","description":"Represents a command interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"abstract":true,"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"BaseGuild","description":"The base class for {@link Guild}, {@link OAuth2Guild} and {@link InviteGuild}.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"BaseGuild.js","path":"src/structures"}},{"name":"BaseGuildEmoji","description":"Parent class for {@link GuildEmoji} and {@link GuildPreviewEmoji}.","extends":[[["Emoji"]]],"abstract":true,"props":[{"name":"guild","description":"The guild this emoji is a part of","type":[[["Guild"]],[["GuildPreview"]]],"meta":{"line":18,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"BaseGuildTextChannel","description":"Represents a text-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":21,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":27,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":33,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":58,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":66,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":82,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":98,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":108,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":123,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":161,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":171,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":13,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseGuildVoiceChannel","description":"Represents a voice-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":28,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":41,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":49,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":57,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":65,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":75,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":87,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"status","description":"The status of the voice channel (max 500 characters)","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":108,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":123,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":132,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":156,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":166,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","examples":["// Set the bitrate of a voice channel\nchannel.setBitrate(48_000)\n .then(channel => console.log(`Set bitrate to ${channel.bitrate}bps for ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":181,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":197,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","examples":["// Set the user limit of a voice channel\nchannel.setUserLimit(42)\n .then(channel => console.log(`Set user limit to ${channel.userLimit} for ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":212,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":222,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":15,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"BaseMessageComponent","description":"Represents an interactive component of a Message or Modal. It should not be necessary to construct this directly.\nSee {@link MessageComponent}","construct":{"name":"BaseMessageComponent","params":[{"name":"data","description":"The options for this component","optional":true,"default":"{}","type":[[["BaseMessageComponent"]],[["BaseMessageComponentOptions"]]]}]},"props":[{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"data","description":"The data for this component","type":[[["MessageComponentOptions"]]],"meta":{"line":60,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"id","description":"The id of this component","readonly":true,"type":[[["number"]]],"meta":{"line":68,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"create","description":"Constructs a component based on the type of the incoming data","scope":"static","access":"private","params":[{"name":"data","description":"Data for a MessageComponent","type":[[["MessageComponentOptions"]]]},{"name":"client","description":"Client constructing this component","optional":true,"type":[[["Client"]],[["WebhookClient"]]]}],"returns":{"types":[[["MessageComponent"]],[["ModalComponent"]]],"nullable":true},"meta":{"line":79,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a component","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":161,"file":"BaseMessageComponent.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"ButtonInteraction","description":"Represents a button interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"ButtonInteraction.js","path":"src/structures"}},{"name":"CallState","description":"Represents a call","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The channel ID of the call","type":[[["Snowflake"]]],"meta":{"line":17,"file":"CallState.js","path":"src/structures"}},{"name":"region","description":"The region of the call","type":[[["string"]]],"meta":{"line":30,"file":"CallState.js","path":"src/structures"}},{"name":"channel","description":"The channel of the call","type":[[["DMChannel"]],[["GroupDMChannel"]]],"meta":{"line":41,"file":"CallState.js","path":"src/structures"}},{"name":"ringing","description":"The list of user ID who is ringing","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":58,"file":"CallState.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setRTCRegion","description":"Sets the voice region of the call","params":[{"name":"region","description":"Region of the call","type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":50,"file":"CallState.js","path":"src/structures"}}],"meta":{"line":10,"file":"CallState.js","path":"src/structures"}},{"name":"CategoryChannel","description":"Represents a guild category channel on Discord.","extends":[[["GuildChannel"]]],"props":[{"name":"parentId","description":"The id of the parent of this channel.","type":[[["null"]]],"meta":{"line":10,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent of this channel.","readonly":true,"type":[[["null"]]],"meta":{"line":16,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"children","description":"Channels that are a part of this category","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":28,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setParent","description":"Sets the category parent of this channel.\nIt is not possible to set the parent of a CategoryChannel.","params":[{"name":"channel","description":"The channel to set as parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":32,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"createChannel","description":"Creates a new channel within this category.\nYou cannot create a channel of type `GUILD_CATEGORY` inside a CategoryChannel.","params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","type":[[["CategoryCreateChannelOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":77,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"Channel","description":"Represents any channel on Discord.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":33,"file":"Channel.js","path":"src/structures"}},{"name":"ClientPresence","description":"Represents the client's presence.","extends":[[["Presence"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":45,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":61,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":70,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":80,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence (Always `Activity[]` if not ClientUser)","type":[[["Array","<"],["CustomStatus",">"]],[["Array","<"],["RichPresence",">"]],[["Array","<"],["SpotifyRPC",">"]],[["Array","<"],["Activity",">"]]],"meta":{"line":90,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":115,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":125,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"set","description":"Sets the client's presence","params":[{"name":"presence","description":"The data to set the presence to","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":23,"file":"ClientPresence.js","path":"src/structures"}},{"name":"_parse","description":"Parses presence data into a packet ready to be sent to Discord","access":"private","params":[{"name":"presence","description":"The data to parse","type":[[["PresenceData"]]]}],"returns":[[["APIPresence"]]],"meta":{"line":37,"file":"ClientPresence.js","path":"src/structures"}},{"name":"equals","description":"Whether this presence is equal to another.","inherits":"Presence#equals","inherited":true,"params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":154,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":13,"file":"ClientPresence.js","path":"src/structures"}},{"name":"ClientUser","description":"Represents the logged in client's Discord user.","extends":[[["User"]]],"props":[{"name":"verified","description":"Whether or not this account has been verified","type":[[["boolean"]]],"meta":{"line":32,"file":"ClientUser.js","path":"src/structures"}},{"name":"mfaEnabled","description":"If the bot's {@link Application#owner Owner} has MFA enabled on their account","nullable":true,"type":[[["boolean"]]],"meta":{"line":40,"file":"ClientUser.js","path":"src/structures"}},{"name":"purchasedFlags","description":"Purchased state of the client user.","type":[[["Readonly","<"],["PurchasedFlags",">"]]],"meta":{"line":52,"file":"ClientUser.js","path":"src/structures"}},{"name":"premiumUsageFlags","description":"Premium usage state of the client user.","type":[[["Readonly","<"],["PremiumUsageFlags",">"]]],"meta":{"line":62,"file":"ClientUser.js","path":"src/structures"}},{"name":"phone","description":"Phone number of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"ClientUser.js","path":"src/structures"}},{"name":"nsfwAllowed","description":"Whether or not the client user is allowed to send NSFW messages [iOS device].","nullable":true,"type":[[["boolean"]]],"meta":{"line":80,"file":"ClientUser.js","path":"src/structures"}},{"name":"email","description":"Email address of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":88,"file":"ClientUser.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":97,"file":"ClientUser.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":106,"file":"ClientUser.js","path":"src/structures"}},{"name":"premiumType","description":"Premium types denote the level of premium a user has.","see":["{@link https://discord-userdoccers.vercel.app/resources/user#premium-type}"],"type":[[["number"]]],"meta":{"line":115,"file":"ClientUser.js","path":"src/structures"}},{"name":"presence","description":"Represents the client user's presence","readonly":true,"type":[[["ClientPresence"]]],"meta":{"line":124,"file":"ClientUser.js","path":"src/structures"}},{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":83,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"User.js","path":"src/structures"}},{"name":"bannerColor","description":"The user banner's hex\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":105,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":116,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":126,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":136,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationData","description":"The user avatar decoration's data","nullable":true,"type":[[["AvatarDecorationData"]]],"meta":{"line":151,"file":"User.js","path":"src/structures"}},{"name":"primaryGuild","description":"The primary guild of the user","nullable":true,"type":[[["UserPrimaryGuild"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"collectibles","description":"The user's collectibles","nullable":true,"type":[[["Collectibles"]]],"meta":{"line":208,"file":"User.js","path":"src/structures"}},{"name":"clan","description":"The primary clan the user is in","nullable":true,"deprecated":"Use `primaryGuild` instead","type":[[["PrimaryGuild"]]],"meta":{"line":229,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"deprecated":"Use `avatarDecorationData` instead\nRemoved in v4","type":[[["string"]]],"meta":{"line":239,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":248,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":257,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":266,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":312,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":361,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":374,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":383,"file":"User.js","path":"src/structures"}},{"name":"note","description":"The function returns the note associated with a specific client ID from a cache.","nullable":true,"type":[[["string"]]],"meta":{"line":546,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":555,"file":"User.js","path":"src/structures"}},{"name":"relationship","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipType"]]],"meta":{"line":586,"file":"User.js","path":"src/structures"}},{"name":"friendNickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":596,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits the logged in client.","params":[{"name":"options","description":"The new data","type":[[["ClientUserEditData"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":142,"file":"ClientUser.js","path":"src/structures"}},{"name":"setUsername","description":"Sets the username of the logged in client.\nChanging usernames in Discord is heavily rate limited, with only 2 requests\nevery hour. Use this sparingly!","examples":["// Set username\nclient.user.setUsername('discordjs', 'passw@rd')\n .then(user => console.log(`My new username is ${user.username}`))\n .catch(console.error);"],"params":[{"name":"username","description":"The new username","type":[[["string"]]]},{"name":"password","description":"Current Password","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":161,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the avatar of the logged in client.","examples":["// Set avatar\nclient.user.setAvatar('./avatar.png')\n .then(user => console.log(`New avatar set!`))\n .catch(console.error);"],"params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":175,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPresence","description":"Sets the full presence of the client user.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's presence\nclient.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' });"],"params":[{"name":"data","description":"Data for the presence","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":207,"file":"ClientUser.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the client user.","examples":["// Set the client user's status\nclient.user.setStatus('idle');"],"params":[{"name":"status","description":"Status to change to","type":[[["PresenceStatusData"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":229,"file":"ClientUser.js","path":"src/structures"}},{"name":"setActivity","description":"Sets the activity the client user is playing.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's activity\nclient.user.setActivity('discord.js', { type: 'WATCHING' });"],"params":[{"name":"name","description":"Activity being played, or options for setting the activity","type":[[["string"]],[["ActivityOptions"]]]},{"name":"options","description":"Options for setting the activity","optional":true,"type":[[["ActivityOptions"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":252,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAFK","description":"Sets/removes the AFK flag for the client user.","params":[{"name":"afk","description":"Whether or not the user is AFK","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardId","description":"Shard Id(s) to have the AFK flag set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":265,"file":"ClientUser.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the banner of the logged in client.","examples":["// Set banner\nclient.user.setBanner('./banner.png')\n .then(user => console.log(`New banner set!`))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":279,"file":"ClientUser.js","path":"src/structures"}},{"name":"setHypeSquad","description":"Set HyperSquad House","examples":["// Set HyperSquad HOUSE_BRAVERY\nclient.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY');\n// Leave\nclient.user.setHypeSquad(0);"],"params":[{"name":"type","description":"* `LEAVE`: 0\n* `HOUSE_BRAVERY`: 1\n* `HOUSE_BRILLIANCE`: 2\n* `HOUSE_BALANCE`: 3","type":[[["string"]],[["number"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":298,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAccentColor","description":"Set Accent color","params":[{"name":"color","description":"Color to set","default":null,"type":[[["ColorResolvable"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":331,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set About me","params":[{"name":"bio","description":"Bio to set","optional":true,"default":null,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":340,"file":"ClientUser.js","path":"src/structures"}},{"name":"createFriendInvite","description":"Create an invite [Friend Invites]\nmaxAge: 604800 | maxUses: 1","see":["{@link https://github.com/13-05/hidden-disc-docs#js-snippet-for-creating-friend-invites}"],"examples":["// Options not working\nclient.user.createFriendInvite();\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":355,"file":"ClientUser.js","path":"src/structures"}},{"name":"getAllFriendInvites","description":"Get all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":366,"file":"ClientUser.js","path":"src/structures"}},{"name":"revokeAllFriendInvites","description":"Revoke all friend invites","returns":[[["Promise","<"],["void",">"]]],"meta":{"line":379,"file":"ClientUser.js","path":"src/structures"}},{"name":"setSamsungActivity","description":"Sets Discord Playing status to \"Playing on Samsung Galaxy\". Only selected gamss from discords database works","examples":["// Set the client user's status\nclient.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');\n// Update\nclient.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');\n// Stop\nclient.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');"],"params":[{"name":"packageName","description":"Android package name","type":[[["string"]]]},{"name":"type","description":"Must be START, UPDATE, or STOP","default":"START","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":396,"file":"ClientUser.js","path":"src/structures"}},{"name":"stopRinging","description":"Stop ringing","params":[{"name":"channel","description":"DMChannel | GroupDMChannel","type":[[["ChannelResolvable"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":416,"file":"ClientUser.js","path":"src/structures"}},{"name":"fetchBurstCredit","description":"Super Reactions","returns":[[["Promise","<"],["number",">"]]],"meta":{"line":426,"file":"ClientUser.js","path":"src/structures"}},{"name":"setGlobalName","description":"Set global display name","params":[{"name":"globalName","description":"The new display name","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":435,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPronouns","description":"Set pronouns","params":[{"name":"pronouns","description":"Your pronouns","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":444,"file":"ClientUser.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","inherits":"User#avatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":275,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","inherits":"User#avatarDecorationURL","inherited":true,"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":284,"file":"User.js","path":"src/structures"}},{"name":"clanBadgeURL","description":"A link to the user's guild tag badge.","inherits":"User#clanBadgeURL","inherited":true,"deprecated":true,"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":294,"file":"User.js","path":"src/structures"}},{"name":"guildTagBadgeURL","description":"A link to the user's guild tag badge.","inherits":"User#guildTagBadgeURL","inherited":true,"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","inherits":"User#displayAvatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":326,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","inherits":"User#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":348,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","inherits":"User#createDM","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":392,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","inherits":"User#deleteDM","inherited":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":400,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","inherits":"User#equals","inherited":true,"params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":411,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","inherits":"User#_equals","inherited":true,"params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":441,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","inherits":"User#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":476,"file":"User.js","path":"src/structures"}},{"name":"getProfile","description":"Returns a user profile object for a given user ID.\nThis endpoint requires one of the following:\n- The user is a bot\n- The user shares a mutual guild with the current user\n- The user is a friend of the current user\n- The user is a friend suggestion of the current user\n- The user has an outgoing friend request to the current user","see":["{@link https://discord-userdoccers.vercel.app/resources/user#response-body}"],"inherits":"User#getProfile","inherited":true,"params":[{"name":"guildId","description":"The guild ID to get the user's member profile in","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["Object",">"]]],"meta":{"line":492,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","inherits":"User#toString","inherited":true,"examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"The function updates the note of a user and returns the updated user.","inherits":"User#setNote","inherited":true,"params":[{"name":"note","description":"The `note` parameter is the new value that you want to set for the note of the\nuser. It is an optional parameter and its default value is `null`.","optional":true,"default":null,"type":[[["string"]],[["null"]],[["undefined"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["User",">"]]],"description":"The `setNote` method is returning the `User` object."},"meta":{"line":537,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","inherits":"User#sendFriendRequest","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":568,"file":"User.js","path":"src/structures"}},{"name":"deleteRelationship","description":"Unblock / Unfriend / Cancels a friend request","inherits":"User#deleteRelationship","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":577,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","inherits":"User#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":601,"file":"User.js","path":"src/structures"}}],"meta":{"line":16,"file":"ClientUser.js","path":"src/structures"}},{"name":"CommandInteraction","description":"Represents a command interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The options passed to the command.","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"Returns a string representation of the command interaction.\nThis can then be copied by a user and executed again in a new command while keeping the option order.","returns":[[["string"]]],"meta":{"line":30,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":10,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOptionResolver","description":"A resolver for command interaction options.","props":[{"name":"client","description":"The client that instantiated this.","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_group","description":"The name of the subcommand group.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":23,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_subcommand","description":"The name of the subcommand.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":30,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_hoistedOptions","description":"The bottom-level options for the interaction.\nIf there is a subcommand (or subcommand and group), this is the options for the subcommand.","access":"private","type":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":38,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"data","description":"The interaction options array.","readonly":true,"type":[[["ReadonlyArray","<"],["CommandInteractionOption",">"]]],"meta":{"line":51,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"resolved","description":"The interaction resolved data","type":[[["Readonly","<"],["CommandInteractionResolvedData",">"]]],"meta":{"line":59,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"methods":[{"name":"get","description":"Gets an option by its name.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":73,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_getTypedOption","description":"Gets an option by name and property and checks its type.","access":"private","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"type","description":"The type of the option.","type":[[["ApplicationCommandOptionType"]]]},{"name":"properties","description":"The properties to check for for `required`.","type":[[["Array","<"],["string",">"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":93,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommand","description":"Gets the selected subcommand.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand, or null if not set and not required.","nullable":true},"meta":{"line":110,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommandGroup","description":"Gets the selected subcommand group.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand group.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand group, or null if not set and not required.","nullable":true},"meta":{"line":122,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getBoolean","description":"Gets a boolean option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["boolean"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":135,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getChannel","description":"Gets a channel option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":147,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getString","description":"Gets a string option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":158,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getInteger","description":"Gets an integer option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":169,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getNumber","description":"Gets a number option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":180,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getUser","description":"Gets a user option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":191,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMember","description":"Gets a member option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildMember"]],[["APIGuildMember"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":203,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getRole","description":"Gets a role option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":214,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMentionable","description":"Gets a mentionable option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]],[["GuildMember"]],[["APIGuildMember"]],[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":226,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMessage","description":"Gets a message option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Message"]],[["APIMessage"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":238,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getFocused","description":"Gets the focused option.","params":[{"name":"getFull","description":"Whether to get the full option object","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]],[["AutocompleteFocusedOption"]]],"description":"The value of the option, or the whole option if getFull is true"},"meta":{"line":258,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getAttachment","description":"Gets an attachment option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":270,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"meta":{"line":8,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"ContainerComponent","construct":{"name":"ContainerComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["ContainerComponent"]],[["APIContainerComponent"]]]}]},"props":[{"name":"components","description":"Components of the type action row, text display, section, media gallery, separator, or file","type":[[["Array","<"],["ContainerComponents",">"]]],"meta":{"line":29,"file":"ContainerComponent.js","path":"src/structures"}},{"name":"accentColor","description":"Color for the accent on the container as RGB from 0x000000 to 0xFFFFFF","type":[[["Number"]]],"meta":{"line":35,"file":"ContainerComponent.js","path":"src/structures"}},{"name":"spoiler","description":"Whether the container should be a spoiler (or blurred out). Defaults to false.","type":[[["Boolean"]]],"meta":{"line":41,"file":"ContainerComponent.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hex accent color of this container","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":49,"file":"ContainerComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APIContainerComponent"]]],"meta":{"line":58,"file":"ContainerComponent.js","path":"src/structures"}}],"meta":{"line":17,"file":"ContainerComponent.js","path":"src/structures"}},{"name":"ContextMenuInteraction","description":"Represents a context menu interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"DirectoryChannel","description":"Represents a channel that displays a directory of guilds.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The channel's name","type":[[["string"]]],"meta":{"line":16,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"DMChannel","description":"Represents a direct message channel between two users.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages belonging to this channel","type":[[["MessageManager"]]],"meta":{"line":25,"file":"DMChannel.js","path":"src/structures"}},{"name":"recipient","description":"The recipient on the other end of the DM","type":[[["User"]]],"meta":{"line":36,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":44,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":52,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequest","description":"Whether the channel is a message request","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequestTimestamp","description":"The timestamp when the message request was created","nullable":true,"type":[[["number"]]],"meta":{"line":70,"file":"DMChannel.js","path":"src/structures"}},{"name":"partial","description":"Whether this DMChannel is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":110,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":165,"file":"DMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":180,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":189,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"acceptMessageRequest","description":"Accept this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":80,"file":"DMChannel.js","path":"src/structures"}},{"name":"cancelMessageRequest","description":"Cancel this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":97,"file":"DMChannel.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this DMChannel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":119,"file":"DMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the recipient's mention instead of the\nDMChannel object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":131,"file":"DMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this DMChannel.","returns":[[["undefined"]]],"meta":{"line":139,"file":"DMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","returns":[[["Promise","<"],["void",">"]]],"meta":{"line":152,"file":"DMChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":14,"file":"DMChannel.js","path":"src/structures"}},{"name":"Emoji","description":"Represents an emoji, see {@link GuildEmoji} and {@link ReactionEmoji}.","extends":[[["Base"]]],"props":[{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":27,"file":"Emoji.js","path":"src/structures"}},{"name":"FileComponent","construct":{"name":"FileComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["FileComponent"]],[["APIFileComponent"]]]}]},"props":[{"name":"file","description":"This unfurled media item is unique in that it only supports attachment references using the attachment:// syntax","type":[[["UnfurledMediaItem"]]],"meta":{"line":28,"file":"FileComponent.js","path":"src/structures"}},{"name":"spoiler","description":"Whether the container should be a spoiler (or blurred out). Defaults to false.","type":[[["Boolean"]]],"meta":{"line":34,"file":"FileComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APIFileComponent"]]],"meta":{"line":40,"file":"FileComponent.js","path":"src/structures"}}],"meta":{"line":16,"file":"FileComponent.js","path":"src/structures"}},{"name":"ForumChannel","description":"Represents a forum channel.","extends":[[["ThreadOnlyChannel"]]],"props":[{"name":"defaultForumLayout","description":"The default layout type used to display posts","type":[[["ForumLayoutType"]]],"meta":{"line":17,"file":"ForumChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildForumThreadManager"]]],"meta":{"line":53,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"availableTags","description":"The set of tags that can be used in this channel.","type":[[["Array","<"],["GuildForumTag",">"]]],"meta":{"line":65,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultReactionEmoji","description":"The emoji to show in the add reaction button on a thread in a guild forum channel","nullable":true,"type":[[["DefaultReactionEmoji"]]],"meta":{"line":75,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":86,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel.","nullable":true,"type":[[["ThreadAutoArchiveDuration"]]],"meta":{"line":106,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If this channel is considered NSFW.","type":[[["boolean"]]],"meta":{"line":116,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of this channel.","nullable":true,"type":[[["string"]]],"meta":{"line":126,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultSortOrder","description":"The default sort order mode used to order posts","nullable":true,"type":[[["SortOrderType"]]],"meta":{"line":134,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setDefaultForumLayout","description":"Sets the default forum layout type used to display posts","params":[{"name":"defaultForumLayout","description":"The default forum layout type to set on this channel","type":[[["ForumLayoutType"]]]},{"name":"reason","description":"Reason for changing the default forum layout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":26,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setAvailableTags","description":"Sets the available tags for this forum channel","inherits":"ThreadOnlyChannel#setAvailableTags","inherited":true,"params":[{"name":"availableTags","description":"The tags to set as available in this channel","type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"reason","description":"Reason for changing the available tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":146,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultReactionEmoji","description":"Sets the default reaction emoji for this channel","inherits":"ThreadOnlyChannel#setDefaultReactionEmoji","inherited":true,"params":[{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"reason","description":"Reason for changing the default reaction emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":156,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultThreadRateLimitPerUser","description":"Sets the default rate limit per user (slowmode) for new threads in this channel","inherits":"ThreadOnlyChannel#setDefaultThreadRateLimitPerUser","inherited":true,"params":[{"name":"defaultThreadRateLimitPerUser","description":"The rate limit to set on newly created threads in this channel","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the default rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":166,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultSortOrder","description":"Sets the default sort order mode used to order posts","inherits":"ThreadOnlyChannel#setDefaultSortOrder","inherited":true,"params":[{"name":"defaultSortOrder","description":"The default sort order mode to set on this channel","nullable":true,"type":[[["SortOrderType"]]]},{"name":"reason","description":"Reason for changing the default sort order","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":176,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"ThreadOnlyChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":190,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"ThreadOnlyChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":200,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"ThreadOnlyChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":210,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"ThreadOnlyChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":225,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"ThreadOnlyChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"ThreadOnlyChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"ThreadOnlyChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"ThreadOnlyChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":10,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GroupDMChannel","description":"Represents a Group DM Channel on Discord.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages belonging to this channel","type":[[["MessageManager"]]],"meta":{"line":26,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"ownerId","description":"The user id of the owner of this Group DM Channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":44,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"name","description":"The name of this Group DM Channel","nullable":true,"type":[[["string"]]],"meta":{"line":74,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"icon","description":"The hash of the channel icon","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"recipients","description":"The recipients of this Group DM Channel.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":100,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"owner","description":"The owner of this Group DM Channel","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":112,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"partial","description":"Whether this DMChannel is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":121,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":335,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":350,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":359,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this channel's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":91,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"delete","description":"Leave this Group DM Channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"slient","description":"Leave without notifying other members","default":false,"nullable":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":135,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the recipient's mention instead of the\nGroupDMChannel object.","examples":["// Logs: Hello from Group Test!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":156,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"edit","description":"Edit channel data","examples":["// Set the channel name\nchannel.edit({\n name: 'Group Test',\n})\n .then(updated => console.log(`New channel name ${updated}`))\n .catch(console.error);"],"params":[{"name":"data","description":"Data","type":[[["GroupDMChannelEditData"]]]}],"async":true,"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":194,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"setName","description":"Renames this Group DM Channel.","params":[{"name":"name","description":"Name of the channel","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":215,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"setIcon","description":"Sets the icon of this Group DM Channel.","params":[{"name":"icon","description":"Icon of the channel","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]}],"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":224,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"setOwner","description":"Changes the owner of this Group DM Channel.","params":[{"name":"user","description":"User to transfer ownership to","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":233,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"addUser","description":"Adds a user to this Group DM Channel.","params":[{"name":"user","description":"User to add to the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":246,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"removeUser","description":"Removes a user from this Group DM Channel.","params":[{"name":"user","description":"User to remove from the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":257,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"getInvite","description":"Gets the invite for this Group DM Channel.","async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":267,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"fetchAllInvite","description":"Get all the invites for this Group DM Channel.","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":280,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"removeInvite","description":"Delete invites from this Group DM Channel.","params":[{"name":"invite","description":"Invite to add to the channel","type":[[["InviteResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GroupDMChannel",">"]]],"meta":{"line":290,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","params":[{"name":"recipients","description":"Array of recipients","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":304,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this Group DMChannel.","returns":[[["undefined"]]],"meta":{"line":321,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"Guild","description":"Represents a guild (or a server) on Discord.\nIt's recommended to see if a guild is available before performing operations or reading data from it. You can\ncheck this with {@link Guild#available}.","extends":[[["AnonymousGuild"]]],"props":[{"name":"members","description":"A manager of the members belonging to this guild","type":[[["GuildMemberManager"]]],"meta":{"line":65,"file":"Guild.js","path":"src/structures"}},{"name":"channels","description":"A manager of the channels belonging to this guild","type":[[["GuildChannelManager"]]],"meta":{"line":71,"file":"Guild.js","path":"src/structures"}},{"name":"bans","description":"A manager of the bans belonging to this guild","type":[[["GuildBanManager"]]],"meta":{"line":77,"file":"Guild.js","path":"src/structures"}},{"name":"roles","description":"A manager of the roles belonging to this guild","type":[[["RoleManager"]]],"meta":{"line":83,"file":"Guild.js","path":"src/structures"}},{"name":"presences","description":"A manager of the presences belonging to this guild","type":[[["PresenceManager"]]],"meta":{"line":89,"file":"Guild.js","path":"src/structures"}},{"name":"voiceStates","description":"A manager of the voice states of this guild","type":[[["VoiceStateManager"]]],"meta":{"line":95,"file":"Guild.js","path":"src/structures"}},{"name":"stageInstances","description":"A manager of the stage instances of this guild","type":[[["StageInstanceManager"]]],"meta":{"line":101,"file":"Guild.js","path":"src/structures"}},{"name":"invites","description":"A manager of the invites of this guild","type":[[["GuildInviteManager"]]],"meta":{"line":107,"file":"Guild.js","path":"src/structures"}},{"name":"scheduledEvents","description":"A manager of the scheduled events of this guild","type":[[["GuildScheduledEventManager"]]],"meta":{"line":113,"file":"Guild.js","path":"src/structures"}},{"name":"autoModerationRules","description":"A manager of the auto moderation rules of this guild.","type":[[["AutoModerationRuleManager"]]],"meta":{"line":119,"file":"Guild.js","path":"src/structures"}},{"name":"settings","description":"All of the settings {@link Object}","type":[[["GuildSettingManager"]]],"meta":{"line":125,"file":"Guild.js","path":"src/structures"}},{"name":"available","description":"Whether the guild is available to access. If it is not available, it indicates a server outage","type":[[["boolean"]]],"meta":{"line":133,"file":"Guild.js","path":"src/structures"}},{"name":"shardId","description":"The id of the shard this Guild belongs to.","type":[[["number"]]],"meta":{"line":143,"file":"Guild.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":151,"file":"Guild.js","path":"src/structures"}},{"name":"shard","description":"The Shard this Guild belongs to.","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":181,"file":"Guild.js","path":"src/structures"}},{"name":"discoverySplash","description":"The hash of the guild discovery splash image","nullable":true,"type":[[["string"]]],"meta":{"line":201,"file":"Guild.js","path":"src/structures"}},{"name":"memberCount","description":"The full amount of members in this guild","type":[[["number"]]],"meta":{"line":209,"file":"Guild.js","path":"src/structures"}},{"name":"large","description":"Whether the guild is \"large\" (has more than {@link WebsocketOptions large_threshold} members, 50 by default)","type":[[["boolean"]]],"meta":{"line":217,"file":"Guild.js","path":"src/structures"}},{"name":"premiumProgressBarEnabled","description":"Whether this guild has its premium (boost) progress bar enabled","type":[[["boolean"]]],"meta":{"line":225,"file":"Guild.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application that created this guild (if applicable)","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":270,"file":"Guild.js","path":"src/structures"}},{"name":"afkTimeout","description":"The time in seconds before a user is counted as \"away from keyboard\"","nullable":true,"type":[[["number"]]],"meta":{"line":278,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannelId","description":"The id of the voice channel where AFK members are moved","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":286,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelId","description":"The system channel's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":294,"file":"Guild.js","path":"src/structures"}},{"name":"premiumTier","description":"The premium tier of this guild","type":[[["PremiumTier"]]],"meta":{"line":302,"file":"Guild.js","path":"src/structures"}},{"name":"widgetEnabled","description":"Whether widget images are enabled on this guild","nullable":true,"type":[[["boolean"]]],"meta":{"line":310,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannelId","description":"The widget channel's id, if enabled","nullable":true,"type":[[["string"]]],"meta":{"line":318,"file":"Guild.js","path":"src/structures"}},{"name":"explicitContentFilter","description":"The explicit content filter level of the guild","type":[[["ExplicitContentFilterLevel"]]],"meta":{"line":326,"file":"Guild.js","path":"src/structures"}},{"name":"mfaLevel","description":"The required MFA level for this guild","type":[[["MFALevel"]]],"meta":{"line":334,"file":"Guild.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the client user joined the guild at","type":[[["number"]]],"meta":{"line":342,"file":"Guild.js","path":"src/structures"}},{"name":"defaultMessageNotifications","description":"The default message notification level of the guild","type":[[["DefaultMessageNotificationLevel"]]],"meta":{"line":350,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelFlags","description":"The value set for the guild's system channel flags","type":[[["Readonly","<"],["SystemChannelFlags",">"]]],"meta":{"line":358,"file":"Guild.js","path":"src/structures"}},{"name":"maximumMembers","description":"The maximum amount of members the guild can have","nullable":true,"type":[[["number"]]],"meta":{"line":366,"file":"Guild.js","path":"src/structures"}},{"name":"maximumPresences","description":"The maximum amount of presences the guild can have\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter","nullable":true,"type":[[["number"]]],"meta":{"line":377,"file":"Guild.js","path":"src/structures"}},{"name":"maxVideoChannelUsers","description":"The maximum amount of users allowed in a video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":387,"file":"Guild.js","path":"src/structures"}},{"name":"maxStageVideoChannelUsers","description":"The maximum amount of users allowed in a stage video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":397,"file":"Guild.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate amount of members the guild has\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter","nullable":true,"type":[[["number"]]],"meta":{"line":408,"file":"Guild.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate amount of presences the guild has\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter","nullable":true,"type":[[["number"]]],"meta":{"line":419,"file":"Guild.js","path":"src/structures"}},{"name":"vanityURLUses","description":"The use count of the vanity URL code of the guild, if any\nYou will need to fetch this parameter using {@link Guild#fetchVanityData} if you want to receive it","nullable":true,"type":[[["number"]]],"meta":{"line":429,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannelId","description":"The rules channel's id for the guild","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":436,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannelId","description":"The community updates channel's id for the guild","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":444,"file":"Guild.js","path":"src/structures"}},{"name":"preferredLocale","description":"The preferred locale of the guild, defaults to `en-US`","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Locale"]]],"meta":{"line":453,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannelId","description":"The safety alerts channel's id for the guild","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":461,"file":"Guild.js","path":"src/structures"}},{"name":"ownerId","description":"The user id of this guild's owner","type":[[["Snowflake"]]],"meta":{"line":494,"file":"Guild.js","path":"src/structures"}},{"name":"emojis","description":"A manager of the emojis belonging to this guild","type":[[["GuildEmojiManager"]]],"meta":{"line":529,"file":"Guild.js","path":"src/structures"}},{"name":"stickers","description":"A manager of the stickers belonging to this guild","type":[[["GuildStickerManager"]]],"meta":{"line":543,"file":"Guild.js","path":"src/structures"}},{"name":"incidentsData","description":"The incidents data of this guild.\nYou will need to fetch the guild using {@link BaseGuild#fetch} if you want to receive\nthis property.","nullable":true,"type":[[["IncidentActions"]]],"meta":{"line":568,"file":"Guild.js","path":"src/structures"}},{"name":"joinedAt","description":"The time the client user joined the guild","readonly":true,"type":[[["Date"]]],"meta":{"line":579,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannel","description":"AFK voice channel for this guild","readonly":true,"nullable":true,"type":[[["VoiceChannel"]]],"meta":{"line":607,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannel","description":"System channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":616,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannel","description":"Safety alerts channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":625,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannel","description":"Widget channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]],[["MediaChannel"]]],"meta":{"line":634,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannel","description":"Rules channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":643,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannel","description":"Public updates channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":652,"file":"Guild.js","path":"src/structures"}},{"name":"me","description":"The client user as a GuildMember of this guild","readonly":true,"nullable":true,"deprecated":"Use {@link GuildMemberManager#me} instead.","type":[[["GuildMember"]]],"meta":{"line":662,"file":"Guild.js","path":"src/structures"}},{"name":"maximumBitrate","description":"The maximum bitrate available for this guild","readonly":true,"type":[[["number"]]],"meta":{"line":676,"file":"Guild.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this guild that can be used with @discordjs/voice to play audio in voice\nand stage channels.","readonly":true,"type":[[["function"]]],"meta":{"line":1587,"file":"Guild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":588,"file":"Guild.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of the guild.\nIf the member object isn't needed, use {@link Guild#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":598,"file":"Guild.js","path":"src/structures"}},{"name":"fetchIntegrations","description":"Fetches a collection of integrations to this guild.\nResolves with a collection mapping integrations by their ids.","examples":["// Fetch integrations\nguild.fetchIntegrations()\n .then(integrations => console.log(`Fetched ${integrations.size} integrations`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">>"]]],"meta":{"line":703,"file":"Guild.js","path":"src/structures"}},{"name":"fetchTemplates","description":"Fetches a collection of templates from this guild.\nResolves with a collection mapping templates by their codes.","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["GuildTemplate",">>"]]],"meta":{"line":716,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWelcomeScreen","description":"Fetches the welcome screen for this guild.","async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":725,"file":"Guild.js","path":"src/structures"}},{"name":"createTemplate","description":"Creates a template for the guild.","params":[{"name":"name","description":"The name for the template","type":[[["string"]]]},{"name":"description","description":"The description for the template","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":736,"file":"Guild.js","path":"src/structures"}},{"name":"fetchPreview","description":"Obtains a guild preview for this guild from Discord.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":745,"file":"Guild.js","path":"src/structures"}},{"name":"fetchVanityData","description":"Fetches the vanity URL invite object to this guild.\nResolves with an object containing the vanity URL invite code and the use count","examples":["// Fetch invite data\nguild.fetchVanityData()\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":769,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the guild.","examples":["// Fetch webhooks\nguild.fetchWebhooks()\n .then(webhooks => console.log(`Fetched ${webhooks.size} webhooks`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":786,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidget","description":"Fetches the guild widget data, requires the widget to be enabled.","examples":["// Fetches the guild widget data\nguild.fetchWidget()\n .then(widget => console.log(`The widget shows ${widget.channels.size} channels`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":802,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidgetSettings","description":"Fetches the guild widget settings.","examples":["// Fetches the guild widget settings\nguild.fetchWidgetSettings()\n .then(widget => console.log(`The widget is ${widget.enabled ? 'enabled' : 'disabled'}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildWidgetSettings",">"]]],"meta":{"line":829,"file":"Guild.js","path":"src/structures"}},{"name":"fetchAuditLogs","description":"Fetches audit logs for this guild.","examples":["// Output audit log entries\nguild.fetchAuditLogs()\n .then(audit => console.log(audit.entries.first()))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching audit logs","optional":true,"default":"{}","type":[[["GuildAuditLogsFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":859,"file":"Guild.js","path":"src/structures"}},{"name":"edit","description":"Updates the guild with new information - e.g. a new name.","examples":["// Set the guild name\nguild.edit({\n name: 'Discord Guild',\n})\n .then(updated => console.log(`New guild name ${updated}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the guild with","type":[[["GuildEditData"]]]},{"name":"reason","description":"Reason for editing this guild","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":926,"file":"Guild.js","path":"src/structures"}},{"name":"editWelcomeScreen","description":"Updates the guild's welcome screen","examples":["guild.editWelcomeScreen({\n description: 'Hello World',\n enabled: true,\n welcomeChannels: [\n {\n description: 'foobar',\n channel: '222197033908436994',\n }\n ],\n})"],"params":[{"name":"data","description":"Data to edit the welcome screen with","type":[[["WelcomeScreenEditData"]]]}],"async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":1033,"file":"Guild.js","path":"src/structures"}},{"name":"setExplicitContentFilter","description":"Edits the level of the explicit content filter.","params":[{"name":"explicitContentFilter","description":"The new level of the explicit content filter","nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the level of the guild's explicit content filter","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1061,"file":"Guild.js","path":"src/structures"}},{"name":"setDefaultMessageNotifications","description":"Edits the setting of the default message notifications of the guild.","params":[{"name":"defaultMessageNotifications","description":"The new default message notification level of the guild","nullable":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the setting of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1072,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannelFlags","description":"Edits the flags of the default message notifications of the guild.","params":[{"name":"systemChannelFlags","description":"The new flags for the default message notifications","type":[[["SystemChannelFlagsResolvable"]]]},{"name":"reason","description":"Reason for changing the flags of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1083,"file":"Guild.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of the guild.","examples":["// Edit the guild name\nguild.setName('Discord Guild')\n .then(updated => console.log(`Updated guild name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1098,"file":"Guild.js","path":"src/structures"}},{"name":"setVerificationLevel","description":"Edits the verification level of the guild.","examples":["// Edit the guild verification level\nguild.setVerificationLevel(1)\n .then(updated => console.log(`Updated guild verification level to ${guild.verificationLevel}`))\n .catch(console.error);"],"params":[{"name":"verificationLevel","description":"The new verification level of the guild","nullable":true,"type":[[["VerificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the guild's verification level","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1113,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKChannel","description":"Edits the AFK channel of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKChannel(channel)\n .then(updated => console.log(`Updated guild AFK channel to ${guild.afkChannel.name}`))\n .catch(console.error);"],"params":[{"name":"afkChannel","description":"The new AFK channel","nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's AFK channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1128,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannel","description":"Edits the system channel of the guild.","examples":["// Edit the guild system channel\nguild.setSystemChannel(channel)\n .then(updated => console.log(`Updated guild system channel to ${guild.systemChannel.name}`))\n .catch(console.error);"],"params":[{"name":"systemChannel","description":"The new system channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's system channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1143,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKTimeout","description":"Edits the AFK timeout of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKTimeout(60)\n .then(updated => console.log(`Updated guild AFK timeout to ${guild.afkTimeout}`))\n .catch(console.error);"],"params":[{"name":"afkTimeout","description":"The time in seconds that a user must be idle to be considered AFK","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the guild's AFK timeout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1158,"file":"Guild.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new guild icon.","examples":["// Edit the guild icon\nguild.setIcon('./icon.png')\n .then(updated => console.log('Updated the guild icon'))\n .catch(console.error);"],"params":[{"name":"icon","description":"The new icon of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1173,"file":"Guild.js","path":"src/structures"}},{"name":"setOwner","description":"Sets a new owner of the guild.","examples":["// Edit the guild owner\nguild.setOwner(guild.members.cache.first())\n .then(guild => guild.fetchOwner())\n .then(owner => console.log(`Updated the guild owner to ${owner.displayName}`))\n .catch(console.error);"],"params":[{"name":"owner","description":"The new owner of the guild","type":[[["GuildMemberResolvable"]]]},{"name":"reason","description":"Reason for setting the new owner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1189,"file":"Guild.js","path":"src/structures"}},{"name":"setSplash","description":"Sets a new guild invite splash image.","examples":["// Edit the guild splash\nguild.setSplash('./splash.png')\n .then(updated => console.log('Updated the guild splash'))\n .catch(console.error);"],"params":[{"name":"splash","description":"The new invite splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's invite splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1204,"file":"Guild.js","path":"src/structures"}},{"name":"setDiscoverySplash","description":"Sets a new guild discovery splash image.","examples":["// Edit the guild discovery splash\nguild.setDiscoverySplash('./discoverysplash.png')\n .then(updated => console.log('Updated the guild discovery splash'))\n .catch(console.error);"],"params":[{"name":"discoverySplash","description":"The new discovery splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's discovery splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1219,"file":"Guild.js","path":"src/structures"}},{"name":"setBanner","description":"Sets a new guild banner.","examples":["guild.setBanner('./banner.png')\n .then(updated => console.log('Updated the guild banner'))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's banner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1233,"file":"Guild.js","path":"src/structures"}},{"name":"setRulesChannel","description":"Edits the rules channel of the guild.","examples":["// Edit the guild rules channel\nguild.setRulesChannel(channel)\n .then(updated => console.log(`Updated guild rules channel to ${guild.rulesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"rulesChannel","description":"The new rules channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's rules channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1248,"file":"Guild.js","path":"src/structures"}},{"name":"setPublicUpdatesChannel","description":"Edits the community updates channel of the guild.","examples":["// Edit the guild community updates channel\nguild.setPublicUpdatesChannel(channel)\n .then(updated => console.log(`Updated guild community updates channel to ${guild.publicUpdatesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"publicUpdatesChannel","description":"The new community updates channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's community updates channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1263,"file":"Guild.js","path":"src/structures"}},{"name":"setPreferredLocale","description":"Edits the preferred locale of the guild.","examples":["// Edit the guild preferred locale\nguild.setPreferredLocale('en-US')\n .then(updated => console.log(`Updated guild preferred locale to ${guild.preferredLocale}`))\n .catch(console.error);"],"params":[{"name":"preferredLocale","description":"The new preferred locale of the guild","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's preferred locale","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1278,"file":"Guild.js","path":"src/structures"}},{"name":"setSafetyAlertsChannel","description":"Edits the safety alerts channel of the guild.","examples":["// Edit the guild safety alerts channel\nguild.setSafetyAlertsChannel(channel)\n .then(updated => console.log(`Updated guild safety alerts channel to ${updated.safetyAlertsChannel.name}`))\n .catch(console.error);"],"params":[{"name":"safetyAlertsChannel","description":"The new safety alerts channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's safety alerts channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1293,"file":"Guild.js","path":"src/structures"}},{"name":"setPremiumProgressBarEnabled","description":"Edits the enabled state of the guild's premium progress bar","params":[{"name":"enabled","description":"The new enabled state of the guild's premium progress bar","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the state of the guild's premium progress bar","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1303,"file":"Guild.js","path":"src/structures"}},{"name":"setChannelPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time","examples":["guild.setChannelPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link GuildChannelManager#setPositions} instead","params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1334,"file":"Guild.js","path":"src/structures"}},{"name":"setRolePositions","description":"Batch-updates the guild's role positions","examples":["guild.setRolePositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link RoleManager#setPositions} instead","params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1364,"file":"Guild.js","path":"src/structures"}},{"name":"setWidgetSettings","description":"Edits the guild's widget settings.","params":[{"name":"settings","description":"The widget settings for the guild","type":[[["GuildWidgetSettingsData"]]]},{"name":"reason","description":"Reason for changing the guild's widget settings","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1383,"file":"Guild.js","path":"src/structures"}},{"name":"disableInvites","description":"Sets whether this guild's invites are disabled.","params":[{"name":"disabled","description":"Whether the invites are disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1399,"file":"Guild.js","path":"src/structures"}},{"name":"setIncidentActions","description":"Sets the incident actions for a guild.","params":[{"name":"incidentActions","description":"The incident actions to set","type":[[["IncidentActionsEditOptions"]]]}],"returns":[[["Promise","<"],["IncidentActions",">"]]],"meta":{"line":1410,"file":"Guild.js","path":"src/structures"}},{"name":"leave","description":"Leaves the guild.","examples":["// Leave a guild\nguild.leave()\n .then(guild => console.log(`Left the guild: ${guild.name}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1423,"file":"Guild.js","path":"src/structures"}},{"name":"delete","description":"Deletes the guild.","examples":["// Delete a guild\nguild.delete()\n .then(g => console.log(`Deleted the guild ${g}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1438,"file":"Guild.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild equals another guild. It compares all properties, so for most operations\nit is advisable to just compare `guild.id === guild2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"guild","description":"The guild to compare with","type":[[["Guild"]]]}],"returns":[[["boolean"]]],"meta":{"line":1450,"file":"Guild.js","path":"src/structures"}},{"name":"markAsRead","description":"Marks the guild as read.","examples":["const guild = client.guilds.cache.get('id');\nguild.markAsRead();"],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":1492,"file":"Guild.js","path":"src/structures"}},{"name":"setCommunity","description":"Set Community Feature.","params":[{"name":"stats","description":"True / False to enable / disable Community Feature","default":true,"type":[[["boolean"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","optional":true,"type":[[["GuildTextChannelResolvable"]]]},{"name":"rulesChannel","description":"The new rules channel","optional":true,"type":[[["GuildTextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the community feature","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1504,"file":"Guild.js","path":"src/structures"}},{"name":"topEmojis","description":"Get the top emojis of this guild.","returns":[[["Promise","<"],["Collection","<"],["number",", "],["GuildEmoji",">>"]]],"meta":{"line":1541,"file":"Guild.js","path":"src/structures"}},{"name":"setVanityCode","description":"Set the vanity URL to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Set invite code\nguild.setVanityCode('elysia', '123456')\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"params":[{"name":"code","description":"Vanity URL code","optional":true,"default":"''","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":1570,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedRoles","description":"Creates a collection of this guild's roles, sorted by their position and ids.","access":"private","returns":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":1608,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedChannels","description":"Creates a collection of this guild's or a specific category's channels, sorted by their position and ids.","access":"private","params":[{"name":"channel","description":"Category to get the channels of","optional":true,"type":[[["GuildChannel"]]]}],"returns":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":1618,"file":"Guild.js","path":"src/structures"}},{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":57,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogs","description":"Audit logs entries are held in this class.","props":[{"name":"webhooks","description":"Cached webhooks","access":"private","type":[[["Collection","<"],["Snowflake",", "],["Webhook",">"]]],"meta":{"line":200,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"integrations","description":"Cached integrations","access":"private","type":[[["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">"]]],"meta":{"line":212,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"applicationCommands","description":"Cached application commands, includes application commands from other applications","access":"private","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":224,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"autoModerationRules","description":"Cached auto moderation rules.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["AutoModerationRule",">"]]],"meta":{"line":235,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"entries","description":"The entries for this guild's audit logs","type":[[["Collection","<"],["Snowflake",", "],["GuildAuditLogsEntry",">"]]],"meta":{"line":245,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Targets","description":"Key mirror of all available audit log targets.","scope":"static","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":36,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Actions","description":"All available actions keyed under their names to their numeric values.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":125,"file":"GuildAuditLogs.js","path":"src/structures"}}],"methods":[{"name":"build","description":"Handles possible promises for entry targets.","scope":"static","async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":256,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetType","description":"Finds the target type from the entry action.","scope":"static","params":[{"name":"target","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogTargetType"]]],"meta":{"line":290,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"Finds the action type from the entry action.","scope":"static","params":[{"name":"action","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogActionType"]]],"meta":{"line":327,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":191,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildAuditLogsEntry","description":"Audit logs entry.","props":[{"name":"targetType","description":"The target type of this entry","type":[[["AuditLogTargetType"]]],"meta":{"line":419,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"The action type of this entry","type":[[["AuditLogActionType"]]],"meta":{"line":425,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"action","description":"Specific action type of this entry in its string presentation","type":[[["AuditLogAction"]]],"meta":{"line":431,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"reason","description":"The reason of this entry","nullable":true,"type":[[["string"]]],"meta":{"line":437,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executorId","description":"The id of the user that executed this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":443,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executor","description":"The user that executed this entry","nullable":true,"type":[[["User"]]],"meta":{"line":449,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"changes","description":"Specific property changes","type":[[["Array","<"],["AuditLogChange",">"]]],"meta":{"line":467,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"id","description":"The entry's id","type":[[["Snowflake"]]],"meta":{"line":478,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"extra","description":"Any extra data from the entry","nullable":true,"type":[[["Object"]],[["Role"]],[["GuildMember"]]],"meta":{"line":484,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":568,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"target","description":"The target of this entry","nullable":true,"type":[[["AuditLogEntryTarget"]]],"meta":{"line":574,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this entry was created at","readonly":true,"type":[[["number"]]],"meta":{"line":724,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdAt","description":"The time this entry was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":733,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":412,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildBan","description":"Represents a ban in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild in which the ban is","type":[[["Guild"]]],"meta":{"line":17,"file":"GuildBan.js","path":"src/structures"}},{"name":"user","description":"The user this ban applies to","type":[[["User"]]],"meta":{"line":28,"file":"GuildBan.js","path":"src/structures"}},{"name":"reason","description":"The reason for the ban","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"GuildBan.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildBan is partial. If the reason is not provided the value is null","readonly":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBan.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this GuildBan.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildBan",">"]]],"meta":{"line":54,"file":"GuildBan.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBan.js","path":"src/structures"}},{"name":"GuildBoost","description":"Represents a guild boost in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild boost","type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscriptionId","description":"The id of the subscription","type":[[["Snowflake"]]],"meta":{"line":28,"file":"GuildBoost.js","path":"src/structures"}},{"name":"premiumGuildSubscriptionId","description":"The premium guild subscription id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":35,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guildId","description":"Guild id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":40,"file":"GuildBoost.js","path":"src/structures"}},{"name":"ended","description":"Ended ???","nullable":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBoost.js","path":"src/structures"}},{"name":"canceled","description":"Whether the subscription is canceled","type":[[["boolean"]]],"meta":{"line":52,"file":"GuildBoost.js","path":"src/structures"}},{"name":"cooldownEndsAt","description":"The cooldown end date","type":[[["Date"]]],"meta":{"line":59,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guilld","description":"The guild of the boost","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":67,"file":"GuildBoost.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"unsubscribe","description":"Cancel the boost","async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":75,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscribe","description":"Use the boost","params":[{"name":"guild","description":"The guild to use the boost on","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":91,"file":"GuildBoost.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBoost.js","path":"src/structures"}},{"name":"GuildChannel","description":"Represents a guild channel from any of the following:\n- {@link TextChannel}\n- {@link VoiceChannel}\n- {@link CategoryChannel}\n- {@link NewsChannel}\n- {@link StoreChannel}\n- {@link StageChannel}\n- {@link ForumChannel}\n- {@link MediaChannel}","extends":[[["Channel"]]],"abstract":true,"props":[{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":23,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmoji","description":"Represents a custom emoji.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"author","description":"The user who created this emoji","nullable":true,"type":[[["User"]]],"meta":{"line":20,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"_roles","description":"Array of role ids this emoji is active for","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":22,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"guild","description":"The guild this emoji is part of","type":[[["Guild"]]],"meta":{"line":33,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"deletable","description":"Whether the emoji is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"roles","description":"A manager for roles this emoji is active for.","readonly":true,"type":[[["GuildEmojiRoleManager"]]],"meta":{"line":67,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetchAuthor","description":"Fetches the author for this emoji","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":75,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"edit","description":"Edits the emoji.","examples":["// Edit an emoji\nemoji.edit({ name: 'newemoji' })\n .then(e => console.log(`Edited emoji ${e}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":97,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of the emoji.","params":[{"name":"name","description":"The new name for the emoji","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the emoji's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":120,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"delete","description":"Deletes the emoji.","params":[{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":129,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"equals","description":"Whether this emoji is the same as another one.","params":[{"name":"other","description":"The emoji to compare it to","type":[[["GuildEmoji"]],[["APIEmoji"]]]}],"returns":[[["boolean"]]],"meta":{"line":139,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildMember","description":"Represents a member of a guild on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild that this member is part of","type":[[["Guild"]]],"meta":{"line":33,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member joined the guild at","nullable":true,"type":[[["number"]]],"meta":{"line":39,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSinceTimestamp","description":"The last timestamp this member started boosting the guild","nullable":true,"type":[[["number"]]],"meta":{"line":45,"file":"GuildMember.js","path":"src/structures"}},{"name":"nickname","description":"The nickname of this member, if they have one","nullable":true,"type":[[["string"]]],"meta":{"line":51,"file":"GuildMember.js","path":"src/structures"}},{"name":"pending","description":"Whether this member has yet to pass the guild's membership gate","type":[[["boolean"]]],"meta":{"line":57,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntilTimestamp","description":"The timestamp this member's timeout will be removed","nullable":true,"type":[[["number"]]],"meta":{"line":63,"file":"GuildMember.js","path":"src/structures"}},{"name":"_roles","description":"The role ids of the member","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":70,"file":"GuildMember.js","path":"src/structures"}},{"name":"user","description":"The user that this guild member instance represents","nullable":true,"type":[[["User"]]],"meta":{"line":80,"file":"GuildMember.js","path":"src/structures"}},{"name":"avatar","description":"The guild member's avatar hash","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"GuildMember.js","path":"src/structures"}},{"name":"banner","description":"The guild member's banner hash.","nullable":true,"type":[[["string"]]],"meta":{"line":98,"file":"GuildMember.js","path":"src/structures"}},{"name":"flags","description":"The flags of this member","type":[[["Readonly","<"],["GuildMemberFlags",">"]]],"meta":{"line":119,"file":"GuildMember.js","path":"src/structures"}},{"name":"avatarDecorationData","description":"The member avatar decoration's data","nullable":true,"type":[[["AvatarDecorationData"]]],"meta":{"line":129,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":149,"file":"GuildMember.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildMember is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":179,"file":"GuildMember.js","path":"src/structures"}},{"name":"roles","description":"A manager for the roles belonging to this member","readonly":true,"type":[[["GuildMemberRoleManager"]]],"meta":{"line":188,"file":"GuildMember.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":197,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The time this member joined the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":265,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntil","description":"The time this member's timeout will be removed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":274,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSince","description":"The last time this member started boosting the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":283,"file":"GuildMember.js","path":"src/structures"}},{"name":"presence","description":"The presence of this guild member","readonly":true,"nullable":true,"type":[[["Presence"]]],"meta":{"line":292,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayColor","description":"The displayed color of this member in base 10","readonly":true,"type":[[["number"]]],"meta":{"line":301,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayHexColor","description":"The displayed color of this member in hexadecimal","readonly":true,"type":[[["string"]]],"meta":{"line":310,"file":"GuildMember.js","path":"src/structures"}},{"name":"id","description":"The member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":319,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayName","description":"The nickname of this member, or their user display name if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":328,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissions","description":"The overall set of permissions for this member, taking only roles and owner status into account","readonly":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":337,"file":"GuildMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user is above this user in the hierarchy, according to role position and guild ownership.\nThis is a prerequisite for many moderative actions.","readonly":true,"type":[[["boolean"]]],"meta":{"line":348,"file":"GuildMember.js","path":"src/structures"}},{"name":"kickable","description":"Whether this member is kickable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":361,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannable","description":"Whether this member is bannable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":370,"file":"GuildMember.js","path":"src/structures"}},{"name":"moderatable","description":"Whether this member is moderatable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":379,"file":"GuildMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":205,"file":"GuildMember.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the member's guild avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":215,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the member's banner.","params":[{"name":"options","description":"Options for the banner URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":225,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayAvatarDecorationURL","description":"A link to the member's guild avatar decoration if they have one.\nOtherwise, a link to their {@link User#avatarDecorationURL} will be returned.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":236,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the member's guild avatar if they have one.\nOtherwise, a link to their {@link User#displayAvatarURL} will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":246,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayBannerURL","description":"A link to the member's guild banner if they have one.\nOtherwise, a link to their {@link User#bannerURL} will be returned.","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":256,"file":"GuildMember.js","path":"src/structures"}},{"name":"isCommunicationDisabled","description":"Whether this member is currently timed out","returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,\ntaking into account roles and permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannelResolvable"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":401,"file":"GuildMember.js","path":"src/structures"}},{"name":"edit","description":"Edits this member.","params":[{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":413,"file":"GuildMember.js","path":"src/structures"}},{"name":"setNickname","description":"Sets the nickname for this member.","examples":["// Set a nickname for a guild member\nguildMember.setNickname('cool nickname', 'Needed a new nickname')\n .then(member => console.log(`Set nickname of ${member.user.username}`))\n .catch(console.error);","// Remove a nickname for a guild member\nguildMember.setNickname(null, 'No nicknames allowed!')\n .then(member => console.log(`Removed nickname for ${member.user.username}`))\n .catch(console.error);"],"params":[{"name":"nick","description":"The nickname for the guild member, or `null` if you want to reset their nickname","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for setting the nickname","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":433,"file":"GuildMember.js","path":"src/structures"}},{"name":"setFlags","description":"Sets the flags for this member.","params":[{"name":"flags","description":"The flags to set","type":[[["GuildMemberFlagsResolvable"]]]},{"name":"reason","description":"Reason for setting the flags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":443,"file":"GuildMember.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and this member.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":452,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes any DMs with this member.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":460,"file":"GuildMember.js","path":"src/structures"}},{"name":"kick","description":"Kicks this member from the guild.","params":[{"name":"reason","description":"Reason for kicking user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":469,"file":"GuildMember.js","path":"src/structures"}},{"name":"ban","description":"Bans this guild member.","examples":["// Ban a guild member, deleting a week's worth of messages\nguildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":483,"file":"GuildMember.js","path":"src/structures"}},{"name":"disableCommunicationUntil","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')\n .then(console.log)\n .catch(console.error);","// Remove the timeout of a guild member\nguildMember.disableCommunicationUntil(null)\n .then(member => console.log(`Removed timeout for ${member.displayName}`))\n .catch(console.error);"],"params":[{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["DateResolvable"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":504,"file":"GuildMember.js","path":"src/structures"}},{"name":"timeout","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.timeout(5 * 60 * 1000, 'They deserved it')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"timeout","description":"The time in milliseconds\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["number"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":520,"file":"GuildMember.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this GuildMember.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":529,"file":"GuildMember.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild member equals another guild member. It compares all properties, so for most\ncomparison it is advisable to just compare `member.id === member2.id` as it is significantly faster\nand is often what most users need.","params":[{"name":"member","description":"The member to compare with","type":[[["GuildMember"]]]}],"returns":[[["boolean"]]],"meta":{"line":540,"file":"GuildMember.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${member}!`);"],"returns":[[["string"]]],"meta":{"line":567,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the guild avatar of the logged in client.","params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":591,"file":"GuildMember.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the guild banner of the logged in client.","params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":600,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set Guild About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":609,"file":"GuildMember.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nguildMember.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":614,"file":"GuildMember.js","path":"src/structures"}}],"meta":{"line":25,"file":"GuildMember.js","path":"src/structures"}},{"name":"GuildPreview","description":"Represents the data about the guild any bot can preview, connected to the specified guild.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this guild","type":[[["string"]]],"meta":{"line":27,"file":"GuildPreview.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":34,"file":"GuildPreview.js","path":"src/structures"}},{"name":"icon","description":"The icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"GuildPreview.js","path":"src/structures"}},{"name":"splash","description":"The splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":50,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplash","description":"The discovery splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"GuildPreview.js","path":"src/structures"}},{"name":"features","description":"An array of enabled guild features","type":[[["Array","<"],["Features",">"]]],"meta":{"line":66,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate count of members in this guild","type":[[["number"]]],"meta":{"line":74,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate count of online members in this guild","type":[[["number"]]],"meta":{"line":82,"file":"GuildPreview.js","path":"src/structures"}},{"name":"description","description":"The description for this guild","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildPreview.js","path":"src/structures"}},{"name":"emojis","description":"Collection of emojis belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["GuildPreviewEmoji",">"]]],"meta":{"line":100,"file":"GuildPreview.js","path":"src/structures"}},{"name":"stickers","description":"Collection of stickers belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":112,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":122,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":131,"file":"GuildPreview.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"splashURL","description":"The URL to this guild's splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":140,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":149,"file":"GuildPreview.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":158,"file":"GuildPreview.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":166,"file":"GuildPreview.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","examples":["// Logs: Hello from My Guild!\nconsole.log(`Hello from ${previewGuild}!`);"],"returns":[[["string"]]],"meta":{"line":179,"file":"GuildPreview.js","path":"src/structures"}}],"meta":{"line":13,"file":"GuildPreview.js","path":"src/structures"}},{"name":"GuildPreviewEmoji","description":"Represents an instance of an emoji belonging to a public guild obtained through Discord's preview endpoint.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"guild","description":"The public guild this emoji is part of","type":[[["GuildPreview"]]],"meta":{"line":10,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"roles","description":"The roles this emoji is active for","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":23,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEvent","description":"Represents a scheduled event in a {@link Guild}.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild scheduled event","type":[[["Snowflake"]]],"meta":{"line":25,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this guild scheduled event belongs to","type":[[["Snowflake"]]],"meta":{"line":31,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channelId","description":"The channel id in which the scheduled event will be hosted, or `null` if entity type is `EXTERNAL`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this guild scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"name","description":"The name of the guild scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":62,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"description","description":"The description of the guild scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartTimestamp","description":"The timestamp the guild scheduled event will start at\nThis can be potentially `null` only when it's an {@link AuditLogEntryTarget}","nullable":true,"type":[[["number"]]],"meta":{"line":84,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndTimestamp","description":"The timestamp the guild scheduled event will end at\nor `null` if the event does not have a scheduled time to end","nullable":true,"type":[[["number"]]],"meta":{"line":95,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]]],"meta":{"line":105,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]]],"meta":{"line":116,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityType","description":"The type of hosting entity associated with the scheduled event","type":[[["GuildScheduledEventEntityType"]]],"meta":{"line":127,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityId","description":"The id of the hosting entity associated with the scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":138,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"userCount","description":"The number of users who are subscribed to this guild scheduled event","nullable":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creator","description":"The user that created this guild scheduled event","nullable":true,"type":[[["User"]]],"meta":{"line":158,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityMetadata","description":"Additional metadata","nullable":true,"type":[[["GuildScheduledEventEntityMetadata"]]],"meta":{"line":178,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"image","description":"The cover image hash for this scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":193,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"recurrenceRule","description":"The recurrence rule for this scheduled event","nullable":true,"type":[[["GuildScheduledEventRecurrenceRule"]]],"meta":{"line":225,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"partial","description":"Whether this guild scheduled event is partial.","readonly":true,"type":[[["boolean"]]],"meta":{"line":262,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the guild scheduled event was created at","readonly":true,"type":[[["number"]]],"meta":{"line":271,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdAt","description":"The time the guild scheduled event was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":280,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartAt","description":"The time the guild scheduled event will start at","readonly":true,"type":[[["Date"]]],"meta":{"line":289,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndAt","description":"The time the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":299,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channel","description":"The channel associated with this scheduled event","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":308,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guild","description":"The guild this scheduled event belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":317,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"url","description":"The URL to the guild scheduled event","readonly":true,"type":[[["string"]]],"meta":{"line":326,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"coverImageURL","description":"The URL of this scheduled event's cover image","params":[{"name":"options","description":"Options for image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":253,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild scheduled event.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":335,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createInviteURL","description":"Creates an invite URL to this guild scheduled event.","params":[{"name":"options","description":"The options to create the invite","optional":true,"type":[[["CreateGuildScheduledEventInviteURLOptions"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":351,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"edit","description":"Edits this guild scheduled event.","examples":["// Edit a guild scheduled event\nguildScheduledEvent.edit({ name: 'Party' })\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":372,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"delete","description":"Deletes this guild scheduled event.","examples":["// Delete a guild scheduled event\nguildScheduledEvent.delete()\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":385,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild scheduled event.","examples":["// Set name of a guild scheduled event\nguildScheduledEvent.setName('Birthday Party')\n .then(guildScheduledEvent => console.log(`Set the name to: ${guildScheduledEvent.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":401,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledStartTime","description":"Sets a new time to schedule the event at.","examples":["// Set start time of a guild scheduled event\nguildScheduledEvent.setScheduledStartTime('2022-09-24T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the start time to: ${guildScheduledEvent.scheduledStartTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled start time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":416,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledEndTime","description":"Sets a new time to end the event at.","examples":["// Set end time of a guild scheduled event\nguildScheduledEvent.setScheduledEndTime('2022-09-25T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the end time to: ${guildScheduledEvent.scheduledEndTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledEndTime","description":"The time to end the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled end time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":432,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the new description of the guild scheduled event.","examples":["// Set description of a guild scheduled event\nguildScheduledEvent.setDescription('A virtual birthday party')\n .then(guildScheduledEvent => console.log(`Set the description to: ${guildScheduledEvent.description}`))\n .catch(console.error);"],"params":[{"name":"description","description":"The description of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the description","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":447,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the new status of the guild scheduled event.\nIf you're working with TypeScript, use this method in conjunction with status type-guards\nlike {@link GuildScheduledEvent#isScheduled} to get only valid status as suggestion","examples":["// Set status of a guild scheduled event\nguildScheduledEvent.setStatus('ACTIVE')\n .then(guildScheduledEvent => console.log(`Set the status to: ${guildScheduledEvent.status}`))\n .catch(console.error);"],"params":[{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"reason","description":"The reason for changing the status","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":464,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setLocation","description":"Sets the new location of the guild scheduled event.","examples":["// Set location of a guild scheduled event\nguildScheduledEvent.setLocation('Earth')\n .then(guildScheduledEvent => console.log(`Set the location to: ${guildScheduledEvent.entityMetadata.location}`))\n .catch(console.error);"],"params":[{"name":"location","description":"The location of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the location","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":479,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"fetchSubscribers","description":"Fetches subscribers of this guild scheduled event.","params":[{"name":"options","description":"Options for fetching the subscribers","optional":true,"type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":488,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the event's URL instead of the object.","examples":["// Logs: Event: https://discord.com/events/412345678901234567/499876543211234567\nconsole.log(`Event: ${guildScheduledEvent}`);"],"returns":[[["string"]]],"meta":{"line":499,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isActive","description":"Indicates whether this guild scheduled event has an `ACTIVE` status.","returns":[[["boolean"]]],"meta":{"line":507,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCanceled","description":"Indicates whether this guild scheduled event has a `CANCELED` status.","returns":[[["boolean"]]],"meta":{"line":515,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCompleted","description":"Indicates whether this guild scheduled event has a `COMPLETED` status.","returns":[[["boolean"]]],"meta":{"line":523,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isScheduled","description":"Indicates whether this guild scheduled event has a `SCHEDULED` status.","returns":[[["boolean"]]],"meta":{"line":531,"file":"GuildScheduledEvent.js","path":"src/structures"}}],"meta":{"line":17,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"GuildTemplate","description":"Represents the template for a guild.","extends":[[["Base"]]],"props":[{"name":"code","description":"The unique code of this template","type":[[["string"]]],"meta":{"line":24,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"name","description":"The name of this template","type":[[["string"]]],"meta":{"line":32,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"description","description":"The description of this template","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"usageCount","description":"The amount of times this template has been used","type":[[["number"]]],"meta":{"line":48,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this template","type":[[["Snowflake"]]],"meta":{"line":56,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creator","description":"The user that created this template","type":[[["User"]]],"meta":{"line":64,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdAt","description":"The time when this template was created at","type":[[["Date"]]],"meta":{"line":72,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedAt","description":"The time when this template was last synced to the guild","type":[[["Date"]]],"meta":{"line":80,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that this template belongs to","type":[[["Snowflake"]]],"meta":{"line":88,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"serializedGuild","description":"The data of the guild that this template would create","type":[[["APIGuild"]]],"meta":{"line":96,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"unSynced","description":"Whether this template has unsynced changes","nullable":true,"type":[[["boolean"]]],"meta":{"line":103,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp of when this template was created at","readonly":true,"type":[[["number"]]],"meta":{"line":187,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedTimestamp","description":"The timestamp of when this template was last synced to the guild","readonly":true,"type":[[["number"]]],"meta":{"line":196,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guild","description":"The guild that this template belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":205,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"url","description":"The URL of this template","readonly":true,"type":[[["string"]]],"meta":{"line":214,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"GUILD_TEMPLATES_PATTERN","description":"Regular expression that globally matches guild template links","scope":"static","type":[[["RegExp"]]],"meta":{"line":234,"file":"GuildTemplate.js","path":"src/structures"}}],"methods":[{"name":"createGuild","description":"Creates a guild based on this template.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":115,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"edit","description":"Updates the metadata of this template.","params":[{"name":"options","description":"Options for editing the template","optional":true,"type":[[["EditGuildTemplateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":159,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"delete","description":"Deletes this template.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":168,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"sync","description":"Syncs this template to the current state of the guild.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":177,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the template's code instead of the template object.","examples":["// Logs: Template: FKvmczH2HyUf\nconsole.log(`Template: ${guildTemplate}!`);"],"returns":[[["string"]]],"meta":{"line":225,"file":"GuildTemplate.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"Integration","description":"Represents a guild integration.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild this integration belongs to","type":[[["Guild"]]],"meta":{"line":34,"file":"Integration.js","path":"src/structures"}},{"name":"id","description":"The integration id","type":[[["Snowflake"]],[["string"]]],"meta":{"line":40,"file":"Integration.js","path":"src/structures"}},{"name":"name","description":"The integration name","type":[[["string"]]],"meta":{"line":46,"file":"Integration.js","path":"src/structures"}},{"name":"type","description":"The integration type","type":[[["IntegrationType"]]],"meta":{"line":52,"file":"Integration.js","path":"src/structures"}},{"name":"enabled","description":"Whether this integration is enabled","type":[[["boolean"]]],"meta":{"line":58,"file":"Integration.js","path":"src/structures"}},{"name":"syncing","description":"Whether this integration is syncing","nullable":true,"type":[[["boolean"]]],"meta":{"line":64,"file":"Integration.js","path":"src/structures"}},{"name":"role","description":"The role that this integration uses for subscribers","nullable":true,"type":[[["Role"]]],"meta":{"line":70,"file":"Integration.js","path":"src/structures"}},{"name":"enableEmoticons","description":"Whether emoticons should be synced for this integration (twitch only currently)","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"Integration.js","path":"src/structures"}},{"name":"user","description":"The user for this integration","nullable":true,"type":[[["User"]]],"meta":{"line":87,"file":"Integration.js","path":"src/structures"}},{"name":"account","description":"The account integration information","type":[[["IntegrationAccount"]]],"meta":{"line":96,"file":"Integration.js","path":"src/structures"}},{"name":"syncedAt","description":"The last time this integration was last synced","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"Integration.js","path":"src/structures"}},{"name":"subscriberCount","description":"How many subscribers this integration has","nullable":true,"type":[[["number"]]],"meta":{"line":109,"file":"Integration.js","path":"src/structures"}},{"name":"revoked","description":"Whether this integration has been revoked","nullable":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Integration.js","path":"src/structures"}},{"name":"roles","description":"All roles that are managed by this integration","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":132,"file":"Integration.js","path":"src/structures"}},{"name":"expireBehavior","description":"The behavior of expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":143,"file":"Integration.js","path":"src/structures"}},{"name":"expireGracePeriod","description":"The grace period before expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":151,"file":"Integration.js","path":"src/structures"}},{"name":"application","description":"The application for this integration","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":162,"file":"Integration.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this integration.","params":[{"name":"reason","description":"Reason for deleting this integration","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Integration",">"]]],"meta":{"line":174,"file":"Integration.js","path":"src/structures"}}],"meta":{"line":26,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationApplication","description":"Represents an Integration's OAuth2 Application.","extends":[[["Application"]]],"props":[{"name":"bot","description":"The bot user for this application","nullable":true,"type":[[["User"]]],"meta":{"line":18,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"termsOfServiceURL","description":"The URL of the application's terms of service","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"privacyPolicyURL","description":"The URL of the application's privacy policy","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The Array of RPC origin URLs","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"summary","description":"The application's summary","nullable":true,"deprecated":"This property is no longer being sent by the API.","type":[[["string"]]],"meta":{"line":59,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"hook","description":"Whether the application can be default hooked by the client","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"verifyKey","description":"The hex-encoded key for verification in interactions and the GameSDK's GetTicket","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":32,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":39,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":49,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":59,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":108,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":115,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":128,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":138,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"approximateGuildCount","description":"An approximate amount of guilds this application is in.","nullable":true,"type":[[["number"]]],"meta":{"line":146,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"guildId","description":"The id of the guild associated with this application.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":156,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"deprecated":true,"type":[[["boolean"]]],"meta":{"line":187,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"deprecated":true,"type":[[["boolean"]]],"meta":{"line":198,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":207,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"splash","description":"The application's splash image hash","nullable":true,"type":[[["string"]]],"meta":{"line":218,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the application","see":["{@link https://docs.discord.food/resources/application#application-type}"],"type":[[["number"]]],"meta":{"line":229,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"primarySkuId","description":"The ID of the application's primary SKU (game, application subscription, etc.)","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":239,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eulaId","description":"The ID of the application's EULA","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":249,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"slug","description":"The URL slug that links to the primary store page of the application","nullable":true,"type":[[["string"]]],"meta":{"line":259,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"aliases","description":"Other names the application's game is associated with","type":[[["Array","<"],["string",">"]]],"meta":{"line":269,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"executables","description":"The unique executables of the application's game","nullable":true,"type":[[["Array","<"],["ApplicationExecutable",">"]]],"meta":{"line":286,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"thirdPartySkus","description":"The third party SKUs of the application's game","nullable":true,"type":[[["Array","<"],["ApplicationSku",">"]]],"meta":{"line":303,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlay","description":"Whether the application's game supports the Discord overlay (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":323,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlayMethods","description":"The methods of overlaying that the application's game supports","nullable":true,"type":[[["number"]]],"meta":{"line":333,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlayWarn","description":"Whether the Discord overlay is known to be problematic with this application's game (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":343,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlayCompatibilityHook","description":"Whether to use the compatibility hook for the overlay (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":353,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"developers","description":"The companies that developed the application","nullable":true,"type":[[["Array","<"],["Company",">"]]],"meta":{"line":379,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"publishers","description":"The companies that published the application","nullable":true,"type":[[["Array","<"],["Company",">"]]],"meta":{"line":389,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"redirectUris","description":"The whitelisted URLs for redirecting to during OAuth2 authorization (max 10)","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":399,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"deeplinkUri","description":"The URL used for deep linking during OAuth2 authorization on mobile devices","nullable":true,"type":[[["string"]]],"meta":{"line":409,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"integrationPublic","description":"Whether only the application owner can add the integration","nullable":true,"type":[[["boolean"]]],"meta":{"line":419,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"integrationRequireCodeGrant","description":"Whether the integration will only be added upon completion of a full OAuth2 token exchange","nullable":true,"type":[[["boolean"]]],"meta":{"line":429,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botDisabled","description":"Whether the application's bot is disabled by Discord (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":439,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botQuarantined","description":"Whether the application's bot is quarantined by Discord","nullable":true,"type":[[["boolean"]]],"meta":{"line":449,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"approximateUserInstallCount","description":"Approximate count of users that have authorized the application with the applications.commands scope","nullable":true,"type":[[["number"]]],"meta":{"line":459,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"approximateUserAuthorizationCount","description":"Approximate count of users that have OAuth2 authorizations for the application","nullable":true,"type":[[["number"]]],"meta":{"line":469,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"internalGuildRestriction","description":"What guilds the application can be authorized in","nullable":true,"type":[[["number"]]],"meta":{"line":479,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"interactionsEndpointUrl","description":"The URL of the application's interactions endpoint","nullable":true,"type":[[["string"]]],"meta":{"line":489,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"interactionsVersion","description":"The version of the application's interactions endpoint implementation","nullable":true,"type":[[["number"]]],"meta":{"line":499,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"interactionsEventTypes","description":"The enabled event webhook types to send to the interaction endpoint","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":509,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eventWebhooksStatus","description":"Whether event webhooks are enabled","nullable":true,"type":[[["number"]]],"meta":{"line":519,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eventWebhooksUrl","description":"The URL of the application's event webhooks endpoint","nullable":true,"type":[[["string"]]],"meta":{"line":529,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eventWebhooksTypes","description":"The enabled event webhook types to send to the event webhooks endpoint","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":539,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"explicitContentFilter","description":"Whether uploaded media content used in application commands is scanned and deleted for explicit content","nullable":true,"type":[[["number"]]],"meta":{"line":549,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"integrationTypesConfig","description":"The configuration for each integration type supported by the application","nullable":true,"type":[[["object"]]],"meta":{"line":559,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"isVerified","description":"Whether the application is verified","nullable":true,"type":[[["boolean"]]],"meta":{"line":569,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"verificationState","description":"The current verification state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":579,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"storeApplicationState","description":"The current store approval state of the commerce application","nullable":true,"type":[[["number"]]],"meta":{"line":589,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"rpcApplicationState","description":"The current RPC approval state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":599,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"creatorMonetizationState","description":"The current guild creator monetization state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":609,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"isDiscoverable","description":"Whether the application is discoverable in the application directory","nullable":true,"type":[[["boolean"]]],"meta":{"line":619,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"discoverabilityState","description":"The current application directory discoverability state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":629,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"discoveryEligibilityFlags","description":"The current application directory eligibility flags for the application","nullable":true,"type":[[["number"]]],"meta":{"line":639,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"isMonetized","description":"Whether the application has monetization enabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":649,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"storefrontAvailable","description":"Whether the application has public subscriptions or products available for purchase","nullable":true,"type":[[["boolean"]]],"meta":{"line":659,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"monetizationState","description":"The current application monetization state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":669,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"monetizationEligibilityFlags","description":"The current application monetization eligibility flags for the application","nullable":true,"type":[[["number"]]],"meta":{"line":679,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"maxParticipants","description":"The maximum possible participants in the application's embedded activity (-1 for no limit)","nullable":true,"type":[[["number"]]],"meta":{"line":689,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild associated with this application.","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":700,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":709,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":718,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":727,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Obtains this application from Discord.","inherits":"Application#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Application",">"]]],"meta":{"line":735,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","inherits":"Application#fetchRoleConnectionMetadataRecords","inherited":true,"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":752,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":762,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":772,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":790,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":816,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":9,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"Interaction","description":"Represents an interaction.","extends":[[["Base"]]],"props":[{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":12,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollector","description":"Collects interactions.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.\nInteraction collectors that do not specify `time` or `idle` may be prone to always running.\nEnsure your interaction collectors end via either of these options or manual cancellation.","extends":[[["Collector"]]],"construct":{"name":"InteractionCollector","params":[{"name":"client","description":"The client on which to collect interactions","type":[[["Client"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["InteractionCollectorOptions"]]]}]},"props":[{"name":"messageId","description":"The message from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"channelId","description":"The channel from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"guildId","description":"The guild from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"interactionType","description":"The type of interaction to collect","nullable":true,"type":[[["InteractionType"]]],"meta":{"line":67,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"componentType","description":"The type of component to collect","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":76,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have interacted with this collector","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of interactions collected","type":[[["number"]]],"meta":{"line":91,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming interaction for possible collection.","access":"private","params":[{"name":"interaction","description":"The interaction to possibly collect","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles an interaction for possible disposal.","params":[{"name":"interaction","description":"The interaction that could be disposed of","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":162,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this interaction collector.","meta":{"line":180,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":205,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":217,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":229,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":241,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an interaction is collected.","params":[{"name":"interaction","description":"The interaction that was collected","type":[[["Interaction"]]]}],"meta":{"line":143,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever an interaction is disposed of.","params":[{"name":"interaction","description":"The interaction that was disposed of","type":[[["Interaction"]]]}],"meta":{"line":163,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":30,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"InteractionWebhook","description":"Represents a webhook for an Interaction","implements":[[["Webhook"]]],"construct":{"name":"InteractionWebhook","params":[{"name":"client","description":"The instantiating client","type":[[["Client"]]]},{"name":"id","description":"The application's id","type":[[["Snowflake"]]]},{"name":"token","description":"The interaction's token","type":[[["string"]]]}]},"props":[{"name":"client","description":"The client that instantiated the interaction webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":16,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":429,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"params":[{"name":"options","description":"The content for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":34,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":296,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":332,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":382,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":9,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"Application","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":32,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":39,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":49,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":59,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"termsOfServiceURL","description":"The URL of the application's terms of service","nullable":true,"type":[[["string"]]],"meta":{"line":69,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"privacyPolicyURL","description":"The URL of the application's privacy policy","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"verifyKey","description":"The hex-encoded key for verification in interactions and the GameSDK's GetTicket","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":108,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":115,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":128,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":138,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"approximateGuildCount","description":"An approximate amount of guilds this application is in.","nullable":true,"type":[[["number"]]],"meta":{"line":146,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"guildId","description":"The id of the guild associated with this application.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":156,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":166,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":176,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"deprecated":true,"type":[[["boolean"]]],"meta":{"line":187,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"deprecated":true,"type":[[["boolean"]]],"meta":{"line":198,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":207,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"splash","description":"The application's splash image hash","nullable":true,"type":[[["string"]]],"meta":{"line":218,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the application","see":["{@link https://docs.discord.food/resources/application#application-type}"],"type":[[["number"]]],"meta":{"line":229,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"primarySkuId","description":"The ID of the application's primary SKU (game, application subscription, etc.)","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":239,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eulaId","description":"The ID of the application's EULA","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":249,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"slug","description":"The URL slug that links to the primary store page of the application","nullable":true,"type":[[["string"]]],"meta":{"line":259,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"aliases","description":"Other names the application's game is associated with","type":[[["Array","<"],["string",">"]]],"meta":{"line":269,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"executables","description":"The unique executables of the application's game","nullable":true,"type":[[["Array","<"],["ApplicationExecutable",">"]]],"meta":{"line":286,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"thirdPartySkus","description":"The third party SKUs of the application's game","nullable":true,"type":[[["Array","<"],["ApplicationSku",">"]]],"meta":{"line":303,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"hook","description":"Whether the Discord client is allowed to hook into the application's game directly","nullable":true,"type":[[["boolean"]]],"meta":{"line":313,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlay","description":"Whether the application's game supports the Discord overlay (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":323,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlayMethods","description":"The methods of overlaying that the application's game supports","nullable":true,"type":[[["number"]]],"meta":{"line":333,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlayWarn","description":"Whether the Discord overlay is known to be problematic with this application's game (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":343,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"overlayCompatibilityHook","description":"Whether to use the compatibility hook for the overlay (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":353,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"bot","description":"The bot attached to this application","nullable":true,"type":[[["User"]]],"meta":{"line":363,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"developers","description":"The companies that developed the application","nullable":true,"type":[[["Array","<"],["Company",">"]]],"meta":{"line":379,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"publishers","description":"The companies that published the application","nullable":true,"type":[[["Array","<"],["Company",">"]]],"meta":{"line":389,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"redirectUris","description":"The whitelisted URLs for redirecting to during OAuth2 authorization (max 10)","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":399,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"deeplinkUri","description":"The URL used for deep linking during OAuth2 authorization on mobile devices","nullable":true,"type":[[["string"]]],"meta":{"line":409,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"integrationPublic","description":"Whether only the application owner can add the integration","nullable":true,"type":[[["boolean"]]],"meta":{"line":419,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"integrationRequireCodeGrant","description":"Whether the integration will only be added upon completion of a full OAuth2 token exchange","nullable":true,"type":[[["boolean"]]],"meta":{"line":429,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botDisabled","description":"Whether the application's bot is disabled by Discord (default false)","nullable":true,"type":[[["boolean"]]],"meta":{"line":439,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"botQuarantined","description":"Whether the application's bot is quarantined by Discord","nullable":true,"type":[[["boolean"]]],"meta":{"line":449,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"approximateUserInstallCount","description":"Approximate count of users that have authorized the application with the applications.commands scope","nullable":true,"type":[[["number"]]],"meta":{"line":459,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"approximateUserAuthorizationCount","description":"Approximate count of users that have OAuth2 authorizations for the application","nullable":true,"type":[[["number"]]],"meta":{"line":469,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"internalGuildRestriction","description":"What guilds the application can be authorized in","nullable":true,"type":[[["number"]]],"meta":{"line":479,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"interactionsEndpointUrl","description":"The URL of the application's interactions endpoint","nullable":true,"type":[[["string"]]],"meta":{"line":489,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"interactionsVersion","description":"The version of the application's interactions endpoint implementation","nullable":true,"type":[[["number"]]],"meta":{"line":499,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"interactionsEventTypes","description":"The enabled event webhook types to send to the interaction endpoint","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":509,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eventWebhooksStatus","description":"Whether event webhooks are enabled","nullable":true,"type":[[["number"]]],"meta":{"line":519,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eventWebhooksUrl","description":"The URL of the application's event webhooks endpoint","nullable":true,"type":[[["string"]]],"meta":{"line":529,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"eventWebhooksTypes","description":"The enabled event webhook types to send to the event webhooks endpoint","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":539,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"explicitContentFilter","description":"Whether uploaded media content used in application commands is scanned and deleted for explicit content","nullable":true,"type":[[["number"]]],"meta":{"line":549,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"integrationTypesConfig","description":"The configuration for each integration type supported by the application","nullable":true,"type":[[["object"]]],"meta":{"line":559,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"isVerified","description":"Whether the application is verified","nullable":true,"type":[[["boolean"]]],"meta":{"line":569,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"verificationState","description":"The current verification state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":579,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"storeApplicationState","description":"The current store approval state of the commerce application","nullable":true,"type":[[["number"]]],"meta":{"line":589,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"rpcApplicationState","description":"The current RPC approval state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":599,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"creatorMonetizationState","description":"The current guild creator monetization state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":609,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"isDiscoverable","description":"Whether the application is discoverable in the application directory","nullable":true,"type":[[["boolean"]]],"meta":{"line":619,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"discoverabilityState","description":"The current application directory discoverability state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":629,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"discoveryEligibilityFlags","description":"The current application directory eligibility flags for the application","nullable":true,"type":[[["number"]]],"meta":{"line":639,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"isMonetized","description":"Whether the application has monetization enabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":649,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"storefrontAvailable","description":"Whether the application has public subscriptions or products available for purchase","nullable":true,"type":[[["boolean"]]],"meta":{"line":659,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"monetizationState","description":"The current application monetization state of the application","nullable":true,"type":[[["number"]]],"meta":{"line":669,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"monetizationEligibilityFlags","description":"The current application monetization eligibility flags for the application","nullable":true,"type":[[["number"]]],"meta":{"line":679,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"maxParticipants","description":"The maximum possible participants in the application's embedded activity (-1 for no limit)","nullable":true,"type":[[["number"]]],"meta":{"line":689,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild associated with this application.","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":700,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":709,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":718,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":727,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["Application",">"]]],"meta":{"line":735,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":752,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":762,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":772,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":790,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":816,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":21,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"Collector","description":"Abstract class for defining a new Collector.","extends":[[["EventEmitter"]]],"abstract":true,"props":[{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"abstract":true,"type":[[["string"]]],"meta":{"line":276,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collect","description":"Handles incoming events from the `handleCollect` function. Returns null if the event should not\nbe collected, or returns an object describing the data that should be stored.","see":["Collector#handleCollect"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"],[["Promise",""],["*",">"]]],"description":"Data to insert into collection, if any","nullable":true},"meta":{"line":286,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Handles incoming events from the `handleDispose`. Returns null if the event should not\nbe disposed, or returns the key that should be removed.","see":["Collector#handleDispose"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"]],"description":"Key to remove from the collection, if any","nullable":true},"meta":{"line":296,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an element is collected.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":105,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Emitted whenever an element is disposed of.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":133,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":31,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"Invite","description":"Represents an invitation to a guild channel.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild the invite is for including welcome screen data if present","nullable":true,"type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":30,"file":"Invite.js","path":"src/structures"}},{"name":"code","description":"The code for this invite","type":[[["string"]]],"meta":{"line":40,"file":"Invite.js","path":"src/structures"}},{"name":"presenceCount","description":"The approximate number of online members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":49,"file":"Invite.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate total number of members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"Invite.js","path":"src/structures"}},{"name":"temporary","description":"Whether or not this invite only grants temporary membership\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"Invite.js","path":"src/structures"}},{"name":"maxAge","description":"The maximum age of the invite, in seconds, 0 if never expires\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":84,"file":"Invite.js","path":"src/structures"}},{"name":"uses","description":"How many times this invite has been used\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"Invite.js","path":"src/structures"}},{"name":"maxUses","description":"The maximum uses of this invite\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":108,"file":"Invite.js","path":"src/structures"}},{"name":"inviterId","description":"The user's id who created this invite","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":118,"file":"Invite.js","path":"src/structures"}},{"name":"inviter","description":"The user who created this invite","nullable":true,"type":[[["User"]]],"meta":{"line":129,"file":"Invite.js","path":"src/structures"}},{"name":"targetUser","description":"The user whose stream to display for this voice channel stream invite","nullable":true,"type":[[["User"]]],"meta":{"line":140,"file":"Invite.js","path":"src/structures"}},{"name":"targetApplication","description":"The embedded application to open for this voice channel embedded application invite","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":150,"file":"Invite.js","path":"src/structures"}},{"name":"targetType","description":"The target type","nullable":true,"type":[[["TargetType"]]],"meta":{"line":170,"file":"Invite.js","path":"src/structures"}},{"name":"type","description":"The type of invite","nullable":true,"type":[[["InviteType"]]],"meta":{"line":188,"file":"Invite.js","path":"src/structures"}},{"name":"channelId","description":"The channel's id this invite is for","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":198,"file":"Invite.js","path":"src/structures"}},{"name":"channel","description":"The channel this invite is for","nullable":true,"type":[[["Channel"]]],"meta":{"line":207,"file":"Invite.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this invite was created at","nullable":true,"type":[[["number"]]],"meta":{"line":216,"file":"Invite.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance data if there is a public {@link StageInstance} in the stage channel this invite is for","nullable":true,"type":[[["InviteStageInstance"]]],"meta":{"line":232,"file":"Invite.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The guild scheduled event data if there is a {@link GuildScheduledEvent} in the channel this invite is for","nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":242,"file":"Invite.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the invite.","nullable":true,"type":[[["Readonly","<"],["InviteFlags",">"]]],"meta":{"line":252,"file":"Invite.js","path":"src/structures"}},{"name":"createdAt","description":"The time the invite was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":263,"file":"Invite.js","path":"src/structures"}},{"name":"deletable","description":"Whether the invite is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":272,"file":"Invite.js","path":"src/structures"}},{"name":"expiresTimestamp","description":"The timestamp the invite will expire at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":287,"file":"Invite.js","path":"src/structures"}},{"name":"expiresAt","description":"The time the invite will expire at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":299,"file":"Invite.js","path":"src/structures"}},{"name":"url","description":"The URL to the invite","readonly":true,"type":[[["string"]]],"meta":{"line":309,"file":"Invite.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"INVITES_PATTERN","description":"Regular expression that globally matches Discord invite links","scope":"static","type":[[["RegExp"]]],"meta":{"line":356,"file":"Invite.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this invite.","params":[{"name":"reason","description":"Reason for deleting this invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":318,"file":"Invite.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the invite's URL instead of the object.","examples":["// Logs: Invite: https://discord.gg/A1b2C3\nconsole.log(`Invite: ${invite}`);"],"returns":[[["string"]]],"meta":{"line":330,"file":"Invite.js","path":"src/structures"}}],"meta":{"line":18,"file":"Invite.js","path":"src/structures"}},{"name":"InviteGuild","description":"Represents a guild received from an invite, includes welcome screen data if available.","extends":[[["AnonymousGuild"]]],"props":[{"name":"welcomeScreen","description":"The welcome screen for this invite guild","nullable":true,"type":[[["WelcomeScreen"]]],"meta":{"line":18,"file":"InviteGuild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteGuild.js","path":"src/structures"}},{"name":"InviteStageInstance","description":"Represents the data about a public {@link StageInstance} in an {@link Invite}.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the stage channel this invite is for","type":[[["Snowflake"]]],"meta":{"line":18,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The stage channel's guild id","type":[[["Snowflake"]]],"meta":{"line":24,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"members","description":"The members speaking in the stage channel","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":30,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":41,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"participantCount","description":"The number of users in the stage channel","type":[[["number"]]],"meta":{"line":49,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"speakerCount","description":"The number of users speaking in the stage channel","type":[[["number"]]],"meta":{"line":57,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel this invite is for","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":72,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild of the stage channel this invite is for","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":81,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"MediaChannel","description":"Represents a media channel.","extends":[[["ThreadOnlyChannel"]]],"props":[{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildForumThreadManager"]]],"meta":{"line":53,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"availableTags","description":"The set of tags that can be used in this channel.","type":[[["Array","<"],["GuildForumTag",">"]]],"meta":{"line":65,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultReactionEmoji","description":"The emoji to show in the add reaction button on a thread in a guild forum channel","nullable":true,"type":[[["DefaultReactionEmoji"]]],"meta":{"line":75,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":86,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel.","nullable":true,"type":[[["ThreadAutoArchiveDuration"]]],"meta":{"line":106,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If this channel is considered NSFW.","type":[[["boolean"]]],"meta":{"line":116,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of this channel.","nullable":true,"type":[[["string"]]],"meta":{"line":126,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultSortOrder","description":"The default sort order mode used to order posts","nullable":true,"type":[[["SortOrderType"]]],"meta":{"line":134,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setAvailableTags","description":"Sets the available tags for this forum channel","inherits":"ThreadOnlyChannel#setAvailableTags","inherited":true,"params":[{"name":"availableTags","description":"The tags to set as available in this channel","type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"reason","description":"Reason for changing the available tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":146,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultReactionEmoji","description":"Sets the default reaction emoji for this channel","inherits":"ThreadOnlyChannel#setDefaultReactionEmoji","inherited":true,"params":[{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"reason","description":"Reason for changing the default reaction emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":156,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultThreadRateLimitPerUser","description":"Sets the default rate limit per user (slowmode) for new threads in this channel","inherits":"ThreadOnlyChannel#setDefaultThreadRateLimitPerUser","inherited":true,"params":[{"name":"defaultThreadRateLimitPerUser","description":"The rate limit to set on newly created threads in this channel","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the default rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":166,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultSortOrder","description":"Sets the default sort order mode used to order posts","inherits":"ThreadOnlyChannel#setDefaultSortOrder","inherited":true,"params":[{"name":"defaultSortOrder","description":"The default sort order mode to set on this channel","nullable":true,"type":[[["SortOrderType"]]]},{"name":"reason","description":"Reason for changing the default sort order","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":176,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"ThreadOnlyChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":190,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"ThreadOnlyChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":200,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"ThreadOnlyChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":210,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"ThreadOnlyChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":225,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"ThreadOnlyChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"ThreadOnlyChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"ThreadOnlyChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"ThreadOnlyChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"MediaChannel.js","path":"src/structures"}},{"name":"MediaGalleryComponent","construct":{"name":"MediaGalleryComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["MediaGalleryComponent"]],[["APIMediaGalleryComponent"]]]}]},"props":[{"name":"items","description":"1 to 10 media gallery items","type":[[["Array","<"],["MediaGalleryItem",">"]]],"meta":{"line":27,"file":"MediaGalleryComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APIMediaGalleryComponent"]]],"meta":{"line":33,"file":"MediaGalleryComponent.js","path":"src/structures"}}],"meta":{"line":15,"file":"MediaGalleryComponent.js","path":"src/structures"}},{"name":"MediaGalleryItem","construct":{"name":"MediaGalleryItem","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["MediaGalleryItem"]],[["APIMediaGalleryItem"]]]}]},"props":[{"name":"media","description":"A url or attachment","type":[[["UnfurledMediaItem"]]],"meta":{"line":20,"file":"MediaGalleryItem.js","path":"src/structures"}},{"name":"description","description":"Alt text for the media, max 1024 characters","type":[[["String"]]],"meta":{"line":26,"file":"MediaGalleryItem.js","path":"src/structures"}},{"name":"spoiler","description":"Whether the media should be a spoiler (or blurred out). Defaults to false","type":[[["Boolean"]]],"meta":{"line":32,"file":"MediaGalleryItem.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APIMediaGalleryItem"]]],"meta":{"line":38,"file":"MediaGalleryItem.js","path":"src/structures"}}],"meta":{"line":15,"file":"MediaGalleryItem.js","path":"src/structures"}},{"name":"Message","description":"Represents a message on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the message was sent in","type":[[["Snowflake"]]],"meta":{"line":49,"file":"Message.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the message was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":55,"file":"Message.js","path":"src/structures"}},{"name":"id","description":"The message's id","type":[[["Snowflake"]]],"meta":{"line":65,"file":"Message.js","path":"src/structures"}},{"name":"position","description":"A generally increasing integer (there may be gaps or duplicates) that represents\nthe approximate position of the message in a thread.","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"Message.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the message was sent at","type":[[["number"]]],"meta":{"line":82,"file":"Message.js","path":"src/structures"}},{"name":"type","description":"The type of the message","nullable":true,"type":[[["MessageType"]]],"meta":{"line":89,"file":"Message.js","path":"src/structures"}},{"name":"system","description":"Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications)","nullable":true,"type":[[["boolean"]]],"meta":{"line":95,"file":"Message.js","path":"src/structures"}},{"name":"content","description":"The content of the message","nullable":true,"type":[[["string"]]],"meta":{"line":106,"file":"Message.js","path":"src/structures"}},{"name":"author","description":"The author of the message","nullable":true,"type":[[["User"]]],"meta":{"line":116,"file":"Message.js","path":"src/structures"}},{"name":"pinned","description":"Whether or not this message is pinned","nullable":true,"type":[[["boolean"]]],"meta":{"line":126,"file":"Message.js","path":"src/structures"}},{"name":"tts","description":"Whether or not the message was Text-To-Speech","nullable":true,"type":[[["boolean"]]],"meta":{"line":136,"file":"Message.js","path":"src/structures"}},{"name":"nonce","description":"A random number or string used for checking message delivery\nThis is only received after the message was sent successfully, and\nlost if re-fetched","nullable":true,"type":[[["string"]]],"meta":{"line":148,"file":"Message.js","path":"src/structures"}},{"name":"embeds","description":"A list of embeds in the message - e.g. YouTube Player","type":[[["Array","<"],["MessageEmbed",">"]]],"meta":{"line":158,"file":"Message.js","path":"src/structures"}},{"name":"components","description":"An array of components in the message","type":[[["Array","<"],["TopLevelComponent",">"]]],"meta":{"line":172,"file":"Message.js","path":"src/structures"}},{"name":"attachments","description":"A collection of attachments in the message - e.g. Pictures - mapped by their ids","type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]],"meta":{"line":182,"file":"Message.js","path":"src/structures"}},{"name":"stickers","description":"A collection of stickers in the message","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":197,"file":"Message.js","path":"src/structures"}},{"name":"editedTimestamp","description":"The timestamp the message was last edited at (if applicable)","nullable":true,"type":[[["number"]]],"meta":{"line":210,"file":"Message.js","path":"src/structures"}},{"name":"reactions","description":"A manager of the reactions belonging to this message","type":[[["ReactionManager"]]],"meta":{"line":220,"file":"Message.js","path":"src/structures"}},{"name":"mentions","description":"All valid mentions that the message contains","type":[[["MessageMentions"]]],"meta":{"line":235,"file":"Message.js","path":"src/structures"}},{"name":"webhookId","description":"The id of the webhook that sent the message, if applicable","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":259,"file":"Message.js","path":"src/structures"}},{"name":"poll","description":"The poll that was sent with the message","nullable":true,"type":[[["Poll"]]],"meta":{"line":269,"file":"Message.js","path":"src/structures"}},{"name":"groupActivityApplication","description":"Supplemental application information for group activities","nullable":true,"type":[[["Application"]]],"meta":{"line":279,"file":"Message.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application of the interaction that sent this message, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":289,"file":"Message.js","path":"src/structures"}},{"name":"activity","description":"Group activity","nullable":true,"type":[[["MessageActivity"]]],"meta":{"line":299,"file":"Message.js","path":"src/structures"}},{"name":"flags","description":"Flags that are applied to the message","type":[[["Readonly","<"],["MessageFlags",">"]]],"meta":{"line":322,"file":"Message.js","path":"src/structures"}},{"name":"reference","description":"Message reference data","nullable":true,"type":[[["MessageReference"]]],"meta":{"line":348,"file":"Message.js","path":"src/structures"}},{"name":"interaction","description":"Partial data of the interaction that this message is a reply to","nullable":true,"type":[[["MessageInteraction"]]],"meta":{"line":377,"file":"Message.js","path":"src/structures"}},{"name":"messageSnapshots","description":"The message snapshots associated with the message reference","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]],"meta":{"line":392,"file":"Message.js","path":"src/structures"}},{"name":"call","description":"The call associated with the message","nullable":true,"type":[[["MessageCall"]]],"meta":{"line":423,"file":"Message.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":440,"file":"Message.js","path":"src/structures"}},{"name":"channel","description":"The channel that the message was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":470,"file":"Message.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this message is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":479,"file":"Message.js","path":"src/structures"}},{"name":"member","description":"Represents the author of the message as a guild member.\nOnly available if the message comes from a guild where the author is still a member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":489,"file":"Message.js","path":"src/structures"}},{"name":"createdAt","description":"The time the message was sent at","readonly":true,"type":[[["Date"]]],"meta":{"line":498,"file":"Message.js","path":"src/structures"}},{"name":"editedAt","description":"The time the message was last edited at (if applicable)","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":507,"file":"Message.js","path":"src/structures"}},{"name":"guild","description":"The guild the message was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":516,"file":"Message.js","path":"src/structures"}},{"name":"hasThread","description":"Whether this message has a thread associated with it","readonly":true,"type":[[["boolean"]]],"meta":{"line":525,"file":"Message.js","path":"src/structures"}},{"name":"thread","description":"The thread started by this message\nThis property is not suitable for checking whether a message has a thread,\nuse {@link Message#hasThread} instead.","readonly":true,"nullable":true,"type":[[["ThreadChannel"]]],"meta":{"line":536,"file":"Message.js","path":"src/structures"}},{"name":"url","description":"The URL to jump to this message","readonly":true,"type":[[["string"]]],"meta":{"line":545,"file":"Message.js","path":"src/structures"}},{"name":"cleanContent","description":"The message contents with all mentions replaced by the equivalent text.\nIf mentions cannot be resolved to a name, the relevant mention in the message content will not be converted.","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":555,"file":"Message.js","path":"src/structures"}},{"name":"editable","description":"Whether the message is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":608,"file":"Message.js","path":"src/structures"}},{"name":"deletable","description":"Whether the message is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":634,"file":"Message.js","path":"src/structures"}},{"name":"bulkDeletable","description":"Whether the message is bulk deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":666,"file":"Message.js","path":"src/structures"}},{"name":"pinnable","description":"Whether the message is pinnable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":675,"file":"Message.js","path":"src/structures"}},{"name":"crosspostable","description":"Whether the message is crosspostable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":705,"file":"Message.js","path":"src/structures"}},{"name":"isMessage","description":"Check data","readonly":true,"type":[[["boolean"]]],"meta":{"line":1085,"file":"Message.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createReactionCollector","description":"Creates a reaction collector.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId';\nconst collector = message.createReactionCollector({ filter, time: 15_000 });\ncollector.on('collect', r => console.log(`Collected ${r.emoji.name}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}],"returns":[[["ReactionCollector"]]],"meta":{"line":571,"file":"Message.js","path":"src/structures"}},{"name":"awaitReactions","description":"Similar to createReactionCollector but in promise form.\nResolves with a collection of reactions that pass the specified filter.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId'\nmessage.awaitReactions({ filter, time: 15_000 })\n .then(collected => console.log(`Collected ${collected.size} reactions`))\n .catch(console.error);"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitReactionsOptions"]]]}],"returns":[[["Promise","<"],["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">>"]]],"meta":{"line":593,"file":"Message.js","path":"src/structures"}},{"name":"fetchReference","description":"Fetches the Message this crosspost/reply/pin-add references, if available to the client","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":690,"file":"Message.js","path":"src/structures"}},{"name":"edit","description":"Edits the content of the message.","examples":["// Update the content of a message\nmessage.edit('This is my new content!')\n .then(msg => console.log(`Updated the content of a message to ${msg.content}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":746,"file":"Message.js","path":"src/structures"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it.","examples":["// Crosspost a message\nif (message.channel.type === 'GUILD_NEWS') {\n message.crosspost()\n .then(() => console.log('Crossposted message'))\n .catch(console.error);\n}"],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":762,"file":"Message.js","path":"src/structures"}},{"name":"pin","description":"Pins this message to the channel's pinned messages.","examples":["// Pin a message\nmessage.pin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":777,"file":"Message.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this message from the channel's pinned messages.","examples":["// Unpin a message\nmessage.unpin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":793,"file":"Message.js","path":"src/structures"}},{"name":"react","description":"Adds a reaction to the message.","examples":["// React to a message with a unicode emoji\nmessage.react('🤔')\n .then(console.log)\n .catch(console.error);","// React to a message with a custom emoji\nmessage.react(message.guild.emojis.cache.get('123456789012345678'))\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":815,"file":"Message.js","path":"src/structures"}},{"name":"delete","description":"Deletes the message.","examples":["// Delete a message\nmessage.delete()\n .then(msg => console.log(`Deleted message from ${msg.author.username}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":840,"file":"Message.js","path":"src/structures"}},{"name":"reply","description":"Send an inline reply to this message.","examples":["// Reply to a message\nmessage.reply('This is a reply!')\n .then(() => console.log(`Replied to message \"${message.content}\"`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["ReplyMessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":864,"file":"Message.js","path":"src/structures"}},{"name":"forward","description":"Forwards this message","params":[{"name":"channel","description":"The channel to forward this message to.","type":[[["TextBasedChannelResolvable"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":886,"file":"Message.js","path":"src/structures"}},{"name":"startThread","description":"Create a new public thread from this message","see":["GuildTextThreadManager#create"],"params":[{"name":"options","description":"Options for starting a thread on this message","optional":true,"type":[[["StartThreadOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":926,"file":"Message.js","path":"src/structures"}},{"name":"vote","description":"Submits a poll vote for the current user. Returns a 204 empty response on success.","examples":["// Vote multi choices\nmessage.vote(1,2);\n// Remove vote\nmessage.vote();"],"params":[{"name":"ids","description":"ID of the answer","variable":true,"type":[[["Array","<"],["number",">"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":945,"file":"Message.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this message.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":961,"file":"Message.js","path":"src/structures"}},{"name":"fetchWebhook","description":"Fetches the webhook used to create this message.","async":true,"returns":[[["Promise",""],["Webhook",">"]]],"meta":{"line":970,"file":"Message.js","path":"src/structures"}},{"name":"suppressEmbeds","description":"Suppresses or unsuppresses embeds on a message.","params":[{"name":"suppress","description":"If the embeds should be suppressed or not","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":981,"file":"Message.js","path":"src/structures"}},{"name":"removeAttachments","description":"Removes the attachments from this message.","returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":997,"file":"Message.js","path":"src/structures"}},{"name":"resolveComponent","description":"Resolves a component by a custom id.","params":[{"name":"customId","description":"The custom id to resolve against","type":[[["string"]]]}],"returns":{"types":[[["MessageActionRowComponent"]]],"nullable":true},"meta":{"line":1006,"file":"Message.js","path":"src/structures"}},{"name":"equals","description":"Used mainly internally. Whether two messages are identical in properties. If you want to compare messages\nwithout checking all the properties, use `message.id === message2.id`, which is much more efficient. This\nmethod allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.","params":[{"name":"message","description":"The message to compare it to","type":[[["Message"]]]},{"name":"rawData","description":"Raw data passed through the WebSocket about this message","type":[[["APIMessage"]]]}],"returns":[[["boolean"]]],"meta":{"line":1022,"file":"Message.js","path":"src/structures"}},{"name":"inGuild","description":"Whether this message is from a guild.","returns":[[["boolean"]]],"meta":{"line":1052,"file":"Message.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the message's content instead of the object.","examples":["// Logs: Message: This is a message!\nconsole.log(`Message: ${message}`);"],"returns":[[["string"]]],"meta":{"line":1063,"file":"Message.js","path":"src/structures"}},{"name":"clickButton","description":"Click a specified button in the message based on the button's CustomID","params":[{"name":"buttonid","description":"customId of the button to click\n\nTo be compatible with Components V2, the following methods have been removed in this version:\n- Clicking by coordinates (using ActionRow)\n- Clicking the first button in the message\n\nCurrently, only clicking by CustomID is supported.","type":[[["string"]]]}],"returns":[[["Promise","<("],["Message","|"],["Modal",")>"]]],"meta":{"line":1100,"file":"Message.js","path":"src/structures"}},{"name":"selectMenu","description":"Select specific menu","params":[{"name":"menu","description":"Target","type":[[["number"]],[["string"]]]},{"name":"values","description":"Any value","type":[[["Array","<("],["UserResolvable","|"],["RoleResolvable","|"],["ChannelResolvable","|"],["string",")>"]]]}],"returns":[[["Promise","<("],["Message","|"],["Modal",")>"]]],"meta":{"line":1131,"file":"Message.js","path":"src/structures"}},{"name":"markUnread","description":"Marks the message as unread.","returns":[[["Promise","<"],["void",">"]]],"meta":{"line":1200,"file":"Message.js","path":"src/structures"}},{"name":"markRead","description":"Marks the message as read.","returns":[[["Promise","<"],["void",">"]]],"meta":{"line":1213,"file":"Message.js","path":"src/structures"}},{"name":"report","description":"Report Message","examples":["// GET https://discord.com/api/v9/reporting/menu/message?variant=4\n// Report Category\n// - MESSAGE_WELCOME (3)\n// - Something else (28)\n// - Hacks, cheats, phishing or malicious links (72)\nmessage.report([3, 28, 72]).then(console.log);\n// { \"report_id\": \"1199663489988440124\" }"],"params":[{"name":"breadcrumbs","description":"Options for reporting","type":[[["Arrray","<"],["number",">"]]]},{"name":"elements","description":"Metadata","optional":true,"default":"{}","type":[[["Object"]]]}],"returns":[[["Promise","<{"],["report_id",": "],["Snowflake","}>"]]],"meta":{"line":1235,"file":"Message.js","path":"src/structures"}}],"meta":{"line":41,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRow","description":"Represents an action row containing message components.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageActionRow","params":[{"name":"data","description":"MessageActionRow to clone or raw data","optional":true,"default":"{}","type":[[["MessageActionRow"]],[["MessageActionRowOptions"]]]},{"name":"client","description":"The client constructing this MessageActionRow, if provided","optional":true,"default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"The components in this action row","type":[[["Array","<"],["MessageActionRowComponent",">"]]],"meta":{"line":51,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"data","description":"The data for this component","type":[[["MessageComponentOptions"]]],"meta":{"line":60,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"id","description":"The id of this component","readonly":true,"type":[[["number"]]],"meta":{"line":68,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the action row.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":61,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the action row.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":71,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the action row.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":83,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the action row to a plain object.","returns":{"types":[[["APIMessageComponent"]]],"description":"The raw data of this action row"},"meta":{"line":92,"file":"MessageActionRow.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageAttachment","description":"Represents an attachment in a message.","construct":{"name":"MessageAttachment","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]},{"name":"data","description":"Extra data","optional":true,"type":[[["APIAttachment"]]]}]},"props":[{"name":"name","description":"The name of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":21,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"id","description":"The attachment's id","type":[[["Snowflake"]]],"meta":{"line":80,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"size","description":"The size of this attachment in bytes","type":[[["number"]]],"meta":{"line":87,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"url","description":"The URL to this attachment","type":[[["string"]]],"meta":{"line":95,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"proxyURL","description":"The Proxy URL to this attachment","type":[[["string"]]],"meta":{"line":103,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"height","description":"The height of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":111,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"width","description":"The width of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":121,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"contentType","description":"The media (MIME) type of this attachment","see":["{@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types}"],"nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"description","description":"The description (alt text) of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":142,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether this attachment is ephemeral","type":[[["boolean"]]],"meta":{"line":151,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"duration","description":"The duration of this attachment in seconds\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["number"]]],"meta":{"line":159,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"waveform","description":"The base64 encoded byte array representing a sampled waveform\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["string"]]],"meta":{"line":170,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"flags","description":"The flags of this attachment","type":[[["Readonly","<"],["AttachmentFlags",">"]]],"meta":{"line":180,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"title","description":"The title of this attachment\nThis will only be available if the attachment name contains special characters.","nullable":true,"type":[[["string"]]],"meta":{"line":191,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"spoiler","description":"Whether or not this attachment has been marked as a spoiler","readonly":true,"type":[[["boolean"]]],"meta":{"line":202,"file":"MessageAttachment.js","path":"src/structures"}}],"methods":[{"name":"setDescription","description":"Sets the description of this attachment.","params":[{"name":"description","description":"The description of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":30,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setFile","description":"Sets the file of this attachment.","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":41,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of this attachment.","params":[{"name":"name","description":"The name of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":52,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setSpoiler","description":"Sets whether this attachment is a spoiler","params":[{"name":"spoiler","description":"Whether the attachment should be marked as a spoiler","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":62,"file":"MessageAttachment.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"MessageButton","description":"Represents a button message component.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageButton","params":[{"name":"data","description":"MessageButton to clone or raw data","optional":true,"default":"{}","type":[[["MessageButton"]],[["MessageButtonOptions"]]]}]},"props":[{"name":"label","description":"The text to be displayed on this button","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"MessageButton.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"MessageButton.js","path":"src/structures"}},{"name":"style","description":"The style of this button","nullable":true,"type":[[["MessageButtonStyle"]]],"meta":{"line":50,"file":"MessageButton.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for this button","nullable":true,"type":[[["RawEmoji"]]],"meta":{"line":56,"file":"MessageButton.js","path":"src/structures"}},{"name":"url","description":"The URL this button links to, if it is a Link style button","nullable":true,"type":[[["string"]]],"meta":{"line":62,"file":"MessageButton.js","path":"src/structures"}},{"name":"disabled","description":"Whether this button is currently disabled","type":[[["boolean"]]],"meta":{"line":68,"file":"MessageButton.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"data","description":"The data for this component","type":[[["MessageComponentOptions"]]],"meta":{"line":60,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"id","description":"The id of this component","readonly":true,"type":[[["number"]]],"meta":{"line":68,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id for this button","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":76,"file":"MessageButton.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the button","params":[{"name":"disabled","description":"Whether this button should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":86,"file":"MessageButton.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this button","params":[{"name":"emoji","description":"The emoji to be displayed on this button","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":96,"file":"MessageButton.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this button","params":[{"name":"label","description":"The text to be displayed on this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":106,"file":"MessageButton.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this button","params":[{"name":"style","description":"The style of this button","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":116,"file":"MessageButton.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this button.\nMessageButton#style must be LINK when setting a URL","params":[{"name":"url","description":"The URL of this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":127,"file":"MessageButton.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the button to a plain object.","returns":{"types":[[["APIMessageButton"]]],"description":"The raw data of this button"},"meta":{"line":136,"file":"MessageButton.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a button","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButtonStyle"]]],"meta":{"line":161,"file":"MessageButton.js","path":"src/structures"}}],"meta":{"line":12,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollector","description":"Collects messages on a channel.\nWill automatically stop if the channel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"MessageCollector","params":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]]},{"name":"options","description":"The options to be applied to this collector","type":[[["MessageCollectorOptions"]]]}]},"props":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]],"meta":{"line":32,"file":"MessageCollector.js","path":"src/structures"}},{"name":"received","description":"Total number of messages that were received in the channel during message collection","type":[[["number"]]],"meta":{"line":38,"file":"MessageCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":103,"file":"MessageCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles a message for possible collection.","access":"private","params":[{"name":"message","description":"The message that could be collected","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":73,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a message for possible disposal.","params":[{"name":"message","description":"The message that could be disposed of","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":89,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":115,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":127,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":139,"file":"MessageCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever a message is collected.","params":[{"name":"message","description":"The message that was collected","type":[[["Message"]]]}],"meta":{"line":74,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever a message is disposed of.","params":[{"name":"message","description":"The message that was disposed of","type":[[["Message"]]]}],"meta":{"line":90,"file":"MessageCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":19,"file":"MessageCollector.js","path":"src/structures"}},{"name":"MessageComponentInteraction","description":"Represents a message component interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a MessageComponent","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":90,"file":"MessageComponentInteraction.js","path":"src/structures"}}],"meta":{"line":13,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"MessageContextMenuInteraction","description":"Represents a message context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetMessage","description":"The message this interaction was sent from","readonly":true,"type":[[["Message"]],[["APIMessage"]]],"meta":{"line":15,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"MessageEmbed","description":"Represents an embed in a message (image/video preview, rich embed, etc.)","construct":{"name":"MessageEmbed","params":[{"name":"data","description":"MessageEmbed to clone or raw embed data","optional":true,"default":"{}","type":[[["MessageEmbed"]],[["MessageEmbedOptions"]],[["APIEmbed"]]]}]},"props":[{"name":"type","description":"The type of this embed, either:\n* `rich` - a generic embed rendered from embed attributes\n* `image` - an image embed\n* `video` - a video embed\n* `gifv` - an animated gif image embed rendered as a video embed\n* `article` - an article embed\n* `link` - a link embed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object-embed-types}"],"deprecated":true,"type":[[["string"]]],"meta":{"line":61,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":67,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"timestamp","description":"The timestamp of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":91,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"fields","description":"The fields of this embed","type":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":105,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedThumbnail"]]],"meta":{"line":123,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["MessageEmbedImage"]]],"meta":{"line":145,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["MessageEmbedVideo"]]],"meta":{"line":168,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedAuthor"]]],"meta":{"line":190,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedProvider"]]],"meta":{"line":210,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"footer","description":"The footer of this embed","nullable":true,"type":[[["MessageEmbedFooter"]]],"meta":{"line":229,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"createdAt","description":"The date displayed on this embed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":243,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the embed color, with a leading hash","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":252,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"length","description":"The accumulated length for the embed title, description, fields, footer text, and author name","readonly":true,"type":[[["number"]]],"meta":{"line":261,"file":"MessageEmbed.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Checks if this embed is equal to another one by comparing every single one of their properties.","params":[{"name":"embed","description":"The embed to compare with","type":[[["MessageEmbed"]],[["APIEmbed"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"_fieldEquals","description":"Compares two given embed fields to see if they are equal","access":"private","params":[{"name":"field","description":"The first field to compare","type":[[["EmbedFieldData"]]]},{"name":"other","description":"The second field to compare","type":[[["EmbedFieldData"]]]}],"returns":[[["boolean"]]],"meta":{"line":308,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addField","description":"Adds a field to the embed (max 25).","deprecated":"This method is a wrapper for {@link MessageEmbed#addFields}. Use that instead.","params":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":320,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addFields","description":"Adds fields to the embed (max 25).","params":[{"name":"fields","description":"The fields to add","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":338,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"spliceFields","description":"Removes, replaces, and inserts fields in the embed (max 25).","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of fields to remove","type":[[["number"]]]},{"name":"fields","description":"The replacing field objects","optional":true,"variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":350,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFields","description":"Sets the embed's fields (max 25).","params":[{"name":"fields","description":"The fields to set","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":360,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]},{"name":"deprecatedURL","description":"The URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":383,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":412,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":422,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFooter","description":"Sets the footer of this embed.","params":[{"name":"options","description":"The options to provide for the footer.\nProvide `null` to remove the footer data.","type":[[["string"]],[["EmbedFooterData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this footer.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":442,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":471,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the thumbnail","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":481,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTimestamp","description":"Sets the timestamp of this embed.","params":[{"name":"timestamp","description":"The timestamp or date.\nIf `null` then the timestamp will be unset (i.e. when editing an existing {@link MessageEmbed})","optional":true,"default":"Date.now()","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":492,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":503,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":513,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the embed to a plain object.","returns":{"types":[[["APIEmbed"]]],"description":"The raw data of this embed"},"meta":{"line":522,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeField","description":"Normalizes field input and verifies strings.","scope":"static","params":[{"name":"name","description":"The name of the field","type":[[["string"]]]},{"name":"value","description":"The value of the field","type":[[["string"]]]},{"name":"inline","description":"Set the field to display inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["EmbedField"]]],"meta":{"line":562,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeFields","description":"Normalizes field input and resolves strings.","scope":"static","params":[{"name":"fields","description":"Fields to normalize","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":582,"file":"MessageEmbed.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageMentions","description":"Keeps track of mentions in a {@link Message}.","props":[{"name":"everyone","description":"Whether `@everyone` or `@here` were mentioned","type":[[["boolean"]]],"meta":{"line":38,"file":"MessageMentions.js","path":"src/structures"}},{"name":"users","description":"Any users that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"MessageMentions.js","path":"src/structures"}},{"name":"roles","description":"Any roles that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":68,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_members","description":"Cached members for {@link MessageMentions#members}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":87,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_channels","description":"Cached channels for {@link MessageMentions#channels}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":94,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_parsedUsers","description":"Cached users for {@link MessageMentions#parsedUsers}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":101,"file":"MessageMentions.js","path":"src/structures"}},{"name":"crosspostedChannels","description":"A collection of crossposted channels\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["CrosspostedChannel",">"]]],"meta":{"line":119,"file":"MessageMentions.js","path":"src/structures"}},{"name":"repliedUser","description":"The author of the message that this message is a reply to","nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"MessageMentions.js","path":"src/structures"}},{"name":"members","description":"Any members that were mentioned (only in {@link Guild}s)\nOrder as received from the API, not as they appear in the message content","readonly":true,"nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":150,"file":"MessageMentions.js","path":"src/structures"}},{"name":"channels","description":"Any channels that were mentioned\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":167,"file":"MessageMentions.js","path":"src/structures"}},{"name":"parsedUsers","description":"Any user mentions that were included in the message content\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":184,"file":"MessageMentions.js","path":"src/structures"}},{"name":"EVERYONE_PATTERN","description":"Regular expression that globally matches `@everyone` and `@here`","scope":"static","type":[[["RegExp"]]],"meta":{"line":253,"file":"MessageMentions.js","path":"src/structures"}},{"name":"USERS_PATTERN","description":"Regular expression that globally matches user mentions like `<@81440962496172032>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":259,"file":"MessageMentions.js","path":"src/structures"}},{"name":"ROLES_PATTERN","description":"Regular expression that globally matches role mentions like `<@&297577916114403338>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":265,"file":"MessageMentions.js","path":"src/structures"}},{"name":"CHANNELS_PATTERN","description":"Regular expression that globally matches channel mentions like `<#222079895583457280>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":271,"file":"MessageMentions.js","path":"src/structures"}}],"methods":[{"name":"has","description":"Checks if a user, guild member, thread member, role, or channel is mentioned.\nTakes into account user mentions, role mentions, channel mentions,\nreplied user mention, and `@everyone`/`@here` mentions.","params":[{"name":"data","description":"The User/Role/Channel to check for","type":[[["UserResolvable"]],[["RoleResolvable"]],[["ChannelResolvable"]]]},{"name":"options","description":"The options for the check","optional":true,"type":[[["MessageMentionsHasOptions"]]]}],"returns":[[["boolean"]]],"meta":{"line":212,"file":"MessageMentions.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessagePayload","description":"Represents a message to be sent to the API.","construct":{"name":"MessagePayload","params":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}]},"props":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]],"meta":{"line":27,"file":"MessagePayload.js","path":"src/structures"}},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]],"meta":{"line":33,"file":"MessagePayload.js","path":"src/structures"}},{"name":"data","description":"Data sendable to the API","nullable":true,"type":[[["APIMessage"]]],"meta":{"line":39,"file":"MessagePayload.js","path":"src/structures"}},{"name":"files","description":"Files sendable to the API","nullable":true,"type":[[["Array","<"],["MessageFile",">"]]],"meta":{"line":52,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isWebhook","description":"Whether or not the target is a {@link Webhook} or a {@link WebhookClient}","readonly":true,"type":[[["boolean"]]],"meta":{"line":60,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isUser","description":"Whether or not the target is a {@link User}","readonly":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessage","description":"Whether or not the target is a {@link Message}","readonly":true,"type":[[["boolean"]]],"meta":{"line":82,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessageManager","description":"Whether or not the target is a {@link MessageManager}","readonly":true,"type":[[["boolean"]]],"meta":{"line":92,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isInteraction","description":"Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}","readonly":true,"type":[[["boolean"]]],"meta":{"line":102,"file":"MessagePayload.js","path":"src/structures"}}],"methods":[{"name":"makeContent","description":"Makes the content of this message.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":112,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveData","description":"Resolves data.","returns":[[["MessagePayload"]]],"meta":{"line":127,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFiles","description":"Resolves files.","async":true,"returns":[[["Promise","<"],["MessagePayload",">"]]],"meta":{"line":279,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFile","description":"Resolves a single file into an object sendable to the API.","scope":"static","params":[{"name":"fileLike","description":"Something that could be resolved to a file","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]}],"async":true,"returns":[[["Promise","<"],["MessageFile",">"]]],"meta":{"line":291,"file":"MessagePayload.js","path":"src/structures"}},{"name":"create","description":"Creates a {@link MessagePayload} from user-level arguments.","scope":"static","params":[{"name":"target","description":"Target to send to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options or content to use","type":[[["string"]],[["MessageOptions"]],[["WebhookMessageOptions"]]]},{"name":"extra","description":"Extra options to add onto specified options","optional":true,"default":"{}","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}],"returns":[[["MessagePayload"]]],"meta":{"line":335,"file":"MessagePayload.js","path":"src/structures"}}],"meta":{"line":17,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageReaction","description":"Represents a reaction to a message.","props":[{"name":"client","description":"The client that instantiated this message reaction","readonly":true,"type":[[["Client"]]],"meta":{"line":13,"file":"MessageReaction.js","path":"src/structures"}},{"name":"message","description":"The message that this reaction refers to","type":[[["Message"]]],"meta":{"line":25,"file":"MessageReaction.js","path":"src/structures"}},{"name":"me","description":"Whether the client has given this reaction","type":[[["boolean"]]],"meta":{"line":31,"file":"MessageReaction.js","path":"src/structures"}},{"name":"meBurst","description":"Whether the client has super-reacted using this emoji","type":[[["boolean"]]],"meta":{"line":37,"file":"MessageReaction.js","path":"src/structures"}},{"name":"users","description":"A manager of the users that have given this reaction","type":[[["ReactionUserManager"]]],"meta":{"line":43,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstColors","description":"Hexadecimal colors used for this super reaction","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":58,"file":"MessageReaction.js","path":"src/structures"}},{"name":"count","description":"The number of people that have given the same reaction","nullable":true,"type":[[["number"]]],"meta":{"line":66,"file":"MessageReaction.js","path":"src/structures"}},{"name":"countDetails","description":"The reaction count details object contains information about super and normal reaction counts.","type":[[["ReactionCountDetailsData"]]],"meta":{"line":81,"file":"MessageReaction.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this reaction. Either a {@link GuildEmoji} object for known custom emojis, or a {@link ReactionEmoji}\nobject which has fewer properties. Whatever the prototype of the emoji, it will still have\n`name`, `id`, `identifier` and `toString()`","readonly":true,"type":[[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":110,"file":"MessageReaction.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this reaction is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":129,"file":"MessageReaction.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes all users from this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":94,"file":"MessageReaction.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":137,"file":"MessageReaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenu","description":"Represents a select menu message component","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageSelectMenu","params":[{"name":"data","description":"MessageSelectMenu to clone or raw data","optional":true,"default":"{}","type":[[["MessageSelectMenu"]],[["MessageSelectMenuOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","nullable":true,"type":[[["string"]]],"meta":{"line":62,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"minValues","description":"The minimum number of selections required","nullable":true,"type":[[["number"]]],"meta":{"line":68,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"maxValues","description":"The maximum number of selections allowed","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"options","description":"Options for the STRING_SELECT menu","type":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":80,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"disabled","description":"Whether this select menu is currently disabled","type":[[["boolean"]]],"meta":{"line":86,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"channelTypes","description":"Channels that are possible to select in CHANNEL_SELECT menu","type":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":92,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"data","description":"The data for this component","type":[[["MessageComponentOptions"]]],"meta":{"line":60,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"id","description":"The id of this component","readonly":true,"type":[[["number"]]],"meta":{"line":68,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","description":"Transforms the select menu into a plain object","returns":{"types":[[["APIMessageSelectMenu"]]],"description":"The raw data of this select menu"},"meta":{"line":102,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOption","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"option","description":"The select menu option to normalize","type":[[["MessageSelectOptionData"]]]}],"returns":[[["MessageSelectOption"]]],"meta":{"line":120,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOptions","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"options","description":"The select menu options to normalize","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":136,"file":"MessageSelectMenu.js","path":"src/structures"}}],"meta":{"line":11,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"Modal","description":"Represents a modal (form) to be shown in response to an interaction","construct":{"name":"Modal","params":[{"name":"data","description":"Modal to clone or raw data","type":[[["Object"]]]},{"name":"client","description":"The client constructing this Modal, if provided","default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"A list of MessageActionRows in the modal","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":21,"file":"Modal.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":27,"file":"Modal.js","path":"src/structures"}},{"name":"title","description":"The title to be displayed on this modal","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"Modal.js","path":"src/structures"}},{"name":"nonce","description":"Timestamp (Discord epoch) of when this modal was created","type":[[["Snowflake"]]],"meta":{"line":39,"file":"Modal.js","path":"src/structures"}},{"name":"id","description":"ID slash / button / menu when modal is displayed","type":[[["Snowflake"]]],"meta":{"line":45,"file":"Modal.js","path":"src/structures"}},{"name":"applicationId","description":"Application sending the modal","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Modal.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel the message was sent in","type":[[["Snowflake"]]],"meta":{"line":57,"file":"Modal.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":63,"file":"Modal.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the message was sent in, if any","readonly":true,"nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"Modal.js","path":"src/structures"}},{"name":"channel","description":"The channel that the message was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":85,"file":"Modal.js","path":"src/structures"}},{"name":"guild","description":"The guild the message was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":94,"file":"Modal.js","path":"src/structures"}},{"name":"isMessage","description":"Check data","readonly":true,"type":[[["boolean"]]],"meta":{"line":156,"file":"Modal.js","path":"src/structures"}}],"methods":[{"name":"reply","description":"Reply to this modal with data. (Event only)","examples":["client.on('interactionModalCreate', modal => {\n // Modal > ActionRow > TextInput\n modal.components[0].components[0].setValue('1+1');\n modal.components[1].components[0].setValue('hello');\n modal.reply();\n})"],"returns":[[["Promise","<("],["Message","|"],["Modal",")>"]]],"meta":{"line":118,"file":"Modal.js","path":"src/structures"}}],"meta":{"line":11,"file":"Modal.js","path":"src/structures"}},{"name":"ModalSubmitFieldsResolver","description":"A resolver for modal submit interaction text inputs.","props":[{"name":"components","description":"The components within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":15,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"_fields","description":"The extracted fields from the modal","access":"private","type":[[["Array","<"],["PartialInputTextData",">"]]],"meta":{"line":23,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"methods":[{"name":"getField","description":"Gets a field given a custom id from a component","params":[{"name":"customId","description":"The custom id of the component","type":[[["string"]]]}],"returns":{"types":[[["PartialInputTextData"]]],"nullable":true},"meta":{"line":32,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"getTextInputValue","description":"Gets the value of a text input component given a custom id","params":[{"name":"customId","description":"The custom id of the text input component","type":[[["string"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":43,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"meta":{"line":9,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"ModalSubmitInteraction","description":"Represents a modal submit interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"customId","description":"The custom id of the modal.","type":[[["string"]]],"meta":{"line":22,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"components","description":"The inputs within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":41,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"message","description":"The message associated with this interaction","type":[[["Message"]],[["APIMessage"]],[["null"]]],"meta":{"line":51,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"fields","description":"The fields within the modal","type":[[["ModalSubmitFieldsResolver"]]],"meta":{"line":57,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":63,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":75,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":81,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"isFromMessage","description":"Whether this is from a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":101,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}},{"name":"transformComponent","description":"Transforms component data to discord.js-compatible data","scope":"static","params":[{"name":"rawComponent","description":"The data to transform","type":[["*"]]}],"returns":[[["Array","<"],["PartialTextInputData",">"]]],"meta":{"line":89,"file":"ModalSubmitInteraction.js","path":"src/structures"}}],"meta":{"line":14,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"NewsChannel","description":"Represents a guild news channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":21,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":27,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":33,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":58,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":66,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":82,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"addFollower","description":"Adds the target to this channel's followers.\nIf you need the created webhook id, use {@link GuildChannelManager#addFollower}.","examples":["if (channel.type === 'GUILD_NEWS') {\n channel.addFollower('222197033908436994', 'Important announcements')\n .then(() => console.log('Added follower'))\n .catch(console.error);\n}"],"params":[{"name":"channel","description":"The channel where the webhook should be created","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["NewsChannel",">"]]],"meta":{"line":24,"file":"NewsChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":98,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":108,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":123,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":161,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":171,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildTextChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":10,"file":"NewsChannel.js","path":"src/structures"}},{"name":"OAuth2Guild","description":"A partial guild received when using {@link GuildManager#fetch} to fetch multiple guilds.","extends":[[["BaseGuild"]]],"props":[{"name":"owner","description":"Whether the client user is the owner of the guild","type":[[["boolean"]]],"meta":{"line":18,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"permissions","description":"The permissions that the client user has in this guild","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":24,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"PermissionOverwrites","description":"Represents a permission overwrite for a role or member in a guild channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The GuildChannel this overwrite is for","readonly":true,"type":[[["GuildChannel"]]],"meta":{"line":17,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"id","description":"The overwrite's id, either a {@link User} or a {@link Role} id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"type","description":"The type of this overwrite","type":[[["OverwriteType"]]],"meta":{"line":40,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"deny","description":"The permissions that are denied for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":48,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"allow","description":"The permissions that are allowed for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":56,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this Permission Overwrite.","examples":["// Update permission overwrites\npermissionOverwrites.edit({\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":73,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"delete","description":"Deletes this Permission Overwrite.","params":[{"name":"reason","description":"Reason for deleting this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":83,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolveOverwriteOptions","description":"Resolves bitfield permissions overwrites from an object.","scope":"static","params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"initialPermissions","description":"The initial permissions","type":[[["ResolvedOverwriteOptions"]]]}],"returns":[[["ResolvedOverwriteOptions"]]],"meta":{"line":121,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolve","description":"Resolves an overwrite into {@link RawOverwriteData}.","scope":"static","params":[{"name":"overwrite","description":"The overwrite-like data to resolve","type":[[["OverwriteResolvable"]]]},{"name":"guild","description":"The guild to resolve from","optional":true,"type":[[["Guild"]]]}],"returns":[[["RawOverwriteData"]]],"meta":{"line":172,"file":"PermissionOverwrites.js","path":"src/structures"}}],"meta":{"line":13,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"Poll","description":"Represents a Poll","extends":[[["Base"]]],"props":[{"name":"message","description":"The message that started this poll","readonly":true,"type":[[["Message"]]],"meta":{"line":17,"file":"Poll.js","path":"src/structures"}},{"name":"question","description":"The media for this poll's question","type":[[["PollQuestionMedia"]]],"meta":{"line":36,"file":"Poll.js","path":"src/structures"}},{"name":"answers","description":"The answers of this poll","type":[[["Collection","<"],["number",", "],["PollAnswer",">"]]],"meta":{"line":44,"file":"Poll.js","path":"src/structures"}},{"name":"expiresTimestamp","description":"The timestamp when this poll expires","type":[[["number"]]],"meta":{"line":53,"file":"Poll.js","path":"src/structures"}},{"name":"allowMultiselect","description":"Whether this poll allows multiple answers","type":[[["boolean"]]],"meta":{"line":59,"file":"Poll.js","path":"src/structures"}},{"name":"layoutType","description":"The layout type of this poll","type":[[["PollLayoutType"]]],"meta":{"line":65,"file":"Poll.js","path":"src/structures"}},{"name":"resultsFinalized","description":"Whether this poll's results have been precisely counted","type":[[["boolean"]]],"meta":{"line":76,"file":"Poll.js","path":"src/structures"}},{"name":"expiresAt","description":"The date when this poll expires","readonly":true,"type":[[["Date"]]],"meta":{"line":92,"file":"Poll.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"end","description":"Ends this poll.","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":100,"file":"Poll.js","path":"src/structures"}}],"meta":{"line":13,"file":"Poll.js","path":"src/structures"}},{"name":"PollAnswer","description":"Represents an answer to a {@link Poll}","extends":[[["Base"]]],"props":[{"name":"poll","description":"The {@link Poll} this answer is part of","readonly":true,"type":[[["Poll"]]],"meta":{"line":14,"file":"PollAnswer.js","path":"src/structures"}},{"name":"id","description":"The id of this answer","type":[[["number"]]],"meta":{"line":26,"file":"PollAnswer.js","path":"src/structures"}},{"name":"text","description":"The text of this answer","nullable":true,"type":[[["string"]]],"meta":{"line":32,"file":"PollAnswer.js","path":"src/structures"}},{"name":"_emoji","description":"The raw emoji of this answer","access":"private","nullable":true,"type":[[["APIPartialEmoji"]]],"meta":{"line":34,"file":"PollAnswer.js","path":"src/structures"}},{"name":"voteCount","description":"The amount of votes this answer has","type":[[["number"]]],"meta":{"line":52,"file":"PollAnswer.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this answer","nullable":true,"type":[[["GuildEmoji"]],[["Emoji"]]],"meta":{"line":62,"file":"PollAnswer.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetchVoters","description":"Fetches the users that voted for this answer","params":[{"name":"options","description":"The options for fetching voters","optional":true,"default":"{}","type":[[["FetchPollVotersOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":78,"file":"PollAnswer.js","path":"src/structures"}}],"meta":{"line":10,"file":"PollAnswer.js","path":"src/structures"}},{"name":"Presence","description":"Represents a user's presence.","extends":[[["Base"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":45,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":61,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":70,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":80,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence (Always `Activity[]` if not ClientUser)","type":[[["Array","<"],["CustomStatus",">"]],[["Array","<"],["RichPresence",">"]],[["Array","<"],["SpotifyRPC",">"]],[["Array","<"],["Activity",">"]]],"meta":{"line":90,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":115,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":125,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this presence is equal to another.","params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":154,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":37,"file":"Presence.js","path":"src/structures"}},{"name":"Activity","description":"Represents an activity that is part of a user's presence.","props":[{"name":"presence","description":"The presence of the Activity","readonly":true,"type":[[["Presence"]]],"meta":{"line":193,"file":"Presence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":210,"file":"Presence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":218,"file":"Presence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":226,"file":"Presence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":234,"file":"Presence.js","path":"src/structures"}},{"name":"createdTimestamp","description":"Creation date of the activity","type":[[["number"]]],"meta":{"line":244,"file":"Presence.js","path":"src/structures"}},{"name":"sessionId","description":"The game's or Spotify session's id","nullable":true,"type":[[["string"]]],"meta":{"line":252,"file":"Presence.js","path":"src/structures"}},{"name":"platform","description":"The platform the game is being played on","nullable":true,"type":[[["ActivityPlatform"]]],"meta":{"line":262,"file":"Presence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":279,"file":"Presence.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":292,"file":"Presence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":302,"file":"Presence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":312,"file":"Presence.js","path":"src/structures"}},{"name":"syncId","description":"The sync id of the activity\nThis property is not documented by Discord and represents the track id in spotify activities.","nullable":true,"type":[[["string"]]],"meta":{"line":323,"file":"Presence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["Readonly","<"],["ActivityFlags",">"]]],"meta":{"line":333,"file":"Presence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":343,"file":"Presence.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for a custom activity","nullable":true,"type":[[["EmojiIdentifierResolvable"]]],"meta":{"line":353,"file":"Presence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":370,"file":"Presence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":379,"file":"Presence.js","path":"src/structures"}},{"name":"createdAt","description":"The time the activity was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":406,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this activity is equal to another activity.","params":[{"name":"activity","description":"The activity to compare with","type":[[["Activity"]]]}],"returns":[[["boolean"]]],"meta":{"line":387,"file":"Presence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":414,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":188,"file":"Presence.js","path":"src/structures"}},{"name":"RichPresenceAssets","description":"Assets for a rich presence","props":[{"name":"activity","description":"The activity of the RichPresenceAssets","readonly":true,"type":[[["Activity"]]],"meta":{"line":435,"file":"Presence.js","path":"src/structures"}},{"name":"largeText","description":"Hover text for the large image","nullable":true,"type":[[["string"]]],"meta":{"line":452,"file":"Presence.js","path":"src/structures"}},{"name":"smallText","description":"Hover text for the small image","nullable":true,"type":[[["string"]]],"meta":{"line":462,"file":"Presence.js","path":"src/structures"}},{"name":"largeImage","description":"The large image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":472,"file":"Presence.js","path":"src/structures"}},{"name":"smallImage","description":"The small image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":482,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"smallImageURL","description":"Gets the URL of the small image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":493,"file":"Presence.js","path":"src/structures"}},{"name":"largeImageURL","description":"Gets the URL of the large image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":522,"file":"Presence.js","path":"src/structures"}},{"name":"setLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"The large image asset's id","nullable":true,"type":[[["RichPresenceImage"]]]}],"returns":[[["RichPresenceAssets"]]],"meta":{"line":597,"file":"Presence.js","path":"src/structures"}},{"name":"setSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"The small image asset's id","nullable":true,"type":[[["RichPresenceImage"]]]}],"returns":[[["RichPresenceAssets"]]],"meta":{"line":608,"file":"Presence.js","path":"src/structures"}},{"name":"setLargeText","description":"Hover text for the large image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresenceAssets"]]],"meta":{"line":619,"file":"Presence.js","path":"src/structures"}},{"name":"setSmallText","description":"Hover text for the small image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresenceAssets"]]],"meta":{"line":629,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":433,"file":"Presence.js","path":"src/structures"}},{"name":"CustomStatus","construct":{"name":"CustomStatus","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"data","description":"CustomStatus to clone or raw data","optional":true,"default":"{}","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]}]},"methods":[{"name":"setEmoji","description":"Set the emoji of this activity","params":[{"name":"emoji","description":"The emoji to be displayed","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":660,"file":"Presence.js","path":"src/structures"}},{"name":"setState","description":"Set state of this activity","params":[{"name":"state","description":"The state to be displayed","type":[[["string"]],[["null"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":670,"file":"Presence.js","path":"src/structures"}},{"name":"toJSON","description":"Returns an object that can be used to set the status","returns":[[["CustomStatus"]]],"meta":{"line":680,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":646,"file":"Presence.js","path":"src/structures"}},{"name":"RichPresence","construct":{"name":"RichPresence","params":[{"name":"client","description":"Discord client","type":[[["Client"]]]},{"name":"data","description":"RichPresence to clone or raw data","optional":true,"default":"{}","type":[[["RichPresence"]]]}]},"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"data","type":[[["RichPresence"]]]}],"meta":{"line":707,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"The large image asset's id","nullable":true,"type":[[["RichPresenceImage"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":717,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"The small image asset's id","nullable":true,"type":[[["RichPresenceImage"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":727,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":737,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":747,"file":"Presence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":757,"file":"Presence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":767,"file":"Presence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":778,"file":"Presence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":788,"file":"Presence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":798,"file":"Presence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":808,"file":"Presence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":825,"file":"Presence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the start of the activity","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":846,"file":"Presence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the end of the activity","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":858,"file":"Presence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":875,"file":"Presence.js","path":"src/structures"}},{"name":"setPlatform","description":"The platform the activity is being played on","params":[{"name":"platform","description":"Any platform","type":[[["ActivityPlatform"]],[["null"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":904,"file":"Presence.js","path":"src/structures"}},{"name":"setJoinSecret","description":"Secrets for rich presence joining and spectating (send-only)","params":[{"name":"join","description":"Secrets for rich presence joining","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":914,"file":"Presence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":925,"file":"Presence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["Object"]]],"meta":{"line":941,"file":"Presence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":992,"file":"Presence.js","path":"src/structures"}},{"name":"getExternal","description":"Retrieves external assets from a RichPresence","scope":"static","params":[{"name":"client","description":"The Discord client instance.","type":[[["Client"]]]},{"name":"applicationId","description":"The application ID associated with the Rich Presence.","type":[[["Snowflake"]]]},{"name":"images","description":"1 or 2 external image URLs (not hosted by Discord).","variable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ExternalAssets",">>"]]],"meta":{"line":966,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":696,"file":"Presence.js","path":"src/structures"}},{"name":"SpotifyRPC","extends":[[["RichPresence"]]],"construct":{"name":"SpotifyRPC","description":"Create a new RichPresence (Spotify style)","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"options","description":"Options for the Spotify RPC","optional":true,"type":[[["SpotifyRPC"]]]}]},"props":[{"name":"metadata","description":"Spotify metadata","type":[[["SpotifyMetadata"]]],"meta":{"line":1041,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"options","description":"data","type":[[["SpotifyRPC"]]]}],"meta":{"line":1029,"file":"Presence.js","path":"src/structures"}},{"name":"setSongId","description":"Set Spotify song id to sync with","params":[{"name":"id","description":"Song id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":1053,"file":"Presence.js","path":"src/structures"}},{"name":"addArtistId","description":"Add the artist id","params":[{"name":"id","description":"Artist id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":1063,"file":"Presence.js","path":"src/structures"}},{"name":"setArtistIds","description":"Set the artist ids","params":[{"name":"ids","description":"Artist ids","variable":true,"type":[[["string"]],[["Array","<"],["string",">"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":1074,"file":"Presence.js","path":"src/structures"}},{"name":"setAlbumId","description":"Set the album id","params":[{"name":"id","description":"Album id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":1089,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","inherits":"RichPresence#setAssetsLargeImage","inherited":true,"params":[{"name":"image","description":"The large image asset's id","nullable":true,"type":[[["RichPresenceImage"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":717,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","inherits":"RichPresence#setAssetsSmallImage","inherited":true,"params":[{"name":"image","description":"The small image asset's id","nullable":true,"type":[[["RichPresenceImage"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":727,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","inherits":"RichPresence#setAssetsLargeText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":737,"file":"Presence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","inherits":"RichPresence#setAssetsSmallText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":747,"file":"Presence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","inherits":"RichPresence#setName","inherited":true,"params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":757,"file":"Presence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","inherits":"RichPresence#setURL","inherited":true,"params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":767,"file":"Presence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","inherits":"RichPresence#setType","inherited":true,"params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":778,"file":"Presence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","inherits":"RichPresence#setApplicationId","inherited":true,"params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":788,"file":"Presence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","inherits":"RichPresence#setState","inherited":true,"params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":798,"file":"Presence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","inherits":"RichPresence#setDetails","inherited":true,"params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":808,"file":"Presence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","inherits":"RichPresence#setParty","inherited":true,"params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":825,"file":"Presence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","inherits":"RichPresence#setStartTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the start of the activity","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":846,"file":"Presence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","inherits":"RichPresence#setEndTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the end of the activity","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":858,"file":"Presence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","inherits":"RichPresence#setButtons","inherited":true,"params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":875,"file":"Presence.js","path":"src/structures"}},{"name":"setPlatform","description":"The platform the activity is being played on","inherits":"RichPresence#setPlatform","inherited":true,"params":[{"name":"platform","description":"Any platform","type":[[["ActivityPlatform"]],[["null"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":904,"file":"Presence.js","path":"src/structures"}},{"name":"setJoinSecret","description":"Secrets for rich presence joining and spectating (send-only)","inherits":"RichPresence#setJoinSecret","inherited":true,"params":[{"name":"join","description":"Secrets for rich presence joining","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":914,"file":"Presence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","inherits":"RichPresence#addButton","inherited":true,"params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":925,"file":"Presence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","inherits":"RichPresence#toJSON","inherited":true,"returns":[[["Object"]]],"meta":{"line":941,"file":"Presence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","inherits":"RichPresence#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":992,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":1004,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollector","description":"Collects reactions on messages.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"ReactionCollector","params":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}]},"props":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]],"meta":{"line":35,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have reacted to this message","type":[[["Collection"]]],"meta":{"line":41,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of reactions collected","type":[[["number"]]],"meta":{"line":47,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":164,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming reaction for possible collection.","access":"private","params":[{"name":"reaction","description":"The reaction to possibly collect","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":110,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a reaction deletion for possible disposal.","params":[{"name":"reaction","description":"The reaction to possibly dispose of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":128,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this reaction collector.","meta":{"line":152,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":177,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":189,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":201,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":213,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"key","description":"Gets the collector key for a reaction.","scope":"static","params":[{"name":"reaction","description":"The message reaction to get the key for","type":[[["MessageReaction"]]]}],"returns":[[["Snowflake"]],[["string"]]],"meta":{"line":224,"file":"ReactionCollector.js","path":"src/structures"}}],"events":[{"name":"create","description":"Emitted whenever a reaction is newly created on a message. Will emit only when a new reaction is\nadded to the message, as opposed to {@link Collector#collect} which will\nbe emitted even when a reaction has already been added to the message.","params":[{"name":"reaction","description":"The reaction that was added","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":82,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"collect","description":"Emitted whenever a reaction is collected.","params":[{"name":"reaction","description":"The reaction that was collected","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":111,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted when the reaction had all the users removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was disposed of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":129,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"remove","description":"Emitted when the reaction had one user removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":137,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":23,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"ReactionEmoji","description":"Represents a limited emoji set used for both custom and unicode emojis. Custom emojis\nwill use this class opposed to the Emoji class when the client doesn't know enough\ninformation about them.","extends":[[["Emoji"]]],"props":[{"name":"reaction","description":"The message reaction this emoji refers to","type":[[["MessageReaction"]]],"meta":{"line":19,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"Role","description":"Represents a role on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild that the role belongs to","type":[[["Guild"]]],"meta":{"line":32,"file":"Role.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of the role","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"Role.js","path":"src/structures"}},{"name":"unicodeEmoji","description":"The unicode emoji for the role","nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"Role.js","path":"src/structures"}},{"name":"id","description":"The role's id (unique to the guild it is part of)","type":[[["Snowflake"]]],"meta":{"line":54,"file":"Role.js","path":"src/structures"}},{"name":"name","description":"The name of the role","type":[[["string"]]],"meta":{"line":60,"file":"Role.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the role","deprecated":"Use {@link Role#colors} instead.","type":[[["number"]]],"meta":{"line":69,"file":"Role.js","path":"src/structures"}},{"name":"colors","description":"The colors of the role","type":[[["RoleColors"]]],"meta":{"line":89,"file":"Role.js","path":"src/structures"}},{"name":"hoist","description":"If true, users that are part of this role will appear in a separate category in the users list","type":[[["boolean"]]],"meta":{"line":101,"file":"Role.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the role from the API","type":[[["number"]]],"meta":{"line":109,"file":"Role.js","path":"src/structures"}},{"name":"permissions","description":"The permissions of the role","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":117,"file":"Role.js","path":"src/structures"}},{"name":"managed","description":"Whether or not the role is managed by an external service","type":[[["boolean"]]],"meta":{"line":125,"file":"Role.js","path":"src/structures"}},{"name":"mentionable","description":"Whether or not the role can be mentioned by anyone","type":[[["boolean"]]],"meta":{"line":133,"file":"Role.js","path":"src/structures"}},{"name":"tags","description":"The tags this role has","nullable":true,"type":[[["Object"]]],"props":[{"name":"botId","description":"The id of the bot this role belongs to","optional":true,"type":[[["Snowflake"]]]},{"name":"integrationId","description":"The id of the integration this role belongs to","optional":true,"type":[[["Snowflake"]],[["string"]]]},{"name":"premiumSubscriberRole","description":"Whether this is the guild's premium subscription role","optional":true,"type":[[["true"]]]},{"name":"subscriptionListingId","description":"The id of this role's subscription SKU and listing","optional":true,"type":[[["Snowflake"]]]},{"name":"availableForPurchase","description":"Whether this role is available for purchase","optional":true,"type":[[["true"]]]},{"name":"guildConnections","description":"Whether this role is a guild's linked role","optional":true,"type":[[["true"]]]}],"meta":{"line":150,"file":"Role.js","path":"src/structures"}},{"name":"flags","description":"The flags of this role","type":[[["Readonly","<"],["RoleFlags",">"]]],"meta":{"line":177,"file":"Role.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the role was created at","readonly":true,"type":[[["number"]]],"meta":{"line":188,"file":"Role.js","path":"src/structures"}},{"name":"createdAt","description":"The time the role was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":197,"file":"Role.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the role has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":206,"file":"Role.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the role color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":236,"file":"Role.js","path":"src/structures"}},{"name":"members","description":"The cached guild members that have this role","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":245,"file":"Role.js","path":"src/structures"}},{"name":"editable","description":"Whether the role is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":254,"file":"Role.js","path":"src/structures"}},{"name":"position","description":"The position of the role in the role manager","readonly":true,"type":[[["number"]]],"meta":{"line":266,"file":"Role.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"comparePositionTo","description":"Compares this role's position to another role's.","examples":["// Compare the position of a role to another\nconst roleCompare = role.comparePositionTo(otherRole);\nif (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);"],"params":[{"name":"role","description":"Role to compare to this one","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if this role's position is lower (other role's is higher),\npositive number if this one is higher (other's is lower), 0 if equal"},"meta":{"line":286,"file":"Role.js","path":"src/structures"}},{"name":"edit","description":"Edits the role.","examples":["// Edit a role\nrole.edit({ name: 'new role' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":318,"file":"Role.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,\ntaking into account permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":329,"file":"Role.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the role.","examples":["// Set the name of the role\nrole.setName('new role')\n .then(updated => console.log(`Updated role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the role","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":346,"file":"Role.js","path":"src/structures"}},{"name":"setColor","description":"Sets a new color for the role.","deprecated":"Use {@link Role#setColors} instead.","params":[{"name":"color","description":"The color of the role","type":[[["ColorResolvable"]]]},{"name":"reason","description":"Reason for changing the role's color","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":357,"file":"Role.js","path":"src/structures"}},{"name":"setColors","description":"Sets new colors for the role.","examples":["// Set the colors of a role\nrole.setColors({ primaryColor: '#FF0000', secondaryColor: '#00FF00', tertiaryColor: '#0000FF' })\n .then(updated => console.log(`Set colors of role to ${updated.colors}`))\n .catch(console.error);","// Set holographic colors using constants\nrole.setColors({\n primaryColor: Constants.HolographicStyle.Primary,\n secondaryColor: Constants.HolographicStyle.Secondary,\n tertiaryColor: Constants.HolographicStyle.Tertiary,\n})\n .then(updated => console.log(`Set holographic colors for role ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"colors","description":"The colors of the role","type":[[["RoleColorsResolvable"]]]},{"name":"reason","description":"Reason for changing the role's colors","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":382,"file":"Role.js","path":"src/structures"}},{"name":"setHoist","description":"Sets whether or not the role should be hoisted.","examples":["// Set the hoist of the role\nrole.setHoist(true)\n .then(updated => console.log(`Role hoisted: ${updated.hoist}`))\n .catch(console.error);"],"params":[{"name":"hoist","description":"Whether or not to hoist the role","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not the role should be hoisted","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":397,"file":"Role.js","path":"src/structures"}},{"name":"setPermissions","description":"Sets the permissions of the role.","examples":["// Set the permissions of the role\nrole.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);","// Remove all permissions from a role\nrole.setPermissions(0n)\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);"],"params":[{"name":"permissions","description":"The permissions of the role","type":[[["PermissionResolvable"]]]},{"name":"reason","description":"Reason for changing the role's permissions","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":417,"file":"Role.js","path":"src/structures"}},{"name":"setMentionable","description":"Sets whether this role is mentionable.","examples":["// Make the role mentionable\nrole.setMentionable(true)\n .then(updated => console.log(`Role updated ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"mentionable","description":"Whether this role should be mentionable","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not this role should be mentionable","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":432,"file":"Role.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new icon for the role.","params":[{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for changing the role's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":444,"file":"Role.js","path":"src/structures"}},{"name":"setUnicodeEmoji","description":"Sets a new unicode emoji for the role.","examples":["// Set a new unicode emoji for the role\nrole.setUnicodeEmoji('🤖')\n .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))\n .catch(console.error);"],"params":[{"name":"unicodeEmoji","description":"The new unicode emoji for the role","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's unicode emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":459,"file":"Role.js","path":"src/structures"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nrole.setPosition(1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":481,"file":"Role.js","path":"src/structures"}},{"name":"delete","description":"Deletes the role.","examples":["// Delete a role\nrole.delete('The role needed to go')\n .then(deleted => console.log(`Deleted role ${deleted.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":495,"file":"Role.js","path":"src/structures"}},{"name":"fetchMemberIds","description":"Fetches the member ids for this role in the guild.\nThis only returns 100 member ids","returns":[[["Promise","<"],["Array","<"],["Snowflake",">>"]]],"meta":{"line":505,"file":"Role.js","path":"src/structures"}},{"name":"iconURL","description":"A link to the role's icon","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":514,"file":"Role.js","path":"src/structures"}},{"name":"equals","description":"Whether this role equals another role. It compares all properties, so for most operations\nit is advisable to just compare `role.id === role2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"role","description":"Role to compare with","type":[[["Role"]]]}],"returns":[[["boolean"]]],"meta":{"line":526,"file":"Role.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the role's mention instead of the Role object.","examples":["// Logs: Role: <@&123456789012345678>\nconsole.log(`Role: ${role}`);"],"returns":[[["string"]]],"meta":{"line":550,"file":"Role.js","path":"src/structures"}},{"name":"comparePositions","description":"Compares the positions of two roles.","scope":"static","deprecated":"Use {@link RoleManager#comparePositions} instead.","params":[{"name":"role1","description":"First role to compare","type":[[["Role"]]]},{"name":"role2","description":"Second role to compare","type":[[["Role"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":570,"file":"Role.js","path":"src/structures"}}],"meta":{"line":24,"file":"Role.js","path":"src/structures"}},{"name":"SectionComponent","construct":{"name":"SectionComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["SectionComponent"]],[["APISectionComponent"]]]}]},"props":[{"name":"components","description":"One to three text components","type":[[["Array","<"],["TextDisplayComponent",">"]]],"meta":{"line":27,"file":"SectionComponent.js","path":"src/structures"}},{"name":"accessory","description":"A thumbnail or a button component, with a future possibility of adding more compatible components","type":[[["ThumbnailComponent"]],[["MessageButton"]]],"meta":{"line":33,"file":"SectionComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APISectionComponent"]]],"meta":{"line":39,"file":"SectionComponent.js","path":"src/structures"}}],"meta":{"line":15,"file":"SectionComponent.js","path":"src/structures"}},{"name":"SelectMenuInteraction","description":"Represents a select menu interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":17,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"SeparatorComponent","construct":{"name":"SeparatorComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["SeparatorComponent"]],[["APISeparatorComponent"]]]}]},"props":[{"name":"spacing","description":"Size of separator padding — SeparatorSpacingSizes.SMALL for small padding, SeparatorSpacingSizes.LARGE for large padding. Defaults to SeparatorSpacingSizes.SMALL","type":[[["SeparatorSpacingSizes"]]],"meta":{"line":27,"file":"SeparatorComponent.js","path":"src/structures"}},{"name":"divider","description":"Whether a visual divider should be displayed in the component. Defaults to true","type":[[["Boolean"]]],"meta":{"line":33,"file":"SeparatorComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APISeparatorComponent"]]],"meta":{"line":39,"file":"SeparatorComponent.js","path":"src/structures"}}],"meta":{"line":15,"file":"SeparatorComponent.js","path":"src/structures"}},{"name":"Session","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The session hash id","type":[[["string"]]],"meta":{"line":28,"file":"Session.js","path":"src/structures"}},{"name":"approxLastUsedTime","description":"The approximate last used time","type":[[["string"]]],"meta":{"line":35,"file":"Session.js","path":"src/structures"}},{"name":"clientInfo","description":"The client info","type":[[["SessionClientInfo"]]],"meta":{"line":42,"file":"Session.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the client was last used at.","readonly":true,"type":[[["number"]]],"meta":{"line":51,"file":"Session.js","path":"src/structures"}},{"name":"createdAt","description":"The time the client was last used at.","readonly":true,"type":[[["Date"]]],"meta":{"line":60,"file":"Session.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"logout","description":"Logout the client (remote).","returns":[[["Promise","<"],["void",">"]]],"meta":{"line":68,"file":"Session.js","path":"src/structures"}}],"meta":{"line":16,"file":"Session.js","path":"src/structures"}},{"name":"StageChannel","description":"Represents a guild stage channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"topic","description":"The topic of the stage channel","nullable":true,"type":[[["string"]]],"meta":{"line":18,"file":"StageChannel.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance of this stage channel, if it exists","readonly":true,"nullable":true,"type":[[["StageInstance"]]],"meta":{"line":27,"file":"StageChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":28,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":41,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":49,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":57,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":65,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":75,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":87,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"status","description":"The status of the voice channel (max 500 characters)","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":108,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":123,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":132,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createStageInstance","description":"Creates a stage instance associated with this stage channel.","params":[{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":36,"file":"StageChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":51,"file":"StageChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":156,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":166,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nchannel.setBitrate(48_000)\n .then(channel => console.log(`Set bitrate to ${channel.bitrate}bps for ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":181,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":197,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nchannel.setUserLimit(42)\n .then(channel => console.log(`Set user limit to ${channel.userLimit} for ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":212,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":222,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"StageChannel.js","path":"src/structures"}},{"name":"StageInstance","description":"Represents a stage instance.","extends":[[["Base"]]],"props":[{"name":"id","description":"The stage instance's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":39,"file":"StageInstance.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":47,"file":"StageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":55,"file":"StageInstance.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the stage instance","type":[[["PrivacyLevel"]]],"meta":{"line":63,"file":"StageInstance.js","path":"src/structures"}},{"name":"discoverableDisabled","description":"Whether or not stage discovery is disabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEventId","description":"The associated guild scheduled event id of this stage instance","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":81,"file":"StageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel associated with this stage instance","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":92,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The associated guild scheduled event of this stage instance","readonly":true,"nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":101,"file":"StageInstance.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the stage instance has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":110,"file":"StageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild this stage instance belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":140,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this stage instances was created at","readonly":true,"type":[[["number"]]],"meta":{"line":193,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdAt","description":"The time this stage instance was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":202,"file":"StageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this stage instance.","examples":["// Edit a stage instance\nstageInstance.edit({ topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error)"],"params":[{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":154,"file":"StageInstance.js","path":"src/structures"}},{"name":"delete","description":"Deletes this stage instance.","examples":["// Delete a stage instance\nstageInstance.delete()\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":167,"file":"StageInstance.js","path":"src/structures"}},{"name":"setTopic","description":"Sets the topic of this stage instance.","examples":["// Set topic of a stage instance\nstageInstance.setTopic('new topic')\n .then(stageInstance => console.log(`Set the topic to: ${stageInstance.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The topic for the stage instance","type":[[["string"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":184,"file":"StageInstance.js","path":"src/structures"}}],"meta":{"line":20,"file":"StageInstance.js","path":"src/structures"}},{"name":"Sticker","description":"Represents a Sticker.","extends":[[["Base"]]],"props":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"Sticker.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Sticker.js","path":"src/structures"}},{"name":"type","description":"The type of the sticker","nullable":true,"type":[[["StickerType"]]],"meta":{"line":50,"file":"Sticker.js","path":"src/structures"}},{"name":"format","description":"The format of the sticker","type":[[["StickerFormatType"]]],"meta":{"line":60,"file":"Sticker.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker","type":[[["string"]]],"meta":{"line":68,"file":"Sticker.js","path":"src/structures"}},{"name":"packId","description":"The id of the pack the sticker is from, for standard stickers","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"Sticker.js","path":"src/structures"}},{"name":"tags","description":"An array of tags for the sticker","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":86,"file":"Sticker.js","path":"src/structures"}},{"name":"available","description":"Whether or not the guild sticker is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":96,"file":"Sticker.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that owns this sticker","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":106,"file":"Sticker.js","path":"src/structures"}},{"name":"user","description":"The user that uploaded the guild sticker","nullable":true,"type":[[["User"]]],"meta":{"line":116,"file":"Sticker.js","path":"src/structures"}},{"name":"sortValue","description":"The standard sticker's sort order within its pack","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"Sticker.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":137,"file":"Sticker.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":146,"file":"Sticker.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the sticker has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":155,"file":"Sticker.js","path":"src/structures"}},{"name":"partial","description":"Whether this sticker is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":185,"file":"Sticker.js","path":"src/structures"}},{"name":"guild","description":"The guild that owns this sticker","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":194,"file":"Sticker.js","path":"src/structures"}},{"name":"url","description":"A link to the sticker\nIf the sticker's format is LOTTIE, it returns the URL of the Lottie JSON file.","type":[[["string"]]],"meta":{"line":203,"file":"Sticker.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this sticker.","async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":211,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchPack","description":"Fetches the pack this sticker is part of from Discord, if this is a Nitro sticker.","async":true,"returns":[[["Promise",""],["StickerPack",">"]]],"meta":{"line":221,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","async":true,"returns":[[["Promise",""],["User",">"]]],"meta":{"line":229,"file":"Sticker.js","path":"src/structures"}},{"name":"edit","description":"Edits the sticker.","examples":["// Update the name of a sticker\nsticker.edit({ name: 'new name' })\n .then(s => console.log(`Updated the name of the sticker to ${s.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":254,"file":"Sticker.js","path":"src/structures"}},{"name":"delete","description":"Deletes the sticker.","examples":["// Delete a message\nsticker.delete()\n .then(s => console.log(`Deleted sticker ${s.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":268,"file":"Sticker.js","path":"src/structures"}},{"name":"equals","description":"Whether this sticker is the same as another one.","params":[{"name":"other","description":"The sticker to compare it to","type":[[["Sticker"]],[["APISticker"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"Sticker.js","path":"src/structures"}}],"meta":{"line":21,"file":"Sticker.js","path":"src/structures"}},{"name":"StickerPack","description":"Represents a pack of standard stickers.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Sticker pack's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"StickerPack.js","path":"src/structures"}},{"name":"stickers","description":"The stickers in the pack","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":25,"file":"StickerPack.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker pack","type":[[["string"]]],"meta":{"line":31,"file":"StickerPack.js","path":"src/structures"}},{"name":"skuId","description":"The id of the pack's SKU","type":[[["Snowflake"]]],"meta":{"line":37,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverStickerId","description":"The id of a sticker in the pack which is shown as the pack's icon","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":43,"file":"StickerPack.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker pack","type":[[["string"]]],"meta":{"line":49,"file":"StickerPack.js","path":"src/structures"}},{"name":"bannerId","description":"The id of the sticker pack's banner image","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":55,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":63,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":72,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverSticker","description":"The sticker which is shown as the pack's icon","readonly":true,"nullable":true,"type":[[["Sticker"]]],"meta":{"line":81,"file":"StickerPack.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this sticker pack's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":90,"file":"StickerPack.js","path":"src/structures"}}],"meta":{"line":12,"file":"StickerPack.js","path":"src/structures"}},{"name":"StoreChannel","description":"Represents a guild store channel on Discord.\nStore channels have been removed from Discord. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.","extends":[[["GuildChannel"]]],"props":[{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":20,"file":"StoreChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":41,"file":"StoreChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":51,"file":"StoreChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":12,"file":"StoreChannel.js","path":"src/structures"}},{"name":"Team","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Team's id","type":[[["Snowflake"]]],"meta":{"line":23,"file":"Team.js","path":"src/structures"}},{"name":"name","description":"The name of the Team","type":[[["string"]]],"meta":{"line":30,"file":"Team.js","path":"src/structures"}},{"name":"icon","description":"The Team's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"Team.js","path":"src/structures"}},{"name":"ownerId","description":"The Team's owner id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"Team.js","path":"src/structures"}},{"name":"members","description":"The Team's members","type":[[["Collection","<"],["Snowflake",", "],["TeamMember",">"]]],"meta":{"line":56,"file":"Team.js","path":"src/structures"}},{"name":"owner","description":"The owner of this team","readonly":true,"nullable":true,"type":[[["TeamMember"]]],"meta":{"line":69,"file":"Team.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the team was created at","readonly":true,"type":[[["number"]]],"meta":{"line":78,"file":"Team.js","path":"src/structures"}},{"name":"createdAt","description":"The time the team was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":87,"file":"Team.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the team's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":96,"file":"Team.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the Team's name instead of the\nTeam object.","examples":["// Logs: Team name: My Team\nconsole.log(`Team name: ${team}`);"],"returns":[[["string"]]],"meta":{"line":109,"file":"Team.js","path":"src/structures"}}],"meta":{"line":12,"file":"Team.js","path":"src/structures"}},{"name":"TeamMember","description":"Represents a Client OAuth2 Application Team Member.","extends":[[["Base"]]],"props":[{"name":"team","description":"The Team this member is part of","type":[[["Team"]]],"meta":{"line":18,"file":"TeamMember.js","path":"src/structures"}},{"name":"permissions","description":"The permissions this Team Member has with regard to the team","deprecated":"Use {@link TeamMember#role} instead.","type":[[["Array","<"],["string",">"]]],"meta":{"line":30,"file":"TeamMember.js","path":"src/structures"}},{"name":"role","description":"The role of this Team Member","type":[[["TeamMemberRole"]]],"meta":{"line":38,"file":"TeamMember.js","path":"src/structures"}},{"name":"membershipState","description":"The permissions this Team Member has with regard to the team","type":[[["MembershipState"]]],"meta":{"line":46,"file":"TeamMember.js","path":"src/structures"}},{"name":"user","description":"The user for this Team Member","type":[[["User"]]],"meta":{"line":54,"file":"TeamMember.js","path":"src/structures"}},{"name":"id","description":"The Team Member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":63,"file":"TeamMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the team member's mention instead of the\nTeamMember object.","examples":["// Logs: Team Member's mention: <@123456789012345678>\nconsole.log(`Team Member's mention: ${teamMember}`);"],"returns":[[["string"]]],"meta":{"line":75,"file":"TeamMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"TeamMember.js","path":"src/structures"}},{"name":"TextChannel","description":"Represents a guild text channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":18,"file":"TextChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":21,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":27,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":33,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":58,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":66,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":82,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":28,"file":"TextChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":98,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":108,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":123,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":161,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":171,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"TextChannel.js","path":"src/structures"}},{"name":"TextDisplayComponent","construct":{"name":"TextDisplayComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["TextDisplayComponent"]],[["APITextDisplayComponent"]]]}]},"props":[{"name":"content","description":"Text that will be displayed similar to a message","type":[[["String"]]],"meta":{"line":26,"file":"TextDisplayComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APITextDisplayComponent"]]],"meta":{"line":32,"file":"TextDisplayComponent.js","path":"src/structures"}}],"meta":{"line":14,"file":"TextDisplayComponent.js","path":"src/structures"}},{"name":"TextInputComponent","description":"Represents a text input component in a modal","extends":[[["BaseMessageComponent"]]],"construct":{"name":"TextInputComponent","params":[{"name":"data","description":"TextInputComponent to clone or raw data","optional":true,"default":"{}","type":[[["TextInputComponent"]],[["TextInputComponentOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"label","description":"The text to be displayed above this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":47,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"maxLength","description":"Maximum length of text that can be entered","nullable":true,"type":[[["number"]]],"meta":{"line":53,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"minLength","description":"Minimum length of text required to be entered","nullable":true,"type":[[["string"]]],"meta":{"line":59,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","nullable":true,"type":[[["string"]]],"meta":{"line":65,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"required","description":"Whether or not this text input component is required","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"style","description":"The style of this text input component","nullable":true,"type":[[["TextInputStyle"]]],"meta":{"line":77,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"value","description":"Value of this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":83,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"data","description":"The data for this component","type":[[["MessageComponentOptions"]]],"meta":{"line":60,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"id","description":"The id of this component","readonly":true,"type":[[["number"]]],"meta":{"line":68,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setValue","description":"Sets the value of this text input component","params":[{"name":"value","description":"Value of this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":91,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the text input component into a plain object","returns":{"types":[[["APITextInput"]]],"description":"The raw data of this text input component"},"meta":{"line":100,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a text input component","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputStyle"]]],"meta":{"line":127,"file":"TextInputComponent.js","path":"src/structures"}}],"meta":{"line":13,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadChannel","description":"Represents a thread channel on Discord.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild the thread is in","type":[[["Guild"]]],"meta":{"line":25,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ownerId","description":"The id of the member who created this thread","type":[[["Snowflake"]]],"meta":{"line":31,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this thread","type":[[["MessageManager"]]],"meta":{"line":43,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"members","description":"A manager of the members that are part of this thread","type":[[["ThreadMemberManager"]]],"meta":{"line":49,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the thread","type":[[["string"]]],"meta":{"line":61,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the parent channel of this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":73,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"locked","description":"Whether the thread is locked","nullable":true,"type":[[["boolean"]]],"meta":{"line":83,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"invitable","description":"Whether members without `MANAGE_THREADS` can invite other members without `MANAGE_THREADS`\nAlways `null` in public threads","nullable":true,"type":[[["boolean"]]],"meta":{"line":90,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archived","description":"Whether the thread is archived","nullable":true,"type":[[["boolean"]]],"meta":{"line":96,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread will automatically archive in case of no recent activity","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archiveTimestamp","description":"The timestamp when the thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the timestamp at which the thread was\ncreated","nullable":true,"type":[[["number"]]],"meta":{"line":110,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in this thread, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":133,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":143,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this thread in seconds","nullable":true,"type":[[["number"]]],"meta":{"line":153,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messageCount","description":"Threads created before July 1, 2022 may have an inaccurate count.\nIf you need an approximate value higher than that, use `ThreadChannel#messages.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":164,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate count of users in this thread\nThis stops counting at 50. If you need an approximate value higher than that, use\n`ThreadChannel#members.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":176,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"totalMessageSent","description":"The number of messages ever sent in a thread, similar to {@link ThreadChannel#messageCount} except it\nwill not decrement whenever a message is deleted","nullable":true,"type":[[["number"]]],"meta":{"line":187,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"appliedTags","description":"The tags applied to this thread","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":197,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp when this thread was created. This isn't available for threads\ncreated before 2022-01-09","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":212,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildMembers","description":"A collection of associated guild member objects of this thread's members","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":221,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archivedAt","description":"The time at which this thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the time at which the thread was created","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":231,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the thread was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":241,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent channel of this thread","readonly":true,"nullable":true,"type":[[["NewsChannel"]],[["TextChannel"]],[["ForumChannel"]],[["MediaChannel"]]],"meta":{"line":250,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joined","description":"Whether the client user is a member of the thread.","readonly":true,"type":[[["boolean"]]],"meta":{"line":480,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"editable","description":"Whether the thread is editable by the client user (name, archived, autoArchiveDuration)","readonly":true,"type":[[["boolean"]]],"meta":{"line":489,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the thread is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":500,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the thread is manageable by the client user, for deleting or editing rateLimitPerUser or locked.","readonly":true,"type":[[["boolean"]]],"meta":{"line":516,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the thread is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":533,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"sendable","description":"Whether the client user can send messages in this thread","readonly":true,"type":[[["boolean"]]],"meta":{"line":545,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unarchivable","description":"Whether the thread is unarchivable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":564,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"join","description":"Makes the client user join the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":258,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"leave","description":"Makes the client user leave the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":267,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this thread's parent channel, taking overwrites into\naccount.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":279,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of this thread. If the thread member object isn't needed,\nuse {@link ThreadChannel#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise",""],["ThreadMember",">"]]],"meta":{"line":289,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchStarterMessage","description":"Fetches the message that started this thread, if any.\nThe `Promise` will reject if the original message in a forum post is deleted\nor when the original message in the parent channel is deleted.\nIf you just need the id of that message, use {@link ThreadChannel#id} instead.","params":[{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["null",")>"]]],"meta":{"line":309,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits this thread.","examples":["// Edit a thread\nthread.edit({ name: 'new-thread' })\n .then(editedThread => console.log(editedThread))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for this thread","type":[[["ThreadEditData"]]]},{"name":"reason","description":"Reason for editing this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":340,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setArchived","description":"Sets whether the thread is archived.","examples":["// Archive the thread\nthread.setArchived(true)\n .then(newThread => console.log(`Thread is now ${newThread.archived ? 'archived' : 'active'}`))\n .catch(console.error);"],"params":[{"name":"archived","description":"Whether the thread is archived","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for archiving or unarchiving","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":372,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAutoArchiveDuration","description":"Sets the duration after which the thread will automatically archive in case of no recent activity.","examples":["// Set the thread's auto archive time to 1 hour\nthread.setAutoArchiveDuration(60)\n .then(newThread => {\n console.log(`Thread will now archive after ${newThread.autoArchiveDuration} minutes of inactivity`);\n });\n .catch(console.error);"],"params":[{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":390,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setInvitable","description":"Sets whether members without the `MANAGE_THREADS` permission can invite other members without the\n`MANAGE_THREADS` permission to this thread.","params":[{"name":"invitable","description":"Whether non-moderators can invite non-moderators to this thread","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":401,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setLocked","description":"Sets whether the thread can be **unarchived** by anyone with `SEND_MESSAGES` permission.\nWhen a thread is locked only members with `MANAGE_THREADS` can unarchive it.","examples":["// Set the thread to locked\nthread.setLocked(true)\n .then(newThread => console.log(`Thread is now ${newThread.locked ? 'locked' : 'unlocked'}`))\n .catch(console.error);"],"params":[{"name":"locked","description":"Whether the thread is locked","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for locking or unlocking the thread","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":418,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for this thread.","examples":["// Change the thread's name\nthread.setName('not_general')\n .then(newThread => console.log(`Thread's new name is ${newThread.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the thread","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the thread's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":433,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this thread.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the thread's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":443,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"pin","description":"Pins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":452,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":461,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAppliedTags","description":"Set the applied tags for this channel (only applicable to forum threads)","params":[{"name":"appliedTags","description":"The tags to set for this channel","type":[[["Array","<"],["Snowflake",">"]]]},{"name":"reason","description":"Reason for changing the thread's applied tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":471,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"isPrivate","description":"Whether this thread is a private thread","returns":[[["boolean"]]],"meta":{"line":572,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this thread.","examples":["// Delete the thread\nthread.delete('cleaning out old threads')\n .then(deletedThread => console.log(deletedThread))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":586,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":17,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ThreadMember","description":"Represents a Member for a Thread.","extends":[[["Base"]]],"props":[{"name":"thread","description":"The thread that this member is a part of","type":[[["ThreadChannel"]]],"meta":{"line":18,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member last joined the thread at","nullable":true,"type":[[["number"]]],"meta":{"line":24,"file":"ThreadMember.js","path":"src/structures"}},{"name":"id","description":"The id of the thread member","type":[[["Snowflake"]]],"meta":{"line":30,"file":"ThreadMember.js","path":"src/structures"}},{"name":"flags","description":"The flags for this thread member","type":[[["ThreadMemberFlags"]]],"meta":{"line":43,"file":"ThreadMember.js","path":"src/structures"}},{"name":"member","description":"The guild member associated with this thread member.","access":"private","nullable":true,"type":[[["GuildMember"]]],"meta":{"line":52,"file":"ThreadMember.js","path":"src/structures"}},{"name":"guildMember","description":"The guild member associated with this thread member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":63,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The last time this member joined the thread","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":72,"file":"ThreadMember.js","path":"src/structures"}},{"name":"user","description":"The user associated with this thread member","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"ThreadMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user can manage this thread member","readonly":true,"type":[[["boolean"]]],"meta":{"line":90,"file":"ThreadMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes this member from the thread.","params":[{"name":"reason","description":"Reason for removing the member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["ThreadMember"]]],"meta":{"line":99,"file":"ThreadMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"ThreadMember.js","path":"src/structures"}},{"name":"ThreadOnlyChannel","description":"Represents a channel that only contains threads","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"abstract":true,"props":[{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildForumThreadManager"]]],"meta":{"line":53,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"availableTags","description":"The set of tags that can be used in this channel.","type":[[["Array","<"],["GuildForumTag",">"]]],"meta":{"line":65,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultReactionEmoji","description":"The emoji to show in the add reaction button on a thread in a guild forum channel","nullable":true,"type":[[["DefaultReactionEmoji"]]],"meta":{"line":75,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":86,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel.","nullable":true,"type":[[["ThreadAutoArchiveDuration"]]],"meta":{"line":106,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If this channel is considered NSFW.","type":[[["boolean"]]],"meta":{"line":116,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of this channel.","nullable":true,"type":[[["string"]]],"meta":{"line":126,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"defaultSortOrder","description":"The default sort order mode used to order posts","nullable":true,"type":[[["SortOrderType"]]],"meta":{"line":134,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":276,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setAvailableTags","description":"Sets the available tags for this forum channel","params":[{"name":"availableTags","description":"The tags to set as available in this channel","type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"reason","description":"Reason for changing the available tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":146,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultReactionEmoji","description":"Sets the default reaction emoji for this channel","params":[{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"reason","description":"Reason for changing the default reaction emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":156,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultThreadRateLimitPerUser","description":"Sets the default rate limit per user (slowmode) for new threads in this channel","params":[{"name":"defaultThreadRateLimitPerUser","description":"The rate limit to set on newly created threads in this channel","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the default rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":166,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultSortOrder","description":"Sets the default sort order mode used to order posts","params":[{"name":"defaultSortOrder","description":"The default sort order mode to set on this channel","nullable":true,"type":[[["SortOrderType"]]]},{"name":"reason","description":"Reason for changing the default sort order","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":176,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":190,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":200,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":210,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":225,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":45,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"ThumbnailComponent","construct":{"name":"ThumbnailComponent","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["ThumbnailComponent"]],[["APIThumbnailComponent"]]]}]},"props":[{"name":"media","description":"A url or attachment","type":[[["UnfurledMediaItem"]]],"meta":{"line":29,"file":"ThumbnailComponent.js","path":"src/structures"}},{"name":"description","description":"Alt text for the media, max 1024 characters","type":[[["String"]]],"meta":{"line":35,"file":"ThumbnailComponent.js","path":"src/structures"}},{"name":"spoiler","description":"Whether the thumbnail should be a spoiler (or blurred out). Defaults to false","type":[[["Boolean"]]],"meta":{"line":41,"file":"ThumbnailComponent.js","path":"src/structures"}}],"methods":[{"name":"toJSON","returns":[[["APIThumbnailComponent"]]],"meta":{"line":47,"file":"ThumbnailComponent.js","path":"src/structures"}}],"meta":{"line":17,"file":"ThumbnailComponent.js","path":"src/structures"}},{"name":"Typing","description":"Represents a typing state for a user in a channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The channel the status is from","type":[[["TextBasedChannels"]]],"meta":{"line":17,"file":"Typing.js","path":"src/structures"}},{"name":"user","description":"The user who is typing","type":[[["User"]]],"meta":{"line":23,"file":"Typing.js","path":"src/structures"}},{"name":"startedTimestamp","description":"The UNIX timestamp in milliseconds the user started typing at","type":[[["number"]]],"meta":{"line":34,"file":"Typing.js","path":"src/structures"}},{"name":"startedAt","description":"The time the user started typing at","readonly":true,"type":[[["Date"]]],"meta":{"line":51,"file":"Typing.js","path":"src/structures"}},{"name":"guild","description":"The guild the status is from","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":60,"file":"Typing.js","path":"src/structures"}},{"name":"member","description":"The member who is typing","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":69,"file":"Typing.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether the status is received from a guild.","returns":[[["boolean"]]],"meta":{"line":42,"file":"Typing.js","path":"src/structures"}}],"meta":{"line":9,"file":"Typing.js","path":"src/structures"}},{"name":"UnfurledMediaItem","construct":{"name":"UnfurledMediaItem","params":[{"name":"data","description":"The data","optional":true,"default":"{}","type":[[["UnfurledMediaItem"]],[["APIUnfurledMediaItem"]]]}]},"props":[{"name":"url","type":[[["string"]]],"meta":{"line":14,"file":"UnfurledMediaItem.js","path":"src/structures"}},{"name":"data","type":[[["APIUnfurledMediaItem"]]],"meta":{"line":18,"file":"UnfurledMediaItem.js","path":"src/structures"}}],"methods":[{"name":"toJSON","description":"Returns the API-compatible JSON for this media item","returns":[[["APIUnfurledMediaItem"]]],"meta":{"line":24,"file":"UnfurledMediaItem.js","path":"src/structures"}}],"meta":{"line":10,"file":"UnfurledMediaItem.js","path":"src/structures"}},{"name":"User","description":"Represents a user on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":83,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"User.js","path":"src/structures"}},{"name":"bannerColor","description":"The user banner's hex\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":105,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":116,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":126,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":136,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationData","description":"The user avatar decoration's data","nullable":true,"type":[[["AvatarDecorationData"]]],"meta":{"line":151,"file":"User.js","path":"src/structures"}},{"name":"primaryGuild","description":"The primary guild of the user","nullable":true,"type":[[["UserPrimaryGuild"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"collectibles","description":"The user's collectibles","nullable":true,"type":[[["Collectibles"]]],"meta":{"line":208,"file":"User.js","path":"src/structures"}},{"name":"clan","description":"The primary clan the user is in","nullable":true,"deprecated":"Use `primaryGuild` instead","type":[[["PrimaryGuild"]]],"meta":{"line":229,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"deprecated":"Use `avatarDecorationData` instead\nRemoved in v4","type":[[["string"]]],"meta":{"line":239,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":248,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":257,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":266,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":312,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":361,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":374,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":383,"file":"User.js","path":"src/structures"}},{"name":"note","description":"The function returns the note associated with a specific client ID from a cache.","nullable":true,"type":[[["string"]]],"meta":{"line":546,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":555,"file":"User.js","path":"src/structures"}},{"name":"relationship","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipType"]]],"meta":{"line":586,"file":"User.js","path":"src/structures"}},{"name":"friendNickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":596,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"avatarURL","description":"A link to the user's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":275,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":284,"file":"User.js","path":"src/structures"}},{"name":"clanBadgeURL","description":"A link to the user's guild tag badge.","deprecated":true,"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":294,"file":"User.js","path":"src/structures"}},{"name":"guildTagBadgeURL","description":"A link to the user's guild tag badge.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":326,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":348,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":392,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":400,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":411,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":441,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":476,"file":"User.js","path":"src/structures"}},{"name":"getProfile","description":"Returns a user profile object for a given user ID.\nThis endpoint requires one of the following:\n- The user is a bot\n- The user shares a mutual guild with the current user\n- The user is a friend of the current user\n- The user is a friend suggestion of the current user\n- The user has an outgoing friend request to the current user","see":["{@link https://discord-userdoccers.vercel.app/resources/user#response-body}"],"params":[{"name":"guildId","description":"The guild ID to get the user's member profile in","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["Object",">"]]],"meta":{"line":492,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"The function updates the note of a user and returns the updated user.","params":[{"name":"note","description":"The `note` parameter is the new value that you want to set for the note of the\nuser. It is an optional parameter and its default value is `null`.","optional":true,"default":null,"type":[[["string"]],[["null"]],[["undefined"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["User",">"]]],"description":"The `setNote` method is returning the `User` object."},"meta":{"line":537,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":568,"file":"User.js","path":"src/structures"}},{"name":"deleteRelationship","description":"Unblock / Unfriend / Cancels a friend request","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":577,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":601,"file":"User.js","path":"src/structures"}}],"meta":{"line":17,"file":"User.js","path":"src/structures"}},{"name":"UserContextMenuInteraction","description":"Represents a user context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetUser","description":"The target user from this interaction","readonly":true,"type":[[["User"]]],"meta":{"line":15,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"targetMember","description":"The target member from this interaction","readonly":true,"nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":24,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isSelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":283,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"VoiceChannel","description":"Represents a guild voice channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"editable","description":"Whether the channel is editable by the client user","readonly":true,"deprecated":"Use {@link VoiceChannel#manageable} instead","type":[[["boolean"]]],"meta":{"line":20,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":38,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"speakable","description":"Checks if the client has permission to send audio to the voice channel","readonly":true,"type":[[["boolean"]]],"meta":{"line":49,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":28,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":41,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":49,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":57,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":65,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":75,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":87,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"status","description":"The status of the voice channel (max 500 characters)","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":108,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":123,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":37,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":44,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":57,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":65,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":77,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":99,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":149,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":418,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":427,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":447,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":42,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":52,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":156,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":166,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nchannel.setBitrate(48_000)\n .then(channel => console.log(`Set bitrate to ${channel.bitrate}bps for ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":181,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":197,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nchannel.setUserLimit(42)\n .then(channel => console.log(`Set user limit to ${channel.userLimit} for ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":212,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":222,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":173,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":213,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":242,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":263,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":291,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":306,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":328,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":356,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":371,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":393,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":464,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isThreadOnly","description":"Indicates whether this channel is {@link ThreadOnlyChannel}.","inherits":"Channel#isThreadOnly","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":193,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":13,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"VoiceChannelEffect","description":"Represents an effect used in a {@link VoiceChannel}.","props":[{"name":"guild","description":"The guild where the effect was sent from.","type":[[["Guild"]]],"meta":{"line":14,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel the effect was sent in.","type":[[["Snowflake"]]],"meta":{"line":20,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"userId","description":"The id of the user that sent the effect.","type":[[["Snowflake"]]],"meta":{"line":26,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of the effect.","nullable":true,"type":[[["Emoji"]]],"meta":{"line":32,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"animationType","description":"The animation type of the effect.","nullable":true,"type":[[["VoiceChannelEffectSendAnimationType"]]],"meta":{"line":38,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"animationId","description":"The animation id of the effect.","nullable":true,"type":[[["number"]]],"meta":{"line":44,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"soundId","description":"The id of the soundboard sound for soundboard effects.","nullable":true,"type":[[["Snowflake"]],[["number"]]],"meta":{"line":50,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"soundVolume","description":"The volume of the soundboard sound [0-1] for soundboard effects.","nullable":true,"type":[[["number"]]],"meta":{"line":56,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"channel","description":"The channel the effect was sent in.","readonly":true,"nullable":true,"type":[[["VoiceChannel"]]],"meta":{"line":64,"file":"VoiceChannelEffect.js","path":"src/structures"}}],"meta":{"line":8,"file":"VoiceChannelEffect.js","path":"src/structures"}},{"name":"VoiceRegion","description":"Represents a Discord voice region for guilds.","props":[{"name":"id","description":"The region's id","type":[[["string"]]],"meta":{"line":14,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"name","description":"Name of the region","type":[[["string"]]],"meta":{"line":20,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"vip","description":"Whether the region is VIP-only","deprecated":"This property is no longer being sent by the API.","type":[[["boolean"]]],"meta":{"line":27,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"deprecated","description":"Whether the region is deprecated","type":[[["boolean"]]],"meta":{"line":33,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"optimal","description":"Whether the region is optimal","type":[[["boolean"]]],"meta":{"line":39,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"custom","description":"Whether the region is custom","type":[[["boolean"]]],"meta":{"line":45,"file":"VoiceRegion.js","path":"src/structures"}}],"meta":{"line":8,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"VoiceState","description":"Represents the voice state for a Guild Member.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild of this voice state","type":[[["Guild"]]],"meta":{"line":17,"file":"VoiceState.js","path":"src/structures"}},{"name":"id","description":"The id of the member of this voice state","type":[[["Snowflake"]]],"meta":{"line":22,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverDeaf","description":"Whether this member is deafened server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverMute","description":"Whether this member is muted server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfDeaf","description":"Whether this member is self-deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfMute","description":"Whether this member is self-muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfVideo","description":"Whether this member's camera is enabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"VoiceState.js","path":"src/structures"}},{"name":"sessionId","description":"The session id for this member's connection","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"VoiceState.js","path":"src/structures"}},{"name":"streaming","description":"Whether this member is streaming using \"Screen Share\"","type":[[["boolean"]]],"meta":{"line":94,"file":"VoiceState.js","path":"src/structures"}},{"name":"channelId","description":"The {@link VoiceChannel} or {@link StageChannel} id the member is in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":104,"file":"VoiceState.js","path":"src/structures"}},{"name":"suppress","description":"Whether this member is suppressed from speaking. This property is specific to stage channels only.","type":[[["boolean"]]],"meta":{"line":114,"file":"VoiceState.js","path":"src/structures"}},{"name":"requestToSpeakTimestamp","description":"The time at which the member requested to speak. This property is specific to stage channels only.","nullable":true,"type":[[["number"]]],"meta":{"line":122,"file":"VoiceState.js","path":"src/structures"}},{"name":"member","description":"The member that this voice state belongs to","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":135,"file":"VoiceState.js","path":"src/structures"}},{"name":"user","description":"The user that this voice state belongs to","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":145,"file":"VoiceState.js","path":"src/structures"}},{"name":"channel","description":"The channel that the member is connected to","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]],[["DMChannel"]],[["GroupDMChannel"]]],"meta":{"line":154,"file":"VoiceState.js","path":"src/structures"}},{"name":"deaf","description":"Whether this member is either self-deafened or server-deafened","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":163,"file":"VoiceState.js","path":"src/structures"}},{"name":"mute","description":"Whether this member is either self-muted or server-muted","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"VoiceState.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setMute","description":"Mutes/unmutes the member of this voice state.","params":[{"name":"mute","description":"Whether or not the member should be muted","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for muting or unmuting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":182,"file":"VoiceState.js","path":"src/structures"}},{"name":"setDeaf","description":"Deafens/undeafens the member of this voice state.","params":[{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for deafening or undeafening","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":193,"file":"VoiceState.js","path":"src/structures"}},{"name":"disconnect","description":"Disconnects the member from the channel.","params":[{"name":"reason","description":"Reason for disconnecting the member from the channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":203,"file":"VoiceState.js","path":"src/structures"}},{"name":"setChannel","description":"Moves the member to a different channel, or disconnects them from the one they're in.","params":[{"name":"channel","description":"Channel to move the member to, or `null` if you want to\ndisconnect them from voice.","type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"reason","description":"Reason for moving member to another channel or disconnecting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":214,"file":"VoiceState.js","path":"src/structures"}},{"name":"setRequestToSpeak","description":"Toggles the request to speak in the channel.\nOnly applicable for stage channels and for the client's own voice state.","examples":["// Making the client request to speak in a stage channel (raise its hand)\nguild.members.me.voice.setRequestToSpeak(true);","// Making the client cancel a request to speak\nguild.members.me.voice.setRequestToSpeak(false);"],"params":[{"name":"request","description":"Whether or not the client is requesting to become a speaker.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":231,"file":"VoiceState.js","path":"src/structures"}},{"name":"setSuppressed","description":"Suppress/unsuppress the user. Only applicable for stage channels.","examples":["// Making the client a speaker\nguild.members.me.voice.setSuppressed(false);","// Making the client an audience member\nguild.members.me.voice.setSuppressed(true);","// Inviting another user to speak\nvoiceState.setSuppressed(false);","// Moving another user to the audience, or cancelling their invite to speak\nvoiceState.setSuppressed(true);"],"params":[{"name":"suppressed","description":"Whether or not the user should be suppressed.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":261,"file":"VoiceState.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the voice channel","examples":["// Setting the status to something\nguild.members.me.voice.setStatus(\"something\")","// Removing the status\nguild.members.me.voice.setStatus()"],"params":[{"name":"status","description":"The message to set the channel status to","optional":true,"default":"\"\"","type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":288,"file":"VoiceState.js","path":"src/structures"}},{"name":"getPreview","description":"Get URL Image of the user's streaming video (NOT STREAMING !!!)","async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"URL Image of the user's streaming video"},"meta":{"line":301,"file":"VoiceState.js","path":"src/structures"}},{"name":"postPreview","description":"Post Preview Image to the client user's streaming video","params":[{"name":"base64Image","description":"Base64 URI (data:image/jpeg;base64,data)","type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":317,"file":"VoiceState.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this voice state.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["VoiceState",">"]]],"meta":{"line":336,"file":"VoiceState.js","path":"src/structures"}}],"meta":{"line":10,"file":"VoiceState.js","path":"src/structures"}},{"name":"WebEmbed","description":"Send Embedlink to Discord\nOnly works with Discord Web and Discord Client (no custom theme installed)\n- No Timestamp, Footer, Fields, Author iconURL\n- Video with Embed working\n- Can only choose between image and thumbnail\n- Description limit 350 characters","construct":{"name":"WebEmbed","params":[{"name":"data","description":"Raw data","optional":true,"default":"{}","type":[[["WebEmbed"]]]}]},"props":[{"name":"imageType","description":"Type image of this embed","type":[[["thumbnail"]],[["image"]]],"meta":{"line":60,"file":"WebEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":65,"file":"WebEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":71,"file":"WebEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":77,"file":"WebEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":83,"file":"WebEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["WebEmbedImage"]]],"meta":{"line":98,"file":"WebEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["WebEmbedThumbnail"]]],"meta":{"line":111,"file":"WebEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["WebEmbedVideo"]]],"meta":{"line":134,"file":"WebEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["WebEmbedAuthor"]]],"meta":{"line":154,"file":"WebEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["WebEmbedProvider"]]],"meta":{"line":172,"file":"WebEmbed.js","path":"src/structures"}},{"name":"redirect","description":"Redirect URL","type":[[["string"]]],"meta":{"line":183,"file":"WebEmbed.js","path":"src/structures"}}],"methods":[{"name":"_setup","access":"private","params":[{"name":"data","description":"The data for the embed","type":[[["Object"]]]}],"meta":{"line":55,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":197,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setProvider","description":"Sets the provider of this embed.","params":[{"name":"options","description":"The options to provide for the provider.\nProvide `null` to remove the provider data.","type":[[["string"]],[["EmbedProviderData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":222,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":240,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description (Limit 350 characters)","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":250,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":260,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":275,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setVideo","description":"Sets the video of this embed.","params":[{"name":"url","description":"The URL of the video","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":290,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":300,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":310,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setRedirect","description":"Sets the redirect URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":320,"file":"WebEmbed.js","path":"src/structures"}}],"meta":{"line":17,"file":"WebEmbed.js","path":"src/structures"}},{"name":"Webhook","description":"Represents a webhook.","props":[{"name":"client","description":"The client that instantiated the webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":17,"file":"Webhook.js","path":"src/structures"}},{"name":"name","description":"The name of the webhook","type":[[["string"]]],"meta":{"line":33,"file":"Webhook.js","path":"src/structures"}},{"name":"token","description":"The token for the webhook, unavailable for follower webhooks and webhooks owned by another application.","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Webhook.js","path":"src/structures"}},{"name":"avatar","description":"The avatar for the webhook","nullable":true,"type":[[["string"]]],"meta":{"line":48,"file":"Webhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"type","description":"The type of the webhook","type":[[["WebhookType"]]],"meta":{"line":62,"file":"Webhook.js","path":"src/structures"}},{"name":"guildId","description":"The guild the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":70,"file":"Webhook.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":78,"file":"Webhook.js","path":"src/structures"}},{"name":"owner","description":"The owner of the webhook","nullable":true,"type":[[["User"]],[["APIUser"]]],"meta":{"line":86,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceGuild","description":"The source guild of the webhook","nullable":true,"type":[[["Guild"]],[["APIGuild"]]],"meta":{"line":96,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceChannel","description":"The source channel of the webhook","nullable":true,"type":[[["NewsChannel"]],[["APIChannel"]]],"meta":{"line":106,"file":"Webhook.js","path":"src/structures"}},{"name":"channel","description":"The channel the webhook belongs to","readonly":true,"nullable":true,"type":[[["TextChannel"]],[["VoiceChannel"]],[["NewsChannel"]],[["ForumChannel"]],[["MediaChannel"]]],"meta":{"line":402,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":411,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":420,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":429,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":191,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":235,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":262,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":296,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":332,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":372,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":382,"file":"Webhook.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the webhook's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":438,"file":"Webhook.js","path":"src/structures"}},{"name":"isChannelFollower","description":"Whether or not this webhook is a channel follower webhook.","returns":[[["boolean"]]],"meta":{"line":447,"file":"Webhook.js","path":"src/structures"}},{"name":"isIncoming","description":"Whether or not this webhook is an incoming webhook.","returns":[[["boolean"]]],"meta":{"line":455,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":15,"file":"Webhook.js","path":"src/structures"}},{"name":"WelcomeChannel","description":"Represents a channel link in a guild's welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome channel","type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":18,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome channel","type":[[["string"]]],"meta":{"line":24,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"_emoji","description":"The raw emoji data","access":"private","type":[[["Object"]]],"meta":{"line":31,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channelId","description":"The id of this welcome channel","type":[[["Snowflake"]]],"meta":{"line":40,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channel","description":"The channel of this welcome channel","nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["ForumChannel"]],[["MediaChannel"]]],"meta":{"line":47,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this welcome channel","type":[[["GuildEmoji"]],[["Emoji"]]],"meta":{"line":55,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"WelcomeScreen","description":"Represents a welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome screen","type":[[["Guild"]]],"meta":{"line":19,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome screen","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"welcomeChannels","description":"Collection of welcome channels belonging to this welcome screen","type":[[["Collection","<"],["Snowflake",", "],["WelcomeChannel",">"]]],"meta":{"line":31,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"enabled","description":"Whether the welcome screen is enabled on the guild or not","type":[[["boolean"]]],"meta":{"line":43,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":11,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"Widget","description":"Represents a Widget.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild.","type":[[["Snowflake"]]],"meta":{"line":30,"file":"Widget.js","path":"src/structures"}},{"name":"name","description":"The name of the guild.","type":[[["string"]]],"meta":{"line":37,"file":"Widget.js","path":"src/structures"}},{"name":"instantInvite","description":"The invite of the guild.","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"Widget.js","path":"src/structures"}},{"name":"channels","description":"The list of channels in the guild.","type":[[["Collection","<"],["Snowflake",", "],["WidgetChannel",">"]]],"meta":{"line":52,"file":"Widget.js","path":"src/structures"}},{"name":"members","description":"The list of members in the guild.\nThese strings are just arbitrary numbers, they aren't Snowflakes.","type":[[["Collection","<"],["string",", "],["WidgetMember",">"]]],"meta":{"line":62,"file":"Widget.js","path":"src/structures"}},{"name":"presenceCount","description":"The number of members online.","type":[[["number"]]],"meta":{"line":72,"file":"Widget.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Update the Widget.","async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":80,"file":"Widget.js","path":"src/structures"}}],"meta":{"line":11,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetMember","description":"Represents a WidgetMember.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the user. It's an arbitrary number.","type":[[["string"]]],"meta":{"line":23,"file":"WidgetMember.js","path":"src/structures"}},{"name":"username","description":"The username of the member.","type":[[["string"]]],"meta":{"line":29,"file":"WidgetMember.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of the member.","type":[[["string"]]],"meta":{"line":35,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatar","description":"The avatar of the member.","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"WidgetMember.js","path":"src/structures"}},{"name":"status","description":"The status of the member.","type":[[["PresenceStatus"]]],"meta":{"line":47,"file":"WidgetMember.js","path":"src/structures"}},{"name":"deaf","description":"If the member is server deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":53,"file":"WidgetMember.js","path":"src/structures"}},{"name":"mute","description":"If the member is server muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":59,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfDeaf","description":"If the member is self deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":65,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfMute","description":"If the member is self muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"WidgetMember.js","path":"src/structures"}},{"name":"suppress","description":"If the member is suppressed","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"WidgetMember.js","path":"src/structures"}},{"name":"channelId","description":"The id of the voice channel the member is in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatarURL","description":"The avatar URL of the member.","type":[[["string"]]],"meta":{"line":89,"file":"WidgetMember.js","path":"src/structures"}},{"name":"activity","description":"The activity of the member.","nullable":true,"type":[[["WidgetActivity"]]],"meta":{"line":95,"file":"WidgetMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"WidgetMember.js","path":"src/structures"}},{"name":"ActivityFlags","description":"Data structure that makes it easy to interact with an {@link Activity#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ActivityFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric activity flags. All available properties:\n* `INSTANCE`\n* `JOIN`\n* `SPECTATE`\n* `JOIN_REQUEST`\n* `SYNC`\n* `PLAY`\n* `PARTY_PRIVACY_FRIENDS`\n* `PARTY_PRIVACY_VOICE_CHANNEL`\n* `EMBEDDED`","see":["{@link https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":32,"file":"ActivityFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ActivityFlags.js","path":"src/util"}},{"name":"ApplicationFlags","description":"Data structure that makes it easy to interact with a {@link Application#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ApplicationFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric application flags. All available properties:\n* `EMBEDDED_RELEASED`\n* `MANAGED_EMOJI`\n* `GROUP_DM_CREATE`\n* `RPC_PRIVATE_BETA`\n* `APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE`\n* `ALLOW_ASSETS`\n* `ALLOW_ACTIVITY_ACTION_SPECTATE`\n* `ALLOW_ACTIVITY_ACTION_JOIN_REQUEST`\n* `RPC_HAS_CONNECTED`\n* `GATEWAY_PRESENCE`\n* `GATEWAY_PRESENCE_LIMITED`\n* `GATEWAY_GUILD_MEMBERS`\n* `GATEWAY_GUILD_MEMBERS_LIMITED`\n* `VERIFICATION_PENDING_GUILD_LIMIT`\n* `EMBEDDED`\n* `GATEWAY_MESSAGE_CONTENT`\n* `GATEWAY_MESSAGE_CONTENT_LIMITED`\n* `EMBEDDED_FIRST_PARTY`\n* `APPLICATION_COMMAND_BADGE`\n* `ACTIVE`\n* `IFRAME_MODAL`","see":["{@link https://discord.com/developers/docs/resources/application#application-object-application-flags}","{@link https://flags.lewistehminerz.dev/}"],"scope":"static","type":[[["Object"]]],"meta":{"line":51,"file":"ApplicationFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"AttachmentFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"AttachmentFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IS_REMIX`","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure-attachment-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"AttachmentFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitField","description":"Data structure that makes it easy to interact with a bitfield.","construct":{"name":"BitField","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":"this.constructor.defaultBit","type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric bitfield flags.\nDefined in extension classes","scope":"static","abstract":true,"type":[[["Object"]]],"meta":{"line":162,"file":"BitField.js","path":"src/util"}},{"name":"defaultBit","scope":"static","access":"private","type":[[["number"]],[["bigint"]]],"meta":{"line":168,"file":"BitField.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}},{"name":"resolve","description":"Resolves bitfields to their numeric form.","scope":"static","params":[{"name":"bit","description":"bit(s) to resolve","optional":true,"type":[[["BitFieldResolvable"]]]}],"returns":[[["number"]],[["bigint"]]],"meta":{"line":143,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlags","description":"Data structure that makes it easy to interact with a {@link Channel#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":30,"file":"ChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild channel flags. All available properties:\n* `PINNED`\n* `REQUIRE_TAG`","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":18,"file":"ChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ChannelFlags.js","path":"src/util"}},{"name":"DataResolver","description":"The DataResolver identifies different objects and tries to resolve a specific piece of information from them.","access":"private","methods":[{"name":"resolveCode","description":"Resolves the string to a code based on the passed regex.","scope":"static","params":[{"name":"data","description":"The string to resolve","type":[[["string"]]]},{"name":"regex","description":"The RegExp used to extract the code","type":[[["RegExp"]]]}],"returns":[[["string"]]],"meta":{"line":36,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveInviteCode","description":"Resolves InviteResolvable to an invite code.","scope":"static","params":[{"name":"data","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":45,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveGuildTemplateCode","description":"Resolves GuildTemplateResolvable to a template code.","scope":"static","params":[{"name":"data","description":"The template resolvable to resolve","type":[[["GuildTemplateResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":54,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveImage","description":"Resolves a Base64Resolvable, a string, or a BufferResolvable to a Base 64 image.","scope":"static","params":[{"name":"image","description":"The image to be resolved","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise",""],["string",">"]]],"meta":{"line":64,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveBase64","description":"Resolves a Base64Resolvable to a Base 64 image.","scope":"static","params":[{"name":"data","description":"The base 64 resolvable you want to resolve","type":[[["Base64Resolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":85,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFile","description":"Resolves a BufferResolvable to a Buffer or a Stream.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<("],["Buffer","|"],["Stream",")>"]]],"meta":{"line":109,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFileAsBuffer","description":"Resolves a BufferResolvable to a Buffer.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<"],["Buffer",">"]]],"meta":{"line":136,"file":"DataResolver.js","path":"src/util"}}],"meta":{"line":15,"file":"DataResolver.js","path":"src/util"}},{"name":"Formatters","description":"Contains various Discord-specific functions for formatting messages.","props":[{"name":"TimestampStyles","description":"The message formatting timestamp\n[styles](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles) supported by Discord.","scope":"static","type":[[["Object","<"],["string",", "],["TimestampStylesString",">"]]],"meta":{"line":208,"file":"Formatters.js","path":"src/util"}}],"methods":[{"name":"blockQuote","description":"Formats the content into a block quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":28,"file":"Formatters.js","path":"src/util"}},{"name":"bold","description":"Formats the content into bold text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":37,"file":"Formatters.js","path":"src/util"}},{"name":"channelMention","description":"Formats a channel id into a channel mention.","scope":"static","params":[{"name":"channelId","description":"The channel id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":46,"file":"Formatters.js","path":"src/util"}},{"name":"chatInputApplicationCommandMention","description":"Formats an application command name, subcommand group name, subcommand name, and ID\ninto an application command mention","scope":"static","params":[{"name":"commandName","description":"The name of the application command","type":[[["string"]]]},{"name":"subcommandGroupOrSubOrId","description":"The subcommand group name, subcommand name, or application command id","type":[[["string"]],[["Snowflake"]]]},{"name":"subcommandNameOrId","description":"The subcommand name or application command id","optional":true,"nullable":true,"type":[[["string"]],[["Snowflake"]]]},{"name":"commandId","description":"The id of the application command","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["string"]]],"meta":{"line":55,"file":"Formatters.js","path":"src/util"}},{"name":"codeBlock","description":"Wraps the content inside a code block with an optional language.","scope":"static","params":[{"name":"contentOrLanguage","description":"The language to use, content if a second parameter isn't provided.","type":[[["string"]]]},{"name":"content","description":"The content to wrap.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":85,"file":"Formatters.js","path":"src/util"}},{"name":"formatEmoji","description":"Formats an emoji id into a fully qualified emoji identifier","scope":"static","params":[{"name":"emojiId","description":"The emoji id to format.","type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated or not. Defaults to `false`","optional":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":95,"file":"Formatters.js","path":"src/util"}},{"name":"hideLinkEmbed","description":"Wraps the URL into `<>`, which stops it from embedding.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":105,"file":"Formatters.js","path":"src/util"}},{"name":"hyperlink","description":"Formats the content and the URL into a masked URL with an optional title.","scope":"static","params":[{"name":"content","description":"The content to display.","type":[[["string"]]]},{"name":"url","description":"The URL the content links to.","type":[[["string"]]]},{"name":"title","description":"The title shown when hovering on the masked link.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":114,"file":"Formatters.js","path":"src/util"}},{"name":"inlineCode","description":"Wraps the content inside \\`backticks\\`, which formats it as inline code.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":125,"file":"Formatters.js","path":"src/util"}},{"name":"italic","description":"Formats the content into italic text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":134,"file":"Formatters.js","path":"src/util"}},{"name":"quote","description":"Formats the content into a quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":143,"file":"Formatters.js","path":"src/util"}},{"name":"roleMention","description":"Formats a role id into a role mention.","scope":"static","params":[{"name":"roleId","description":"The role id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":152,"file":"Formatters.js","path":"src/util"}},{"name":"spoiler","description":"Formats the content into spoiler text.","scope":"static","params":[{"name":"content","description":"The content to spoiler.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":161,"file":"Formatters.js","path":"src/util"}},{"name":"strikethrough","description":"Formats the content into strike-through text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":170,"file":"Formatters.js","path":"src/util"}},{"name":"time","description":"Formats a date into a short date-time string.","scope":"static","params":[{"name":"date","description":"The date to format.","optional":true,"type":[[["number"]],[["Date"]]]},{"name":"style","description":"The style to use.","optional":true,"type":[[["TimestampStylesString"]]]}],"returns":[[["string"]]],"meta":{"line":179,"file":"Formatters.js","path":"src/util"}},{"name":"underscore","description":"Formats the content into underscored text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":210,"file":"Formatters.js","path":"src/util"}},{"name":"userMention","description":"Formats a user id into a user mention.","scope":"static","params":[{"name":"userId","description":"The user id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":219,"file":"Formatters.js","path":"src/util"}}],"meta":{"line":26,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"GuildMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `DID_REJOIN`\n* `COMPLETED_ONBOARDING`\n* `BYPASSES_VERIFICATION`\n* `STARTED_ONBOARDING`","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object-guild-member-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":27,"file":"GuildMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"Intents","description":"Data structure that makes it easy to calculate intents.","extends":[[["BitField"]]],"construct":{"name":"Intents","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["IntentsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric WebSocket intents. All available properties:\n* `GUILDS`\n* `GUILD_MEMBERS`\n* `GUILD_BANS`\n* `GUILD_EMOJIS_AND_STICKERS`\n* `GUILD_INTEGRATIONS`\n* `GUILD_WEBHOOKS`\n* `GUILD_INVITES`\n* `GUILD_VOICE_STATES`\n* `GUILD_PRESENCES`\n* `GUILD_MESSAGES`\n* `GUILD_MESSAGE_REACTIONS`\n* `GUILD_MESSAGE_TYPING`\n* `DIRECT_MESSAGES`\n* `DIRECT_MESSAGE_REACTIONS`\n* `DIRECT_MESSAGE_TYPING`\n* `MESSAGE_CONTENT`\n* `GUILD_SCHEDULED_EVENTS`\n* `AUTO_MODERATION_CONFIGURATION`\n* `AUTO_MODERATION_EXECUTION`","see":["{@link https://discord.com/developers/docs/topics/gateway#list-of-intents}"],"scope":"static","type":[[["Object"]]],"meta":{"line":50,"file":"Intents.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"Intents.js","path":"src/util"}},{"name":"InviteFlags","description":"Data structure that makes it easy to interact with an {@link InviteFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"InviteFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord invite flags. All available properties:\n* `IS_GUEST_INVITE`\n* `IS_VIEWED`\n* `IS_ENHANCED`\n* `IS_APPLICATION_BYPASS`","see":["{@link https://docs.discord.food/resources/invite#invite-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":27,"file":"InviteFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"InviteFlags.js","path":"src/util"}},{"name":"LimitedCollection","description":"A Collection which holds a max amount of entries and sweeps periodically.","extends":[[["Collection"]]],"construct":{"name":"LimitedCollection","params":[{"name":"options","description":"Options for constructing the Collection.","optional":true,"default":"{}","type":[[["LimitedCollectionOptions"]]]},{"name":"iterable","description":"Optional entries passed to the Map constructor.","optional":true,"default":null,"type":[[["Iterable"]]]}]},"props":[{"name":"maxSize","description":"The max size of the Collection.","type":[[["number"]]],"meta":{"line":63,"file":"LimitedCollection.js","path":"src/util"}},{"name":"keepOverLimit","description":"A function called to check if an entry should be kept when the Collection is at max size.","nullable":true,"type":[[["function"]]],"meta":{"line":69,"file":"LimitedCollection.js","path":"src/util"}},{"name":"sweepFilter","description":"A function called every sweep interval that returns a function passed to `sweep`.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["SweepFilter"]]],"meta":{"line":76,"file":"LimitedCollection.js","path":"src/util"}},{"name":"interval","description":"The id of the interval being used to sweep.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["Timeout"]]],"meta":{"line":83,"file":"LimitedCollection.js","path":"src/util"}}],"methods":[{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","deprecated":"Use {@link Sweepers.filterByLifetime} instead","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":114,"file":"LimitedCollection.js","path":"src/util"}}],"meta":{"line":37,"file":"LimitedCollection.js","path":"src/util"}},{"name":"MessageFlags","description":"Data structure that makes it easy to interact with a {@link Message#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"MessageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"MessageFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric message flags. All available properties:\n* `CROSSPOSTED`\n* `IS_CROSSPOST`\n* `SUPPRESS_EMBEDS`\n* `SOURCE_MESSAGE_DELETED`\n* `URGENT`\n* `HAS_THREAD`\n* `EPHEMERAL`\n* `LOADING`\n* `FAILED_TO_MENTION_SOME_ROLES_IN_THREAD`\n* `GUILD_FEED_HIDDEN`\n* `SHOULD_SHOW_LINK_NOT_DISCORD_WARNING`\n* `SUPPRESS_NOTIFICATIONS`\n* `IS_VOICE_MESSAGE`\n* `HAS_SNAPSHOT`\n* `IS_COMPONENTS_V2`","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-flags}","{@link https://docs.discord.food/resources/message#message-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":45,"file":"MessageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"MessageFlags.js","path":"src/util"}},{"name":"Options","description":"Contains various utilities for client options.","props":[{"name":"defaultMakeCacheSettings","description":"The default settings passed to {@link ClientOptions.makeCache}.\nThe caches that this changes are:\n* `MessageManager` - Limit to 200 messages\n* `ChannelManager` - Sweep archived threads\n* `GuildChannelManager` - Sweep archived threads\n* `ThreadManager` - Sweep archived threads\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`makeCache: Options.cacheWithLimits({ ...Options.defaultMakeCacheSettings, ReactionManager: 0 })`","scope":"static","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]],"meta":{"line":324,"file":"Options.js","path":"src/util"}},{"name":"defaultSweeperSettings","description":"The default settings passed to {@link ClientOptions.sweepers}.\nThe sweepers that this changes are:\n* `threads` - Sweep archived threads every hour, removing those archived more than 4 hours ago\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`sweepers: { ...Options.defaultSweeperSettings, messages: { interval: 300, lifetime: 600 } }`","scope":"static","type":[[["SweeperOptions"]]],"meta":{"line":351,"file":"Options.js","path":"src/util"}}],"methods":[{"name":"createDefault","description":"The default client options.","scope":"static","returns":[[["ClientOptions"]]],"meta":{"line":163,"file":"Options.js","path":"src/util"}},{"name":"cacheWithLimits","description":"Create a cache factory using predefined settings to sweep or limit.","scope":"static","examples":["// Store up to 200 messages per channel and discard archived threads if they were archived more than 4 hours ago.\n// Note archived threads will remain in the guild and client caches with these settings\nOptions.cacheWithLimits({\n MessageManager: 200,\n ThreadManager: {\n sweepInterval: 3600,\n sweepFilter: LimitedCollection.filterByLifetime({\n getComparisonTimestamp: e => e.archiveTimestamp,\n excludeFromSweep: e => !e.archived,\n }),\n },\n });","// Sweep messages every 5 minutes, removing messages that have not been edited or created in the last 30 minutes\nOptions.cacheWithLimits({\n // Keep default thread sweeping behavior\n ...Options.defaultMakeCacheSettings,\n // Override MessageManager\n MessageManager: {\n sweepInterval: 300,\n sweepFilter: LimitedCollection.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: e => e.editedTimestamp ?? e.createdTimestamp,\n })\n }\n});"],"params":[{"name":"settings","description":"Settings passed to the relevant constructor.\nIf no setting is provided for a manager, it uses Collection.\nIf a number is provided for a manager, it uses that number as the max size for a LimitedCollection.\nIf LimitedCollectionOptions are provided for a manager, it uses those settings to form a LimitedCollection.","optional":true,"default":"{}","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]]}],"returns":[[["CacheFactory"]]],"meta":{"line":273,"file":"Options.js","path":"src/util"}},{"name":"cacheEverything","description":"Create a cache factory that always caches everything.","scope":"static","returns":[[["CacheFactory"]]],"meta":{"line":308,"file":"Options.js","path":"src/util"}}],"meta":{"line":158,"file":"Options.js","path":"src/util"}},{"name":"Permissions","description":"Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of\npermissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member\nthat override their default permissions.","extends":[[["BitField"]]],"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["bigint"]]],"meta":{"line":12,"file":"Permissions.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric permission flags. All available properties:\n* `CREATE_INSTANT_INVITE` (create invitations to the guild)\n* `KICK_MEMBERS`\n* `BAN_MEMBERS`\n* `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)\n* `MANAGE_CHANNELS` (edit and reorder channels)\n* `MANAGE_GUILD` (edit the guild information, region, etc.)\n* `ADD_REACTIONS` (add new reactions to messages)\n* `VIEW_AUDIT_LOG`\n* `PRIORITY_SPEAKER`\n* `STREAM`\n* `VIEW_CHANNEL`\n* `SEND_MESSAGES`\n* `SEND_TTS_MESSAGES`\n* `MANAGE_MESSAGES` (delete messages and reactions)\n* `EMBED_LINKS` (links posted will have a preview embedded)\n* `ATTACH_FILES`\n* `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)\n* `MENTION_EVERYONE`\n* `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)\n* `VIEW_GUILD_INSIGHTS`\n* `CONNECT` (connect to a voice channel)\n* `SPEAK` (speak in a voice channel)\n* `MUTE_MEMBERS` (mute members across all voice channels)\n* `DEAFEN_MEMBERS` (deafen members across all voice channels)\n* `MOVE_MEMBERS` (move members between voice channels)\n* `USE_VAD` (use voice activity detection)\n* `CHANGE_NICKNAME`\n* `MANAGE_NICKNAMES` (change other members' nicknames)\n* `MANAGE_ROLES`\n* `MANAGE_WEBHOOKS`\n* `MANAGE_EMOJIS_AND_STICKERS`\n* `USE_APPLICATION_COMMANDS`\n* `REQUEST_TO_SPEAK`\n* `MANAGE_EVENTS`\n* `MANAGE_THREADS`\n* `USE_PUBLIC_THREADS` (deprecated)\n* `CREATE_PUBLIC_THREADS`\n* `USE_PRIVATE_THREADS` (deprecated)\n* `CREATE_PRIVATE_THREADS`\n* `USE_EXTERNAL_STICKERS` (use stickers from different guilds)\n* `SEND_MESSAGES_IN_THREADS`\n* `START_EMBEDDED_ACTIVITIES`\n* `MODERATE_MEMBERS`\n* `VIEW_CREATOR_MONETIZATION_ANALYTICS`\n* `USE_SOUNDBOARD`\n* `CREATE_GUILD_EXPRESSIONS`\n* `CREATE_EVENTS`\n* `USE_EXTERNAL_SOUNDS`\n* `SEND_VOICE_MESSAGES`\n* `USE_CLYDE_AI`\n* `SET_VOICE_CHANNEL_STATUS`\n* `SEND_POLLS`\n* `USE_EXTERNAL_APPS`","see":["{@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags}"],"scope":"static","type":[[["Object","<"],["string",", "],["bigint",">"]]],"meta":{"line":124,"file":"Permissions.js","path":"src/util"}},{"name":"ALL","description":"Bitfield representing every permission combined","scope":"static","type":[[["bigint"]]],"meta":{"line":185,"file":"Permissions.js","path":"src/util"}},{"name":"DEFAULT","description":"Bitfield representing the default permissions for users","scope":"static","type":[[["bigint"]]],"meta":{"line":191,"file":"Permissions.js","path":"src/util"}},{"name":"STAGE_MODERATOR","description":"Bitfield representing the permissions required for moderators of stage channels","scope":"static","type":[[["bigint"]]],"meta":{"line":197,"file":"Permissions.js","path":"src/util"}}],"methods":[{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":33,"file":"Permissions.js","path":"src/util"}},{"name":"any","description":"Checks whether the bitfield has a permission, or any of multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"Permissions.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a permission, or multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":53,"file":"Permissions.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the permissions available.","returns":[[["Array","<"],["string",">"]]],"meta":{"line":61,"file":"Permissions.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"Permissions.js","path":"src/util"}},{"name":"PremiumUsageFlags","description":"Data structure that makes it easy to interact with an {@link PremiumUsageFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PremiumUsageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord premium usage flags. All available properties:\n* `PREMIUM_DISCRIMINATOR`\n* `ANIMATED_AVATAR`\n* `PROFILE_BANNER`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PremiumUsageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PremiumUsageFlags.js","path":"src/util"}},{"name":"PurchasedFlags","description":"Data structure that makes it easy to interact with an {@link PurchasedFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PurchasedFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord purchased flags. All available properties:\n* `NITRO_CLASSIC`\n* `NITRO`\n* `GUILD_BOOST`\n* `NITRO_BASIC`","scope":"static","type":[[["Object"]]],"meta":{"line":26,"file":"PurchasedFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PurchasedFlags.js","path":"src/util"}},{"name":"DiscordAuthWebsocket","description":"Discord Auth QR","extends":[[["EventEmitter"]]],"abstract":true,"construct":{"name":"DiscordAuthWebsocket","description":"Creates a new DiscordAuthWebsocket instance."},"props":[{"name":"AuthURL","type":[[["string"]]],"meta":{"line":71,"file":"RemoteAuth.js","path":"src/util"}},{"name":"exprire","type":[[["Date"]]],"meta":{"line":78,"file":"RemoteAuth.js","path":"src/util"}},{"name":"user","type":[[["UserRaw"]]],"meta":{"line":85,"file":"RemoteAuth.js","path":"src/util"}}],"methods":[{"name":"connect","description":"Connect WS","params":[{"name":"client","description":"DiscordJS Client","optional":true,"type":[[["Client"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":289,"file":"RemoteAuth.js","path":"src/util"}},{"name":"destroy","description":"Destroy client","returns":[[["void"]]],"meta":{"line":302,"file":"RemoteAuth.js","path":"src/util"}},{"name":"generateQR","description":"Generate QR code for user to scan (Terminal)","returns":[[["void"]]],"meta":{"line":317,"file":"RemoteAuth.js","path":"src/util"}}],"events":[{"name":"error","description":"WS Error","params":[{"name":"error","description":"Error","type":[[["Error"]]]}],"meta":{"line":101,"file":"RemoteAuth.js","path":"src/util"}},{"name":"debug","description":"Debug Event","params":[{"name":"msg","description":"Debug msg","type":[[["string"]]]}],"meta":{"line":109,"file":"RemoteAuth.js","path":"src/util"}},{"name":"ready","description":"Ready Event","params":[{"name":"client","description":"WS","type":[[["DiscordAuthWebsocket"]]]}],"meta":{"line":137,"file":"RemoteAuth.js","path":"src/util"}},{"name":"cancel","description":"Cancel","params":[{"name":"client","description":"WS","type":[[["DiscordAuthWebsocket"]]]}],"meta":{"line":158,"file":"RemoteAuth.js","path":"src/util"}},{"name":"pending","description":"Emitted whenever a user is scan QR Code.","params":[{"name":"user","description":"Discord User Raw","type":[[["UserRaw"]]]}],"meta":{"line":268,"file":"RemoteAuth.js","path":"src/util"}},{"name":"closed","description":"Emitted whenever a connection is closed.","meta":{"line":306,"file":"RemoteAuth.js","path":"src/util"}},{"name":"finish","description":"Emitted whenever a real token is found.","params":[{"name":"token","description":"Discord Token","type":[[["string"]]]}],"meta":{"line":356,"file":"RemoteAuth.js","path":"src/util"}}],"meta":{"line":50,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"RoleFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IN_PROMPT`","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object-role-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":24,"file":"RoleFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"RoleFlags.js","path":"src/util"}},{"name":"SnowflakeUtil","description":"A container for useful snowflake-related methods.","props":[{"name":"EPOCH","description":"Discord's epoch value (2015-01-01T00:00:00.000Z).","scope":"static","readonly":true,"type":[[["number"]]],"meta":{"line":87,"file":"SnowflakeUtil.js","path":"src/util"}}],"methods":[{"name":"generate","description":"Generates a Discord snowflake.\nThis hardcodes the worker's id as 1 and the process's id as 0.","scope":"static","params":[{"name":"timestamp","description":"Timestamp or date of the snowflake to generate","optional":true,"default":"Date.now()","type":[[["number"]],[["Date"]]]}],"returns":{"types":[[["Snowflake"]]],"description":"The generated snowflake"},"meta":{"line":30,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"deconstruct","description":"Deconstructs a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to deconstruct","type":[[["Snowflake"]]]}],"returns":[[["DeconstructedSnowflake"]]],"meta":{"line":59,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"timestampFrom","description":"Retrieves the timestamp field's value from a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to get the timestamp value from","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":78,"file":"SnowflakeUtil.js","path":"src/util"}}],"meta":{"line":10,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"Speaking","description":"Data structure that makes it easy to interact with a {@link VoiceConnection#speaking}\nand {@link guildMemberSpeaking} event bitfields.","extends":[[["BitField"]]],"construct":{"name":"Speaking","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric speaking flags. All available properties:\n* `SPEAKING`\n* `SOUNDSHARE`\n* `PRIORITY_SPEAKING`","see":["{@link https://discord.com/developers/docs/topics/voice-connections#speaking}"],"scope":"static","type":[[["Object"]]],"meta":{"line":27,"file":"Speaking.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":10,"file":"Speaking.js","path":"src/util"}},{"name":"Sweepers","description":"A container for all cache sweeping intervals and their associated sweep methods.","props":[{"name":"options","description":"The options the sweepers were instantiated with","type":[[["SweeperOptions"]]],"meta":{"line":30,"file":"Sweepers.js","path":"src/util"}},{"name":"intervals","description":"A record of interval timeout that is used to sweep the indicated items, or null if not being swept","type":[[["Object","<"],["SweeperKey",", ?"],["Timeout",">"]]],"meta":{"line":36,"file":"Sweepers.js","path":"src/util"}}],"methods":[{"name":"sweepApplicationCommands","description":"Sweeps all guild and global application commands and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which commands will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of commands that were removed from the caches"},"meta":{"line":68,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepAutoModerationRules","description":"Sweeps all auto moderation rules and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine\nwhich auto moderation rules will be removed from the caches","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of auto moderation rules that were removed from the caches"},"meta":{"line":86,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepBans","description":"Sweeps all guild bans and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which bans will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of bans that were removed from the caches"},"meta":{"line":95,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepEmojis","description":"Sweeps all guild emojis and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which emojis will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of emojis that were removed from the caches"},"meta":{"line":104,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepInvites","description":"Sweeps all guild invites and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which invites will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of invites that were removed from the caches"},"meta":{"line":113,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepGuildMembers","description":"Sweeps all guild members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client guild member cached","params":[{"name":"filter","description":"The function used to determine which guild members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of guild members that were removed from the caches"},"meta":{"line":123,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones which are indicated by the filter.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = sweepers.sweepMessages(\n Sweepers.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: m => m.editedTimestamp ?? m.createdTimestamp,\n })(),\n);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which messages will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches"},"meta":{"line":141,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepPresences","description":"Sweeps all presences and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which presences will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of presences that were removed from the caches"},"meta":{"line":163,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepReactions","description":"Sweeps all message reactions and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which reactions will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of reactions that were removed from the caches"},"meta":{"line":172,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStageInstances","description":"Sweeps all guild stage instances and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stage instances will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stage instances that were removed from the caches"},"meta":{"line":201,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStickers","description":"Sweeps all guild stickers and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stickers will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stickers that were removed from the caches"},"meta":{"line":210,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreadMembers","description":"Sweeps all thread members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client thread member cached","params":[{"name":"filter","description":"The function used to determine which thread members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of thread members that were removed from the caches"},"meta":{"line":220,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreads","description":"Sweeps all threads and removes the ones which are indicated by the filter.","examples":["// Remove all threads archived greater than 1 day ago from all the channel caches\nconst amount = sweepers.sweepThreads(\n Sweepers.filterByLifetime({\n getComparisonTimestamp: t => t.archivedTimestamp,\n excludeFromSweep: t => !t.archived,\n })(),\n);\nconsole.log(`Successfully removed ${amount} threads from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which threads will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"filter Amount of threads that were removed from the caches"},"meta":{"line":250,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepUsers","description":"Sweeps all users and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which users will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of users that were removed from the caches"},"meta":{"line":272,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepVoiceStates","description":"Sweeps all guild voice states and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which voice states will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of voice states that were removed from the caches"},"meta":{"line":289,"file":"Sweepers.js","path":"src/util"}},{"name":"destroy","description":"Cancels all sweeping intervals","returns":[[["void"]]],"meta":{"line":297,"file":"Sweepers.js","path":"src/util"}},{"name":"_sweepGuildDirectProp","description":"Sweep a direct sub property of all guilds","access":"private","params":[{"name":"key","description":"The name of the property","type":[[["string"]]]},{"name":"filter","description":"Filter function passed to sweep","type":[[["function"]]]},{"name":"eventOptions","description":"Options for the Client event emitted here","optional":true,"default":"{}","type":[[["SweepEventOptions"]]]}],"returns":{"types":[[["Object"]]],"description":"Object containing the number of guilds swept and the number of items swept"},"meta":{"line":401,"file":"Sweepers.js","path":"src/util"}},{"name":"_validateProperties","description":"Validates a set of properties","access":"private","params":[{"name":"key","description":"Key of the options object to check","type":[[["string"]]]}],"meta":{"line":428,"file":"Sweepers.js","path":"src/util"}},{"name":"_initInterval","description":"Initialize an interval for sweeping","access":"private","params":[{"name":"intervalKey","description":"The name of the property that stores the interval for this sweeper","type":[[["string"]]]},{"name":"sweepKey","description":"The name of the function that sweeps the desired caches","type":[[["string"]]]},{"name":"opts","description":"Validated options for a sweep","type":[[["Object"]]]}],"meta":{"line":455,"file":"Sweepers.js","path":"src/util"}},{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":319,"file":"Sweepers.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":353,"file":"Sweepers.js","path":"src/util"}},{"name":"expiredInviteSweepFilter","description":"Creates a sweep filter that sweeps expired invites","scope":"static","params":[{"name":"lifetime","description":"How long ago an invite has to have expired to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":366,"file":"Sweepers.js","path":"src/util"}},{"name":"outdatedMessageSweepFilter","description":"Creates a sweep filter that sweeps outdated messages (edits taken into account)","scope":"static","params":[{"name":"lifetime","description":"How long ago a message has to have been sent or edited to be valid for sweeping","optional":true,"default":3600,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":378,"file":"Sweepers.js","path":"src/util"}}],"meta":{"line":17,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlags","description":"Data structure that makes it easy to interact with a {@link Guild#systemChannelFlags} bitfield.\nNote that all event message types are enabled by default,\nand by setting their corresponding flags you are disabling them","extends":[[["BitField"]]],"construct":{"name":"SystemChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["SystemChannelFlagsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":20,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric system channel flags. All available properties:\n* `SUPPRESS_JOIN_NOTIFICATIONS` (Suppress member join notifications)\n* `SUPPRESS_PREMIUM_SUBSCRIPTIONS` (Suppress server boost notifications)\n* `SUPPRESS_GUILD_REMINDER_NOTIFICATIONS` (Suppress server setup tips)\n* `SUPPRESS_JOIN_NOTIFICATION_REPLIES` (Hide member join sticker reply buttons)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS` (Suppress role subscription purchase and renewal notifications)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES` (HHide role subscription sticker reply buttons)","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-system-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":46,"file":"SystemChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"ThreadMemberFlags","description":"Data structure that makes it easy to interact with a {@link ThreadMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ThreadMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric thread member flags. There are currently no bitflags relevant to bots for this.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":28,"file":"ThreadMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"UserFlags","description":"Data structure that makes it easy to interact with a {@link User#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"UserFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":17,"file":"UserFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric user flags. All available properties:\n* `DISCORD_EMPLOYEE`\n* `PARTNERED_SERVER_OWNER`\n* `HYPESQUAD_EVENTS`\n* `BUGHUNTER_LEVEL_1`\n* `MFA_SMS`\n* `PREMIUM_PROMO_DISMISSED`\n* `HOUSE_BRAVERY`\n* `HOUSE_BRILLIANCE`\n* `HOUSE_BALANCE`\n* `EARLY_SUPPORTER`\n* `TEAM_USER`\n* `INTERNAL_APPLICATION`\n* `SYSTEM`\n* `HAS_UNREAD_URGENT_MESSAGES`\n* `BUGHUNTER_LEVEL_2`\n* `UNDERAGE_DELETED`\n* `VERIFIED_BOT`\n* `EARLY_VERIFIED_BOT_DEVELOPER`\n* `DISCORD_CERTIFIED_MODERATOR`\n* `BOT_HTTP_INTERACTIONS`\n* `SPAMMER`\n* `DISABLE_PREMIUM`\n* `ACTIVE_DEVELOPER`\n* `HIGH_GLOBAL_RATE_LIMIT`\n* `DELETED`\n* `DISABLED_SUSPICIOUS_ACTIVITY`\n* `SELF_DELETED`\n* `PREMIUM_DISCRIMINATOR`\n* `USED_DESKTOP_CLIENT`\n* `USED_WEB_CLIENT`\n* `USED_MOBILE_CLIENT`\n* `DISABLED`\n* `VERIFIED_EMAIL`\n* `QUARANTINED`\n* `COLLABORATOR`\n* `RESTRICTED_COLLABORATOR`","see":["{@link https://discord.com/developers/docs/resources/user#user-object-user-flags}","{@link https://github.com/LewisTehMinerz/discord-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":65,"file":"UserFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"UserFlags.js","path":"src/util"}},{"name":"Util","description":"Contains various general-purpose utility methods.","methods":[{"name":"flatten","description":"Flatten an object. Any properties that are collections will get converted to an array of keys.","scope":"static","params":[{"name":"obj","description":"The object to flatten.","type":[[["Object"]]]},{"name":"props","description":"Specific properties to include/exclude.","optional":true,"variable":true,"type":[[["Object","<"],["string",", ("],["boolean","|"],["string",")>"]]]}],"returns":[[["Object"]]],"meta":{"line":86,"file":"Util.js","path":"src/util"}},{"name":"splitMessage","description":"Splits a string into multiple chunks at a designated character that do not exceed a specific length.","scope":"static","deprecated":"This will be removed in the next major version.","params":[{"name":"text","description":"Content to split","type":[[["string"]]]},{"name":"options","description":"Options controlling the behavior of the split","optional":true,"type":[[["SplitOptions"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":142,"file":"Util.js","path":"src/util"}},{"name":"escapeMarkdown","description":"Escapes any Discord-flavour markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]},{"name":"options","description":"Options for escaping the markdown","optional":true,"default":"{}","type":[[["EscapeMarkdownOptions"]]]}],"returns":[[["string"]]],"meta":{"line":205,"file":"Util.js","path":"src/util"}},{"name":"escapeCodeBlock","description":"Escapes code block markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":287,"file":"Util.js","path":"src/util"}},{"name":"escapeInlineCode","description":"Escapes inline code markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":296,"file":"Util.js","path":"src/util"}},{"name":"escapeItalic","description":"Escapes italic markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":305,"file":"Util.js","path":"src/util"}},{"name":"escapeBold","description":"Escapes bold markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":323,"file":"Util.js","path":"src/util"}},{"name":"escapeUnderline","description":"Escapes underline markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":336,"file":"Util.js","path":"src/util"}},{"name":"escapeStrikethrough","description":"Escapes strikethrough markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":349,"file":"Util.js","path":"src/util"}},{"name":"escapeSpoiler","description":"Escapes spoiler markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":358,"file":"Util.js","path":"src/util"}},{"name":"escapeEscape","description":"Escapes escape characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":367,"file":"Util.js","path":"src/util"}},{"name":"escapeHeading","description":"Escapes heading characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":376,"file":"Util.js","path":"src/util"}},{"name":"escapeBulletedList","description":"Escapes bulleted list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":385,"file":"Util.js","path":"src/util"}},{"name":"escapeNumberedList","description":"Escapes numbered list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":394,"file":"Util.js","path":"src/util"}},{"name":"escapeMaskedLink","description":"Escapes masked link characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":403,"file":"Util.js","path":"src/util"}},{"name":"parseEmoji","description":"Parses emoji info out of a string. The string must be one of:\n* A UTF-8 emoji (no id)\n* A URL-encoded UTF-8 emoji (no id)\n* A Discord custom emoji (`<:name:id>` or ``)","scope":"static","access":"private","params":[{"name":"text","description":"Emoji string to parse","type":[[["string"]]]}],"returns":{"types":[[["APIEmoji"]]],"description":"Object with `animated`, `name`, and `id` properties"},"meta":{"line":426,"file":"Util.js","path":"src/util"}},{"name":"resolvePartialEmoji","description":"Resolves a partial emoji object from an {@link EmojiIdentifierResolvable}, without checking a Client.","scope":"static","access":"private","params":[{"name":"emoji","description":"Emoji identifier to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["RawEmoji"]]],"nullable":true},"meta":{"line":439,"file":"Util.js","path":"src/util"}},{"name":"cloneObject","description":"Shallow-copies an object with its class/prototype intact.","scope":"static","access":"private","params":[{"name":"obj","description":"Object to clone","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":453,"file":"Util.js","path":"src/util"}},{"name":"mergeDefault","description":"Sets default properties on an object that aren't already specified.","scope":"static","access":"private","params":[{"name":"def","description":"Default properties","type":[[["Object"]]]},{"name":"given","description":"Object to assign defaults to","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":464,"file":"Util.js","path":"src/util"}},{"name":"makeError","description":"Makes an Error from a plain info object.","scope":"static","access":"private","params":[{"name":"obj","description":"Error info","type":[[["MakeErrorOptions"]]]}],"returns":[[["Error"]]],"meta":{"line":491,"file":"Util.js","path":"src/util"}},{"name":"makePlainError","description":"Makes a plain error info object from an Error.","scope":"static","access":"private","params":[{"name":"err","description":"Error to get info from","type":[[["Error"]]]}],"returns":[[["MakeErrorOptions"]]],"meta":{"line":504,"file":"Util.js","path":"src/util"}},{"name":"moveElementInArray","description":"Moves an element in an array *in place*.","scope":"static","access":"private","params":[{"name":"array","description":"Array to modify","type":[[["Array","<"],["*",">"]]]},{"name":"element","description":"Element to move","type":[["*"]]},{"name":"newIndex","description":"Index or offset to move the element to","type":[[["number"]]]},{"name":"offset","description":"Move the element by an offset amount rather than to a set index","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["number"]]],"meta":{"line":521,"file":"Util.js","path":"src/util"}},{"name":"verifyString","description":"Verifies the provided data is a string, otherwise throws provided error.","scope":"static","params":[{"name":"data","description":"The string resolvable to resolve","type":[[["string"]]]},{"name":"error","description":"The Error constructor to instantiate. Defaults to Error","optional":true,"type":[[["function"]]]},{"name":"errorMessage","description":"The error message to throw with. Defaults to \"Expected string, got instead.\"","optional":true,"type":[[["string"]]]},{"name":"allowEmpty","description":"Whether an empty string should be allowed","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":539,"file":"Util.js","path":"src/util"}},{"name":"resolveColor","description":"Resolves a ColorResolvable into a color number.","scope":"static","params":[{"name":"color","description":"Color to resolve","type":[[["ColorResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"A color"},"meta":{"line":563,"file":"Util.js","path":"src/util"}},{"name":"discordSort","description":"Sorts by Discord's position and id.","scope":"static","params":[{"name":"collection","description":"Collection of objects to sort","type":[[["Collection"]]]}],"returns":[[["Collection"]]],"meta":{"line":583,"file":"Util.js","path":"src/util"}},{"name":"setPosition","description":"Sets the position of a Channel or Role.","scope":"static","access":"private","params":[{"name":"item","description":"Object to set the position of","type":[[["Channel"]],[["Role"]]]},{"name":"position","description":"New position for the object","type":[[["number"]]]},{"name":"relative","description":"Whether `position` is relative to its current position","type":[[["boolean"]]]},{"name":"sorted","description":"A collection of the objects sorted properly","type":[[["Collection","<"],["string",", ("],["Channel","|"],["Role",")>"]]]},{"name":"route","description":"Route to call PATCH on","type":[[["APIRouter"]]]},{"name":"reason","description":"Reason for the change","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Array","<"],["Channel",">|"],["Array","<"],["Role",">)>"]]],"description":"Updated item list, with `id` and `position` properties"},"meta":{"line":603,"file":"Util.js","path":"src/util"}},{"name":"basename","description":"Alternative to Node's `path.basename`, removing query string after the extension if it exists.","scope":"static","access":"private","params":[{"name":"path","description":"Path to get the basename of","type":[[["string"]]]},{"name":"ext","description":"File extension to remove","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["string"]]],"description":"Basename of the path"},"meta":{"line":618,"file":"Util.js","path":"src/util"}},{"name":"removeMentions","description":"Breaks user, role and everyone/here mentions by adding a zero width space after every @ character","scope":"static","deprecated":"Use {@link BaseMessageOptions#allowedMentions} instead.","params":[{"name":"str","description":"The string to sanitize","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":629,"file":"Util.js","path":"src/util"}},{"name":"cleanContent","description":"The content to have all mentions replaced by the equivalent text.\nWhen {@link Util.removeMentions} is removed, this method will no longer sanitize mentions.\nUse {@link BaseMessageOptions#allowedMentions} instead to prevent mentions when sending a message.","scope":"static","params":[{"name":"str","description":"The string to be converted","type":[[["string"]]]},{"name":"channel","description":"The channel the string was sent in","type":[[["TextBasedChannels"]]]}],"returns":[[["string"]]],"meta":{"line":654,"file":"Util.js","path":"src/util"}},{"name":"cleanCodeBlockContent","description":"The content to put in a code block with all code block fences replaced by the equivalent backticks.","scope":"static","params":[{"name":"text","description":"The string to be converted","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":688,"file":"Util.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","deprecated":"When not using with `makeCache` use `Sweepers.archivedThreadSweepFilter` instead","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":698,"file":"Util.js","path":"src/util"}},{"name":"resolveAutoArchiveMaxLimit","description":"Resolves the maximum time a guild's thread channels should automatically archive in case of no recent activity.","scope":"static","deprecated":"This will be removed in the next major version.","params":[{"name":"guild","description":"The guild to resolve this limit from.","type":[[["Guild"]]]}],"returns":[[["number"]]],"meta":{"line":710,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildForumTag","description":"Transforms an API guild forum tag to camel-cased guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["APIGuildForumTag"]]]}],"returns":[[["GuildForumTag"]]],"meta":{"line":728,"file":"Util.js","path":"src/util"}},{"name":"transformGuildForumTag","description":"Transforms a camel-cased guild forum tag to an API guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["GuildForumTag"]]]}],"returns":[[["APIGuildForumTag"]]],"meta":{"line":749,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildDefaultReaction","description":"Transforms an API guild forum default reaction object to a\ncamel-cased guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["APIGuildForumDefaultReactionEmoji"]]]}],"returns":[[["DefaultReactionEmoji"]]],"meta":{"line":766,"file":"Util.js","path":"src/util"}},{"name":"transformGuildDefaultReaction","description":"Transforms a camel-cased guild forum default reaction object to an\nAPI guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["DefaultReactionEmoji"]]]}],"returns":[[["APIGuildForumDefaultReactionEmoji"]]],"meta":{"line":780,"file":"Util.js","path":"src/util"}},{"name":"transformGuildScheduledEventRecurrenceRule","description":"Transforms a guild scheduled event recurrence rule object to a snake-cased variant.","scope":"static","params":[{"name":"recurrenceRule","description":"The recurrence rule to transform","type":[[["GuildScheduledEventRecurrenceRuleOptions"]]]}],"returns":[[["APIGuildScheduledEventRecurrenceRule"]]],"meta":{"line":793,"file":"Util.js","path":"src/util"}},{"name":"transformAPIIncidentsData","description":"Transforms API incidents data to a camel-cased variant.","scope":"static","params":[{"name":"data","description":"The incidents data to transform","type":[[["APIIncidentsData"]]]}],"returns":[[["IncidentActions"]]],"meta":{"line":811,"file":"Util.js","path":"src/util"}},{"name":"getSortableGroupTypes","description":"Gets an array of the channel types that can be moved in the channel group. For example, a GuildText channel would\nreturn an array containing the types that can be ordered within the text channels (always at the top), and a voice\nchannel would return an array containing the types that can be ordered within the voice channels (always at the\nbottom).","scope":"static","params":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]]}],"returns":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":829,"file":"Util.js","path":"src/util"}},{"name":"calculateUserDefaultAvatarIndex","description":"Calculates the default avatar index for a given user id.","scope":"static","params":[{"name":"userId","description":"The user id to calculate the default avatar index for","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":850,"file":"Util.js","path":"src/util"}},{"name":"lazy","description":"Lazily evaluates a callback function (yea it's v14 :yay:)","scope":"static","examples":["const User = lazy(() => require('./User'));\nconst user = new (User())(client, data);"],"params":[{"name":"cb","description":"The callback to lazily evaluate","type":[[["function"]]]}],"returns":[[["function"]]],"meta":{"line":896,"file":"Util.js","path":"src/util"}},{"name":"verifyProxyAgent","description":"Hacking check object instanceof Proxy-agent","scope":"static","params":[{"name":"object","description":"any","type":[[["Object"]]]}],"returns":[[["boolean"]]],"meta":{"line":906,"file":"Util.js","path":"src/util"}},{"name":"getPayloadType","description":"Get the payload type of the codec","scope":"static","params":[{"name":"codecName","description":"Codec name","type":[[["opus","'"]],[["H264","'"]],[["H265","'"]],[["VP8","'"]],[["VP9","'"]],[["AV1","'"]]]}],"returns":[[["number"]]],"meta":{"line":996,"file":"Util.js","path":"src/util"}}],"meta":{"line":79,"file":"Util.js","path":"src/util"}}],"interfaces":[{"name":"InteractionResponses","description":"Interface for classes that support shared interaction response types.","methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}}],"meta":{"line":14,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"TextBasedChannel","description":"Interface for classes that have text-channel-like features.","props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":31,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":37,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":43,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":60,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"methods":[{"name":"send","description":"Sends a message to this channel.","examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":181,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","examples":["// Start typing in a channel\nchannel.sendTyping();"],"returns":{"types":[[["Promise","<({"],["message_send_cooldown_ms",": "],["number",", "],["thread_create_cooldown_ms",": "],["number","}|"],["void",")>"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":395,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":410,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":433,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":455,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":480,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":490,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":500,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"typedefs":[{"name":"ApplicationCommandPermissionsUpdateData","description":"The data received in the {@link Client#event:applicationCommandPermissionsUpdate} event","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the command or global entity that was updated","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild in which permissions were updated","type":[[["Snowflake"]]]},{"name":"applicationId","description":"The id of the application that owns the command or entity being updated","type":[[["Snowflake"]]]},{"name":"permissions","description":"The updated permissions","type":[[["Array","<"],["ApplicationCommandPermissions",">"]]]}],"meta":{"line":6,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"MessageReactionEventDetails","description":"Provides additional information about altered reaction","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the reaction","type":[[["ReactionType"]]]},{"name":"burst","description":"Determines whether a super reaction was used","type":[[["boolean"]]]}],"meta":{"line":49,"file":"MessageReactionAdd.js","path":"src/client/actions"}},{"name":"ClientFetchInviteOptions","description":"Options used when fetching an invite from Discord.","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event to include with\nthe invite","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":376,"file":"Client.js","path":"src/client"}},{"name":"InviteGenerationOptions","description":"Options for {@link Client#generateInvite}.","type":[[["Object"]]],"props":[{"name":"scopes","description":"Scopes that should be requested","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"Permissions to request","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"guild","description":"Guild to preselect","optional":true,"type":[[["GuildResolvable"]]]},{"name":"disableGuildSelect","description":"Whether to disable the guild selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":570,"file":"Client.js","path":"src/client"}},{"name":"AcceptInviteOptions","description":"Options for {@link Client#acceptInvite}.","type":[[["Object"]]],"props":[{"name":"bypassOnboarding","description":"Whether to bypass onboarding","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"bypassVerify","description":"Whether to bypass rule screening","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":603,"file":"Client.js","path":"src/client"}},{"name":"OAuth2AuthorizeOptions","type":[[["Object"]]],"props":[{"name":"guild_id","description":"Guild ID","optional":true,"type":[[["string"]]]},{"name":"permissions","description":"Permissions","optional":true,"type":[[["string"]]]},{"name":"authorize","description":"Whether to authorize or not","optional":true,"type":[[["boolean"]]]},{"name":"code","description":"2FA Code","optional":true,"type":[[["string"]]]},{"name":"webhook_channel_id","description":"Webhook Channel ID","optional":true,"type":[[["string"]]]}],"meta":{"line":720,"file":"Client.js","path":"src/client"}},{"name":"AuthorizedApplicationData","type":[[["Object"]]],"props":[{"name":"application","description":"The application object.","type":[[["Application"]]]},{"name":"authorizedApplicationId","description":"The ID of the OAuth2 token.","type":[[["Snowflake"]]]},{"name":"scopes","description":"The scopes that were granted to this token.","type":[[["Array","<"],["string",">"]]]},{"name":"deauthorize","description":"Function to revoke this token.","type":[[["function"]]]}],"meta":{"line":818,"file":"Client.js","path":"src/client"}},{"name":"JoinChannelConfig","type":[[["Object"]]],"props":[{"name":"selfMute","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"selfDeaf","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"selfVideo","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"videoCodec","optional":true,"default":"'H264'","type":[[["VideoCodec"]]]}],"meta":{"line":88,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"ReceiveStreamOptions","description":"Options passed to `VoiceReceiver#createStream`.","type":[[["Object"]]],"props":[{"name":"mode","description":"The mode for audio output. This defaults to opus, meaning discord.js won't decode\nthe packets for you. You can set this to 'pcm' so that the stream's output will be 16-bit little-endian stereo\naudio","optional":true,"default":"'opus'","type":[[["string"]]]},{"name":"end","description":"When the stream should be destroyed. If `silence`, this will be when the user\nstops talking. Otherwise, if `manual`, this should be handled by you.","optional":true,"default":"'silence'","type":[[["string"]]]},{"name":"paddingSilence","description":"Whether to add silence padding\nIf 'end' is set to 'silence', this property automatically defaults to `false`","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":29,"file":"Receiver.js","path":"src/client/voice/receiver"}},{"name":"InterfaceAddresses","type":[[["Object"]]],"props":[{"name":"udp4","description":"IPv4 address","optional":true,"type":[[["string"]]]},{"name":"udp6","description":"IPv6 address","optional":true,"type":[[["string"]]]}],"meta":{"line":6,"file":"Function.js","path":"src/client/voice/util"}},{"name":"StreamOptions","description":"Options that can be passed to stream-playing methods:","type":[[["Object"]]],"props":[{"name":"type","description":"The type of stream.","optional":true,"default":"'unknown'","type":[[["StreamType"]]]},{"name":"seek","description":"The time to seek to, will be ignored when playing `ogg/opus` or `webm/opus` streams","optional":true,"default":0,"type":[[["number"]]]},{"name":"volume","description":"The volume to play at. Set this to false to disable volume transforms for\nthis stream to improve performance.","optional":true,"default":1,"type":[[["number"]],[["boolean"]]]},{"name":"plp","description":"Expected packet loss percentage","optional":true,"type":[[["number"]]]},{"name":"fec","description":"Enabled forward error correction","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate (quality) of the audio in kbps.\nIf set to 'auto', the voice channel's bitrate will be used","optional":true,"default":96,"type":[[["number"]],[["string"]]]},{"name":"highWaterMark","description":"The maximum number of opus packets to make and store before they are\nactually needed. See https://nodejs.org/en/docs/guides/backpressuring-in-streams/. Setting this value to\n1 means that changes in volume will be more instant.","optional":true,"default":12,"type":[[["number"]]]}],"meta":{"line":7,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"StreamType","description":"An option passed as part of `StreamOptions` specifying the type of the stream.\n* `unknown`: The default type, streams/input will be passed through to ffmpeg before encoding.\nWill play most streams.\n* `converted`: Play a stream of 16bit signed stereo PCM data, skipping ffmpeg.\n* `opus`: Play a stream of opus packets, skipping ffmpeg. You lose the ability to alter volume.\n* `ogg/opus`: Play an ogg file with the opus encoding, skipping ffmpeg. You lose the ability to alter volume.\n* `webm/opus`: Play a webm file with opus audio, skipping ffmpeg. You lose the ability to alter volume.","type":[[["string"]]],"meta":{"line":23,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"VideoOptions","description":"Options that can be passed to stream-playing methods:","type":[[["Object"]]],"props":[{"name":"seek","description":"The time to seek to","optional":true,"default":0,"type":[[["number"]]]},{"name":"fps","description":"Video fps","optional":true,"type":[[["number"]]]},{"name":"highWaterMark","description":"The maximum number of opus packets to make and store before they are\nactually needed. See https://nodejs.org/en/docs/guides/backpressuring-in-streams/. Setting this value to\n1 means that changes in volume will be more instant.","optional":true,"default":12,"type":[[["number"]]]},{"name":"presetH26x","description":"ffmpeg preset h264","optional":true,"default":"'veryfast'","type":[[["ultrafast","'"]],[["superfast","'"]],[["veryfast","'"]],[["faster","'"]],[["fast","'"]],[["medium","'"]],[["slow","'"]],[["slower","'"]],[["veryslow","'"]]]},{"name":"hwAccel","description":"Enables hardware accelerated video decoding. Enabling this option might result in an exception\nbeing thrown by Ffmpeg process if your system does not support hardware acceleration","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"inputFFmpegArgs","description":"input ffmpeg\nEx: ['-config1', 'value1', '-config2', 'value2']","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"outputFFmpegArgs","description":"output ffmpeg\nEx: ['-config1', 'value1', '-config2', 'value2']","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"bitrate","description":"The bitrate (quality) of the video in kbps.\nIf set to 'auto', ffmpeg will automatically select","optional":true,"default":2000,"type":[[["number"]],[["auto","'"]]]}],"meta":{"line":77,"file":"PlayInterface.js","path":"src/client/voice/util"}},{"name":"VideoCodec","description":"Video codec\n* `VP8`\n* `VP9` (Not supported for encoding & decoding)\n* `H264`\n* `H265` (Not supported for encoding & decoding)\n* `AV1` (Not supported for encoding & decoding)","type":[[["string"]]],"meta":{"line":142,"file":"VoiceConnection.js","path":"src/client/voice"}},{"name":"WebhookClientData","description":"The data for the webhook client containing either an id and token or just a URL","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the webhook","optional":true,"type":[[["Snowflake"]]]},{"name":"token","description":"The token of the webhook","optional":true,"type":[[["string"]]]},{"name":"url","description":"The full URL for the webhook client","optional":true,"type":[[["string"]]]}],"meta":{"line":13,"file":"WebhookClient.js","path":"src/client"}},{"name":"GuildMembersChunk","description":"Represents the properties of a guild members chunk","type":[[["Object"]]],"props":[{"name":"index","description":"Index of the received chunk","type":[[["number"]]]},{"name":"count","description":"Number of chunks the client should receive","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this chunk","nullable":true,"type":[[["string"]]]},{"name":"notFound","description":"An array of whatever could not be found\nwhen using {@link Opcodes.REQUEST_GUILD_MEMBERS}","type":[[["Array","<"],["*",">"]]]}],"meta":{"line":16,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"RelationshipUpdateObject","type":[[["Object"]]],"props":[{"name":"type","description":"The type of relationship","type":[[["RelationshipType"]]]},{"name":"since","description":"When the user requested a relationship","type":[[["Date"]]]},{"name":"nickname","description":"The nickname of the user in this relationship (1-32 characters)","type":[[["string"]],[["null"]]]}],"meta":{"line":6,"file":"RELATIONSHIP_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"ApplicationCommandResolvable","description":"Data that resolves to give an ApplicationCommand object. This can be:\n* An ApplicationCommand object\n* A Snowflake","type":[[["ApplicationCommand"]],[["Snowflake"]]],"meta":{"line":51,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandDataResolvable","description":"Data that resolves to the data of an ApplicationCommand","type":[[["ApplicationCommandData"]],[["APIApplicationCommand"]],[["SlashCommandBuilder"]],[["ContextMenuCommandBuilder"]]],"meta":{"line":59,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"BaseFetchOptions","description":"Options used to fetch data from Discord","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched data if it wasn't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":65,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"FetchApplicationCommandOptions","description":"Options used to fetch Application Commands from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildId","description":"The guild's id to fetch commands for, for when the guild is not cached","optional":true,"type":[[["Snowflake"]]]},{"name":"locale","description":"The locale to use when fetching this command","optional":true,"type":[[["LocaleString"]]]},{"name":"withLocalizations","description":"Whether to fetch all localization data","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionData","description":"Data for setting the permissions of an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]],[["number"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":53,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissions","description":"The object returned when fetching permissions for an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":61,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"BaseApplicationCommandPermissionsOptions","description":"Options for managing permissions for one or more Application Commands\nWhen passing these options to a manager where `guildId` is `null`,\n`guild` is a required parameter","type":[[["Object"]]],"props":[{"name":"guild","description":"The guild to modify / check permissions for\nIgnored when the manager has a non-null `guildId` property","optional":true,"type":[[["GuildResolvable"]]]},{"name":"command","description":"The command to modify / check permissions for\nIgnored when the manager has a non-null `commandId` property","optional":true,"type":[[["ApplicationCommandResolvable"]]]}],"meta":{"line":69,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandPermissionData","description":"Data used for overwriting the permissions for all application commands in a guild.","type":[[["Object"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for this command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":113,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"SetApplicationCommandPermissionsOptions","description":"Options used to set permissions for one or more Application Commands in a guild\nOne of `command` AND `permissions`, OR `fullPermissions` is required.\n`fullPermissions` is not a valid option when passing to a manager where `commandId` is non-null","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The new permissions for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]},{"name":"fullPermissions","description":"The new permissions for all commands\nin a guild When this parameter is set, `permissions` and `command` are ignored","optional":true,"type":[[["Array","<"],["GuildApplicationCommandPermissionData",">"]]]}],"meta":{"line":120,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AddApplicationCommandPermissionsOptions","description":"Options used to add permissions to a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The permissions to add to the command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":199,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"RemoveApplicationCommandPermissionsOptions","description":"Options used to remove permissions from a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"users","description":"The user(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"roles","description":"The role(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":246,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"HasApplicationCommandPermissionsOptions","description":"Options used to check the existence of permissions on a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissionId","description":"The user or role to check if a permission exists for\non this command.","type":[[["UserResolvable"]],[["RoleResolvable"]]]}],"meta":{"line":330,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationTriggerMetadataOptions","description":"Options used to set the trigger metadata of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","optional":true,"type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","optional":true,"nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether to automatically detect mention raids","optional":true,"type":[[["boolean"]]]}],"meta":{"line":50,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionOptions","description":"Options used to set the actions of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution\nThis property is required if using a `type` of\n{@link AutoModerationActionType.SEND_ALERT_MESSAGE} or {@link AutoModerationActionType.TIMEOUT}.","optional":true,"type":[[["AutoModerationActionMetadataOptions"]]]}],"meta":{"line":64,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionMetadataOptions","description":"Options used to set the metadata of an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"channel","description":"The channel to which content will be logged","optional":true,"type":[[["GuildTextChannelResolvable"]],[["ThreadChannel"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","optional":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","optional":true,"type":[[["string"]]]}],"meta":{"line":73,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleCreateOptions","description":"Options used to create an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerType","description":"The trigger type of the auto moderation rule","type":[[["AutoModerationRuleTriggerType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule\nThis property is required if the following `triggerType`s are used:\n* {@link AutoModerationRuleTriggerType.KEYWORD KEYWORD}\n* {@link AutoModerationRuleTriggerType.KEYWORD_PRESET KEYWORD_PRESET}\n* {@link AutoModerationRuleTriggerType.MENTION_SPAM MENTION_SPAM}\n","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":81,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleEditOptions","description":"Options used to edit an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","optional":true,"type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","optional":true,"type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","optional":true,"type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":152,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleResolvable","description":"Data that can be resolved to give an AutoModerationRule object. This can be:\n* An AutoModerationRule\n* A Snowflake","type":[[["AutoModerationRule"]],[["Snowflake"]]],"meta":{"line":215,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRuleOptions","description":"Options used to fetch a single auto moderation rule from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"autoModerationRule","description":"The auto moderation rule to fetch","type":[[["AutoModerationRuleResolvable"]]]}],"meta":{"line":222,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRulesOptions","description":"Options used to fetch all auto moderation rules from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched auto moderation rules","optional":true,"type":[[["boolean"]]]}],"meta":{"line":228,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"EmojiResolvable","description":"Data that can be resolved into a GuildEmoji object. This can be:\n* A Snowflake\n* A GuildEmoji object\n* A ReactionEmoji object","type":[[["Snowflake"]],[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":23,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"EmojiIdentifierResolvable","description":"Data that can be resolved to give an emoji identifier. This can be:\n* An EmojiResolvable\n* The ``, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji\n* The Unicode representation of an emoji","type":[[["string"]],[["EmojiResolvable"]]],"meta":{"line":51,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"ChannelResolvable","description":"Data that can be resolved to give a Channel object. This can be:\n* A Channel object\n* A Snowflake","type":[[["Channel"]],[["Snowflake"]]],"meta":{"line":75,"file":"ChannelManager.js","path":"src/managers"}},{"name":"FetchChannelOptions","description":"Options for fetching a channel from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"allowUnknownGuild","description":"Allows the channel to be returned even if the guild is not in cache,\nit will not be cached. Many of the properties and methods on the returned channel will throw errors","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":100,"file":"ChannelManager.js","path":"src/managers"}},{"name":"CustomStatusOption","description":"CustomStatus Object","type":[[["Object"]]],"props":[{"name":"text","description":"Text to set","type":[[["string"]],[["null"]]]},{"name":"status","description":"The status to set: 'online', 'idle', 'dnd', 'invisible' or null.","type":[[["string"]],[["null"]]]},{"name":"emoji","description":"UnicodeEmoji, DiscordEmoji, or null.","type":[[["EmojiResolvable"]],[["null"]]]},{"name":"expires","description":"The number of seconds until the status expires, or null.","type":[[["number"]],[["null"]]]}],"meta":{"line":264,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"GuildBanResolvable","description":"Data that resolves to give a GuildBan object. This can be:\n* A GuildBan object\n* A User resolvable","type":[[["GuildBan"]],[["UserResolvable"]]],"meta":{"line":37,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBanOptions","description":"Options used to fetch a single ban from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The ban to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":53,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBansOptions","description":"Options used to fetch multiple bans from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum number of bans to return","optional":true,"type":[[["number"]]]},{"name":"before","description":"Consider only bans before this id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only bans after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"cache","description":"Whether to cache the fetched bans","optional":true,"type":[[["boolean"]]]}],"meta":{"line":59,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"BanOptions","description":"Options used to ban a user from a guild.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of messages to delete, must be between 0 and 7, inclusive\nThis property is deprecated. Use `deleteMessageSeconds` instead.","optional":true,"default":0,"type":[[["number"]]]},{"name":"deleteMessageSeconds","description":"Number of seconds of messages to delete,\nmust be between 0 and 604800 (7 days), inclusive","optional":true,"type":[[["number"]]]},{"name":"reason","description":"The reason for the ban","optional":true,"type":[[["string"]]]}],"meta":{"line":128,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"BulkBanOptions","description":"Options used for bulk banning users from a guild.","type":[[["Object"]]],"props":[{"name":"deleteMessageSeconds","description":"Number of seconds of messages to delete,\nmust be between 0 and 604800 (7 days), inclusive","optional":true,"type":[[["number"]]]},{"name":"reason","description":"The reason for the bans","optional":true,"type":[[["string"]]]}],"meta":{"line":203,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"BulkBanResult","description":"Result of bulk banning users from a guild.","type":[[["Object"]]],"props":[{"name":"bannedUsers","description":"IDs of the banned users","type":[[["Array","<"],["Snowflake",">"]]]},{"name":"failedUsers","description":"IDs of the users that could not be banned or were already banned","type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":211,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelResolvable","description":"Data that can be resolved to give a Guild Channel object. This can be:\n* A GuildChannel object\n* A ThreadChannel object\n* A Snowflake","type":[[["GuildChannel"]],[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":78,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildChannelCreateOptions","description":"Options used to create a new channel in a guild.","type":[[["CategoryCreateChannelOptions"]]],"props":[{"name":"parent","description":"Parent of the new channel","optional":true,"type":[[["CategoryChannelResolvable"]]]}],"meta":{"line":106,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"ChannelData","description":"The data for a guild channel.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the channel (only conversion between text and news is supported)","optional":true,"type":[[["ChannelType"]]]},{"name":"position","description":"The position of the channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the voice channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"The parent of the channel","optional":true,"nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"Lock the permissions of the channel to what the parent's permissions are","optional":true,"type":[[["boolean"]]]},{"name":"permissionOverwrites","description":"Permission overwrites for the channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]}],"meta":{"line":250,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"CategoryChannelResolvable","description":"Data that can be resolved to give a Category Channel object. This can be:\n* A CategoryChannel object\n* A Snowflake","type":[[["CategoryChannel"]],[["Snowflake"]]],"meta":{"line":1307,"file":"Guild.js","path":"src/structures"}},{"name":"ChannelPosition","description":"The data needed for updating a channel's position.","type":[[["Object"]]],"props":[{"name":"channel","description":"Channel to update","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"position","description":"New position for the channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"Parent channel for this channel","optional":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"If the overwrites should be locked to the parents overwrites","optional":true,"type":[[["boolean"]]]}],"meta":{"line":1314,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEmojiCreateOptions","description":"Options used for creating an emoji in a guild.","type":[[["Object"]]],"props":[{"name":"roles","description":"The roles to limit the emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for creating the emoji","optional":true,"type":[[["string"]]]}],"meta":{"line":28,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildForumThreadMessageCreateOptions","type":[[["BaseMessageOptions"]]],"props":[{"name":"stickers","description":"The stickers to send with the message","optional":true,"type":[[["StickerResolvable"]]]},{"name":"flags","description":"The flags to send with the message.\nOnly `SUPPRESS_EMBEDS` and `SUPPRESS_NOTIFICATIONS` can be set.","optional":true,"type":[[["BitFieldResolvable"]]]}],"meta":{"line":19,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildForumThreadCreateOptions","description":"Options for creating a thread.","type":[[["StartThreadOptions"]]],"props":[{"name":"message","description":"The message associated with the thread post","type":[[["GuildForumThreadMessageCreateOptions"]],[["MessagePayload"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":26,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"InviteResolvable","description":"Data that can be resolved to give an invite code. This can be:\n* An invite code\n* An invite URL","type":[[["string"]]],"meta":{"line":16,"file":"DataResolver.js","path":"src/util"}},{"name":"GuildInvitableChannelResolvable","description":"Data that can be resolved to a channel that an invite can be created on. This can be:\n* TextChannel\n* VoiceChannel\n* NewsChannel\n* StoreChannel\n* StageChannel\n* Snowflake","type":[[["TextChannel"]],[["VoiceChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":41,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInviteOptions","description":"Options used to fetch a single invite from a guild.","type":[[["Object"]]],"props":[{"name":"code","description":"The invite to fetch","type":[[["InviteResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invite","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":71,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInvitesOptions","description":"Options used to fetch all invites from a guild.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel to fetch all invites from","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":79,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildResolvable","description":"Data that resolves to give a Guild object. This can be:\n* A Guild object\n* A GuildChannel object\n* A GuildEmoji object\n* A Role object\n* A Snowflake\n* An Invite object","type":[[["Guild"]],[["GuildChannel"]],[["GuildMember"]],[["GuildEmoji"]],[["Role"]],[["Snowflake"]],[["Invite"]]],"meta":{"line":53,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialRoleData","description":"Partial data for a Role.","type":[[["Object"]]],"props":[{"name":"id","description":"The role's id, used to set channel overrides,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]}],"meta":{"line":64,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialOverwriteData","description":"Partial overwrite data.","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of this overwrite","optional":true,"type":[[["OverwriteType"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]}],"meta":{"line":77,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialChannelData","description":"Partial data for a Channel.","type":[[["Object"]]],"props":[{"name":"id","description":"The channel's id, used to set its parent,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"parentId","description":"The parent id for this channel","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of the channel","optional":true,"type":[[["ChannelType"]],[["number"]]]},{"name":"name","description":"The name of the channel","type":[[["string"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the channel","optional":true,"type":[[["number"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"permissionOverwrites","description":"Overwrites of the channel","optional":true,"type":[[["Array","<"],["PartialOverwriteData",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) of the channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":86,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildCreateOptions","description":"Options used to create a guild.","type":[[["Object"]]],"props":[{"name":"afkChannelId","description":"The AFK channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"afkTimeout","description":"The AFK timeout in seconds","optional":true,"type":[[["number"]]]},{"name":"channels","description":"The channels for this guild","optional":true,"default":"[]","type":[[["Array","<"],["PartialChannelData",">"]]]},{"name":"defaultMessageNotifications","description":"The default message notifications\nfor the guild","optional":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The explicit content filter level for the guild","optional":true,"type":[[["ExplicitContentFilterLevel"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"default":null,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"roles","description":"The roles for this guild,\nthe first element of this array is used to change properties of the guild's everyone role.","optional":true,"default":"[]","type":[[["Array","<"],["PartialRoleData",">"]]]},{"name":"systemChannelId","description":"The system channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"systemChannelFlags","description":"The flags of the system channel","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"verificationLevel","description":"The verification level for the guild","optional":true,"type":[[["VerificationLevel"]]]}],"meta":{"line":147,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildOptions","description":"Options used to fetch a single guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guild","description":"The guild to fetch","type":[[["GuildResolvable"]]]},{"name":"withCounts","description":"Whether the approximate member and presence counts should be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":267,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildsOptions","description":"Options used to fetch multiple guilds.","type":[[["Object"]]],"props":[{"name":"before","description":"Get guilds before this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Get guilds after this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of guilds to request (1-200)","optional":true,"default":200,"type":[[["number"]]]}],"meta":{"line":274,"file":"GuildManager.js","path":"src/managers"}},{"name":"IncidentActionsEditOptions","description":"Options used to set incident actions. Supplying `null` to any option will disable the action.","type":[[["Object"]]],"props":[{"name":"invitesDisabledUntil","description":"When invites should be enabled again","optional":true,"nullable":true,"type":[[["DateResolvable"]]]},{"name":"dmsDisabledUntil","description":"When direct messages should be enabled again","optional":true,"nullable":true,"type":[[["DateResolvable"]]]}],"meta":{"line":304,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberResolvable","description":"Data that resolves to give a GuildMember object. This can be:\n* A GuildMember object\n* A User resolvable","type":[[["GuildMember"]],[["UserResolvable"]]],"meta":{"line":43,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"AddGuildMemberOptions","description":"Options used to add a user to a guild using OAuth2.","type":[[["Object"]]],"props":[{"name":"accessToken","description":"An OAuth2 access token for the user with the `guilds.join` scope granted to the\nbot's application","type":[[["string"]]]},{"name":"nick","description":"The nickname to give to the member (requires `MANAGE_NICKNAMES`)","optional":true,"type":[[["string"]]]},{"name":"roles","description":"The roles to add to the member\n(requires `MANAGE_ROLES`)","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether the member should be muted (requires `MUTE_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether the member should be deafened (requires `DEAFEN_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and call the API directly","optional":true,"type":[[["boolean"]]]},{"name":"fetchWhenExisting","description":"Whether to fetch the user if not cached and already a member","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":75,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMemberOptions","description":"Options used to fetch a single member from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":139,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMembersOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"user","description":"The user(s) to fetch","type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"query","description":"Limit fetch to members with similar usernames","nullable":true,"type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to request","optional":true,"default":0,"type":[[["number"]]]},{"name":"withPresences","description":"Whether or not to include the presences","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"120e3","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this request (32 characters max - default to base 16 now timestamp)","nullable":true,"type":[[["string"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":145,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildSearchMembersOptions","description":"Options used for searching guild members.","type":[[["Object"]]],"props":[{"name":"query","description":"Filter members whose username or nickname start with this query","type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to search","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":229,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberEditData","description":"The data for editing a guild member.","type":[[["Object"]]],"props":[{"name":"nick","description":"The nickname to set for the member","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"roles","description":"The roles or role ids to apply","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether or not the member should be muted","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"type":[[["boolean"]]]},{"name":"channel","description":"Channel to move the member to\n(if they are connected to voice), or `null` if you want to disconnect them from voice","optional":true,"type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to enable communication again.","optional":true,"type":[[["DateResolvable"]],[["null"]]]},{"name":"flags","description":"The flags to set for the member","optional":true,"type":[[["GuildMemberFlagsResolvable"]]]},{"name":"avatar","description":"The new guild avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new guild banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new guild about me","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":247,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildPruneMembersOptions","description":"Options used for pruning guild members.\nIt's recommended to set {@link GuildPruneMembersOptions#count options.count}\nto `false` for large guilds.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of inactivity required to kick","optional":true,"default":7,"type":[[["number"]]]},{"name":"dry","description":"Get the number of users that will be kicked, without actually kicking them","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"count","description":"Whether or not to return the number of users that have been kicked.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"roles","description":"Array of roles to bypass the \"...and no roles\" constraint when pruning","optional":true,"type":[[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for this prune","optional":true,"type":[[["string"]]]}],"meta":{"line":322,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildScheduledEventResolvable","description":"Data that resolves to give a GuildScheduledEvent object. This can be:\n* A Snowflake\n* A GuildScheduledEvent object","type":[[["Snowflake"]],[["GuildScheduledEvent"]]],"meta":{"line":32,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventRecurrenceRuleOptions","description":"Options for setting a recurrence rule for a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"startAt","description":"The time the recurrence rule interval starts at","type":[[["DateResolvable"]]]},{"name":"frequency","description":"How often the event occurs","type":[[["GuildScheduledEventRecurrenceRuleFrequency"]]]},{"name":"interval","description":"The spacing between the events","type":[[["number"]]]},{"name":"byWeekday","description":"The days within a week to recur on","nullable":true,"type":[[["Array","<"],["GuildScheduledEventRecurrenceRuleWeekday",">"]]]},{"name":"byNWeekday","description":"The days within a week to recur on","nullable":true,"type":[[["Array","<"],["GuildScheduledEventRecurrenceRuleNWeekday",">"]]]},{"name":"byMonth","description":"The months to recur on","nullable":true,"type":[[["Array","<"],["GuildScheduledEventRecurrenceRuleMonth",">"]]]},{"name":"byMonthDay","description":"The days within a month to recur on","nullable":true,"type":[[["Array","<"],["number",">"]]]}],"meta":{"line":39,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventCreateOptions","description":"Options used to create a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event\nThis is required if `entityType` is 'STAGE_INSTANCE' or `VOICE`","optional":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for creating the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"recurrenceRule","description":"The recurrence rule of the guild scheduled event","optional":true,"type":[[["GuildScheduledEventRecurrenceRuleOptions"]]]}],"meta":{"line":51,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEntityMetadataOptions","description":"Options used to set entity metadata of a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["string"]]]}],"meta":{"line":72,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventOptions","description":"Options used to fetch a single guild scheduled event from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch","type":[[["GuildScheduledEventResolvable"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to the scheduled event","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":132,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventsOptions","description":"Options used to fetch multiple guild scheduled events from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether or not to cache the fetched guild scheduled events","optional":true,"type":[[["boolean"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to each scheduled event\nshould be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":139,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEditOptions","description":"Options used to edit a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","optional":true,"type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event","optional":true,"nullable":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"status","description":"The status of the guild scheduled event","optional":true,"type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis can be modified only if `entityType` of the `GuildScheduledEvent` to be edited is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for editing the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"recurrenceRule","description":"The recurrence rule of the guild scheduled event","optional":true,"nullable":true,"type":[[["GuildScheduledEventRecurrenceRuleOptions"]]]}],"meta":{"line":179,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventSubscribersOptions","description":"Options used to fetch subscribers of a guild scheduled event","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum numbers of users to fetch","optional":true,"type":[[["number"]]]},{"name":"withMember","description":"Whether to fetch guild member data of the users","optional":true,"type":[[["boolean"]]]},{"name":"before","description":"Consider only users before this user id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only users after this user id\nIf both `before` and `after` are provided, only `before` is respected","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":268,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventUser","description":"Represents a subscriber of a {@link GuildScheduledEvent}","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event which the user subscribed to","type":[[["Snowflake"]]]},{"name":"user","description":"The user that subscribed to the guild scheduled event","type":[[["User"]]]},{"name":"member","description":"The guild member associated with the user, if any","nullable":true,"type":[[["GuildMember"]]]}],"meta":{"line":278,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildStickerCreateOptions","description":"Options for creating a guild sticker.","type":[[["Object"]]],"props":[{"name":"description","description":"The description for the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for creating the sticker","optional":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"StickerResolvable","description":"Data that resolves to give a Sticker object. This can be:\n* A Sticker object\n* A Snowflake","type":[[["Sticker"]],[["Snowflake"]]],"meta":{"line":72,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadCreateOptions","description":"Options for creating a thread. Only one of `startMessage` or `type` can be defined.","type":[[["StartThreadOptions"]]],"props":[{"name":"startMessage","description":"The message to start a thread from. If this is defined then type\nof thread gets automatically defined and cannot be changed. The provided `type` field will be ignored","optional":true,"type":[[["MessageResolvable"]]]},{"name":"type","description":"The type of thread to create. Defaults to `GUILD_PUBLIC_THREAD` if\ncreated in a {@link TextChannel} When creating threads in a {@link NewsChannel} this is ignored and is always\n`GUILD_NEWS_THREAD`","optional":true,"type":[[["ThreadChannelTypes"]],[["number"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to the thread\nCan only be set when type will be `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":19,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"ChannelLogsQueryOptions","description":"The parameters to pass in when requesting previous messages from a channel. `around`, `before` and\n`after` are mutually exclusive. All the parameters are optional.","type":[[["Object"]]],"props":[{"name":"limit","description":"Number of messages to acquire","optional":true,"default":50,"type":[[["number"]]]},{"name":"before","description":"The message's id to get the messages that were posted before it","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"The message's id to get the messages that were posted after it","optional":true,"type":[[["Snowflake"]]]},{"name":"around","description":"The message's id to get the messages that were posted around it","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":35,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageResolvable","description":"Data that can be resolved to a Message object. This can be:\n* A Message\n* A Snowflake","type":[[["Message"]],[["Snowflake"]]],"meta":{"line":93,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchOptions","type":[[["object"]]],"props":[{"name":"authors","description":"An array of author to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"mentions","description":"An array of user (mentioned) to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"content","description":"A messageContent to filter by","optional":true,"type":[[["string"]]]},{"name":"maxId","description":"The maximum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"minId","description":"The minimum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"channels","description":"An array of channel to filter by","optional":true,"type":[[["Array","<"],["TextChannelResolvable",">"]]]},{"name":"pinned","description":"Whether to filter by pinned messages","optional":true,"type":[[["boolean"]]]},{"name":"has","description":"Message has: `link`, `embed`, `file`, `video`, `image`, or `sound`","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"nsfw","description":"Whether to filter by NSFW channels","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"offset","description":"The number of messages to skip (for pagination, 25 results per page)","optional":true,"default":0,"type":[[["number"]]]},{"name":"limit","description":"The number of messages to fetch\nThe maximum limit allowed is 25.","optional":true,"default":25,"type":[[["number"]]]},{"name":"sortBy","description":"The order to sort by (`timestamp` or `relevance`)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"The order to return results in (`asc` or `desc`)\nThe default sort is timestamp in descending order desc (newest first).","optional":true,"type":[[["string"]]]}],"meta":{"line":267,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchResult","type":[[["object"]]],"props":[{"name":"messages","description":"A collection of found messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]},{"name":"total","description":"The total number of messages that match the search criteria","type":[[["number"]]]}],"meta":{"line":286,"file":"MessageManager.js","path":"src/managers"}},{"name":"FetchPollAnswerVotersOptions","description":"Options used for fetching voters of an answer in a poll.","type":[[["BaseFetchPollAnswerVotersOptions"]]],"params":[{"name":"messageId","description":"The id of the message","type":[[["Snowflake"]]]},{"name":"answerId","description":"The id of the answer","type":[[["number"]]]}],"meta":{"line":402,"file":"MessageManager.js","path":"src/managers"}},{"name":"GuildChannelOverwriteOptions","description":"Extra information about the overwrite","type":[[["Object"]]],"props":[{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of overwrite, either `0` for a role or `1` for a member. Use this to bypass\nautomatic resolution of type that results in an error for uncached structure","optional":true,"type":[[["number"]]]}],"meta":{"line":72,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceResolvable","description":"Data that can be resolved to a Presence object. This can be:\n* A Presence\n* A UserResolvable\n* A Snowflake","type":[[["Presence"]],[["UserResolvable"]],[["Snowflake"]]],"meta":{"line":25,"file":"PresenceManager.js","path":"src/managers"}},{"name":"MessageReactionResolvable","description":"Data that can be resolved to a MessageReaction object. This can be:\n* A MessageReaction\n* A Snowflake\n* The Unicode representation of an emoji","type":[[["MessageReaction"]],[["Snowflake"]]],"meta":{"line":31,"file":"ReactionManager.js","path":"src/managers"}},{"name":"FetchReactionUsersOptions","description":"Options used to fetch users who gave a reaction.","type":[[["Object"]]],"props":[{"name":"type","description":"The reaction type to fetch","optional":true,"default":"'NORMAL'","type":[[["ReactionType"]]]},{"name":"limit","description":"The maximum amount of users to fetch, defaults to `100`","optional":true,"default":100,"type":[[["number"]]]},{"name":"after","description":"Limit fetching users to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":30,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RelationshipJSONData","type":[[["Object"]]],"props":[{"name":"id","description":"The ID of the target user","type":[[["Snowflake"]]]},{"name":"type","description":"The type of relationship","type":[[["RelationshipType"]]]},{"name":"nickname","description":"The nickname of the user in this relationship (1-32 characters)","type":[[["string"]],[["null"]]]},{"name":"since","description":"When the user requested a relationship (ISO8601 timestamp)","type":[[["string"]]]}],"meta":{"line":81,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"RoleResolvable","description":"Data that can be resolved to a Role object. This can be:\n* A Role\n* A Snowflake","type":[[["Role"]],[["Snowflake"]]],"meta":{"line":103,"file":"RoleManager.js","path":"src/managers"}},{"name":"RoleColorsResolvable","type":[[["Object"]]],"props":[{"name":"primaryColor","description":"The primary color of the role","type":[[["ColorResolvable"]]]},{"name":"secondaryColor","description":"The secondary color of the role.\nThis will make the role a gradient between the other provided colors","optional":true,"type":[[["ColorResolvable"]]]},{"name":"tertiaryColor","description":"The tertiary color of the role.\nWhen sending `tertiaryColor` the API enforces the role color to be a holographic style\nwith values of `primaryColor = 11127295`, `secondaryColor = 16759788`, and `tertiaryColor = 16761760`.\nThese values are available as a constant: `Constants.HolographicStyle`","optional":true,"type":[[["ColorResolvable"]]]}],"meta":{"line":128,"file":"RoleManager.js","path":"src/managers"}},{"name":"CreateRoleOptions","description":"Options used to create a new role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The data to create the role with\nThis property is deprecated. Use `colors` instead.","optional":true,"type":[[["ColorResolvable"]]]},{"name":"colors","description":"The colors to create the role with","optional":true,"type":[[["RoleColorsResolvable"]]]},{"name":"hoist","description":"Whether or not the new role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"permissions","description":"The permissions for the new role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"position","description":"The position of the new role","optional":true,"type":[[["number"]]]},{"name":"mentionable","description":"Whether or not the new role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for creating this role","optional":true,"type":[[["string"]]]}],"meta":{"line":139,"file":"RoleManager.js","path":"src/managers"}},{"name":"GuildRolePosition","description":"The data needed for updating a guild role's position","type":[[["Object"]]],"props":[{"name":"role","description":"The role's id","type":[[["RoleResolvable"]]]},{"name":"position","description":"The position to update","type":[[["number"]]]}],"meta":{"line":1347,"file":"Guild.js","path":"src/structures"}},{"name":"StageInstanceCreateOptions","description":"Options used to create a stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]]},{"name":"privacyLevel","description":"The privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"sendStartNotification","description":"Whether to notify `@everyone` that the stage instance has started","optional":true,"type":[[["boolean"]]]},{"name":"guildScheduledEvent","description":"The guild scheduled event associated with the stage instance","optional":true,"type":[[["GuildScheduledEventResolvable"]]]}],"meta":{"line":29,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageChannelResolvable","description":"Data that can be resolved to a Stage Channel object. This can be:\n* A StageChannel\n* A Snowflake","type":[[["StageChannel"]],[["Snowflake"]]],"meta":{"line":39,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageInstanceEditOptions","description":"Options used to edit an existing stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The new topic of the stage instance","optional":true,"type":[[["string"]]]},{"name":"privacyLevel","description":"The new privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]}],"meta":{"line":106,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadChannelResolvable","description":"Data that can be resolved to a Thread Channel object. This can be:\n* A ThreadChannel object\n* A Snowflake","type":[[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":35,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchThreadsOptions","description":"Options for fetching multiple threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"The options used to fetch archived threads","optional":true,"type":[[["FetchArchivedThreadOptions"]]]}],"meta":{"line":60,"file":"ThreadManager.js","path":"src/managers"}},{"name":"DateResolvable","description":"Data that can be resolved to a Date object. This can be:\n* A Date object\n* A number representing a timestamp\n* An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) string","type":[[["Date"]],[["number"]],[["string"]]],"meta":{"line":89,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchArchivedThreadOptions","description":"The options used to fetch archived threads.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of threads to fetch, either `public` or `private`","optional":true,"default":"'public'","type":[[["string"]]]},{"name":"fetchAll","description":"Whether to fetch **all** archived threads when type is `private`.\nRequires `MANAGE_THREADS` if true","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"before","description":"Only return threads that were archived before this Date\nor Snowflake. Must be a {@link ThreadChannelResolvable} when type is `private` and fetchAll is `false`","optional":true,"type":[[["DateResolvable"]],[["ThreadChannelResolvable"]]]},{"name":"limit","description":"Maximum number of threads to return","optional":true,"type":[[["number"]]]}],"meta":{"line":97,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchedThreads","description":"The data returned from a thread fetch that returns multiple threads.","type":[[["Object"]]],"props":[{"name":"threads","description":"The threads that were fetched, with any members returned","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]},{"name":"hasMore","description":"Whether there are potentially additional threads that require a subsequent call","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":108,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchChannelThreadsOptions","description":"Discord.js self-bot specific options field for fetching active threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"Whether to fetch archived threads (default is false)","optional":true,"type":[[["boolean"]]]},{"name":"sortBy","description":"The order in which the threads should be fetched in (default is last_message_time)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"How the threads should be ordered (default is desc)","optional":true,"type":[[["string"]]]},{"name":"limit","description":"The maximum number of threads to return (default is 25)","optional":true,"type":[[["number"]]]},{"name":"offset","description":"The number of threads to offset fetching (useful when making multiple fetches) (default is 0)","optional":true,"type":[[["number"]]]}],"meta":{"line":125,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberResolvable","description":"Data that resolves to give a ThreadMember object. This can be:\n* A ThreadMember object\n* A User resolvable","type":[[["ThreadMember"]],[["UserResolvable"]]],"meta":{"line":60,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMemberOptions","description":"Options used to fetch a thread member.","type":[[["BaseFetchOptions"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member associated with this thread member","optional":true,"type":[[["boolean"]]]}],"meta":{"line":135,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithGuildMemberDataOptions","description":"Options used to fetch multiple thread members with guild member data.\nWith `withMember` set to `true`, pagination is enabled.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","type":[[["true"]]]},{"name":"after","description":"Consider only thread members after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"The maximum number of thread members to return","optional":true,"type":[[["number"]]]},{"name":"cache","description":"Whether to cache the fetched thread members and guild members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":141,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithoutGuildMemberDataOptions","description":"Options used to fetch multiple thread members without guild member data.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","optional":true,"type":[[["false"]]]},{"name":"cache","description":"Whether to cache the fetched thread members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":151,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersOptions","description":"Options used to fetch multiple thread members.","type":[[["FetchThreadMembersWithGuildMemberDataOptions"]],[["FetchThreadMembersWithoutGuildMemberDataOptions"]]],"meta":{"line":158,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserResolvable","description":"Data that resolves to give a User object. This can be:\n* A User object\n* A Snowflake\n* A Message object (resolves to the message author)\n* A GuildMember object\n* A ThreadMember object","type":[[["User"]],[["Snowflake"]],[["Message"]],[["GuildMember"]],[["ThreadMember"]]],"meta":{"line":25,"file":"UserManager.js","path":"src/managers"}},{"name":"Captcha","type":[[["Object"]]],"props":[{"name":"captcha_key","description":"['message']","type":[[["Array","<"],["string",">"]]]},{"name":"captcha_sitekey","description":"Captcha sitekey (hcaptcha)","type":[[["string"]]]},{"name":"captcha_service","description":"hcaptcha","type":[[["string"]]]},{"name":"captcha_rqdata","optional":true,"type":[[["string"]]]},{"name":"captcha_rqtoken","optional":true,"type":[[["string"]]]}],"meta":{"line":54,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPErrorData","description":"The HTTP data that was sent to Discord","type":[[["Object"]]],"props":[{"name":"json","description":"The JSON data that was sent","type":[["*"]]},{"name":"files","description":"The files that were sent with this request, if any","type":[[["Array","<"],["HTTPAttachmentData",">"]]]}],"meta":{"line":35,"file":"HTTPError.js","path":"src/rest"}},{"name":"HTTPAttachmentData","description":"The attachment data that is sent to Discord","type":[[["Object"]]],"props":[{"name":"attachment","description":"The source of this attachment data","type":[[["string"]],[["Buffer"]],[["Stream"]]]},{"name":"name","description":"The file name","type":[[["string"]]]},{"name":"file","description":"The file buffer","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":42,"file":"HTTPError.js","path":"src/rest"}},{"name":"APIRequest","description":"Represents a request that will or has been made to the Discord API","type":[[["Object"]]],"props":[{"name":"method","description":"The HTTP method used in this request","type":[[["HTTPMethod"]]]},{"name":"path","description":"The full path used to make the request","type":[[["string"]]]},{"name":"route","description":"The API route identifying the rate limit for this request","type":[[["string"]]]},{"name":"options","description":"Additional options for this request","type":[[["Object"]]]},{"name":"retries","description":"The number of times this request has been attempted","type":[[["number"]]]}],"meta":{"line":178,"file":"RequestHandler.js","path":"src/rest"}},{"name":"InvalidRequestWarningData","type":[[["Object"]]],"props":[{"name":"count","description":"Number of invalid requests that have been made in the window","type":[[["number"]]]},{"name":"remainingTime","description":"Time in milliseconds remaining before the count resets","type":[[["number"]]]}],"meta":{"line":292,"file":"RequestHandler.js","path":"src/rest"}},{"name":"ShardRespawnOptions","description":"Options used to respawn a shard.","type":[[["Object"]]],"props":[{"name":"delay","description":"How long to wait between killing the process/worker and\nrestarting it (in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready before resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":192,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardingManagerMode","description":"The mode to spawn shards with for a {@link ShardingManager}. Can be either one of:\n* 'process' to use child processes\n* 'worker' to use [Worker threads](https://nodejs.org/api/worker_threads.html)","type":[[["string"]]],"meta":{"line":24,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ShardingManagerOptions","description":"The options to spawn shards with for a {@link ShardingManager}.","type":[[["Object"]]],"props":[{"name":"totalShards","description":"Number of total shards of all shard managers or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["number"]]]},{"name":"shardList","description":"List of shards to spawn or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["Array","<"],["number",">"]]]},{"name":"mode","description":"Which mode to use for shards","optional":true,"default":"'process'","type":[[["ShardingManagerMode"]]]},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardArgs","description":"Arguments to pass to the shard script when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"execArgv","description":"Arguments to pass to the shard script executable when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"token","description":"Token to use for automatic shard count and passing to shards","optional":true,"type":[[["string"]]]}],"meta":{"line":31,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardSpawnOptions","description":"Options used to spawn multiple shards.","type":[[["Object"]]],"props":[{"name":"amount","description":"Number of shards to spawn","optional":true,"default":"this.totalShards","type":[[["number"]],[["string"]]]},{"name":"delay","description":"How long to wait in between spawning each shard (in milliseconds)","optional":true,"default":5500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":171,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"BroadcastEvalOptions","description":"Options for {@link ShardingManager#broadcastEval} and {@link ShardClientUtil#broadcastEval}.","type":[[["Object"]]],"props":[{"name":"shard","description":"Shard to run script on, all if undefined","optional":true,"type":[[["number"]]]},{"name":"context","description":"The JSON-serializable values to call the script with","optional":true,"type":[["*"]]}],"meta":{"line":238,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardRespawnOptions","description":"Options used to respawn all shards.","type":[[["Object"]]],"props":[{"name":"shardDelay","description":"How long to wait between shards (in milliseconds)","optional":true,"default":5000,"type":[[["number"]]]},{"name":"respawnDelay","description":"How long to wait between killing a shard's process and restarting it\n(in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait for a shard to become ready before\ncontinuing to another (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":293,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ApplicationCommandData","description":"Data for creating or editing an application command.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the command","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the command name","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the command","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the command description","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"type","description":"The type of the command","optional":true,"type":[[["ApplicationCommandType"]]]},{"name":"options","description":"Options for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","optional":true,"type":[[["boolean"]]]},{"name":"defaultMemberPermissions","description":"The bitfield used to determine the default permissions\na member needs in order to run the command","optional":true,"nullable":true,"type":[[["PermissionResolvable"]]]},{"name":"dmPermission","description":"Whether the command is enabled in DMs","optional":true,"type":[[["boolean"]]]}],"meta":{"line":194,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionData","description":"An option for an application command or subcommand.\nIn addition to the listed properties, when used as a parameter,\nAPI style `snake_case` properties can be used for compatibility with generators like `@discordjs/builders`.\nNote that providing a value for the `camelCase` counterpart for any `snake_case` property\nwill discard the provided `snake_case` property.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]],[["number"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]],[["Array","<"],["number",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":209,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoiceData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":235,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOption","description":"An option for an application command or subcommand.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the option name","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"nameLocalized","description":"The localized name for this option","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the option description","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"descriptionLocalized","description":"The localized description for this option","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoice",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOption",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":500,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoice","description":"A choice for an application command option.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalized","description":"The localized name of the choice in the provided locale, if any","nullable":true,"type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":524,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutoModerationTriggerMetadata","description":"Additional data used to determine whether an auto moderation rule should be triggered.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether mention raid protection is enabled","type":[[["boolean"]]]}],"meta":{"line":65,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationAction","description":"An object containing information about an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution","type":[[["AutoModerationActionMetadata"]]]}],"meta":{"line":94,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationActionMetadata","description":"Additional data used when an auto moderation rule is executed.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The id of the channel to which content will be logged","nullable":true,"type":[[["Snowflake"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","nullable":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","nullable":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"CommandInteractionResolvedData","description":"Represents the resolved data of a received command interaction.","type":[[["Object"]]],"props":[{"name":"users","description":"The resolved users","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]]},{"name":"members","description":"The resolved guild members","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]]},{"name":"roles","description":"The resolved roles","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]]},{"name":"channels","description":"The resolved channels","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]]},{"name":"messages","description":"The resolved messages","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Message","|"],["APIMessage",")>"]]]},{"name":"attachments","description":"The resolved attachments","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]]}],"meta":{"line":72,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOption","description":"Represents an option of a received command interaction.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"value","description":"The value of the option","optional":true,"type":[[["string"]],[["number"]],[["boolean"]]]},{"name":"options","description":"Additional options if this option is a\nsubcommand (group)","optional":true,"type":[[["Array","<"],["CommandInteractionOption",">"]]]},{"name":"user","description":"The resolved user","optional":true,"type":[[["User"]]]},{"name":"member","description":"The resolved member","optional":true,"type":[[["GuildMember"]],[["APIGuildMember"]]]},{"name":"channel","description":"The resolved channel","optional":true,"type":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]]},{"name":"role","description":"The resolved role","optional":true,"type":[[["Role"]],[["APIRole"]]]},{"name":"attachment","description":"The resolved attachment","optional":true,"type":[[["MessageAttachment"]]]}],"meta":{"line":139,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ApplicationResolvable","description":"Data that can be resolved to an Application. This can be:\n* An Application\n* An Activity with associated Application\n* A Snowflake","type":[[["Application"]],[["Snowflake"]]],"meta":{"line":127,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"CreateInviteOptions","description":"Options used to create an invite to a guild channel.","type":[[["Object"]]],"props":[{"name":"temporary","description":"Whether members that joined via the invite should be automatically\nkicked after 24 hours if they have not yet received a role","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maxAge","description":"How long the invite should last (in seconds, 0 for forever)","optional":true,"default":86400,"type":[[["number"]]]},{"name":"maxUses","description":"Maximum number of uses","optional":true,"default":0,"type":[[["number"]]]},{"name":"unique","description":"Create a unique invite, or use an existing one with similar settings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"targetUser","description":"The user whose stream to display for this invite,\nrequired if `targetType` is 1, the user must be streaming in the channel","optional":true,"type":[[["UserResolvable"]]]},{"name":"targetApplication","description":"The embedded application to open for this invite,\nrequired if `targetType` is 2, the application must have the `EMBEDDED` flag","optional":true,"type":[[["ApplicationResolvable"]]]},{"name":"targetType","description":"The type of the target for this voice channel invite","optional":true,"type":[[["TargetType"]]]},{"name":"reason","description":"The reason for creating the invite","optional":true,"type":[[["string"]]]}],"meta":{"line":135,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseMessageComponentOptions","description":"Options for a BaseMessageComponent","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","type":[[["MessageComponentTypeResolvable"]]]}],"meta":{"line":11,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentOptions","description":"Data that can be resolved into options for a component. This can be:\n* MessageActionRowOptions\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageActionRowOptions"]],[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]]],"meta":{"line":17,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponent","description":"Components that can be sent in a payload. These can be:\n* MessageActionRow\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["MessageActionRow"]],[["MessageButton"]],[["MessageSelectMenu"]]],"meta":{"line":26,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentTypeResolvable","description":"Data that can be resolved to a MessageComponentType. This can be:\n* MessageComponentType\n* string\n* number","type":[[["string"]],[["number"]],[["MessageComponentType"]]],"meta":{"line":36,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"CategoryCreateChannelOptions","description":"Options for creating a channel using {@link CategoryChannel#createChannel}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the new channel.","optional":true,"default":"'GUILD_TEXT'","type":[[["ChannelType"]],[["number"]]]},{"name":"position","description":"Position of the new channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic for the new channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the new channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"Bitrate of the new channel in bits (only voice)","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"Maximum amount of users allowed in the new channel (only voice)","optional":true,"type":[[["number"]]]},{"name":"permissionOverwrites","description":"Permission overwrites of the new channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The specific region of the new channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the new channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the new channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the new channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode)\nto set on newly created threads in a channel.","optional":true,"type":[[["number"]]]},{"name":"reason","description":"Reason for creating the new channel","optional":true,"type":[[["string"]]]}],"meta":{"line":43,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"ClientUserEditData","description":"Data used to edit the logged in client","type":[[["Object"]]],"props":[{"name":"username","description":"The new username","optional":true,"type":[[["string"]]]},{"name":"avatar","description":"The new avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new bio","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":128,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivitiesOptions","description":"Options for setting activities","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"state","description":"State of the activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]}],"meta":{"line":180,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceData","description":"Data resembling a raw Discord presence.","type":[[["Object"]]],"props":[{"name":"status","description":"Status of the user","optional":true,"type":[[["PresenceStatusData"]]]},{"name":"afk","description":"Whether the user is AFK","optional":true,"type":[[["boolean"]]]},{"name":"activities","description":"Activity the user is playing","optional":true,"type":[[["Array","<"],["ActivitiesOptions",">"]],[["Array","<"],["CustomStatus",">"]],[["Array","<"],["RichPresence",">"]],[["Array","<"],["SpotifyRPC",">"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":189,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceStatusData","description":"A user's status. Must be one of:\n* `online`\n* `idle`\n* `invisible`\n* `dnd` (do not disturb)","type":[[["string"]]],"meta":{"line":211,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivityOptions","description":"Options for setting an activity.","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"shardId","description":"Shard Id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":233,"file":"ClientUser.js","path":"src/structures"}},{"name":"AutocompleteFocusedOption","description":"The full autocomplete option object.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the application command option","type":[[["ApplicationCommandOptionType"]]]},{"name":"value","description":"The value of the option","type":[[["string"]]]},{"name":"focused","description":"Whether this option is currently in focus for autocomplete","type":[[["boolean"]]]}],"meta":{"line":243,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"ContainerComponents","type":[[["MessageActionRow"]],[["TextDisplayComponent"]],[["SectionComponent"]],[["MediaGalleryComponent"]],[["SeparatorComponent"]],[["FileComponent"]]],"props":[{"name":"components","description":"Components of the type action row, text display, section, media gallery, separator, or file","optional":true,"type":[[["Array","<"],["ContainerComponents",">"]]]},{"name":"accent_color","description":"Color for the accent on the container as RGB from 0x000000 to 0xFFFFFF","optional":true,"type":[[["Number"]]]},{"name":"spoiler","description":"Whether the container should be a spoiler (or blurred out). Defaults to false.","optional":true,"type":[[["Boolean"]]]}],"meta":{"line":7,"file":"ContainerComponent.js","path":"src/structures"}},{"name":"RawEmoji","description":"Represents raw emoji data from the API","type":[[["APIEmoji"]]],"props":[{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"Emoji.js","path":"src/structures"}},{"name":"GroupDMChannelEditData","description":"The data for editing a channe;.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the channel","optional":true,"type":[[["string"]]]},{"name":"icon","description":"The icon of the channel","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"owner","description":"The owner of the channel","optional":true,"type":[[["GuildMemberResolvable"]]]}],"meta":{"line":174,"file":"GroupDMChannel.js","path":"src/structures"}},{"name":"Features","description":"An array of enabled guild features, here are the possible values:\n* ANIMATED_ICON\n* AUTO_MODERATION\n* BANNER\n* COMMERCE\n* COMMUNITY\n* CREATOR_MONETIZABLE_PROVISIONAL\n* CREATOR_STORE_PAGE\n* DISCOVERABLE\n* FEATURABLE\n* INVITES_DISABLED\n* INVITE_SPLASH\n* MEMBER_VERIFICATION_GATE_ENABLED\n* NEWS\n* PARTNERED\n* PREVIEW_ENABLED\n* VANITY_URL\n* VERIFIED\n* VIP_REGIONS\n* WELCOME_SCREEN_ENABLED\n* TICKETED_EVENTS_ENABLED\n* MONETIZATION_ENABLED\n`MONETIZATION_ENABLED` has been replaced.\nSee [this pull request](https://github.com/discord/discord-api-docs/pull/5724) for more information.\n* MORE_STICKERS\n* THREE_DAY_THREAD_ARCHIVE\n* SEVEN_DAY_THREAD_ARCHIVE\n* PRIVATE_THREADS\n* ROLE_ICONS\n* RAID_ALERTS_DISABLED\n* ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE\n* ROLE_SUBSCRIPTIONS_ENABLED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-features}"],"type":[[["string"]]],"meta":{"line":228,"file":"Guild.js","path":"src/structures"}},{"name":"IncidentActions","description":"Incident actions of a guild.","type":[[["Object"]]],"props":[{"name":"invitesDisabledUntil","description":"When invites would be enabled again","nullable":true,"type":[[["Date"]]]},{"name":"dmsDisabledUntil","description":"When direct messages would be enabled again","nullable":true,"type":[[["Date"]]]},{"name":"dmSpamDetectedAt","description":"When direct message spam was detected","nullable":true,"type":[[["Date"]]]},{"name":"raidDetectedAt","description":"When a raid was detected","nullable":true,"type":[[["Date"]]]}],"meta":{"line":553,"file":"Guild.js","path":"src/structures"}},{"name":"Vanity","description":"An object containing information about a guild's vanity invite.","type":[[["Object"]]],"props":[{"name":"code","description":"Vanity invite code","nullable":true,"type":[[["string"]]]},{"name":"uses","description":"How many times this invite has been used","type":[[["number"]]]}],"meta":{"line":750,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettings","description":"Data for the Guild Widget Settings object","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannel"]]]}],"meta":{"line":806,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettingsData","description":"The Guild Widget Settings object","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannelResolvable"]]]}],"meta":{"line":813,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogsFetchOptions","description":"Options used to fetch audit logs.","type":[[["Object"]]],"props":[{"name":"before","description":"Consider only entries before this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"after","description":"Consider only entries after this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"limit","description":"The number of entries to return","optional":true,"type":[[["number"]]]},{"name":"user","description":"Only return entries for actions made by this user","optional":true,"type":[[["UserResolvable"]]]},{"name":"type","description":"Only return entries for this action type","optional":true,"type":[[["AuditLogAction"]],[["number"]]]}],"meta":{"line":839,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEditData","description":"The data for editing a guild.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild","optional":true,"type":[[["string"]]]},{"name":"verificationLevel","description":"The verification level of the guild","optional":true,"nullable":true,"type":[[["VerificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The level of the explicit content filter","optional":true,"nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"afkChannel","description":"The AFK channel of the guild","optional":true,"nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"systemChannel","description":"The system channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"afkTimeout","description":"The AFK timeout of the guild","optional":true,"type":[[["number"]]]},{"name":"icon","description":"The icon of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"owner","description":"The owner of the guild","optional":true,"type":[[["GuildMemberResolvable"]]]},{"name":"splash","description":"The invite splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"discoverySplash","description":"The discovery splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The banner of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"defaultMessageNotifications","description":"The default message\nnotification level of the guild","optional":true,"nullable":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"systemChannelFlags","description":"The system channel flags of the guild","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"rulesChannel","description":"The rules channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"preferredLocale","description":"The preferred locale of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"safetyAlertsChannel","description":"The safety alerts channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"premiumProgressBarEnabled","description":"Whether the guild's premium progress bar is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The discovery description of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"features","description":"The features of the guild","optional":true,"type":[[["Array","<"],["Features",">"]]]}],"meta":{"line":873,"file":"Guild.js","path":"src/structures"}},{"name":"TextChannelResolvable","description":"Data that can be resolved to a Text Channel object. This can be:\n* A TextChannel\n* A Snowflake","type":[[["TextChannel"]],[["Snowflake"]]],"meta":{"line":899,"file":"Guild.js","path":"src/structures"}},{"name":"VoiceChannelResolvable","description":"Data that can be resolved to a Voice Channel object. This can be:\n* A VoiceChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["Snowflake"]]],"meta":{"line":906,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeChannelData","description":"Welcome channel data","type":[[["Object"]]],"props":[{"name":"description","description":"The description to show for this welcome channel","type":[[["string"]]]},{"name":"channel","description":"The channel to link for this welcome channel","type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["Snowflake"]]]},{"name":"emoji","description":"The emoji to display for this welcome channel","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":985,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeScreenEditData","description":"Welcome screen edit data","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the welcome screen is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The description for the welcome screen","optional":true,"type":[[["string"]]]},{"name":"welcomeChannels","description":"The welcome channel data for the welcome screen","optional":true,"type":[[["Array","<"],["WelcomeChannelData",">"]]]}],"meta":{"line":993,"file":"Guild.js","path":"src/structures"}},{"name":"GuildTextChannelResolvable","description":"Data that can be resolved to a GuildTextChannel object. This can be:\n* A TextChannel\n* A NewsChannel\n* A Snowflake","type":[[["TextChannel"]],[["NewsChannel"]],[["Snowflake"]]],"meta":{"line":1001,"file":"Guild.js","path":"src/structures"}},{"name":"GuildVoiceChannelResolvable","description":"Data that can be resolved to a GuildVoiceChannel object. This can be:\n* A VoiceChannel\n* A StageChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":1009,"file":"Guild.js","path":"src/structures"}},{"name":"AuditLogTargetType","description":"The target type of an entry. Here are the available types:\n* GUILD\n* CHANNEL\n* USER\n* ROLE\n* INVITE\n* WEBHOOK\n* EMOJI\n* MESSAGE\n* INTEGRATION\n* STAGE_INSTANCE\n* STICKER\n* THREAD\n* GUILD_SCHEDULED_EVENT\n* APPLICATION_COMMAND\n* AUTO_MODERATION","type":[[["string"]]],"meta":{"line":16,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogAction","description":"The action of an entry. Here are the available actions:\n* ALL: null\n* GUILD_UPDATE: 1\n* CHANNEL_CREATE: 10\n* CHANNEL_UPDATE: 11\n* CHANNEL_DELETE: 12\n* CHANNEL_OVERWRITE_CREATE: 13\n* CHANNEL_OVERWRITE_UPDATE: 14\n* CHANNEL_OVERWRITE_DELETE: 15\n* MEMBER_KICK: 20\n* MEMBER_PRUNE: 21\n* MEMBER_BAN_ADD: 22\n* MEMBER_BAN_REMOVE: 23\n* MEMBER_UPDATE: 24\n* MEMBER_ROLE_UPDATE: 25\n* MEMBER_MOVE: 26\n* MEMBER_DISCONNECT: 27\n* BOT_ADD: 28,\n* ROLE_CREATE: 30\n* ROLE_UPDATE: 31\n* ROLE_DELETE: 32\n* INVITE_CREATE: 40\n* INVITE_UPDATE: 41\n* INVITE_DELETE: 42\n* WEBHOOK_CREATE: 50\n* WEBHOOK_UPDATE: 51\n* WEBHOOK_DELETE: 52\n* EMOJI_CREATE: 60\n* EMOJI_UPDATE: 61\n* EMOJI_DELETE: 62\n* MESSAGE_DELETE: 72\n* MESSAGE_BULK_DELETE: 73\n* MESSAGE_PIN: 74\n* MESSAGE_UNPIN: 75\n* INTEGRATION_CREATE: 80\n* INTEGRATION_UPDATE: 81\n* INTEGRATION_DELETE: 82\n* STAGE_INSTANCE_CREATE: 83\n* STAGE_INSTANCE_UPDATE: 84\n* STAGE_INSTANCE_DELETE: 85\n* STICKER_CREATE: 90\n* STICKER_UPDATE: 91\n* STICKER_DELETE: 92\n* GUILD_SCHEDULED_EVENT_CREATE: 100\n* GUILD_SCHEDULED_EVENT_UPDATE: 101\n* GUILD_SCHEDULED_EVENT_DELETE: 102\n* THREAD_CREATE: 110\n* THREAD_UPDATE: 111\n* THREAD_DELETE: 112\n* APPLICATION_COMMAND_PERMISSION_UPDATE: 121\n* AUTO_MODERATION_RULE_CREATE: 140\n* AUTO_MODERATION_RULE_UPDATE: 141\n* AUTO_MODERATION_RULE_DELETE: 142\n* AUTO_MODERATION_BLOCK_MESSAGE: 143\n* AUTO_MODERATION_FLAG_TO_CHANNEL: 144\n* AUTO_MODERATION_USER_COMMUNICATION_DISABLED: 145","see":["{@link https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events}"],"type":[[["number"]],[["string"]]],"meta":{"line":64,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogEntryTarget","description":"The target of an entry. It can be one of:\n* A guild\n* A channel\n* A user\n* A role\n* An invite\n* A webhook\n* An emoji\n* A message\n* An integration\n* A stage instance\n* A sticker\n* A guild scheduled event\n* A thread\n* An application command\n* An auto moderation rule\n* An object with an id key if target was deleted\n* An object where the keys represent either the new value or the old value","type":[[["Object"]],[["Guild"]],[["Channel"]],[["User"]],[["Role"]],[["Invite"]],[["Webhook"]],[["GuildEmoji"]],[["Message"]],[["Integration"]],[["StageInstance"]],[["Sticker"]],[["GuildScheduledEvent"]],[["ApplicationCommand"]],[["AutoModerationRule"]]],"meta":{"line":262,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogActionType","description":"The action type of an entry, e.g. `CREATE`. Here are the available types:\n* CREATE\n* DELETE\n* UPDATE\n* ALL","type":[[["string"]]],"meta":{"line":313,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogChange","description":"An entry in the audit log representing a specific change.","type":[[["Object"]]],"props":[{"name":"key","description":"The property that was changed, e.g. `nick` for nickname changes","type":[[["string"]]]},{"name":"old","description":"The old value of the change, e.g. for nicknames, the old nickname","optional":true,"type":[["*"]]},{"name":"new","description":"The new value of the change, e.g. for nicknames, the new nickname","optional":true,"type":[["*"]]}],"meta":{"line":455,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"SetParentOptions","description":"Options used to set the parent of a channel.","type":[[["Object"]]],"props":[{"name":"lockPermissions","description":"Whether to lock the permissions to what the parent's permissions are","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for modifying the parent of the channel","optional":true,"type":[[["string"]]]}],"meta":{"line":310,"file":"GuildChannel.js","path":"src/structures"}},{"name":"SetChannelPositionOptions","description":"Options used to set the position of a channel.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether or not to change the position relative to its current value","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":338,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildChannelCloneOptions","description":"Options used to clone a guild channel.","type":[[["GuildChannelCreateOptions"]]],"props":[{"name":"name","description":"Name of the new channel","optional":true,"default":"this.name","type":[[["string"]]]}],"meta":{"line":360,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmojiEditData","description":"Data for editing an emoji.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the emoji","optional":true,"type":[[["string"]]]},{"name":"roles","description":"Roles to restrict emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":79,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEventEntityMetadata","description":"Represents the additional metadata for a {@link GuildScheduledEvent}","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata}"],"type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event","nullable":true,"type":[[["string"]]]}],"meta":{"line":164,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"GuildScheduledEventRecurrenceRule","description":"Represents the recurrence rule for a {@link GuildScheduledEvent}.","type":[[["Object"]]],"props":[{"name":"startTimestamp","description":"The timestamp the recurrence rule interval starts at","type":[[["number"]]]},{"name":"startAt","description":"The time the recurrence rule interval starts at","type":[[["Date"]]]},{"name":"endTimestamp","description":"The timestamp the recurrence rule interval ends at","nullable":true,"type":[[["number"]]]},{"name":"endAt","description":"The time the recurrence rule interval ends at","nullable":true,"type":[[["Date"]]]},{"name":"frequency","description":"How often the event occurs","type":[[["GuildScheduledEventRecurrenceRuleFrequency"]]]},{"name":"interval","description":"The spacing between the events","type":[[["number"]]]},{"name":"byWeekday","description":"The days within a week to recur on","nullable":true,"type":[[["Array","<"],["GuildScheduledEventRecurrenceRuleWeekday",">"]]]},{"name":"byNWeekday","description":"The days within a week to recur on","nullable":true,"type":[[["Array","<"],["GuildScheduledEventRecurrenceRuleNWeekday",">"]]]},{"name":"byMonth","description":"The months to recur on","nullable":true,"type":[[["Array","<"],["GuildScheduledEventRecurrenceRuleMonth",">"]]]},{"name":"byMonthDay","description":"The days within a month to recur on","nullable":true,"type":[[["Array","<"],["number",">"]]]},{"name":"byYearDay","description":"The days within a year to recur on","nullable":true,"type":[[["Array","<"],["number",">"]]]},{"name":"count","description":"The total amount of times the event is allowed to recur before stopping","nullable":true,"type":[[["number"]]]}],"meta":{"line":198,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"GuildScheduledEventRecurrenceRuleNWeekday","type":[[["Object"]]],"props":[{"name":"n","description":"The week to recur on","type":[[["number"]]]},{"name":"day","description":"The day within the week to recur on","type":[[["GuildScheduledEventRecurrenceRuleWeekday"]]]}],"meta":{"line":214,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"CreateGuildScheduledEventInviteURLOptions","description":"Options used to create an invite URL to a {@link GuildScheduledEvent}","type":[[["CreateInviteOptions"]]],"props":[{"name":"channel","description":"The channel to create the invite in.\nThis is required when the `entityType` of `GuildScheduledEvent` is `EXTERNAL`, gets ignored otherwise","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]}],"meta":{"line":339,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"EditGuildTemplateOptions","description":"Options used to edit a guild template.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this template","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this template","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"IntegrationAccount","description":"The information account for an integration","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the account","type":[[["Snowflake"]],[["string"]]]},{"name":"name","description":"The name of the account","type":[[["string"]]]}],"meta":{"line":6,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationType","description":"The type of an {@link Integration}. This can be:\n* `twitch`\n* `youtube`\n* `discord`\n* `guild_subscription`","type":[[["string"]]],"meta":{"line":13,"file":"Integration.js","path":"src/structures"}},{"name":"Locale","description":"A Discord locale string, possible values are:\n* en-US (English, US)\n* en-GB (English, UK)\n* bg (Bulgarian)\n* zh-CN (Chinese, China)\n* zh-TW (Chinese, Taiwan)\n* hr (Croatian)\n* cs (Czech)\n* da (Danish)\n* nl (Dutch)\n* fi (Finnish)\n* fr (French)\n* de (German)\n* el (Greek)\n* hi (Hindi)\n* hu (Hungarian)\n* it (Italian)\n* ja (Japanese)\n* ko (Korean)\n* lt (Lithuanian)\n* no (Norwegian)\n* pl (Polish)\n* pt-BR (Portuguese, Brazilian)\n* ro (Romanian, Romania)\n* ru (Russian)\n* es-ES (Spanish)\n* sv-SE (Swedish)\n* th (Thai)\n* tr (Turkish)\n* uk (Ukrainian)\n* vi (Vietnamese)","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["string"]]],"meta":{"line":84,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"channel","description":"The channel to listen to interactions from","optional":true,"type":[[["TextBasedChannelsResolvable"]]]},{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"guild","description":"The guild to listen to interactions from","optional":true,"type":[[["GuildResolvable"]]]},{"name":"interactionType","description":"The type of interaction to listen for","optional":true,"type":[[["InteractionType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]},{"name":"message","description":"The message to listen to interactions from","optional":true,"type":[[["Message"]],[["APIMessage"]]]}],"meta":{"line":8,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"ApplicationExecutable","type":[[["Object"]]],"props":[{"name":"os","description":"The operating system the executable can be found on","type":[[["string"]]]},{"name":"name","description":"The name of the executable","type":[[["string"]]]},{"name":"is_launcher","description":"Whether the executable is for a game launcher","type":[[["boolean"]]]}],"meta":{"line":275,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"ApplicationSku","type":[[["Object"]]],"props":[{"name":"id","description":"The ID of the game","nullable":true,"type":[[["Snowflake"]]]},{"name":"sku","description":"The SKU of the game","nullable":true,"type":[[["string"]]]},{"name":"distributor","description":"The distributor of the game","type":[[["string"]]]}],"meta":{"line":292,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"Company","type":[[["Object"]]],"props":[{"name":"id","description":"The ID of the company","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The name of the company","nullable":true,"type":[[["string"]]]}],"meta":{"line":369,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"ApplicationAsset","description":"Asset data.","type":[[["Object"]]],"props":[{"name":"id","description":"The asset's id","type":[[["Snowflake"]]]},{"name":"name","description":"The asset's name","type":[[["string"]]]},{"name":"type","description":"The asset's type","type":[[["string"]]]}],"meta":{"line":777,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"CollectorFilter","description":"Filter to be applied to the collector.","type":[[["function"]]],"params":[{"name":"args","description":"Any arguments received by the listener","variable":true,"type":[["*"]]},{"name":"collection","description":"The items collected by this collector","type":[[["Collection"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":9,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorOptions","description":"Options to be applied to the collector.","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"How long to run the collector for in milliseconds","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to stop the collector after inactivity in milliseconds","optional":true,"type":[[["number"]]]},{"name":"dispose","description":"Whether to dispose data when it's deleted","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorResetTimerOptions","description":"Options used to reset the timeout and idle timer of a {@link Collector}.","type":[[["Object"]]],"props":[{"name":"time","description":"How long to run the collector for (in milliseconds)","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to wait to stop the collector after inactivity (in milliseconds)","optional":true,"type":[[["number"]]]}],"meta":{"line":202,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferReplyOptions","description":"Options for deferring the reply to an {@link Interaction}.","type":[[["Object"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferUpdateOptions","description":"Options for deferring and updating the reply to a {@link MessageComponentInteraction}.","type":[[["Object"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":22,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionReplyOptions","description":"Options for a reply to an {@link Interaction}.","type":[[["BaseMessageOptionsWithPoll"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS` and `EPHEMERAL` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":28,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionUpdateOptions","description":"Options for updating the message received from a {@link MessageComponentInteraction}.","type":[[["MessageEditOptions"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":37,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionEditReplyOptions","description":"Options that can be passed into {@link InteractionResponses#editReply}.","type":[[["WebhookEditMessageOptions"]]],"props":[{"name":"message","description":"The response to edit","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"meta":{"line":131,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"AwaitModalSubmitOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time in milliseconds to wait for an interaction before rejecting","type":[[["number"]]]}],"meta":{"line":256,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"PollAnswerData","description":"Represents the data for a poll answer.","type":[[["Object"]]],"props":[{"name":"text","description":"The text for the poll answer","type":[[["string"]]]},{"name":"emoji","description":"The emoji for the poll answer","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":64,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"PollData","description":"Represents the data for a poll.","type":[[["Object"]]],"props":[{"name":"question","description":"The question for the poll","type":[[["PollQuestionMedia"]]]},{"name":"answers","description":"The answers for the poll","type":[[["Array","<"],["PollAnswerData",">"]]]},{"name":"duration","description":"The duration in hours for the poll","type":[[["number"]]]},{"name":"allowMultiselect","description":"Whether the poll allows multiple answers","type":[[["boolean"]]]},{"name":"layoutType","description":"The layout type for the poll","optional":true,"type":[[["PollLayoutType"]]]}],"meta":{"line":71,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"BaseMessageOptions","description":"Base options provided when sending.","type":[[["Object"]]],"props":[{"name":"activity","description":"Group activity","optional":true,"type":[[["MessageActivity"]]]},{"name":"tts","description":"Whether or not the message should be spoken aloud","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"nonce","description":"The nonce for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"content","description":"The content for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"embeds","description":"The embeds for the message\n(see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details)","optional":true,"type":[[["Array","<("],["MessageEmbed","|"],["APIEmbed",")>"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content\n(see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details)","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"files","description":"Files to send with the message","optional":true,"type":[[["Array","<("],["FileOptions","|"],["BufferResolvable","|"],["Array","<"],["MessageAttachment",">)>"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"attachments","description":"Attachments to send in the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]}],"meta":{"line":81,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"BaseMessageOptionsWithPoll","description":"The base message options for messages including a poll.","type":[[["BaseMessageOptions"]]],"props":[{"name":"poll","description":"The poll to send with the message","optional":true,"type":[[["PollData"]]]}],"meta":{"line":98,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ForwardOptions","type":[[["Object"]]],"props":[{"name":"message","description":"The originating message","type":[[["MessageResolvable"]]]},{"name":"channel","description":"The channel of the originating message","optional":true,"type":[[["TextBasedChannelResolvable"]]]},{"name":"guild","description":"The guild of the originating message","optional":true,"type":[[["GuildResolvable"]]]}],"meta":{"line":104,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageOptions","description":"Options provided when sending or editing a message.","type":[[["BaseMessageOptions"]]],"props":[{"name":"reply","description":"The options for replying to a message","optional":true,"type":[[["ReplyOptions"]]]},{"name":"forward","description":"The options for forwarding a message","optional":true,"type":[[["ForwardOptions"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":111,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionOptions","description":"Options provided to control parsing of mentions by Discord","type":[[["Object"]]],"props":[{"name":"parse","description":"Types of mentions to be parsed","optional":true,"type":[[["Array","<"],["MessageMentionTypes",">"]]]},{"name":"users","description":"Snowflakes of Users to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"roles","description":"Snowflakes of Roles to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"repliedUser","description":"Whether the author of the Message being replied to should be pinged","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":121,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionTypes","description":"Types of mentions to enable in MessageMentionOptions.\n- `roles`\n- `users`\n- `everyone`","type":[[["string"]]],"meta":{"line":130,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"FileOptions","type":[[["Object"]]],"props":[{"name":"attachment","description":"File to attach","type":[[["BufferResolvable"]]]},{"name":"name","description":"Filename of the attachment","optional":true,"default":"'file.jpg'","type":[[["string"]]]},{"name":"description","description":"The description of the file","type":[[["string"]]]}],"meta":{"line":138,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ReplyOptions","description":"Options for sending a message with a reply.","type":[[["Object"]]],"props":[{"name":"messageReference","description":"The message to reply to (must be in the same channel and not system)","type":[[["MessageResolvable"]]]},{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":145,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"AwaitMessagesOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["MessageCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":414,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ChannelWebhookCreateOptions","description":"Options used to create a {@link Webhook} in a guild text-based channel.","type":[[["Object"]]],"props":[{"name":"avatar","description":"Avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"meta":{"line":459,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"TargetType","description":"The type of the invite target:\n* 1: STREAM\n* 2: EMBEDDED_APPLICATION\n* 3: ROLE_SUBSCRIPTIONS\n* 4: CREATOR_PAGE","see":["{@link https://discord.com/developers/docs/resources/invite#invite-object-invite-target-types}"],"type":[[["number"]]],"meta":{"line":155,"file":"Invite.js","path":"src/structures"}},{"name":"InviteType","description":"The type of the invite:\n* 0: GUILD\n* 1: GROUP_DM\n* 2: FRIEND","see":["{@link https://docs.discord.food/resources/invite#invite-type}"],"type":[[["number"]]],"meta":{"line":175,"file":"Invite.js","path":"src/structures"}},{"name":"TopLevelComponent","type":[[["MessageActionRow"]],[["ContainerComponent"]],[["FileComponent"]],[["MediaGalleryComponent"]],[["SectionComponent"]],[["SeparatorComponent"]],[["TextDisplayComponent"]]],"meta":{"line":163,"file":"Message.js","path":"src/structures"}},{"name":"MessageReference","description":"Reference data sent in a message that contains ids identifying the referenced message.\nThis can be present in the following types of message:\n* Crossposted messages (IS_CROSSPOST {@link MessageFlags.FLAGS message flag})\n* CHANNEL_FOLLOW_ADD\n* CHANNEL_PINNED_MESSAGE\n* REPLY\n* THREAD_STARTER_MESSAGE","see":["{@link https://discord.com/developers/docs/resources/channel#message-types}"],"type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel's id the message was referenced","type":[[["Snowflake"]]]},{"name":"guildId","description":"The guild's id the message was referenced","nullable":true,"type":[[["Snowflake"]]]},{"name":"messageId","description":"The message's id that was referenced","nullable":true,"type":[[["Snowflake"]]]},{"name":"type","description":"The type of the message reference","type":[[["MessageReferenceType"]]]}],"meta":{"line":327,"file":"Message.js","path":"src/structures"}},{"name":"MessageInteraction","description":"Partial data of the interaction that a message is a reply to","type":[[["Object"]]],"props":[{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the interaction","type":[[["InteractionType"]]]},{"name":"commandName","description":"The name of the interaction's application command,\nas well as the subcommand and subcommand group, where applicable","type":[[["string"]]]},{"name":"user","description":"The user that invoked the interaction","type":[[["User"]]]}],"meta":{"line":362,"file":"Message.js","path":"src/structures"}},{"name":"MessageCall","description":"A call associated with a message","type":[[["Object"]]],"props":[{"name":"endedAt","description":"The time the call ended","type":[[["Readonly",""],["Date",">"]]]},{"name":"endedTimestamp","description":"The timestamp the call ended","nullable":true,"type":[[["number"]]]},{"name":"participants","description":"The ids of the users that participated in the call","type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":410,"file":"Message.js","path":"src/structures"}},{"name":"AwaitReactionsOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["ReactionCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":575,"file":"Message.js","path":"src/structures"}},{"name":"MessageEditOptions","description":"Options that can be passed into {@link Message#edit}.","type":[[["Object"]]],"props":[{"name":"content","description":"Content to be edited","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"embeds","description":"Embeds to be added/edited","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be edited.","optional":true,"type":[[["MessageFlags"]]]},{"name":"attachments","description":"An array of attachments to keep,\nall attachments will be kept if omitted","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"files","description":"Files to add to the message","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<"],["MessageActionRow",">"]],[["Array","<"],["MessageActionRowOptions",">"]]]}],"meta":{"line":722,"file":"Message.js","path":"src/structures"}},{"name":"ReplyMessageOptions","description":"Options provided when sending a message as an inline reply.","type":[[["BaseMessageOptions"]]],"props":[{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]}],"meta":{"line":846,"file":"Message.js","path":"src/structures"}},{"name":"ThreadAutoArchiveDuration","description":"A number that is allowed to be the duration (in minutes) of inactivity after which a thread is automatically\narchived. This can be:\n* `60` (1 hour)\n* `1440` (1 day)\n* `4320` (3 days)\n* `10080` (7 days)\n* `'MAX'` (7 days)\nThis option is deprecated and will be removed in the next major version.","type":[[["number"]],[["string"]]],"meta":{"line":898,"file":"Message.js","path":"src/structures"}},{"name":"StartThreadOptions","description":"Options for starting a thread on a message.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new thread","type":[[["string"]]]},{"name":"autoArchiveDuration","description":"The amount of\ntime (in minutes) after which the thread should automatically archive in case of no recent activity","optional":true,"default":"this.channel.defaultAutoArchiveDuration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for creating the thread","optional":true,"type":[[["string"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":910,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRowComponent","description":"Components that can be placed in an action row\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","type":[[["MessageButton"]],[["MessageSelectMenu"]],[["TextInputComponent"]]],"meta":{"line":11,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentOptions","description":"Options for components that can be placed in an action row\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]],[["TextInputComponentOptions"]]],"meta":{"line":19,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentResolvable","description":"Data that can be resolved into components that can be placed in an action row\n* MessageActionRowComponent\n* MessageActionRowComponentOptions","type":[[["MessageActionRowComponent"]],[["MessageActionRowComponentOptions"]]],"meta":{"line":27,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"components","description":"The components to place in this action row","optional":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"meta":{"line":34,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageButtonOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"label","description":"The text to be displayed on this button","optional":true,"type":[[["string"]]]},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"style","description":"The style of this button","optional":true,"type":[[["MessageButtonStyleResolvable"]]]},{"name":"emoji","description":"The emoji to be displayed to the left of the text","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"url","description":"Optional URL for link-style buttons","optional":true,"type":[[["string"]]]},{"name":"disabled","description":"Disables the button to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":13,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageButtonStyleResolvable","description":"Data that can be resolved to a MessageButtonStyle. This can be\n* MessageButtonStyle\n* number","type":[[["number"]],[["MessageButtonStyle"]]],"meta":{"line":148,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum amount of messages to collect","type":[[["number"]]]},{"name":"maxProcessed","description":"The maximum amount of messages to process","type":[[["number"]]]}],"meta":{"line":6,"file":"MessageCollector.js","path":"src/structures"}},{"name":"APIMessageActionRowComponent","description":"Raw message components from the API\n* APIMessageButton\n* APIMessageSelectMenu","type":[[["APIMessageButton"]],[["APIMessageSelectMenu"]]],"meta":{"line":66,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"Partial","description":"A `Partial` object is a representation of any existing object.\nThis object contains between 0 and all of the original objects parameters.\nThis is true regardless of whether the parameters are optional in the base object.","type":[[["Object"]]],"meta":{"line":22,"file":"WebEmbed.js","path":"src/structures"}},{"name":"MessageEmbedOptions","description":"Represents the possible options for a MessageEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"timestamp","description":"The timestamp of this embed","optional":true,"type":[[["Date"]],[["number"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"fields","description":"The fields of this embed","optional":true,"type":[[["Array","<"],["EmbedFieldData",">"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedFooter",">"]]]}],"meta":{"line":24,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedField","description":"Represents a field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","type":[[["boolean"]]]}],"meta":{"line":93,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedThumbnail","description":"Represents the thumbnail of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this thumbnail","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this thumbnail","type":[[["string"]]]},{"name":"height","description":"Height of this thumbnail","type":[[["number"]]]},{"name":"width","description":"Width of this thumbnail","type":[[["number"]]]}],"meta":{"line":110,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedImage","description":"Represents the image of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":132,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedVideo","description":"Represents the video of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":154,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedAuthor","description":"Represents the author field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this author","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this author","type":[[["string"]]]}],"meta":{"line":177,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedProvider","description":"Represents the provider of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":199,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedFooter","description":"Represents the footer field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"text","description":"The text of this footer","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this footer","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this footer","type":[[["string"]]]}],"meta":{"line":217,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedAuthorData","description":"The options to provide for setting an author for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author.","type":[[["string"]]]}],"meta":{"line":185,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedFooterData","description":"The options to provide for setting a footer for a {@link MessageEmbed}.","type":[[["Object"]]],"props":[{"name":"text","description":"The text of the footer.","type":[[["string"]]]},{"name":"iconURL","description":"The icon URL of the footer.","optional":true,"type":[[["string"]]]}],"meta":{"line":427,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedFieldData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"type":[[["boolean"]]]}],"meta":{"line":570,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"CrosspostedChannel","description":"Crossposted channel data.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The mentioned channel's id","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild that has the channel","type":[[["Snowflake"]]]},{"name":"type","description":"The channel's type","type":[[["ChannelType"]]]},{"name":"name","description":"The channel's name","type":[[["string"]]]}],"meta":{"line":103,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageMentionsHasOptions","description":"Options used to check for a mention.","type":[[["Object"]]],"props":[{"name":"ignoreDirect","description":"Whether to ignore direct mentions to the item","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRoles","description":"Whether to ignore role mentions to a guild member","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRepliedUser","description":"Whether to ignore replied user mention to an user","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreEveryone","description":"Whether to ignore `@everyone`/`@here` mentions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":195,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageTarget","description":"A target for a message.","type":[[["TextBasedChannels"]],[["User"]],[["GuildMember"]],[["Webhook"]],[["WebhookClient"]],[["Interaction"]],[["InteractionWebhook"]],[["Message"]],[["MessageManager"]]],"meta":{"line":345,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageFile","type":[[["Object"]]],"props":[{"name":"attachment","description":"The original attachment that generated this file","type":[[["Buffer"]],[["string"]],[["Stream"]]]},{"name":"name","description":"The name of this file","type":[[["string"]]]},{"name":"file","description":"The file to be sent to the API","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":41,"file":"MessagePayload.js","path":"src/structures"}},{"name":"ReactionCountDetailsData","description":"The reaction count details object contains information about super and normal reaction counts.","type":[[["Object"]]],"props":[{"name":"burst","description":"Count of super reactions","type":[[["number"]]]},{"name":"normal","description":"Count of normal reactions","type":[[["number"]]]}],"meta":{"line":70,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenuOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","optional":true,"type":[[["string"]]]},{"name":"minValues","description":"The minimum number of selections required","optional":true,"type":[[["number"]]]},{"name":"maxValues","description":"The maximum number of selections allowed","optional":true,"type":[[["number"]]]},{"name":"options","description":"Options for the select menu","optional":true,"type":[[["Array","<"],["MessageSelectOption",">"]]]},{"name":"disabled","description":"Disables the select menu to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"channelTypes","description":"List of channel types to include in the ChannelSelect component","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"meta":{"line":12,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOption","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","nullable":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","nullable":true,"type":[[["RawEmoji"]]]},{"name":"default","description":"Render this option as the default selection","type":[[["boolean"]]]}],"meta":{"line":23,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOptionData","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"default","description":"Render this option as the default selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":32,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"PartialTextInputData","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":24,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"PartialModalActionRow","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"components","description":"Partial text input components","optional":true,"type":[[["Array","<"],["PartialTextInputData",">"]]]}],"meta":{"line":31,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"PermissionOverwriteOptions","description":"An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).\n```js\n{\n 'SEND_MESSAGES': true,\n 'EMBED_LINKS': null,\n 'ATTACH_FILES': false,\n}\n```","type":[[["Object"]]],"meta":{"line":97,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"ResolvedOverwriteOptions","type":[[["Object"]]],"props":[{"name":"allow","description":"The allowed permissions","type":[[["Permissions"]]]},{"name":"deny","description":"The denied permissions","type":[[["Permissions"]]]}],"meta":{"line":109,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"RawOverwriteData","description":"The raw data for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]]]},{"name":"allow","description":"The permissions to allow","type":[[["string"]]]},{"name":"deny","description":"The permissions to deny","type":[[["string"]]]},{"name":"type","description":"The type of this OverwriteData","type":[[["number"]]]}],"meta":{"line":141,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteResolvable","description":"Data that can be resolved into {@link RawOverwriteData}. This can be:\n* PermissionOverwrites\n* OverwriteData","type":[[["PermissionOverwrites"]],[["OverwriteData"]]],"meta":{"line":150,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteData","description":"Data that can be used for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"Member or role this overwrite is for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"type","description":"The type of this OverwriteData","optional":true,"type":[[["OverwriteType"]]]}],"meta":{"line":157,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"PollQuestionMedia","description":"The media for a poll's question","type":[[["Object"]]],"props":[{"name":"text","description":"The text of this question","type":[[["string"]]]}],"meta":{"line":26,"file":"Poll.js","path":"src/structures"}},{"name":"FetchPollVotersOptions","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum number of voters to fetch","optional":true,"type":[[["number"]]]},{"name":"after","description":"The user id to fetch voters after","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":67,"file":"PollAnswer.js","path":"src/structures"}},{"name":"MessageActivity","description":"Activity sent in a message.","type":[[["Object"]]],"props":[{"name":"partyId","description":"Id of the party represented in activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of activity sent","type":[[["MessageActivityType"]]]}],"meta":{"line":9,"file":"Presence.js","path":"src/structures"}},{"name":"PresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`offline`** - user is offline or invisible\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":16,"file":"Presence.js","path":"src/structures"}},{"name":"ClientPresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":25,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityPlatform","description":"The platform of this activity:\n* **`desktop`**\n* **`samsung`** - playing on Samsung Galaxy\n* **`xbox`** - playing on Xbox Live\n* **`ios`**\n* **`android`**\n* **`embedded`**\n* **`ps4`**\n* **`ps5`**","type":[[["string"]]],"meta":{"line":172,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityTimestamps","description":"Represents timestamps of an activity","type":[[["Object"]]],"props":[{"name":"start","description":"When the activity started","nullable":true,"type":[[["number"]]]},{"name":"end","description":"When the activity will end","nullable":true,"type":[[["number"]]]}],"meta":{"line":268,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityParty","description":"Represents a party of an activity","type":[[["Object"]]],"props":[{"name":"id","description":"The party's id","nullable":true,"type":[[["string"]]]},{"name":"size","description":"Size of the party as `[current, max]`","type":[[["Array","<"],["number",">"]]]}],"meta":{"line":359,"file":"Presence.js","path":"src/structures"}},{"name":"RichPresenceImage","description":"Support:\n- cdn.discordapp.com\n- media.discordapp.net\n- Assets ID (https://discord.com/api/v9/oauth2/applications/{application_id}/assets)\n- Media Proxy (mp:external/{hash})\n- Twitch (twitch:{username})\n- YouTube (youtube:{video_id})\n- Spotify (spotify:{image_id})","type":[[["string"]]],"meta":{"line":580,"file":"Presence.js","path":"src/structures"}},{"name":"CustomStatusOptions","type":[[["Object"]]],"props":[{"name":"state","description":"The state to be displayed","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"The emoji to be displayed","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":636,"file":"Presence.js","path":"src/structures"}},{"name":"RichParty","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the party","type":[[["string"]]]},{"name":"max","description":"The maximum number of members in the party","type":[[["number"]]]},{"name":"current","description":"The current number of members in the party","type":[[["number"]]]}],"meta":{"line":813,"file":"Presence.js","path":"src/structures"}},{"name":"RichButton","type":[[["object"]]],"props":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"meta":{"line":865,"file":"Presence.js","path":"src/structures"}},{"name":"ExternalAssets","type":[[["Object"]]],"props":[{"name":"url","description":"Orginal url of the image","nullable":true,"type":[[["string"]]]},{"name":"external_asset_path","description":"Proxy url of the image (Using to RPC)","nullable":true,"type":[[["string"]]]}],"meta":{"line":953,"file":"Presence.js","path":"src/structures"}},{"name":"SpotifyMetadata","type":[[["Object"]]],"props":[{"name":"album_id","description":"The Spotify ID of the album of the song being played","type":[[["string"]]]},{"name":"artist_ids","description":"The Spotify IDs of the artists of the song being played","type":[[["Array","<"],["string",">"]]]},{"name":"context_uri","description":"The Spotify URI of the current player context","type":[[["string"]]]}],"meta":{"line":1030,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum total amount of reactions to collect","type":[[["number"]]]},{"name":"maxEmojis","description":"The maximum number of emojis to collect","type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to react","type":[[["number"]]]}],"meta":{"line":7,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"RoleColors","type":[[["Object"]]],"props":[{"name":"primaryColor","description":"The primary color of the role","type":[[["number"]]]},{"name":"secondaryColor","description":"The secondary color of the role.\nThis will make the role a gradient between the other provided colors","nullable":true,"type":[[["number"]]]},{"name":"tertiaryColor","description":"The tertiary color of the role.\nWhen sending `tertiaryColor` the API enforces the role color to be a holographic style\nwith values of `primaryColor = 11127295`, `secondaryColor = 16759788`, and `tertiaryColor = 16761760`.\nThese values are available as a constant: `Constants.HolographicStyle`","nullable":true,"type":[[["number"]]]}],"meta":{"line":72,"file":"Role.js","path":"src/structures"}},{"name":"RoleData","description":"The data for a role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number\nThis property is deprecated. Use `colors` instead.","optional":true,"type":[[["ColorResolvable"]]]},{"name":"colors","description":"The colors of the role","optional":true,"type":[[["RoleColorsResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":290,"file":"Role.js","path":"src/structures"}},{"name":"SetRolePositionOptions","description":"Options used to set the position of a role.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether to change the position relative to its current value or not","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":463,"file":"Role.js","path":"src/structures"}},{"name":"SessionClientInfo","type":[[["Object"]]],"props":[{"name":"location","description":"Location of the client (using IP address)","type":[[["string"]]]},{"name":"platform","description":"Platform of the client","type":[[["string"]]]},{"name":"os","description":"Operating system of the client","type":[[["string"]]]}],"meta":{"line":5,"file":"Session.js","path":"src/structures"}},{"name":"GuildStickerEditData","description":"Data for editing a sticker.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the sticker","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","optional":true,"type":[[["string"]]]}],"meta":{"line":235,"file":"Sticker.js","path":"src/structures"}},{"name":"TextInputComponentOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"label","description":"The text to be displayed above this text input component","optional":true,"type":[[["string"]]]},{"name":"maxLength","description":"Maximum length of text that can be entered","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"Minimum length of text required to be entered","optional":true,"type":[[["number"]]]},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether or not this text input component is required","optional":true,"type":[[["boolean"]]]},{"name":"style","description":"The style of this text input component","optional":true,"type":[[["TextInputStyleResolvable"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":14,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"TextInputStyleResolvable","description":"Data that can be resolved to a TextInputStyle. This can be\n* TextInputStyle\n* number","type":[[["number"]],[["TextInputStyle"]]],"meta":{"line":114,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadEditData","description":"The options used to edit a thread channel","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the thread","optional":true,"type":[[["string"]]]},{"name":"archived","description":"Whether the thread is archived","optional":true,"type":[[["boolean"]]]},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]},{"name":"locked","description":"Whether the thread is locked","optional":true,"type":[[["boolean"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to a thread\nCan only be edited on `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]}],"meta":{"line":314,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"GuildForumTagEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":9,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"GuildForumTag","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":15,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"GuildForumTagData","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","optional":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","optional":true,"type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","optional":true,"nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":24,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"DefaultReactionEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":33,"file":"ThreadOnlyChannel.js","path":"src/structures"}},{"name":"AvatarDecorationData","type":[[["Object"]]],"props":[{"name":"asset","description":"The avatar decoration hash","type":[[["string"]]]},{"name":"skuId","description":"The id of the avatar decoration's SKU","type":[[["Snowflake"]]]}],"meta":{"line":139,"file":"User.js","path":"src/structures"}},{"name":"UserPrimaryGuild","type":[[["Object"]]],"props":[{"name":"identityGuildId","description":"The id of the user's primary guild","nullable":true,"type":[[["Snowflake"]]]},{"name":"identityEnabled","description":"Whether the user is displaying the primary guild's tag","nullable":true,"type":[[["boolean"]]]},{"name":"tag","description":"The user's guild tag. Limited to 4 characters","nullable":true,"type":[[["string"]]]},{"name":"badge","description":"The guild tag badge hash","nullable":true,"type":[[["string"]]]}],"meta":{"line":162,"file":"User.js","path":"src/structures"}},{"name":"NameplateData","type":[[["Object"]]],"props":[{"name":"skuId","description":"The id of the nameplate's SKU","type":[[["Snowflake"]]]},{"name":"asset","description":"The nameplate's asset path","type":[[["string"]]]},{"name":"label","description":"The nameplate's label","type":[[["string"]]]},{"name":"palette","description":"Background color of the nameplate","type":[[["NameplatePalette"]]]}],"meta":{"line":189,"file":"User.js","path":"src/structures"}},{"name":"Collectibles","type":[[["Object"]]],"props":[{"name":"nameplate","description":"The user's nameplate data","nullable":true,"type":[[["NameplateData"]]]}],"meta":{"line":197,"file":"User.js","path":"src/structures"}},{"name":"WebEmbedOptions","description":"Represents the possible options for a WebEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedFooter",">"]]]},{"name":"provider","description":"The provider of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedProvider",">"]]]},{"name":"redirect","description":"Redirect URL","optional":true,"type":[[["string"]]]}],"meta":{"line":29,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedImage","description":"Represents the image of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":85,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedVideo","description":"Represents the video of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":120,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedAuthor","description":"Represents the author field of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]}],"meta":{"line":143,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedProvider","description":"Represents the provider of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":161,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedProviderData","description":"The options to provide for setting an provider for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider.","type":[[["string"]]]}],"meta":{"line":210,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebhookMessageOptions","description":"Options that can be passed into send.","type":[[["BaseMessageOptionsWithPoll"]]],"props":[{"name":"username","description":"Username override for the message","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatarURL","description":"Avatar URL override for the message","optional":true,"type":[[["string"]]]},{"name":"threadId","description":"The id of the thread in the channel to send to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"threadName","description":"Name of the thread to create (only available if webhook is in a forum channel)","optional":true,"type":[[["string"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set.","optional":true,"type":[[["MessageFlags"]]]},{"name":"appliedTags","description":"The tags to apply to the created thread (only available if the webhook is in a forum channel)","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"withComponents","description":"Whether to allow sending non-interactive components in the message.\nFor application-owned webhooks, this property is ignored","optional":true,"type":[[["boolean"]]]}],"meta":{"line":112,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditMessageOptions","description":"Options that can be passed into editMessage.","type":[[["Object"]]],"props":[{"name":"embeds","description":"See {@link WebhookMessageOptions#embeds}","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"content","description":"See {@link BaseMessageOptions#content}","optional":true,"type":[[["string"]]]},{"name":"files","description":"See {@link BaseMessageOptions#files}","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"allowedMentions","description":"See {@link BaseMessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"attachments","description":"Attachments to send with the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<"],["MessageActionRow",">"]],[["Array","<"],["MessageActionRowOptions",">"]]]},{"name":"threadId","description":"The id of the thread this message belongs to\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"withComponents","description":"Whether to allow sending non-interactive components in the message.\nFor application-owned webhooks, this property is ignored","optional":true,"type":[[["boolean"]]]}],"meta":{"line":127,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditData","description":"Options used to edit a {@link Webhook}.","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the webhook","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatar","description":"The new avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]]]},{"name":"channel","description":"The new channel for the webhook","optional":true,"type":[[["GuildTextChannelResolvable"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]],[["MediaChannel"]]]}],"meta":{"line":247,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookFetchMessageOptions","description":"Options that can be passed into fetchMessage.","type":[[["options"]]],"props":[{"name":"cache","description":"Whether to cache the message.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"threadId","description":"The id of the thread this message belongs to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":280,"file":"Webhook.js","path":"src/structures"}},{"name":"WidgetChannel","description":"Represents a channel in a Widget","type":[[["Object"]]],"props":[{"name":"id","description":"Id of the channel","type":[[["Snowflake"]]]},{"name":"name","description":"Name of the channel","type":[[["string"]]]},{"name":"position","description":"Position of the channel","type":[[["number"]]]}],"meta":{"line":17,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetActivity","description":"Activity sent in a {@link WidgetMember}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the activity","type":[[["string"]]]}],"meta":{"line":10,"file":"WidgetMember.js","path":"src/structures"}},{"name":"AttachmentFlagsResolvable","description":"Data that can be resolved to give a guild attachment bitfield. This can be:\n* A string (see {@link AttachmentFlags.FLAGS})\n* A attachment flag\n* An instance of AttachmentFlags\n* An Array of AttachmentFlagsResolvable","type":[[["string"]],[["number"]],[["AttachmentFlags"]],[["Array","<"],["AttachmentFlagsResolvable",">"]]],"meta":{"line":29,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitFieldResolvable","description":"Data that can be resolved to give a bitfield. This can be:\n* A bit number (this can be a number literal or a value taken from {@link BitField.FLAGS})\n* A string bit number\n* An instance of BitField\n* An Array of BitFieldResolvable","type":[[["number"]],[["string"]],[["bigint"]],[["BitField"]],[["Array","<"],["BitFieldResolvable",">"]]],"meta":{"line":129,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlagsResolvable","description":"Data that can be resolved to give a channel flag bitfield. This can be:\n* A string (see {@link ChannelFlags.FLAGS})\n* A channel flag\n* An instance of ChannelFlags\n* An Array of ChannelFlags","type":[[["string"]],[["number"]],[["ChannelFlags"]],[["Array","<"],["ChannelFlagsResolvable",">"]]],"meta":{"line":36,"file":"ChannelFlags.js","path":"src/util"}},{"name":"Constants","description":"Constants that can be used in an enum or object-like way.","type":[[["Object"]]],"props":[{"name":"ActivityTypes","description":"The type of an activity of a users presence.","type":[[["Object","<"],["ActivityType",", "],["number",">"]]]},{"name":"APIErrors","description":"An error encountered while performing an API request.","type":[[["Object","<"],["APIError",", "],["number",">"]]]},{"name":"ApplicationCommandOptionTypes","description":"The type of an {@link ApplicationCommandOption} object.","type":[[["Object","<"],["ApplicationCommandOptionType",", "],["number",">"]]]},{"name":"ApplicationCommandPermissionTypes","description":"The type of an {@link ApplicationCommandPermissions} object.","type":[[["Object","<"],["ApplicationCommandPermissionType",", "],["number",">"]]]},{"name":"ApplicationCommandTypes","description":"The type of an {@link ApplicationCommand} object.","type":[[["Object","<"],["ApplicationCommandType",", "],["number",">"]]]},{"name":"ApplicationRoleConnectionMetadataTypes","description":"The type of an {@link ApplicationRoleConnectionMetadata} object.","type":[[["Object","<"],["ApplicationRoleConnectionMetadataType",", "],["number",">"]]]},{"name":"AutoModerationActionTypes","description":"A type of an action which executes whenever a rule is triggered.","type":[[["Object","<"],["AutoModerationActionType",", "],["number",">"]]]},{"name":"AutoModerationRuleEventTypes","description":"Indicates in what event context\na rule should be checked.","type":[[["Object","<"],["AutoModerationRuleEventType",", "],["number",">"]]]},{"name":"AutoModerationRuleKeywordPresetTypes","description":"The internally pre-defined wordsetswhich will be searched for in content","type":[[["Object","<"],["AutoModerationRuleKeywordPresetType",", "],["number",">"]]]},{"name":"AutoModerationRuleTriggerTypes","description":"Characterizes the type\nof content which can trigger the rule.","type":[[["Object","<"],["AutoModerationRuleTriggerType",", "],["number",">"]]]},{"name":"ChannelTypes","description":"All available channel types.","type":[[["Object","<"],["ChannelType",", "],["number",">"]]]},{"name":"ClientApplicationAssetTypes","description":"The types of an {@link ApplicationAsset} object.","type":[[["ClientApplicationAssetTypes"]]]},{"name":"Colors","description":"An object with regularly used colors.","type":[[["Object","<"],["Color",", "],["number",">"]]]},{"name":"DefaultMessageNotificationLevels","description":"The value set for a guilds default message notifications.","type":[[["Object","<"],["DefaultMessageNotificationLevel",", "],["number",">"]]]},{"name":"Endpoints","description":"Object containing functions that return certain endpoints on the API.","type":[[["Endpoints"]]]},{"name":"Events","description":"The types of events emitted by the Client.","type":[[["Events"]]]},{"name":"ExplicitContentFilterLevels","description":"The value set for the explicit content filter levels for a guild.","type":[[["Object","<"],["ExplicitContentFilterLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventEntityTypes","description":"The entity type of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventEntityType",", "],["number",">"]]]},{"name":"GuildScheduledEventPrivacyLevels","description":"Privacy level of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventPrivacyLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventStatuses","description":"The status of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventStatus",", "],["number",">"]]]},{"name":"IntegrationExpireBehaviors","description":"The behavior of expiring subscribers for Integrations.","type":[[["Object","<"],["IntegrationExpireBehavior",", "],["number",">"]]]},{"name":"InteractionResponseTypes","description":"The type of an interaction response.","type":[[["Object","<"],["InteractionResponseType",", "],["number",">"]]]},{"name":"InteractionTypes","description":"The type of an {@link Interaction} object.","type":[[["Object","<"],["InteractionType",", "],["number",">"]]]},{"name":"InviteScopes","description":"The scopes of an invite.","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"RelationshipTypes","description":"Relationship Enums","type":[[["Object","<"],["RelationshipType",", "],["number",">"]]]},{"name":"SeparatorSpacingSize","description":"Size of separator padding (Enums)","type":[[["Object","<"],["SeparatorSpacingSize",", "],["number",">"]]]},{"name":"MembershipStates","description":"The value set for a team members membership state.","type":[[["Object","<"],["MembershipState",", "],["number",">"]]]},{"name":"MessageButtonStyles","description":"The style of a message button.","type":[[["Object","<"],["MessageButtonStyle",", "],["number",">"]]]},{"name":"MessageComponentTypes","description":"The type of a message component.","type":[[["Object","<"],["MessageComponentType",", "],["number",">"]]]},{"name":"MessageTypes","description":"The type of a {@link Message} object.","type":[[["Array","<"],["MessageType",">"]]]},{"name":"MFALevels","description":"The required MFA level for a guild.","type":[[["Object","<"],["MFALevel",", "],["number",">"]]]},{"name":"NSFWLevels","description":"NSFW level of a guild.","type":[[["Object","<"],["NSFWLevel",", "],["number",">"]]]},{"name":"Opcodes","description":"The types of Opcodes sent to the Gateway.","type":[[["Opcodes"]]]},{"name":"OverwriteTypes","description":"An overwrite type.","type":[[["Object","<"],["OverwriteType",", "],["number",">"]]]},{"name":"Package","description":"The package.json of the library.","type":[[["Object"]]]},{"name":"PartialTypes","description":"The type of Structure allowed to be a partial.","type":[[["Object","<"],["PartialType",", "],["PartialType",">"]]]},{"name":"PremiumTiers","description":"The premium tier (Server Boost level) of a guild.","type":[[["Object","<"],["PremiumTier",", "],["number",">"]]]},{"name":"PrivacyLevels","description":"Privacy level of a {@link StageInstance} object.","type":[[["Object","<"],["PrivacyLevel",", "],["number",">"]]]},{"name":"ShardEvents","description":"The type of events emitted by a Shard.","type":[[["ShardEvents"]]]},{"name":"Status","description":"The available statuses of the client.","type":[[["Status"]]]},{"name":"SelectMenuComponentTypes","description":"The type of any select menu.","type":[[["Object","<"],["SelectMenuComponentType",", "],["number",">"]]]},{"name":"StickerFormatTypes","description":"The value set for a stickers format type.","type":[[["Object","<"],["StickerFormatType",", "],["number",">"]]]},{"name":"StickerTypes","description":"The value set for a stickers type.","type":[[["Object","<"],["StickerType",", "],["number",">"]]]},{"name":"SweeperKeys","description":"The name of an item to be swept in Sweepers.","type":[[["Array","<"],["SweeperKey",">"]]]},{"name":"SystemMessageTypes","description":"The types of messages that are `System`.","type":[[["Array","<"],["SystemMessageType",">"]]]},{"name":"TextInputStyles","description":"The style of a text input component.","type":[[["Object","<"],["TextInputStyle",", "],["number",">"]]]},{"name":"ThreadChannelTypes","description":"The type of a {@link ThreadChannel} object.","type":[[["Array","<"],["ThreadChannelTypes",">"]]]},{"name":"UserAgent","description":"The user agent used for requests.","type":[[["string"]]]},{"name":"VerificationLevels","description":"The value set for the verification levels for a guild.","type":[[["Object","<"],["VerificationLevel",", "],["number",">"]]]},{"name":"VideoQualityModes","description":"The camera video quality mode for a {@link VoiceChannel}.","type":[[["Object","<"],["VideoQualityMode",", "],["number",">"]]]},{"name":"WebhookTypes","description":"The value set for a webhooks type.","type":[[["Object","<"],["WebhookType",", "],["number",">"]]]},{"name":"WSCodes","description":"The types of WebSocket error codes.","type":[[["WSCodes"]]]},{"name":"WSEvents","description":"The type of a WebSocket message event.","type":[[["Object","<"],["WSEventType",", "],["WSEventType",">"]]]},{"name":"HolographicStyles","description":"Holographic color values for role styling.","type":[[["HolographicStyle"]]]}],"meta":{"line":1842,"file":"Constants.js","path":"src/util"}},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age","type":[[["number"]]],"meta":{"line":5,"file":"Constants.js","path":"src/util"}},{"name":"Ciphers","description":"Chrome TLS ciphers","see":["{@link https://tls.browserleaks.com/tls}","{@link https://github.com/yifeikong/curl-impersonate}"],"type":[[["Array","<"],["string",">"]]],"meta":{"line":14,"file":"Constants.js","path":"src/util"}},{"name":"WSCodes","description":"The types of WebSocket error codes:\n* 1000: WS_CLOSE_REQUESTED\n* 1011: INTERNAL_ERROR\n* 4004: TOKEN_INVALID\n* 4010: SHARDING_INVALID\n* 4011: SHARDING_REQUIRED\n* 4013: INVALID_INTENTS\n* 4014: DISALLOWED_INTENTS","type":[[["Object","<"],["number",", "],["string",">"]]],"meta":{"line":38,"file":"Constants.js","path":"src/util"}},{"name":"ImageURLOptions","description":"Options for Image URLs.","type":[[["StaticImageURLOptions"]]],"props":[{"name":"dynamic","description":"If true, the format will dynamically change to `gif` for animated avatars.","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":70,"file":"Constants.js","path":"src/util"}},{"name":"StaticImageURLOptions","description":"Options for static Image URLs.","type":[[["Object"]]],"props":[{"name":"format","description":"One of `webp`, `png`, `jpg`, `jpeg`.","optional":true,"default":"'webp'","type":[[["string"]]]},{"name":"size","description":"One of `16`, `32`, `56`, `64`, `96`, `128`, `256`, `300`, `512`, `600`, `1024`, `2048`,\n`4096`","optional":true,"type":[[["number"]]]}],"meta":{"line":76,"file":"Constants.js","path":"src/util"}},{"name":"Endpoints","description":"An object containing functions that return certain endpoints on the API.","see":["{@link https://discord.com/developers/docs/reference#image-formatting-cdn-endpoints}"],"type":[[["Object","<"],["string",", ("],["function","()|"],["string",")>"]]],"meta":{"line":84,"file":"Constants.js","path":"src/util"}},{"name":"Status","description":"The current status of the client. Here are the available statuses:\n* READY: 0\n* CONNECTING: 1\n* RECONNECTING: 2\n* IDLE: 3\n* NEARLY: 4\n* DISCONNECTED: 5\n* WAITING_FOR_GUILDS: 6\n* IDENTIFYING: 7\n* RESUMING: 8","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":142,"file":"Constants.js","path":"src/util"}},{"name":"VoiceStatus","description":"The current status of a voice connection. Here are the available statuses:\n* CONNECTED: 0\n* CONNECTING: 1\n* AUTHENTICATING: 2\n* RECONNECTING: 3\n* DISCONNECTED: 4","type":[[["number"]]],"meta":{"line":167,"file":"Constants.js","path":"src/util"}},{"name":"Opcodes","description":"The Opcodes sent to the Gateway:\n* DISPATCH: 0\n* HEARTBEAT: 1\n* IDENTIFY: 2\n* STATUS_UPDATE: 3\n* VOICE_STATE_UPDATE: 4\n* VOICE_GUILD_PING: 5\n* RESUME: 6\n* RECONNECT: 7\n* REQUEST_GUILD_MEMBERS: 8\n* INVALID_SESSION: 9\n* HELLO: 10\n* HEARTBEAT_ACK: 11\n* GUILD_SYNC: 12 [Unused]\n* DM_UPDATE: 13 # Send => used to get dm features\n* GUILD_SUBSCRIPTIONS: 14 # Send => discord responds back with GUILD_MEMBER_LIST_UPDATE type SYNC...\n* LOBBY_CONNECT: 15\n* LOBBY_DISCONNECT: 16\n* LOBBY_VOICE_STATE_UPDATE: 17 # Receive\n* STREAM_CREATE: 18\n* STREAM_DELETE: 19\n* STREAM_WATCH: 20\n* STREAM_PING: 21 # Send\n* STREAM_SET_PAUSED: 22\n* LFG_SUBSCRIPTIONS: 23 [Unused]\n* REQUEST_GUILD_APPLICATION_COMMANDS: 24 [Unused]\n* EMBEDDED_ACTIVITY_LAUNCH: 25 => Launch an embedded activity in a voice channel or call.\n* EMBEDDED_ACTIVITY_CLOSE: 26 => Stop an embedded activity.\n* EMBEDDED_ACTIVITY_UPDATE: 27 => Update an embedded activity.\n* REQUEST_FORUM_UNREADS: 28 => Request forum channel unread counts.\n* REMOTE_COMMAND: 29 => Send a remote command to an embedded (Xbox, PlayStation) voice session.\n* GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH: 30 => Request deleted entity IDs not matching a given hash for a guild.\n* REQUEST_SOUNDBOARD_SOUNDS: 31\n* SPEED_TEST_CREATE: 32 => Create a voice speed test.\n* SPEED_TEST_DELETE: 33 => Delete a voice speed test.\n* REQUEST_LAST_MESSAGES: 34 => Request last messages for a guild's channels.\n* SEARCH_RECENT_MEMBERS: 35 => ~ Opcode 8 (Member Safety)\n* REQUEST_CHANNEL_STATUSES: 36 => Request Voice Channel status.\n* GUILD_SUBSCRIPTIONS_BULK: 37 => ~ Opcode 14","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":184,"file":"Constants.js","path":"src/util"}},{"name":"VoiceOpcodes","type":[[["Opject","<"],["string",", "],["number",">"]]],"meta":{"line":267,"file":"Constants.js","path":"src/util"}},{"name":"Events","description":"The types of events emitted by the Client:\n* RATE_LIMIT: rateLimit\n* INVALID_REQUEST_WARNING: invalidRequestWarning\n* API_RESPONSE: apiResponse\n* API_REQUEST: apiRequest\n* CLIENT_READY: ready\n* APPLICATION_COMMAND_CREATE: applicationCommandCreate (deprecated)\n* APPLICATION_COMMAND_DELETE: applicationCommandDelete (deprecated)\n* APPLICATION_COMMAND_UPDATE: applicationCommandUpdate (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE: applicationCommandPermissionsUpdate\n* AUTO_MODERATION_ACTION_EXECUTION: autoModerationActionExecution\n* AUTO_MODERATION_RULE_CREATE: autoModerationRuleCreate\n* AUTO_MODERATION_RULE_DELETE: autoModerationRuleDelete\n* AUTO_MODERATION_RULE_UPDATE: autoModerationRuleUpdate\n* GUILD_AVAILABLE: guildAvailable\n* GUILD_CREATE: guildCreate\n* GUILD_DELETE: guildDelete\n* GUILD_UPDATE: guildUpdate\n* GUILD_UNAVAILABLE: guildUnavailable\n* GUILD_MEMBER_ADD: guildMemberAdd\n* GUILD_MEMBER_REMOVE: guildMemberRemove\n* GUILD_MEMBER_UPDATE: guildMemberUpdate\n* GUILD_MEMBER_AVAILABLE: guildMemberAvailable\n* GUILD_MEMBERS_CHUNK: guildMembersChunk\n* GUILD_INTEGRATIONS_UPDATE: guildIntegrationsUpdate\n* GUILD_ROLE_CREATE: roleCreate\n* GUILD_ROLE_DELETE: roleDelete\n* INVITE_CREATE: inviteCreate\n* INVITE_DELETE: inviteDelete\n* GUILD_ROLE_UPDATE: roleUpdate\n* GUILD_EMOJI_CREATE: emojiCreate\n* GUILD_EMOJI_DELETE: emojiDelete\n* GUILD_EMOJI_UPDATE: emojiUpdate\n* GUILD_BAN_ADD: guildBanAdd\n* GUILD_BAN_REMOVE: guildBanRemove\n* CHANNEL_CREATE: channelCreate\n* CHANNEL_DELETE: channelDelete\n* CHANNEL_UPDATE: channelUpdate\n* CHANNEL_PINS_UPDATE: channelPinsUpdate\n* MESSAGE_CREATE: messageCreate\n* MESSAGE_DELETE: messageDelete\n* MESSAGE_UPDATE: messageUpdate\n* MESSAGE_BULK_DELETE: messageDeleteBulk\n* MESSAGE_REACTION_ADD: messageReactionAdd\n* MESSAGE_REACTION_REMOVE: messageReactionRemove\n* MESSAGE_REACTION_REMOVE_ALL: messageReactionRemoveAll\n* MESSAGE_REACTION_REMOVE_EMOJI: messageReactionRemoveEmoji\n* THREAD_CREATE: threadCreate\n* THREAD_DELETE: threadDelete\n* THREAD_UPDATE: threadUpdate\n* THREAD_LIST_SYNC: threadListSync\n* THREAD_MEMBER_UPDATE: threadMemberUpdate\n* THREAD_MEMBERS_UPDATE: threadMembersUpdate\n* USER_UPDATE: userUpdate\n* PRESENCE_UPDATE: presenceUpdate\n* VOICE_SERVER_UPDATE: voiceServerUpdate\n* VOICE_STATE_UPDATE: voiceStateUpdate\n* TYPING_START: typingStart\n* WEBHOOKS_UPDATE: webhookUpdate\n* ERROR: error\n* WARN: warn\n* DEBUG: debug\n* CACHE_SWEEP: cacheSweep\n* SHARD_DISCONNECT: shardDisconnect\n* SHARD_ERROR: shardError\n* SHARD_RECONNECTING: shardReconnecting\n* SHARD_READY: shardReady\n* SHARD_RESUME: shardResume\n* INVALIDATED: invalidated\n* RAW: raw\n* STAGE_INSTANCE_CREATE: stageInstanceCreate\n* STAGE_INSTANCE_UPDATE: stageInstanceUpdate\n* STAGE_INSTANCE_DELETE: stageInstanceDelete\n* GUILD_STICKER_CREATE: stickerCreate\n* GUILD_STICKER_DELETE: stickerDelete\n* GUILD_STICKER_UPDATE: stickerUpdate\n* GUILD_SCHEDULED_EVENT_CREATE: guildScheduledEventCreate\n* GUILD_SCHEDULED_EVENT_UPDATE: guildScheduledEventUpdate\n* GUILD_SCHEDULED_EVENT_DELETE: guildScheduledEventDelete\n* GUILD_SCHEDULED_EVENT_USER_ADD: guildScheduledEventUserAdd\n* GUILD_SCHEDULED_EVENT_USER_REMOVE: guildScheduledEventUserRemove\n* GUILD_AUDIT_LOG_ENTRY_CREATE: guildAuditLogEntryCreate\n* UNHANDLED_PACKET: unhandledPacket\n* RELATIONSHIP_ADD: relationshipAdd\n* RELATIONSHIP_REMOVE: relationshipRemove\n* RELATIONSHIP_UPDATE: relationshipUpdate\n* CHANNEL_RECIPIENT_ADD: channelRecipientAdd\n* CHANNEL_RECIPIENT_REMOVE: channelRecipientRemove\n* INTERACTION_MODAL_CREATE: interactionModalCreate\n* CALL_CREATE: callCreate\n* CALL_UPDATE: callUpdate\n* CALL_DELETE: callDelete\n* VOICE_CHANNEL_EFFECT_SEND: voiceChannelEffectSend","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":289,"file":"Constants.js","path":"src/util"}},{"name":"ShardEvents","description":"The types of events emitted by a Shard:\n* CLOSE: close\n* DESTROYED: destroyed\n* INVALID_SESSION: invalidSession\n* READY: ready\n* RESUMED: resumed\n* ALL_READY: allReady","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":485,"file":"Constants.js","path":"src/util"}},{"name":"PartialType","description":"The type of Structure allowed to be a partial:\n* USER\n* CHANNEL (only affects DMChannels)\n* GUILD_MEMBER\n* MESSAGE\n* REACTION\n* GUILD_SCHEDULED_EVENT\nPartials require you to put checks in place when handling data. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for more information.","type":[[["string"]]],"meta":{"line":504,"file":"Constants.js","path":"src/util"}},{"name":"WSEventType","description":"The type of a WebSocket message event, e.g. `MESSAGE_CREATE`. Here are the available events:\n* READY\n* RESUMED\n* APPLICATION_COMMAND_CREATE (deprecated)\n* APPLICATION_COMMAND_DELETE (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE\n* APPLICATION_COMMAND_UPDATE (deprecated)\n* AUTO_MODERATION_ACTION_EXECUTION\n* AUTO_MODERATION_RULE_CREATE\n* AUTO_MODERATION_RULE_DELETE\n* AUTO_MODERATION_RULE_UPDATE\n* GUILD_CREATE\n* GUILD_DELETE\n* GUILD_UPDATE\n* INVITE_CREATE\n* INVITE_DELETE\n* GUILD_MEMBER_ADD\n* GUILD_MEMBER_REMOVE\n* GUILD_MEMBER_UPDATE\n* GUILD_MEMBERS_CHUNK\n* GUILD_INTEGRATIONS_UPDATE\n* GUILD_ROLE_CREATE\n* GUILD_ROLE_DELETE\n* GUILD_ROLE_UPDATE\n* GUILD_BAN_ADD\n* GUILD_BAN_REMOVE\n* GUILD_EMOJIS_UPDATE\n* CHANNEL_CREATE\n* CHANNEL_DELETE\n* CHANNEL_UPDATE\n* CHANNEL_PINS_UPDATE\n* MESSAGE_CREATE\n* MESSAGE_DELETE\n* MESSAGE_UPDATE\n* MESSAGE_DELETE_BULK\n* MESSAGE_REACTION_ADD\n* MESSAGE_REACTION_REMOVE\n* MESSAGE_REACTION_REMOVE_ALL\n* MESSAGE_REACTION_REMOVE_EMOJI\n* THREAD_CREATE\n* THREAD_UPDATE\n* THREAD_DELETE\n* THREAD_LIST_SYNC\n* THREAD_MEMBER_UPDATE\n* THREAD_MEMBERS_UPDATE\n* USER_UPDATE\n* PRESENCE_UPDATE\n* TYPING_START\n* VOICE_STATE_UPDATE\n* VOICE_SERVER_UPDATE\n* WEBHOOKS_UPDATE\n* STAGE_INSTANCE_CREATE\n* STAGE_INSTANCE_UPDATE\n* STAGE_INSTANCE_DELETE\n* GUILD_STICKERS_UPDATE\n* GUILD_SCHEDULED_EVENT_CREATE\n* GUILD_SCHEDULED_EVENT_UPDATE\n* GUILD_SCHEDULED_EVENT_DELETE\n* GUILD_SCHEDULED_EVENT_USER_ADD\n* GUILD_SCHEDULED_EVENT_USER_REMOVE\n* GUILD_AUDIT_LOG_ENTRY_CREATE","see":["{@link https://discord.com/developers/docs/topics/gateway-events#receive-events}"],"type":[[["string"]]],"meta":{"line":518,"file":"Constants.js","path":"src/util"}},{"name":"InviteScope","description":"A valid scope to request when generating an invite link.\nScopes that require whitelist are not considered valid for this generator\n* `applications.builds.read`: allows reading build data for a users applications\n* `applications.commands`: allows this bot to create commands in the server\n* `applications.entitlements`: allows reading entitlements for a users applications\n* `applications.store.update`: allows reading and updating of store data for a users applications\n* `bot`: makes the bot join the selected guild\n* `connections`: makes the endpoint for getting a users connections available\n* `email`: allows the `/users/@me` endpoint return with an email\n* `identify`: allows the `/users/@me` endpoint without an email\n* `guilds`: makes the `/users/@me/guilds` endpoint available for a user\n* `guilds.join`: allows the bot to join the user to any guild it is in using Guild#addMember\n* `gdm.join`: allows joining the user to a group dm\n* `webhook.incoming`: generates a webhook to a channel\n* `role_connections.write`: allows your app to update a user's connection and metadata for the app","see":["{@link https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes}"],"type":[[["string"]]],"meta":{"line":646,"file":"Constants.js","path":"src/util"}},{"name":"IntegrationExpireBehavior","description":"The behavior of expiring subscribers for Integrations. This can be:\n* REMOVE_ROLE\n* KICK","see":["{@link https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors}"],"type":[[["string"]]],"meta":{"line":682,"file":"Constants.js","path":"src/util"}},{"name":"MessageType","description":"The type of a message, e.g. `DEFAULT`. Here are the available types:\n* DEFAULT\n* RECIPIENT_ADD\n* RECIPIENT_REMOVE\n* CALL\n* CHANNEL_NAME_CHANGE\n* CHANNEL_ICON_CHANGE\n* CHANNEL_PINNED_MESSAGE\n* GUILD_MEMBER_JOIN\n* USER_PREMIUM_GUILD_SUBSCRIPTION\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3\n* CHANNEL_FOLLOW_ADD\n* GUILD_DISCOVERY_DISQUALIFIED\n* GUILD_DISCOVERY_REQUALIFIED\n* GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING\n* GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING\n* THREAD_CREATED\n* REPLY\n* APPLICATION_COMMAND\n* THREAD_STARTER_MESSAGE\n* GUILD_INVITE_REMINDER\n* CONTEXT_MENU_COMMAND\n* AUTO_MODERATION_ACTION\n* ROLE_SUBSCRIPTION_PURCHASE\n* INTERACTION_PREMIUM_UPSELL\n* STAGE_START\n* STAGE_END\n* STAGE_SPEAKER\n* STAGE_RAISE_HAND\n* STAGE_TOPIC\n* GUILD_APPLICATION_PREMIUM_SUBSCRIPTION\n* PREMIUM_REFERRAL\n* GUILD_INCIDENT_ALERT_MODE_ENABLED\n* GUILD_INCIDENT_ALERT_MODE_DISABLED\n* GUILD_INCIDENT_REPORT_RAID\n* GUILD_INCIDENT_REPORT_FALSE_ALARM\n* GUILD_DEADCHAT_REVIVE_PROMPT\n* CUSTOM_GIFT\n* GUILD_GAMING_STATS_PROMPT\n* PURCHASE_NOTIFICATION\n* POLL_RESULT\n* CHANGELOG\n* NITRO_NOTIFICATION","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-types}","{@link https://docs.discord.food/resources/message#message-type}"],"type":[[["string"]]],"meta":{"line":691,"file":"Constants.js","path":"src/util"}},{"name":"MessageReferenceType","description":"The type of a message reference, e.g. `DEFAULT`. Here are the available types:\n* DEFAULT\n* FORWARD","see":["{@link https://discord.com/developers/docs/resources/message#message-reference-types}"],"type":[[["string"]]],"meta":{"line":793,"file":"Constants.js","path":"src/util"}},{"name":"SweeperKey","description":"The name of an item to be swept in Sweepers\n* `applicationCommands` - both global and guild commands\n* `autoModerationRules`\n* `bans`\n* `emojis`\n* `invites` - accepts the `lifetime` property, using it will sweep based on expires timestamp\n* `guildMembers`\n* `messages` - accepts the `lifetime` property, using it will sweep based on edited or created timestamp\n* `presences`\n* `reactions`\n* `stageInstances`\n* `stickers`\n* `threadMembers`\n* `threads` - accepts the `lifetime` property, using it will sweep archived threads based on archived timestamp\n* `users`\n* `voiceStates`","type":[[["string"]]],"meta":{"line":805,"file":"Constants.js","path":"src/util"}},{"name":"SystemMessageType","description":"The types of messages that are `System`. The available types are `MessageTypes` excluding:\n* DEFAULT\n* REPLY\n* APPLICATION_COMMAND\n* CONTEXT_MENU_COMMAND","type":[[["string"]]],"meta":{"line":842,"file":"Constants.js","path":"src/util"}},{"name":"ActivityType","description":"Bots cannot set a `CUSTOM` activity type, it is only for custom statuses received from users\nThe type of an activity of a user's presence. Here are the available types:\n* PLAYING\n* STREAMING\n* LISTENING\n* WATCHING\n* CUSTOM\n* COMPETING\n* HANG","see":["{@link https://discord.com/developers/docs/game-sdk/activities#data-models-activitytype-enum}"],"type":[[["string"]]],"meta":{"line":854,"file":"Constants.js","path":"src/util"}},{"name":"ChannelType","description":"All available channel types:\n* `GUILD_TEXT` - a guild text channel\n* `DM` - a DM channel\n* `GUILD_VOICE` - a guild voice channel\n* `GROUP_DM` - a group DM channel\n* `GUILD_CATEGORY` - a guild category channel\n* `GUILD_NEWS` - a guild news channel\n* `GUILD_STORE` - a guild store channel\nStore channels are deprecated and will be removed from Discord in March 2022. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.\n* `GUILD_NEWS_THREAD` - a guild news channel's public thread channel\n* `GUILD_PUBLIC_THREAD` - a guild text channel's public thread channel\n* `GUILD_PRIVATE_THREAD` - a guild text channel's private thread channel\n* `GUILD_STAGE_VOICE` - a guild stage voice channel\n* `GUILD_DIRECTORY` - the channel in a hub containing guilds\n* `GUILD_FORUM` - a channel that can only contain threads\n* `GUILD_MEDIA` - a channel that can only contain threads, similar to `GUILD_FORUM` channels\n* `UNKNOWN` - a generic channel of unknown type, could be Channel or GuildChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types}"],"type":[[["string"]]],"meta":{"line":869,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannels","description":"The channels that are text-based.\n* DMChannel\n* TextChannel\n* NewsChannel\n* ThreadChannel\n* VoiceChannel\n* StageChannel","type":[[["DMChannel"]],[["TextChannel"]],[["NewsChannel"]],[["ThreadChannel"]],[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":911,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelsResolvable","description":"Data that resolves to give a text-based channel. This can be:\n* A text-based channel\n* A snowflake","type":[[["TextBasedChannels"]],[["Snowflake"]]],"meta":{"line":922,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelTypes","description":"The types of channels that are text-based. The available types are:\n* DM\n* GUILD_TEXT\n* GUILD_NEWS\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":929,"file":"Constants.js","path":"src/util"}},{"name":"ThreadChannelTypes","description":"The types of channels that are threads. The available types are:\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD","type":[[["string"]]],"meta":{"line":952,"file":"Constants.js","path":"src/util"}},{"name":"VoiceBasedChannelTypes","description":"The types of channels that are voice-based. The available types are:\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":961,"file":"Constants.js","path":"src/util"}},{"name":"ClientApplicationAssetTypes","description":"The types of assets of an application:\n* SMALL: 1\n* BIG: 2","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":969,"file":"Constants.js","path":"src/util"}},{"name":"Color","description":"A commonly used color:\n* DEFAULT\n* WHITE\n* AQUA\n* GREEN\n* BLUE\n* YELLOW\n* PURPLE\n* LUMINOUS_VIVID_PINK\n* FUCHSIA\n* GOLD\n* ORANGE\n* RED\n* GREY\n* NAVY\n* DARK_AQUA\n* DARK_GREEN\n* DARK_BLUE\n* DARK_PURPLE\n* DARK_VIVID_PINK\n* DARK_GOLD\n* DARK_ORANGE\n* DARK_RED\n* DARK_GREY\n* DARKER_GREY\n* LIGHT_GREY\n* DARK_NAVY\n* BLURPLE\n* GREYPLE\n* DARK_BUT_NOT_BLACK\n* NOT_QUITE_BLACK","type":[[["string"]]],"meta":{"line":980,"file":"Constants.js","path":"src/util"}},{"name":"HolographicStyle","description":"Holographic color values for role styling.\nWhen using `tertiaryColor`, the API enforces these specific values for holographic effect.\n\n* PRIMARY: 11127295 (0xA9FFFF)\n* SECONDARY: 16759788 (0xFFCCCC)\n* TERTIARY: 16761760 (0xFFE0A0)","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":1047,"file":"Constants.js","path":"src/util"}},{"name":"ExplicitContentFilterLevel","description":"The value set for the explicit content filter levels for a guild:\n* DISABLED\n* MEMBERS_WITHOUT_ROLES\n* ALL_MEMBERS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level}"],"type":[[["string"]]],"meta":{"line":1062,"file":"Constants.js","path":"src/util"}},{"name":"VerificationLevel","description":"The value set for the verification levels for a guild:\n* NONE\n* LOW\n* MEDIUM\n* HIGH\n* VERY_HIGH","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-verification-level}"],"type":[[["string"]]],"meta":{"line":1072,"file":"Constants.js","path":"src/util"}},{"name":"APIError","description":"An error encountered while performing an API request. Here are the potential errors:\n* UNKNOWN_ACCOUNT\n* UNKNOWN_APPLICATION\n* UNKNOWN_CHANNEL\n* UNKNOWN_GUILD\n* UNKNOWN_INTEGRATION\n* UNKNOWN_INVITE\n* UNKNOWN_MEMBER\n* UNKNOWN_MESSAGE\n* UNKNOWN_OVERWRITE\n* UNKNOWN_PROVIDER\n* UNKNOWN_ROLE\n* UNKNOWN_TOKEN\n* UNKNOWN_USER\n* UNKNOWN_EMOJI\n* UNKNOWN_WEBHOOK\n* UNKNOWN_WEBHOOK_SERVICE\n* UNKNOWN_SESSION\n* UNKNOWN_BAN\n* UNKNOWN_SKU\n* UNKNOWN_STORE_LISTING\n* UNKNOWN_ENTITLEMENT\n* UNKNOWN_BUILD\n* UNKNOWN_LOBBY\n* UNKNOWN_BRANCH\n* UNKNOWN_STORE_DIRECTORY_LAYOUT\n* UNKNOWN_REDISTRIBUTABLE\n* UNKNOWN_GIFT_CODE\n* UNKNOWN_STREAM\n* UNKNOWN_PREMIUM_SERVER_SUBSCRIBE_COOLDOWN\n* UNKNOWN_GUILD_TEMPLATE\n* UNKNOWN_DISCOVERABLE_SERVER_CATEGORY\n* UNKNOWN_STICKER\n* UNKNOWN_INTERACTION\n* UNKNOWN_APPLICATION_COMMAND\n* UNKNOWN_APPLICATION_COMMAND_PERMISSIONS\n* UNKNOWN_STAGE_INSTANCE\n* UNKNOWN_GUILD_MEMBER_VERIFICATION_FORM\n* UNKNOWN_GUILD_WELCOME_SCREEN\n* UNKNOWN_GUILD_SCHEDULED_EVENT\n* UNKNOWN_GUILD_SCHEDULED_EVENT_USER\n* BOT_PROHIBITED_ENDPOINT\n* BOT_ONLY_ENDPOINT\n* CANNOT_SEND_EXPLICIT_CONTENT\n* NOT_AUTHORIZED\n* SLOWMODE_RATE_LIMIT\n* ACCOUNT_OWNER_ONLY\n* ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED\n* CHANNEL_HIT_WRITE_RATELIMIT\n* SERVER_HIT_WRITE_RATELIMIT\n* CONTENT_NOT_ALLOWED\n* GUILD_PREMIUM_LEVEL_TOO_LOW\n* MAXIMUM_GUILDS\n* MAXIMUM_FRIENDS\n* MAXIMUM_PINS\n* MAXIMUM_RECIPIENTS\n* MAXIMUM_ROLES\n* MAXIMUM_WEBHOOKS\n* MAXIMUM_EMOJIS\n* MAXIMUM_REACTIONS\n* MAXIMUM_CHANNELS\n* MAXIMUM_ATTACHMENTS\n* MAXIMUM_INVITES\n* MAXIMUM_ANIMATED_EMOJIS\n* MAXIMUM_SERVER_MEMBERS\n* MAXIMUM_NUMBER_OF_SERVER_CATEGORIES\n* GUILD_ALREADY_HAS_TEMPLATE\n* MAXIMUM_THREAD_PARTICIPANTS\n* MAXIMUM_NON_GUILD_MEMBERS_BANS\n* MAXIMUM_BAN_FETCHES\n* MAXIMUM_NUMBER_OF_UNCOMPLETED_GUILD_SCHEDULED_EVENTS_REACHED\n* MAXIMUM_NUMBER_OF_STICKERS_REACHED\n* MAXIMUM_PRUNE_REQUESTS\n* MAXIMUM_GUILD_WIDGET_SETTINGS_UPDATE\n* UNAUTHORIZED\n* ACCOUNT_VERIFICATION_REQUIRED\n* DIRECT_MESSAGES_TOO_FAST\n* REQUEST_ENTITY_TOO_LARGE\n* FEATURE_TEMPORARILY_DISABLED\n* USER_BANNED\n* TARGET_USER_NOT_CONNECTED_TO_VOICE\n* ALREADY_CROSSPOSTED\n* MISSING_ACCESS\n* INVALID_ACCOUNT_TYPE\n* CANNOT_EXECUTE_ON_DM\n* EMBED_DISABLED\n* CANNOT_EDIT_MESSAGE_BY_OTHER\n* CANNOT_SEND_EMPTY_MESSAGE\n* CANNOT_MESSAGE_USER\n* CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL\n* CHANNEL_VERIFICATION_LEVEL_TOO_HIGH\n* OAUTH2_APPLICATION_BOT_ABSENT\n* MAXIMUM_OAUTH2_APPLICATIONS\n* INVALID_OAUTH_STATE\n* MISSING_PERMISSIONS\n* INVALID_AUTHENTICATION_TOKEN\n* NOTE_TOO_LONG\n* INVALID_BULK_DELETE_QUANTITY\n* CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL\n* INVALID_OR_TAKEN_INVITE_CODE\n* CANNOT_EXECUTE_ON_SYSTEM_MESSAGE\n* CANNOT_EXECUTE_ON_CHANNEL_TYPE\n* INVALID_OAUTH_TOKEN\n* MISSING_OAUTH_SCOPE\n* INVALID_WEBHOOK_TOKEN\n* INVALID_ROLE\n* INVALID_RECIPIENTS\n* BULK_DELETE_MESSAGE_TOO_OLD\n* INVALID_FORM_BODY\n* INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT\n* INVALID_API_VERSION\n* FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE\n* INVALID_FILE_UPLOADED\n* CANNOT_SELF_REDEEM_GIFT\n* INVALID_GUILD\n* INVALID_MESSAGE_TYPE\n* PAYMENT_SOURCE_REQUIRED\n* CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL\n* INVALID_STICKER_SENT\n* INVALID_OPERATION_ON_ARCHIVED_THREAD\n* INVALID_THREAD_NOTIFICATION_SETTINGS\n* PARAMETER_EARLIER_THAN_CREATION\n* GUILD_NOT_AVAILABLE_IN_LOCATION\n* GUILD_MONETIZATION_REQUIRED\n* INSUFFICIENT_BOOSTS\n* INVALID_JSON\n* TWO_FACTOR_REQUIRED\n* NO_USERS_WITH_DISCORDTAG_EXIST\n* REACTION_BLOCKED\n* RESOURCE_OVERLOADED\n* STAGE_ALREADY_OPEN\n* CANNOT_REPLY_WITHOUT_READ_MESSAGE_HISTORY_PERMISSION\n* MESSAGE_ALREADY_HAS_THREAD\n* THREAD_LOCKED\n* MAXIMUM_ACTIVE_THREADS\n* MAXIMUM_ACTIVE_ANNOUNCEMENT_THREADS\n* INVALID_JSON_FOR_UPLOADED_LOTTIE_FILE\n* UPLOADED_LOTTIES_CANNOT_CONTAIN_RASTERIZED_IMAGES\n* STICKER_MAXIMUM_FRAMERATE_EXCEEDED\n* STICKER_FRAME_COUNT_EXCEEDS_MAXIMUM_OF_1000_FRAMES\n* LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS_EXCEEDED\n* STICKER_FRAME_RATE_IS_TOO_SMALL_OR_TOO_LARGE\n* STICKER_ANIMATION_DURATION_EXCEEDS_MAXIMUM_OF_5_SECONDS\n* CANNOT_UPDATE_A_FINISHED_EVENT\n* FAILED_TO_CREATE_STAGE_NEEDED_FOR_STAGE_EVENT","see":["{@link https://discord.com/developers/docs/topics/opcodes-and-status-codes#json-json-error-codes}","{@link https://gist.github.com/Dziurwa14/de2498e5ee28d2089f095aa037957cbb}"],"type":[[["string"]]],"meta":{"line":1084,"file":"Constants.js","path":"src/util"}},{"name":"DefaultMessageNotificationLevel","description":"The value set for a guild's default message notifications, e.g. `ALL_MESSAGES`. Here are the available types:\n* ALL_MESSAGES\n* ONLY_MENTIONS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level}"],"type":[[["string"]]],"meta":{"line":1389,"file":"Constants.js","path":"src/util"}},{"name":"MembershipState","description":"The value set for a team member's membership state:\n* INVITED\n* ACCEPTED","see":["{@link https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum}"],"type":[[["string"]]],"meta":{"line":1398,"file":"Constants.js","path":"src/util"}},{"name":"WebhookType","description":"The value set for a webhook's type:\n* Incoming\n* Channel Follower\n* Application","see":["{@link https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types}"],"type":[[["string"]]],"meta":{"line":1407,"file":"Constants.js","path":"src/util"}},{"name":"StickerType","description":"The value set for a sticker's type:\n* STANDARD\n* GUILD","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types}"],"type":[[["string"]]],"meta":{"line":1417,"file":"Constants.js","path":"src/util"}},{"name":"StickerFormatType","description":"The value set for a sticker's format type:\n* PNG\n* APNG\n* LOTTIE\n* GIF","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types}"],"type":[[["string"]]],"meta":{"line":1426,"file":"Constants.js","path":"src/util"}},{"name":"OverwriteType","description":"An overwrite type:\n* role\n* member","see":["{@link https://discord.com/developers/docs/resources/channel#overwrite-object-overwrite-structure}"],"type":[[["string"]]],"meta":{"line":1437,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandType","description":"The type of an {@link ApplicationCommand} object:\n* CHAT_INPUT\n* USER\n* MESSAGE","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types}"],"type":[[["string"]]],"meta":{"line":1447,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandOptionType","description":"The type of an {@link ApplicationCommandOption} object:\n* SUB_COMMAND\n* SUB_COMMAND_GROUP\n* STRING\n* INTEGER\n* BOOLEAN\n* USER\n* CHANNEL\n* ROLE\n* MENTIONABLE\n* NUMBER\n* ATTACHMENT","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type}"],"type":[[["string"]]],"meta":{"line":1457,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandPermissionType","description":"The type of an {@link ApplicationCommandPermissions} object:\n* ROLE\n* USER","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type}"],"type":[[["string"]]],"meta":{"line":1488,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationRoleConnectionMetadataType","description":"Each metadata type offers a comparison operation that allows\nguilds to configure role requirements based on metadata values stored by the bot.\nBots specify a metadata value for each user and guilds specify\nthe required guild's configured value within the guild role settings.\nAll available channel types:\n* INTEGER_LESS_THAN_OR_EQUAL\n* INTEGER_GREATER_THAN_OR_EQUAL\n* INTEGER_EQUAL\n* INTEGER_NOT_EQUAL\n* DATATIME_LESS_THAN_OR_EQUAL\n* DATATIME_GREATER_THAN_OR_EQUAL\n* BOOLEAN_EQUAL\n* BOOLEAN_NOT_EQUAL","type":[[["string"]]],"meta":{"line":1497,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleTriggerType","description":"The type of an {@link AutoModerationRuleTriggerTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-types}"],"type":[[["string"]]],"meta":{"line":1526,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleKeywordPresetType","description":"The type of an {@link AutoModerationRuleKeywordPresetTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-preset-types}"],"type":[[["string"]]],"meta":{"line":1537,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationActionType","description":"The type of an {@link AutoModerationActionTypes} object:\n* BLOCK_MESSAGE\n* SEND_ALERT_MESSAGE\n* TIMEOUT","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-types}"],"type":[[["string"]]],"meta":{"line":1547,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleEventType","description":"The type of an {@link AutoModerationRuleEventTypes} object:\n* MESSAGE_SEND","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-event-types}"],"type":[[["string"]]],"meta":{"line":1557,"file":"Constants.js","path":"src/util"}},{"name":"InteractionType","description":"The type of an {@link Interaction} object:\n* PING\n* APPLICATION_COMMAND\n* MESSAGE_COMPONENT\n* APPLICATION_COMMAND_AUTOCOMPLETE\n* MODAL_SUBMIT","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type}"],"type":[[["string"]]],"meta":{"line":1565,"file":"Constants.js","path":"src/util"}},{"name":"InteractionResponseType","description":"The type of an interaction response:\n* PONG\n* CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_MESSAGE_UPDATE\n* UPDATE_MESSAGE\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESULT\n* MODAL","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-type}"],"type":[[["string"]]],"meta":{"line":1584,"file":"Constants.js","path":"src/util"}},{"name":"MessageComponentType","description":"The type of a message component\n* ACTION_ROW\n* BUTTON\n* STRING_SELECT\n* TEXT_INPUT\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1609,"file":"Constants.js","path":"src/util"}},{"name":"SelectMenuComponentType","description":"The types of components that are select menus. The available types are:\n* STRING_MENU\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1643,"file":"Constants.js","path":"src/util"}},{"name":"MessageButtonStyle","description":"The style of a message button\n* PRIMARY\n* SECONDARY\n* SUCCESS\n* DANGER\n* LINK","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object-button-styles}"],"type":[[["string"]]],"meta":{"line":1663,"file":"Constants.js","path":"src/util"}},{"name":"MFALevel","description":"The required MFA level for a guild\n* NONE\n* ELEVATED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-mfa-level}"],"type":[[["string"]]],"meta":{"line":1675,"file":"Constants.js","path":"src/util"}},{"name":"NSFWLevel","description":"NSFW level of a Guild:\n* DEFAULT\n* EXPLICIT\n* SAFE\n* AGE_RESTRICTED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level}"],"type":[[["string"]]],"meta":{"line":1684,"file":"Constants.js","path":"src/util"}},{"name":"PrivacyLevel","description":"Privacy level of a {@link StageInstance} object:\n* PUBLIC\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-privacy-level}"],"type":[[["string"]]],"meta":{"line":1695,"file":"Constants.js","path":"src/util"}},{"name":"TextInputStyle","description":"The style of a text input component\n* SHORT\n* PARAGRAPH","see":["{@link https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles}"],"type":[[["string"]]],"meta":{"line":1704,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventPrivacyLevel","description":"Privacy level of a {@link GuildScheduledEvent} object:\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level}"],"type":[[["string"]]],"meta":{"line":1713,"file":"Constants.js","path":"src/util"}},{"name":"PremiumTier","description":"The premium tier (Server Boost level) of a guild:\n* NONE\n* TIER_1\n* TIER_2\n* TIER_3","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-premium-tier}"],"type":[[["string"]]],"meta":{"line":1721,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventStatus","description":"The status of a {@link GuildScheduledEvent}:\n* SCHEDULED\n* ACTIVE\n* COMPLETED\n* CANCELED","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status}"],"type":[[["string"]]],"meta":{"line":1732,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventEntityType","description":"The entity type of a {@link GuildScheduledEvent}:\n* NONE\n* STAGE_INSTANCE\n* VOICE\n* EXTERNAL","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types}"],"type":[[["string"]]],"meta":{"line":1743,"file":"Constants.js","path":"src/util"}},{"name":"VideoQualityMode","description":"The camera video quality mode of a {@link VoiceChannel}:\n* AUTO\n* FULL","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes}"],"type":[[["string"]]],"meta":{"line":1755,"file":"Constants.js","path":"src/util"}},{"name":"ReactionType","description":"The type of reaction\n* NORMAL\n* BURST","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes}"],"type":[[["string"]]],"meta":{"line":1764,"file":"Constants.js","path":"src/util"}},{"name":"SortOrderType","description":"Sort {@link ThreadOnlyChannel} posts by creation time or activity\n* LATEST_ACTIVITY\n* CREATION_DATE","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-sort-order-types}"],"type":[[["string"]]],"meta":{"line":1773,"file":"Constants.js","path":"src/util"}},{"name":"ForumLayoutType","description":"The default forum layout to set on the {@link ForumChannel}\n* NOT_SET\n* LIST_VIEW\n* GALLERY_VIEW","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-forum-layout-types}"],"type":[[["string"]]],"meta":{"line":1782,"file":"Constants.js","path":"src/util"}},{"name":"PollLayoutType","description":"Different layouts for {@link MessagePoll} will come in the future. For now though, this value will always be `DEFAULT`.\n* DEFAULT\n* IMAGE_ONLY_ANSWERS","see":["{@link https://docs.discord.food/resources/message#poll-layout-type}"],"type":[[["string"]]],"meta":{"line":1792,"file":"Constants.js","path":"src/util"}},{"name":"RelationshipType","description":"Relationship Enums:\n* 0: NONE\n* 1: FRIEND\n* 2: BLOCKED\n* 3: PENDING_INCOMING\n* 4: PENDING_OUTGOING\n* 5: IMPLICIT","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/relationships.html}"],"type":[[["string"]]],"meta":{"line":1801,"file":"Constants.js","path":"src/util"}},{"name":"GuildTemplateResolvable","description":"Data that can be resolved to give a template code. This can be:\n* A template code\n* A template URL","type":[[["string"]]],"meta":{"line":23,"file":"DataResolver.js","path":"src/util"}},{"name":"Base64Resolvable","description":"Data that resolves to give a Base64 string, typically for image uploading. This can be:\n* A Buffer\n* A base64 string","type":[[["Buffer"]],[["string"]]],"meta":{"line":73,"file":"DataResolver.js","path":"src/util"}},{"name":"BufferResolvable","description":"Data that can be resolved to give a Buffer. This can be:\n* A Buffer\n* The path to a local file\n* A URL When provided a URL, discord.js will fetch the URL internally in order to create a Buffer.\nThis can pose a security risk when the URL has not been sanitized","type":[[["string"]],[["Buffer"]]],"meta":{"line":90,"file":"DataResolver.js","path":"src/util"}},{"name":"TimestampStylesString","description":"A message formatting timestamp style, as defined in\n[here](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles).\n* `t` Short time format, consisting of hours and minutes, e.g. 16:20.\n* `T` Long time format, consisting of hours, minutes, and seconds, e.g. 16:20:30.\n* `d` Short date format, consisting of day, month, and year, e.g. 20/04/2021.\n* `D` Long date format, consisting of day, month, and year, e.g. 20 April 2021.\n* `f` Short date-time format, consisting of short date and short time formats, e.g. 20 April 2021 16:20.\n* `F` Long date-time format, consisting of long date and short time formats, e.g. Tuesday, 20 April 2021 16:20.\n* `R` Relative time format, consisting of a relative duration format, e.g. 2 months ago.","type":[[["string"]]],"meta":{"line":189,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlagsResolvable","description":"Data that can be resolved to give a guild member flag bitfield. This can be:\n* A string (see {@link GuildMemberFlags.FLAGS})\n* A guild member flag\n* An instance of GuildMemberFlags\n* An Array of GuildMemberFlagsResolvable","type":[[["string"]],[["number"]],[["GuildMemberFlags"]],[["Array","<"],["GuildMemberFlagsResolvable",">"]]],"meta":{"line":34,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"IntentsResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Intents.FLAGS})\n* An intents flag\n* An instance of Intents\n* An array of IntentsResolvable","type":[[["string"]],[["number"]],[["Intents"]],[["Array","<"],["IntentsResolvable",">"]]],"meta":{"line":17,"file":"Intents.js","path":"src/util"}},{"name":"SweepFilter","type":[[["function"]]],"params":[{"name":"collection","description":"The collection being swept","type":[[["LimitedCollection"]]]}],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class#sweep)}\nfor the definition of this function."},"meta":{"line":9,"file":"LimitedCollection.js","path":"src/util"}},{"name":"LimitedCollectionOptions","description":"Options for defining the behavior of a LimitedCollection","type":[[["Object"]]],"props":[{"name":"maxSize","description":"The maximum size of the Collection","optional":true,"default":"Infinity","nullable":true,"type":[[["number"]]]},{"name":"keepOverLimit","description":"A function, which is passed the value and key of an entry, ran to decide\nto keep an entry past the maximum size","optional":true,"default":null,"nullable":true,"type":[[["function"]]]},{"name":"sweepFilter","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nA function ran every `sweepInterval` to determine how to sweep","optional":true,"default":null,"nullable":true,"type":[[["SweepFilter"]]]},{"name":"sweepInterval","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nHow frequently, in seconds, to sweep the collection.","optional":true,"default":0,"nullable":true,"type":[[["number"]]]}],"meta":{"line":17,"file":"LimitedCollection.js","path":"src/util"}},{"name":"RateLimitData","description":"Rate limit data","type":[[["Object"]]],"props":[{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]]},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]]},{"name":"method","description":"The HTTP method of this request","type":[[["string"]]]},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"global","description":"Whether this is a global rate limit","type":[[["boolean"]]]}],"meta":{"line":7,"file":"Options.js","path":"src/util"}},{"name":"RateLimitQueueFilter","description":"Whether this rate limit should throw an Error","type":[[["function"]]],"params":[{"name":"rateLimitData","description":"The data of this rate limit","type":[[["RateLimitData"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":18,"file":"Options.js","path":"src/util"}},{"name":"CacheFactory","type":[[["function"]]],"params":[{"name":"manager","description":"The manager class the cache is being requested from.","type":[[["function"]]]},{"name":"holds","description":"The class that the cache will hold.","type":[[["function"]]]}],"returns":{"types":[[["Collection"]]],"description":"A Collection used to store the cache of the manager."},"meta":{"line":25,"file":"Options.js","path":"src/util"}},{"name":"CaptchaSolver","type":[[["function"]]],"params":[{"name":"captcha","description":"Discord Captcha","type":[[["Captcha"]]]},{"name":"UserAgent","description":"Current UserAgent","type":[[["string"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"HCaptcha Token"},"meta":{"line":32,"file":"Options.js","path":"src/util"}},{"name":"ClientOptions","description":"Options for a client.","type":[[["Object"]]],"props":[{"name":"DMChannelVoiceStatusSync","description":"The amount of time in milliseconds that the Client to register the event with each DM channel (0=Disable)","optional":true,"default":0,"type":[[["number"]]]},{"name":"captchaRetryLimit","description":"Captcha retry limit","optional":true,"default":3,"type":[[["number"]]]},{"name":"captchaSolver","description":"Captcha Solver","optional":true,"type":[[["CaptchaSolver"]]]},{"name":"TOTPKey","description":"TOTP key / 2FA Key for two-factor authentication\nThis is a 32-character Base32 string (excluding spaces), typically shown only once during your 2FA setup (QR code), or in the \"Manual Entry\" section.\nThe library automatically removes spaces and converts the secret to uppercase.\nExample value: 'ftc3 uz6q 5lpw 2kew 4thr vtyp n2cu topn' or 'WSLIVE6EKYSRMVRBZLFGG2KVIVJMMQY5'","optional":true,"type":[[["string"]]]},{"name":"closeTimeout","description":"The amount of time in milliseconds to wait for the close frame to be received\nfrom the WebSocket.\nDon't have this too high/low. It's best to have it between 2000-6000 ms.\n(e.g. recommended shard count, shard count of the ShardingManager)","optional":true,"default":5000,"type":[[["number"]]]},{"name":"makeCache","description":"Function to create a cache.\nYou can use your own function, or the {@link Options} class to customize the Collection used for the cache.\nOverriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`,\nand `PermissionOverwriteManager` is unsupported and **will** break functionality","optional":true,"type":[[["CacheFactory"]]]},{"name":"messageCacheLifetime","description":"DEPRECATED: Pass `lifetime` to `sweepers.messages` instead.\nHow long a message should stay in the cache until it is considered sweepable (in seconds, 0 for forever)","optional":true,"default":0,"type":[[["number"]]]},{"name":"messageSweepInterval","description":"DEPRECATED: Pass `interval` to `sweepers.messages` instead.\nHow frequently to remove messages from the cache that are older than the message cache lifetime\n(in seconds, 0 for never)","optional":true,"default":0,"type":[[["number"]]]},{"name":"allowedMentions","description":"Default value for {@link MessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"invalidRequestWarningInterval","description":"The number of invalid REST requests (those that return\n401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). That is, if set to 500,\nwarnings will be emitted at invalid request number 500, 1000, 1500, and so on.","optional":true,"default":0,"type":[[["number"]]]},{"name":"partials","description":"Structures allowed to be partial. This means events can be emitted even when\nthey're missing all the data for a particular structure. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for some\nimportant usage information, as partials require you to put checks in place when handling data.","optional":true,"default":"['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT']","type":[[["Array","<"],["PartialType",">"]]]},{"name":"restWsBridgeTimeout","description":"Maximum time permitted between REST responses and their\ncorresponding WebSocket events","optional":true,"default":5000,"type":[[["number"]]]},{"name":"restTimeOffset","description":"Extra time in milliseconds to wait before continuing to make REST\nrequests (higher values will reduce rate-limiting errors on bad connections)","optional":true,"default":500,"type":[[["number"]]]},{"name":"restRequestTimeout","description":"Time to wait before cancelling a REST request, in milliseconds","optional":true,"default":15000,"type":[[["number"]]]},{"name":"restSweepInterval","description":"How frequently to delete inactive request buckets, in seconds\n(or 0 for never)","optional":true,"default":60,"type":[[["number"]]]},{"name":"restGlobalRateLimit","description":"How many requests to allow sending per second (0 for unlimited, 50 for\nthe standard global limit used by Discord)","optional":true,"default":0,"type":[[["number"]]]},{"name":"rejectOnRateLimit","description":"Decides how rate limits and pre-emptive throttles\nshould be handled. If this option is an array containing the prefix of the request route (e.g. /channels to match any\nroute starting with /channels, such as /channels/222197033908436994/messages) or a function returning true, a\n{@link RateLimitError} will be thrown. Otherwise the request will be queued for later","optional":true,"type":[[["Array","<"],["string",">"]],[["RateLimitQueueFilter"]]]},{"name":"retryLimit","description":"How many times to retry on 5XX errors\n(Infinity for an indefinite amount of retries)","optional":true,"default":1,"type":[[["number"]]]},{"name":"failIfNotExists","description":"Default value for {@link ReplyMessageOptions#failIfNotExists}","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"presence","description":"Presence data to use upon login","optional":true,"default":"{ status: 'online', since: 0, activities: [], afk: false }","type":[[["PresenceData"]]]},{"name":"waitGuildTimeout","description":"Time in milliseconds that Clients with the GUILDS intent should wait for\nmissing guilds to be received before starting the bot. If not specified, the default is 15 seconds.","optional":true,"default":"15_000","type":[[["number"]]]},{"name":"sweepers","description":"Options for cache sweeping","optional":true,"default":"{}","type":[[["SweeperOptions"]]]},{"name":"ws","description":"Options for the WebSocket","optional":true,"type":[[["WebsocketOptions"]]]},{"name":"http","description":"HTTP options","optional":true,"type":[[["HTTPOptions"]]]}],"meta":{"line":50,"file":"Options.js","path":"src/util"}},{"name":"SweeperOptions","description":"Options for {@link Sweepers} defining the behavior of cache sweeping","type":[[["Object","<"],["SweeperKey",", "],["SweepOptions",">"]]],"meta":{"line":105,"file":"Options.js","path":"src/util"}},{"name":"SweepOptions","description":"Options for sweeping a single type of item from cache","type":[[["Object"]]],"props":[{"name":"interval","description":"The interval (in seconds) at which to perform sweeping of the item","type":[[["number"]]]},{"name":"lifetime","description":"How long an item should stay in cache until it is considered sweepable.\nThis property is only valid for the `invites`, `messages`, and `threads` keys. The `filter` property\nis mutually exclusive to this property and takes priority","optional":true,"type":[[["number"]]]},{"name":"filter","description":"The function used to determine the function passed to the sweep method\nThis property is optional when the key is `invites`, `messages`, or `threads` and `lifetime` is set","type":[[["GlobalSweepFilter"]]]}],"meta":{"line":110,"file":"Options.js","path":"src/util"}},{"name":"WebsocketOptions","description":"WebSocket options (these are left as snake_case to match the API)","type":[[["Object"]]],"props":[{"name":"agent","description":"HTTPS Agent options (WS Proxy)","optional":true,"default":"{}","type":[[["AgentOptions"]]]},{"name":"compress","description":"Whether to compress data sent on the connection","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"properties","description":"Properties to identify the client with","optional":true,"type":[[["WebSocketProperties"]]]}],"meta":{"line":121,"file":"Options.js","path":"src/util"}},{"name":"AgentOptions","description":"HTTPS Agent options.","see":["{@link https://nodejs.org/api/https.html#https_class_https_agent}","{@link https://nodejs.org/api/http.html#http_new_agent_options}"],"type":[[["Object"]]],"meta":{"line":129,"file":"Options.js","path":"src/util"}},{"name":"ProxyAgentOptions","description":"ProxyAgent options.","see":["{@link https://github.com/nodejs/undici/blob/main/docs/docs/api/ProxyAgent.md}"],"type":[[["Object"]]],"meta":{"line":136,"file":"Options.js","path":"src/util"}},{"name":"HTTPOptions","description":"HTTP options","type":[[["Object"]]],"props":[{"name":"version","description":"API version to use","optional":true,"default":9,"type":[[["number"]]]},{"name":"agent","description":"ProxyAgent options","optional":true,"default":"{}","type":[[["ProxyAgentOptions"]]]},{"name":"api","description":"Base URL of the API","optional":true,"default":"'https://discord.com/api'","type":[[["string"]]]},{"name":"cdn","description":"Base URL of the CDN","optional":true,"default":"'https://cdn.discordapp.com'","type":[[["string"]]]},{"name":"invite","description":"Base URL of invites","optional":true,"default":"'https://discord.gg'","type":[[["string"]]]},{"name":"template","description":"Base URL of templates","optional":true,"default":"'https://discord.new'","type":[[["string"]]]},{"name":"headers","description":"Additional headers to send for all API requests","optional":true,"type":[[["Object"]]]},{"name":"scheduledEvent","description":"Base URL of guild scheduled events","optional":true,"default":"'https://discord.com/events'","type":[[["string"]]]}],"meta":{"line":142,"file":"Options.js","path":"src/util"}},{"name":"PermissionResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Permissions.FLAGS})\n* A permission number\n* An instance of Permissions\n* An Array of PermissionResolvable","type":[[["string"]],[["bigint"]],[["Permissions"]],[["Array","<"],["PermissionResolvable",">"]]],"meta":{"line":18,"file":"Permissions.js","path":"src/util"}},{"name":"UserRaw","type":[[["Object"]]],"props":[{"name":"id","type":[[["Snowflake"]]]},{"name":"username","type":[[["string"]]]},{"name":"discriminator","type":[[["number"]]]},{"name":"avatar","type":[[["string"]]]}],"meta":{"line":260,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlagsResolvable","description":"Data that can be resolved to give a role flag bitfield. This can be:\n* A string (see {@link RoleFlags.FLAGS})\n* A role flag\n* An instance of RoleFlags\n* An Array of RoleFlagsResolvable","type":[[["string"]],[["number"]],[["RoleFlags"]],[["Array","<"],["RoleFlagsResolvable",">"]]],"meta":{"line":28,"file":"RoleFlags.js","path":"src/util"}},{"name":"Snowflake","description":"A {@link https://docs.x.com/resources/fundamentals/x-ids Twitter snowflake},\nexcept the epoch is 2015-01-01T00:00:00.000Z.\n\nIf we have a snowflake '266241948824764416' we can represent it as binary:\n```\n64 22 17 12 0\n 000000111011000111100001101001000101000000 00001 00000 000000000000\n number of milliseconds since Discord epoch worker pid increment\n```","type":[[["string"]]],"meta":{"line":11,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"DeconstructedSnowflake","description":"A deconstructed snowflake.","type":[[["Object"]]],"props":[{"name":"timestamp","description":"Timestamp the snowflake was created","type":[[["number"]]]},{"name":"date","description":"Date the snowflake was created","type":[[["Date"]]]},{"name":"workerId","description":"The worker's id in the snowflake","type":[[["number"]]]},{"name":"processId","description":"The process's id in the snowflake","type":[[["number"]]]},{"name":"increment","description":"Increment in the snowflake","type":[[["number"]]]},{"name":"binary","description":"Binary representation of the snowflake","type":[[["string"]]]}],"meta":{"line":43,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"GlobalSweepFilter","type":[[["function"]]],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class#sweep)}\nfor the definition of this function."},"meta":{"line":7,"file":"Sweepers.js","path":"src/util"}},{"name":"LifetimeFilterOptions","description":"Options for generating a filter function based on lifetime","type":[[["Object"]]],"props":[{"name":"lifetime","description":"How long, in seconds, an entry should stay in the collection\nbefore it is considered sweepable.","optional":true,"default":14400,"type":[[["number"]]]},{"name":"getComparisonTimestamp","description":"A function that takes an entry, key,\nand the collection and returns a timestamp to compare against in order to determine the lifetime of the entry.","optional":true,"default":"e => e?.createdTimestamp","type":[[["function"]]]},{"name":"excludeFromSweep","description":"A function that takes an entry, key, and the collection\nand returns a boolean, `true` when the entry should not be checked for sweepability.","optional":true,"default":"() => false","type":[[["function"]]]}],"meta":{"line":303,"file":"Sweepers.js","path":"src/util"}},{"name":"SweepEventOptions","description":"Configuration options for emitting the cache sweep client event","access":"private","type":[[["Object"]]],"props":[{"name":"emit","description":"Whether to emit the client event in this method","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"outputName","description":"A name to output in the client event if it should differ from the key","optional":true,"type":[[["string"]]]}],"meta":{"line":385,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlagsResolvable","description":"Data that can be resolved to give a system channel flag bitfield. This can be:\n* A string (see {@link SystemChannelFlags.FLAGS})\n* A system channel flag\n* An instance of SystemChannelFlags\n* An Array of SystemChannelFlagsResolvable","type":[[["string"]],[["number"]],[["SystemChannelFlags"]],[["Array","<"],["SystemChannelFlagsResolvable",">"]]],"meta":{"line":26,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"SplitOptions","description":"Options for splitting a message.","type":[[["Object"]]],"props":[{"name":"maxLength","description":"Maximum character length per message piece","optional":true,"default":2000,"type":[[["number"]]]},{"name":"char","description":"Character(s) or Regex(es) to split the message with,\nan array can be used to split multiple times","optional":true,"default":"'\\n'","type":[[["string"]],[["Array","<"],["string",">"]],[["RegExp"]],[["Array","<"],["RegExp",">"]]]},{"name":"prepend","description":"Text to prepend to every piece except the first","optional":true,"default":"''","type":[[["string"]]]},{"name":"append","description":"Text to append to every piece except the last","optional":true,"default":"''","type":[[["string"]]]}],"meta":{"line":125,"file":"Util.js","path":"src/util"}},{"name":"EscapeMarkdownOptions","description":"Options used to escape markdown.","type":[[["Object"]]],"props":[{"name":"codeBlock","description":"Whether to escape code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCode","description":"Whether to escape inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"bold","description":"Whether to escape bolds","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"italic","description":"Whether to escape italics","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"underline","description":"Whether to escape underlines","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"strikethrough","description":"Whether to escape strikethroughs","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"spoiler","description":"Whether to escape spoilers","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"codeBlockContent","description":"Whether to escape text inside code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCodeContent","description":"Whether to escape text inside inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"escape","description":"Whether to escape escape characters","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"heading","description":"Whether to escape headings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"bulletedList","description":"Whether to escape bulleted lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"numberedList","description":"Whether to escape numbered lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maskedLink","description":"Whether to escape masked links","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":180,"file":"Util.js","path":"src/util"}},{"name":"FetchRecommendedShardsOptions","type":[[["Object"]]],"props":[{"name":"guildsPerShard","description":"Number of guilds assigned per shard","optional":true,"default":1000,"type":[[["number"]]]},{"name":"multipleOf","description":"The multiple the shard count should round up to. (16 for large bot sharding)","optional":true,"default":1,"type":[[["number"]]]}],"meta":{"line":407,"file":"Util.js","path":"src/util"}},{"name":"MakeErrorOptions","description":"Options used to make an error object.","type":[[["Object"]]],"props":[{"name":"name","description":"Error type","type":[[["string"]]]},{"name":"message","description":"Message for the error","type":[[["string"]]]},{"name":"stack","description":"Stack for the error","type":[[["string"]]]}],"meta":{"line":477,"file":"Util.js","path":"src/util"}},{"name":"ColorResolvable","description":"Can be a number, hex string, a {@link Color}, or an RGB array like:\n```js\n[255, 0, 255] // purple\n```","type":[[["string"]],[["Color"]],[["number"]],[["Array","<"],["number",">"]]],"meta":{"line":550,"file":"Util.js","path":"src/util"}}],"externals":[{"name":"Collection","see":["{@link https://discord.js.org/docs/packages/collection/stable/Collection:Class}"],"meta":{"line":931,"file":"Client.js","path":"src/client"}},{"name":"WritableStream","see":["{@link https://nodejs.org/api/stream.html#stream_class_stream_writable}"],"meta":{"line":14,"file":"BaseDispatcher.js","path":"src/client/voice/dispatcher"}},{"name":"Inflate","see":["{@link https://www.npmjs.com/package/zlib-sync}"],"meta":{"line":124,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"CloseEvent","see":["{@link https://developer.mozilla.org/docs/Web/API/CloseEvent}"],"meta":{"line":353,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ErrorEvent","see":["{@link https://developer.mozilla.org/docs/Web/API/ErrorEvent}"],"meta":{"line":358,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"MessageEvent","see":["{@link https://developer.mozilla.org/docs/Web/API/MessageEvent}"],"meta":{"line":363,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"SlashCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/SlashCommandBuilder:Class}"],"meta":{"line":256,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ContextMenuCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/ContextMenuCommandBuilder:Class}"],"meta":{"line":261,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"APIApplicationCommandPermissions","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure}"],"meta":{"line":414,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"APIError","see":["{@link https://discord.com/developers/docs/reference#error-messages}"],"meta":{"line":116,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPMethod","see":["{@link https://developer.mozilla.org/docs/Web/HTTP/Methods}"],"meta":{"line":458,"file":"RequestHandler.js","path":"src/rest"}},{"name":"Response","see":["{@link https://developer.mozilla.org/docs/Web/API/Response}"],"meta":{"line":463,"file":"RequestHandler.js","path":"src/rest"}},{"name":"APIApplicationCommand","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure}"],"meta":{"line":585,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIApplicationCommandOption","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure}"],"meta":{"line":590,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIInteractionDataResolved","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-resolved-data-structure}"],"meta":{"line":208,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"APIChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object}"],"meta":{"line":281,"file":"Channel.js","path":"src/structures"}},{"name":"APIPresence","see":["{@link https://discord.com/developers/docs/rich-presence/how-to#updating-presence-update-presence-payload-fields}"],"meta":{"line":74,"file":"ClientPresence.js","path":"src/structures"}},{"name":"APIEmoji","see":["{@link https://discord.com/developers/docs/resources/emoji#emoji-object}"],"meta":{"line":145,"file":"Emoji.js","path":"src/structures"}},{"name":"APIGuild","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object}"],"meta":{"line":1635,"file":"Guild.js","path":"src/structures"}},{"name":"APIGuildMember","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object}"],"meta":{"line":633,"file":"GuildMember.js","path":"src/structures"}},{"name":"APIMessageComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object}"],"meta":{"line":102,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"APIAttachment","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object}"],"meta":{"line":213,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"APIMessageSelectMenu","see":["{@link https://discord.com/developers/docs/interactions/message-components#select-menu-object}"],"meta":{"line":112,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIMessageButton","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object}"],"meta":{"line":117,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIEmbed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object}"],"meta":{"line":593,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"APIMessage","see":["{@link https://discord.com/developers/docs/resources/channel#message-object}"],"meta":{"line":351,"file":"MessagePayload.js","path":"src/structures"}},{"name":"APIRole","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object}"],"meta":{"line":587,"file":"Role.js","path":"src/structures"}},{"name":"APISticker","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object}"],"meta":{"line":307,"file":"Sticker.js","path":"src/structures"}},{"name":"APIUser","see":["{@link https://discord.com/developers/docs/resources/user#user-object}"],"meta":{"line":619,"file":"User.js","path":"src/structures"}},{"name":"APIGuildScheduledEventRecurrenceRule","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/interface/APIGuildScheduledEventRecurrenceRule}"],"meta":{"line":1,"file":"APITypes.js","path":"src/util"}},{"name":"APIIncidentsData","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/interface/APIIncidentsData}"],"meta":{"line":6,"file":"APITypes.js","path":"src/util"}},{"name":"GuildScheduledEventRecurrenceRuleFrequency","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/GuildScheduledEventRecurrenceRuleFrequency}"],"meta":{"line":11,"file":"APITypes.js","path":"src/util"}},{"name":"GuildScheduledEventRecurrenceRuleMonth","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/GuildScheduledEventRecurrenceRuleMonth}"],"meta":{"line":16,"file":"APITypes.js","path":"src/util"}},{"name":"GuildScheduledEventRecurrenceRuleWeekday","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/GuildScheduledEventRecurrenceRuleWeekday}"],"meta":{"line":21,"file":"APITypes.js","path":"src/util"}},{"name":"MessageActivityType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/MessageActivityType}"],"meta":{"line":26,"file":"APITypes.js","path":"src/util"}},{"name":"NameplatePalette","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/NameplatePalette}"],"meta":{"line":31,"file":"APITypes.js","path":"src/util"}},{"name":"PollLayoutType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/PollLayoutType}"],"meta":{"line":36,"file":"APITypes.js","path":"src/util"}},{"name":"ReactionType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/ReactionType}"],"meta":{"line":41,"file":"APITypes.js","path":"src/util"}},{"name":"RtpPacket","see":["{@link https://github.com/shinyoshiaki/werift-webrtc/blob/develop/doc/classes/RtpPacket.md}"],"meta":{"line":46,"file":"APITypes.js","path":"src/util"}},{"name":"TeamMemberRole","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/TeamMemberRole}"],"meta":{"line":51,"file":"APITypes.js","path":"src/util"}},{"name":"VoiceChannelEffectSendAnimationType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v10/enum/VoiceChannelEffectSendAnimationType}"],"meta":{"line":56,"file":"APITypes.js","path":"src/util"}},{"name":"Stream","see":["{@link https://nodejs.org/api/stream.html}"],"meta":{"line":99,"file":"DataResolver.js","path":"src/util"}}]}
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/docs/readme.md b/vendor/discord.js-selfbot-v13/docs/readme.md
deleted file mode 100644
index 5c992da..0000000
--- a/vendor/discord.js-selfbot-v13/docs/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# [View the documentation here.](https://discordjs-self-v13.netlify.app/#/docs)
\ No newline at end of file
diff --git a/vendor/discord.js-selfbot-v13/examples/ActivityMessage.js b/vendor/discord.js-selfbot-v13/examples/ActivityMessage.js
deleted file mode 100644
index 306f3e9..0000000
--- a/vendor/discord.js-selfbot-v13/examples/ActivityMessage.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const { Client } = require('../src/index');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
- const channel = client.channels.cache.get('id');
- channel.send({
- activity: {
- type: 3, // MessageActivityType.Listen
- partyId: `spotify:${client.user.id}`,
- },
- });
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/AddBot.js b/vendor/discord.js-selfbot-v13/examples/AddBot.js
deleted file mode 100644
index fa114dd..0000000
--- a/vendor/discord.js-selfbot-v13/examples/AddBot.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-// No longer using 2captcha since the website no longer supports hCaptcha, which Discord uses.
-const Captcha = require('2captcha');
-const Discord = require('../src/index');
-
-const solver = new Captcha.Solver('<2captcha key>');
-
-const client = new Discord.Client({
- captchaSolver: function (captcha, UA) {
- return solver
- .hcaptcha(captcha.captcha_sitekey, 'discord.com', {
- invisible: 1,
- userAgent: UA,
- data: captcha.captcha_rqdata,
- })
- .then(res => res.data);
- },
- TOTPKey: '',
-});
-
-client.on('ready', async () => {
- console.log('Ready!', client.user.tag);
- // Note
- // You need to include `guild_id` to invite the bot
- // These two fields can appear either in the URL or in the options.
- await client.authorizeURL(
- `https://discord.com/api/oauth2/authorize?client_id=289066747443675143&permissions=414501424448&scope=bot%20applications.commands`,
- {
- guild_id: 'guild id',
- },
- );
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/AuthorizeUserApps.js b/vendor/discord.js-selfbot-v13/examples/AuthorizeUserApps.js
deleted file mode 100644
index f07c09c..0000000
--- a/vendor/discord.js-selfbot-v13/examples/AuthorizeUserApps.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-
-const Discord = require('../src/index');
-
-const client = new Discord.Client();
-
-client.on('ready', async () => {
- console.log('Ready!', client.user.tag);
- await client.installUserApps('936929561302675456'); // Midjourney
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/Basic.js b/vendor/discord.js-selfbot-v13/examples/Basic.js
deleted file mode 100644
index 84dbd68..0000000
--- a/vendor/discord.js-selfbot-v13/examples/Basic.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const { Client } = require('../src/index');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
-});
-
-client.on("messageCreate", message => {
- if (message.content == 'ping') {
- message.reply('pong');
- }
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/CreateAndVotePoll.js b/vendor/discord.js-selfbot-v13/examples/CreateAndVotePoll.js
deleted file mode 100644
index 398cf50..0000000
--- a/vendor/discord.js-selfbot-v13/examples/CreateAndVotePoll.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const { Client } = require('../src/index');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
- const channel = client.channels.cache.get('channel id');
- const message = await channel.send({
- poll: {
- question: {
- text: 'What is your favorite color?',
- },
- answers: [{ text: 'Red', emoji: '🍎' }, { text: 'Green', emoji: '🥗' }, { text: 'Blue', emoji: '💙' }, { text: 'Yellow', emoji: '🟡' }],
- duration: 8,
- allowMultiselect: true,
- },
- });
-
- console.log(message.poll);
- // Multi select
- await message.vote(1, 3);
-});
-
-client.on('messagePollVoteAdd', (answer, userId) => {
- console.log(`User ${userId} voted for answer ${answer.id}`);
-});
-
-client.on('messagePollVoteRemove', (answer, userId) => {
- console.log(`User ${userId} removed their vote for answer ${answer.id}`);
-});
-
-client.on('messageUpdate', async (_oldMessage, newMessage) => {
- if (!newMessage.poll) return;
-
- console.log('Poll was updated', newMessage.poll);
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/Embed.js b/vendor/discord.js-selfbot-v13/examples/Embed.js
deleted file mode 100644
index 29b3bfe..0000000
--- a/vendor/discord.js-selfbot-v13/examples/Embed.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const { Client, WebEmbed } = require('../src/index');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
-});
-
-client.on('messageCreate', message => {
- if (message.content == 'embed_hidden_url') {
- const embed = new WebEmbed()
- .setAuthor({ name: 'hello', url: 'https://google.com' })
- .setColor('RED')
- .setDescription('description uh')
- .setProvider({ name: 'provider', url: 'https://google.com' })
- .setTitle('This is Title')
- .setURL('https://google.com')
- .setImage('https://i.ytimg.com/vi/iBP8HambzpY/maxresdefault.jpg')
- .setRedirect('https://www.youtube.com/watch?v=iBP8HambzpY')
- .setVideo('http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4');
- message.channel.send({
- content: `Hello world ${WebEmbed.hiddenEmbed}${embed}`,
- });
- }
- if (message.content == 'embed') {
- const embed = new WebEmbed()
- .setAuthor({ name: 'hello', url: 'https://google.com' })
- .setColor('RED')
- .setDescription('description uh')
- .setProvider({ name: 'provider', url: 'https://google.com' })
- .setTitle('This is Title')
- .setURL('https://google.com')
- .setImage('https://i.ytimg.com/vi/iBP8HambzpY/maxresdefault.jpg')
- .setRedirect('https://www.youtube.com/watch?v=iBP8HambzpY')
- .setVideo('http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4');
- message.channel.send({
- content: `${embed}`,
- });
- }
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/JoinGuild.js b/vendor/discord.js-selfbot-v13/examples/JoinGuild.js
deleted file mode 100644
index 807ebcc..0000000
--- a/vendor/discord.js-selfbot-v13/examples/JoinGuild.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'use strict';
-
-// No longer using 2captcha since the website no longer supports hCaptcha, which Discord uses.
-const Captcha = require('2captcha');
-const Discord = require('../src/index');
-
-const solver = new Captcha.Solver('<2captcha key>');
-
-const client = new Discord.Client({
- captchaSolver: function (captcha, UA) {
- return solver
- .hcaptcha(captcha.captcha_sitekey, 'discord.com', {
- invisible: 1,
- userAgent: UA,
- data: captcha.captcha_rqdata,
- })
- .then(res => res.data);
- },
- captchaRetryLimit: 3,
-});
-
-client.on('ready', async () => {
- console.log('Ready!', client.user.tag);
- await client.acceptInvite('mdmc');
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/Proxy.js b/vendor/discord.js-selfbot-v13/examples/Proxy.js
deleted file mode 100644
index 53cf5d3..0000000
--- a/vendor/discord.js-selfbot-v13/examples/Proxy.js
+++ /dev/null
@@ -1,33 +0,0 @@
-'use strict';
-
-const Discord = require('../src/index');
-const { ProxyAgent } = require('proxy-agent');
-
-const proxy = new ProxyAgent({
- getProxyForUrl: function () {
- return '';
- },
-});
-
-const client = new Discord.Client({
- ws: {
- agent: proxy, // WebSocket Proxy
- // Do not use the `proxy` option if you don't need to use the WebSocket Proxy
- },
- http: {
- // API Proxy
- // Read more: https://github.com/nodejs/undici/blob/main/docs/docs/api/ProxyAgent.md
- // agent: ProxyAgentOptions
- agent: 'my.proxy.server',
- // or new URL('my.proxy.server')
- // or { uri: 'my.proxy.server' }
- },
-});
-
-// So if you only need to use the API Proxy (for the purpose of saving data), you don't need to install `proxy-agent`.
-
-client.on('ready', async () => {
- console.log('Ready!', client.user.tag);
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/RichPresence.js b/vendor/discord.js-selfbot-v13/examples/RichPresence.js
deleted file mode 100644
index 0bc6fcb..0000000
--- a/vendor/discord.js-selfbot-v13/examples/RichPresence.js
+++ /dev/null
@@ -1,47 +0,0 @@
-const { Client, RichPresence, CustomStatus, SpotifyRPC } = require('discord.js-selfbot-v13');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
- const getExtendURL = await RichPresence.getExternal(
- client,
- '367827983903490050',
- 'https://assets.ppy.sh/beatmaps/1550633/covers/list.jpg', // Required if the image you use is not in Discord
- );
- const status = new RichPresence(client)
- .setApplicationId('367827983903490050')
- .setType('PLAYING')
- .setURL('https://www.youtube.com/watch?v=5icFcPkVzMg') // If you set a URL, it will automatically change to STREAMING type
- .setState('Arcade Game')
- .setName('osu!')
- .setDetails('MariannE - Yooh')
- .setParty({
- max: 8,
- current: 1,
- })
- .setStartTimestamp(Date.now())
- .setAssetsLargeImage(getExtendURL[0].external_asset_path) // https://assets.ppy.sh/beatmaps/1550633/covers/list.jpg
- .setAssetsLargeText('Idle')
- .setAssetsSmallImage('373370493127884800') // https://discord.com/api/v9/oauth2/applications/367827983903490050/assets
- .setAssetsSmallText('click the circles')
- .setPlatform('desktop')
- .addButton('Beatmap', 'https://osu.ppy.sh/beatmapsets/1391659#osu/2873429');
- // Custom Status
- const custom = new CustomStatus(client).setEmoji('😋').setState('yum');
- // Spotify
- const spotify = new SpotifyRPC(client)
- .setAssetsLargeImage('spotify:ab67616d00001e02768629f8bc5b39b68797d1bb') // Image ID
- .setAssetsSmallImage('spotify:ab6761610000f178049d8aeae802c96c8208f3b7') // Image ID
- .setAssetsLargeText('未来茶屋 (vol.1)') // Album Name
- .setState('Yunomi; Kizuna AI') // Artists
- .setDetails('ロボットハート') // Song name
- .setStartTimestamp(Date.now())
- .setEndTimestamp(Date.now() + 1_000 * (2 * 60 + 56)) // Song length = 2m56s
- .setSongId('667eE4CFfNtJloC6Lvmgrx') // Song ID
- .setAlbumId('6AAmvxoPoDbJAwbatKwMb9') // Album ID
- .setArtistIds('2j00CVYTPx6q9ANbmB2keb', '2nKGmC5Mc13ct02xAY8ccS'); // Artist IDs
-
- client.user.setPresence({ activities: [status, custom, spotify] });
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/SamsungRPC.js b/vendor/discord.js-selfbot-v13/examples/SamsungRPC.js
deleted file mode 100644
index ca61d88..0000000
--- a/vendor/discord.js-selfbot-v13/examples/SamsungRPC.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const { Client } = require('../src/index');
-
-const client = new Client();
-
-client.on('ready', async () => {
- client.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');
-
- setTimeout(() => {
- client.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');
- }, 30_000);
-
- setTimeout(() => {
- client.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');
- }, 60_000);
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/SlashCommand.md b/vendor/discord.js-selfbot-v13/examples/SlashCommand.md
deleted file mode 100644
index 0e0a319..0000000
--- a/vendor/discord.js-selfbot-v13/examples/SlashCommand.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# Slash command
-
-```js
-TextBasedChannel.sendSlash(
- user: BotId (Snowflake) | User (User.bot === true),
- commandName: 'command_name [sub_group] [sub]',
- ...args: (string|number|boolean|FileLike|undefined)[],
-): Promise | Modal>
-```
-
-## Basic
-
-### Demo
-
-
-
-### Code
-
-```js
-await channel.sendSlash('bot_id', 'aiko')
-```
-
-## Sub Command / Sub Group
-
-### Demo
-
-
-
-### Code test
-
-```js
-await channel.sendSlash('450323683840491530', 'animal chat', 'bye')
-```
-
-## Attachment
-
-### Demo
-
-
-
-### Code test
-
-```js
-const { MessageAttachment } = require('discord.js-selfbot-v13')
-const fs = require('fs')
-const a = new MessageAttachment(fs.readFileSync('./wallpaper.jpg') , 'test.jpg')
-await message.channel.sendSlash('718642000898818048', 'sauce', a)
-```
-
-### Result
-
-
-
-## Skip options
-
-### Demo Command
-
-
-
-
-
-
-### Code
-```js
- const channel = client.channels.cache.get('channel_id');
- const response = await channel.sendSlash(
- 'bot_id',
- 'image make',
- 'MeinaMix - v11',
- 'Phone (9:16) [576x1024 | 810x1440]',
- '2', // String choices, not number
- undefined, // VAE
- undefined, // sdxl_refiner
- undefined, // sampling_method,
- 30,
- );
- // Submit Modal
- if (!response.isMessage) { // Modal
- response.components[0].components[0].setValue(
- '1girl, brown hair, green eyes, colorful, autumn, cumulonimbus clouds',
- );
- response.components[1].components[0].setValue(
- '(worst quality:1.4), (low quality:1.4), (normal quality:1.4), (ugly:1.4), (bad anatomy:1.4), (extra limbs:1.2), (text, error, signature, watermark:1.2), (bad legs, incomplete legs), (bad feet), (bad arms), (bad hands, too many hands, mutated hands), (zombie, sketch, interlocked fingers, comic, morbid), cropped, long neck, lowres, missing fingers, missing arms, missing legs, extra fingers, extra digit, fewer digits, jpeg artifacts',
- );
- await response.reply();
- }
-
-```
-
-### Receive messages after bot has replied `{botname} is thinking...`
-
-> [aiko-chan-ai/discord.js-selfbot-v13#1055 (comment)](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/1055#issuecomment-1949653100)
-
-
-
-```js
-const channel = client.channels.cache.get('id');
-channel
- .sendSlash('289066747443675143', 'osu', 'Accolibed')
- .then(async (message) => {
- if (message.flags.has('LOADING')) { // owo is thinking...
- return new Promise((resolve, reject) => {
- let done = false;
- const timeout = setTimeout(() => {
- if (!done) {
- done = true;
- client.off('messageUpdate', onUpdate);
- reject('timeout');
- }
- }, 15 * 60 * 1000); // 15m (DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE)
-
- function onUpdate(_, m) {
- if (_.id === message.id) {
- if (!done) {
- done = true;
- clearTimeout(timeout);
- client.off('messageUpdate', onUpdate);
- resolve(m);
- }
- }
- }
- client.on('messageUpdate', onUpdate);
- });
- } else {
- return Promise.resolve(message);
- }
- })
- .then(console.log);
-```
diff --git a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/JoinVoice.js b/vendor/discord.js-selfbot-v13/examples/VoiceChannel/JoinVoice.js
deleted file mode 100644
index eacc003..0000000
--- a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/JoinVoice.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Join a voice channel and do nothing
-
-/*
-Install:
-- An Opus library: @discordjs/opus or opusscript
-- An encryption packages:
- + sodium (best performance)
- + libsodium-wrappers
- + @stablelib/xchacha20poly1305
-- ffmpeg (install and add to your system environment)
-*/
-
-const { Client } = require('../../src/index');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
- const channel = client.channels.cache.get('voice_channel');
- const connection = await client.voice.joinChannel(channel, {
- selfMute: true,
- selfDeaf: true,
- selfVideo: false,
- });
- // Leave voice
- setTimeout(() => {
- connection.disconnect();
- }, 5_000);
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/PlayAudio.js b/vendor/discord.js-selfbot-v13/examples/VoiceChannel/PlayAudio.js
deleted file mode 100644
index fd140c1..0000000
--- a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/PlayAudio.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Join a channel and play music, like a Discord bot.
-
-/*
-Install:
-- An Opus library: @discordjs/opus or opusscript
-- An encryption packages:
- + sodium (best performance)
- + libsodium-wrappers
- + @stablelib/xchacha20poly1305
-- ffmpeg (install and add to your system environment)
-*/
-
-
-const { Client } = require('../../src/index');
-const ytdl = require('@distube/ytdl-core'); // better than ytdl-core
-const client = new Client();
-
-client.on('ready', async client => {
- console.log(`${client.user.username} is ready!`);
- const channel = client.channels.cache.get('voice_id');
- const connection = await client.voice.joinChannel(channel, {
- selfMute: true,
- selfDeaf: true,
- selfVideo: false,
- });
- const dispatcher = connection.playAudio(
- ytdl('https://www.youtube.com/watch?v=3KadWjpqDXs', {
- quality: 'highestaudio',
- }),
- );
- dispatcher.on('start', () => {
- console.log('audio is now playing!');
- // pause
- console.log('paused');
- dispatcher.pause();
- // resume
- setTimeout(() => {
- console.log('resumed');
- dispatcher.resume();
- }, 5_000);
-
- // Set volume
- dispatcher.setVolume(0.5);
- console.log('50% volume');
- });
-
- dispatcher.on('finish', () => {
- console.log('audio has finished playing!');
- });
- dispatcher.on('error', console.error);
- // Leave voice
- setTimeout(() => {
- console.log('disconnected');
- connection.disconnect();
- }, 30_000);
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/PlayVideo.js b/vendor/discord.js-selfbot-v13/examples/VoiceChannel/PlayVideo.js
deleted file mode 100644
index 40e6d36..0000000
--- a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/PlayVideo.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-Credit: https://github.com/dank074/Discord-video-stream
-The use of video streaming in this library is an incomplete implementation with many bugs, primarily aimed at lazy users.
-The video streaming features in this library are sourced from https://github.com/dank074/Discord-video-stream.
-
-Please use the @dank074/discord-video-stream library to access all advanced and professional features,
-along with comprehensive support. I will not actively fix bugs related to streaming and encourage everyone to
-use https://github.com/dank074/Discord-video-stream for stable and smooth streaming.
-
-To reiterate: This is an incomplete implementation of the library https://github.com/dank074/Discord-video-stream.
-
-Thanks to dank074 and longnguyen2004 for implementing new codecs (H264, H265).
-Thanks to mrjvs for discovering how Discord transmits data and the VP8 codec.
-
-Please use the @dank074/discord-video-stream library for the best support.
-*/
-
-/*
-Install:
-- An Opus library: @discordjs/opus or opusscript
-- An encryption packages:
- + sodium (best performance)
- + libsodium-wrappers
- + @stablelib/xchacha20poly1305
-- ffmpeg (install and add to your system environment)
-*/
-
-const { Client } = require('../../src/index');
-const client = new Client();
-
-client.on('ready', async client => {
- console.log(`${client.user.username} is ready!`);
- const channel = client.channels.cache.get('voice_channel');
- const connection = await client.voice.joinChannel(channel, {
- selfMute: true,
- selfDeaf: true,
- selfVideo: false, // Turn on the camera? If you turn on the camera, use the connection similar to
- // PlayAudio.js, and it will stream video through the camera. This is an implementation of screen sharing.
- videoCodec: 'H264',
- });
- const stream = await connection.createStreamConnection();
- // You can also access it by using `connection.streamConnection` (only after it has been initialized by the `createStreamConnection` function).
- // Split it into two separate streams (audio / video)
- // Or with a combined stream that will be automatically processed by FFmpeg.
- const input = 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4';
- // Play
- const dispatcher = stream.playVideo(input, {
- fps: 60,
- bitrate: 4000,
- });
- const dispatcher2 = stream.playAudio(input);
- dispatcher.on('start', () => {
- console.log('video is now playing!');
- });
-
- dispatcher.on('finish', () => {
- console.log('video has finished playing!');
- });
- dispatcher.on('error', console.error);
-
- dispatcher2.on('start', () => {
- console.log('audio is now playing!');
- });
-
- dispatcher2.on('finish', () => {
- console.log('audio has finished playing!');
- });
- dispatcher2.on('error', console.error);
- // Of course, you can also pause the stream using the `pause` function, but remember to pause both video and audio.
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/RecordingAudio.js b/vendor/discord.js-selfbot-v13/examples/VoiceChannel/RecordingAudio.js
deleted file mode 100644
index 5e8c0c9..0000000
--- a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/RecordingAudio.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// https://v12.discordjs.guide/voice/receiving-audio.html#basic-usage
-
-/*
-Install:
-- An Opus library: @discordjs/opus or opusscript
-- An encryption packages:
- + sodium (best performance)
- + libsodium-wrappers
- + @stablelib/xchacha20poly1305
-- ffmpeg (install and add to your system environment)
-*/
-
-
-const { Client } = require('../../src/index');
-const client = new Client();
-
-const fs = require('fs');
-const Speaker = require('speaker');
-
-client.on('ready', async client => {
- console.log(`${client.user.username} is ready!`);
-
- const speaker = new Speaker({
- channels: 2, // 2 channels
- bitDepth: 16, // 16-bit samples
- sampleRate: 48000, // 48000 Hz sample rate
- });
-
- const channel = client.channels.cache.get('voice_id');
- const connection = await client.voice.joinChannel(channel, {
- selfMute: true,
- selfDeaf: true,
- selfVideo: false,
- });
-
- const audio = connection.receiver.createStream('user_id', {
- mode: 'pcm',
- end: 'manual',
- paddingSilence: true,
- });
-
- audio.pipe(fs.createWriteStream('test.pcm'));
-
- // After 15s
- setTimeout(() => {
- console.log('Stop recording');
- audio.destroy();
- // Play this record...
- fs.createReadStream('test.pcm').pipe(speaker);
- }, 15_000);
-});
-
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/RecordingVideo.js b/vendor/discord.js-selfbot-v13/examples/VoiceChannel/RecordingVideo.js
deleted file mode 100644
index a994965..0000000
--- a/vendor/discord.js-selfbot-v13/examples/VoiceChannel/RecordingVideo.js
+++ /dev/null
@@ -1,45 +0,0 @@
-// https://v12.discordjs.guide/voice/receiving-audio.html#basic-usage
-
-/*
-Install:
-- An Opus library: @discordjs/opus or opusscript
-- An encryption packages:
- + sodium (best performance)
- + libsodium-wrappers
- + @stablelib/xchacha20poly1305
-- ffmpeg (install and add to your system environment)
-*/
-
-const { Client } = require('../../src/index');
-const client = new Client();
-
-const fs = require('fs');
-
-client.on('ready', async client => {
- console.log(`${client.user.username} is ready!`);
-
- const channel = client.channels.cache.get('voice_id');
- const connection = await client.voice.joinChannel(channel, {
- selfMute: true,
- selfDeaf: true,
- selfVideo: false,
- });
-
- const connectionStream = await connection.joinStreamConnection('user_id');
-
- const video = connectionStream.receiver.createVideoStream('user_id', fs.createWriteStream('video.mkv')); // Output file using matroska container
-
- video.on('ready', () => {
- console.log('FFmpeg process ready!');
- video.stream.stderr.on('data', data => {
- console.log(`FFmpeg: ${data}`);
- });
- });
-
- // After 15s
- setTimeout(() => {
- video.destroy();
- }, 15_000);
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/examples/VoiceMessage.js b/vendor/discord.js-selfbot-v13/examples/VoiceMessage.js
deleted file mode 100644
index f9ba873..0000000
--- a/vendor/discord.js-selfbot-v13/examples/VoiceMessage.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const { Client, MessageAttachment } = require('../src/index');
-const client = new Client();
-
-client.on('ready', async () => {
- console.log(`${client.user.username} is ready!`);
- const channel = client.channels.cache.get('channel_id');
- const attachment = new MessageAttachment(
- './test.mp3', // path file
- 'random_file_name.ogg', // must be .ogg
- {
- waveform: 'AAAAAAAAAAAA',
- duration_secs: 1, // any number you want
- },
- );
- channel.send({
- files: [attachment],
- flags: 'IS_VOICE_MESSAGE',
- });
-});
-
-client.login('token');
diff --git a/vendor/discord.js-selfbot-v13/package.json b/vendor/discord.js-selfbot-v13/package.json
deleted file mode 100644
index 8fcfa4a..0000000
--- a/vendor/discord.js-selfbot-v13/package.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "name": "discord.js-selfbot-v13",
- "version": "3.7.1",
- "description": "An unofficial discord.js fork for creating selfbots",
- "main": "./src/index.js",
- "types": "./typings/index.d.ts",
- "scripts": {
- "all": "npm run build && npm publish",
- "test": "npm run lint && npm run test:typescript && npm run docs:test",
- "fix:all": "npm run format",
- "test:typescript": "tsc --noEmit && tsd",
- "lint": "biome check . --diagnostic-level=error",
- "format": "biome format --write .",
- "docs": "docgen --source src --custom docs/index.yml --output docs/main.json",
- "docs:test": "docgen --source src --custom docs/index.yml",
- "build": "npm run format && npm run docs"
- },
- "files": [
- "src",
- "typings"
- ],
- "directories": {
- "lib": "src",
- "test": "test"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/aiko-chan-ai/discord.js-selfbot-v13.git"
- },
- "keywords": [
- "discord.js",
- "discord.js v13",
- "selfbot",
- "selfbot v13",
- "djs",
- "api",
- "bot",
- "node",
- "discord",
- "client",
- "discordapp"
- ],
- "author": "aiko-chan-ai",
- "license": "GNU General Public License v3.0",
- "bugs": {
- "url": "https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues"
- },
- "homepage": "https://github.com/aiko-chan-ai/discord.js-selfbot-v13#readme",
- "dependencies": {
- "@discordjs/builders": "^1.13.0",
- "@discordjs/collection": "^2.1.1",
- "@sapphire/async-queue": "^1.5.5",
- "@sapphire/shapeshift": "^4.0.0",
- "discord-api-types": "^0.38.38",
- "fetch-cookie": "^3.1.0",
- "find-process": "^2.0.0",
- "otplib": "^12.0.1",
- "prism-media": "^2.0.0-alpha.0",
- "qrcode": "^1.5.4",
- "tough-cookie": "^5.1.2",
- "tree-kill": "^1.2.2",
- "undici": "^7.16.0",
- "werift-rtp": "^0.8.4",
- "ws": "^8.20.0"
- },
- "engines": {
- "node": ">=20.18"
- },
- "devDependencies": {
- "@biomejs/biome": "latest",
- "@discordjs/docgen": "^0.11.1",
- "@types/debug": "^4.1.12",
- "@types/node": "^25.8.0",
- "@types/ws": "^8.18.1",
- "patch-package": "^8.0.1",
- "tsd": "^0.33.0",
- "typescript": "^5.9.3"
- }
-}
diff --git a/vendor/discord.js-selfbot-v13/patches/jsdoc+3.6.11.patch b/vendor/discord.js-selfbot-v13/patches/jsdoc+3.6.11.patch
deleted file mode 100644
index dcb6972..0000000
--- a/vendor/discord.js-selfbot-v13/patches/jsdoc+3.6.11.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/node_modules/jsdoc/lib/jsdoc/util/dumper.js b/node_modules/jsdoc/lib/jsdoc/util/dumper.js
-index 515c972..975757b 100644
---- a/node_modules/jsdoc/lib/jsdoc/util/dumper.js
-+++ b/node_modules/jsdoc/lib/jsdoc/util/dumper.js
-@@ -95,13 +95,13 @@ class ObjectWalker {
- return newArray;
- });
- }
-- else if ( util.isRegExp(o) ) {
-+ else if ( util.types.isRegExp(o) ) {
- result = ``;
- }
-- else if ( util.isDate(o) ) {
-+ else if ( util.types.isDate(o) ) {
- result = ``;
- }
-- else if ( util.isError(o) ) {
-+ else if ( Object.prototype.toString.call(o) === '[object Error]' ) {
- result = { message: o.message };
- }
- else if ( this.isFunction(o) ) {
diff --git a/vendor/discord.js-selfbot-v13/src/WebSocket.js b/vendor/discord.js-selfbot-v13/src/WebSocket.js
deleted file mode 100644
index 872cfe6..0000000
--- a/vendor/discord.js-selfbot-v13/src/WebSocket.js
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict';
-
-let erlpack;
-const { Buffer } = require('node:buffer');
-
-try {
- erlpack = require('erlpack');
- if (!erlpack.pack) erlpack = null;
-} catch {} // eslint-disable-line no-empty
-
-exports.WebSocket = require('ws');
-
-const ab = new TextDecoder();
-
-exports.encoding = erlpack ? 'etf' : 'json';
-
-exports.pack = erlpack ? erlpack.pack : JSON.stringify;
-
-exports.unpack = (data, type) => {
- if (exports.encoding === 'json' || type === 'json') {
- if (typeof data !== 'string') {
- data = ab.decode(data);
- }
- return JSON.parse(data);
- }
- if (!Buffer.isBuffer(data)) data = Buffer.from(new Uint8Array(data));
- return erlpack.unpack(data);
-};
-
-exports.create = (gateway, query = {}, ...args) => {
- const [g, q] = gateway.split('?');
- query.encoding = exports.encoding;
- query = new URLSearchParams(query);
- if (q) new URLSearchParams(q).forEach((v, k) => query.set(k, v));
- const ws = new exports.WebSocket(`${g}?${query}`, ...args);
- return ws;
-};
-
-for (const state of ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'])
- exports[state] = exports.WebSocket[state];
diff --git a/vendor/discord.js-selfbot-v13/src/client/BaseClient.js b/vendor/discord.js-selfbot-v13/src/client/BaseClient.js
deleted file mode 100644
index ed7bdd5..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/BaseClient.js
+++ /dev/null
@@ -1,86 +0,0 @@
-'use strict';
-
-const EventEmitter = require('node:events');
-const process = require('node:process');
-const RESTManager = require('../rest/RESTManager');
-const Options = require('../util/Options');
-const Util = require('../util/Util');
-
-/**
- * The base class for all clients.
- * @extends {EventEmitter}
- */
-class BaseClient extends EventEmitter {
- constructor(options = {}) {
- super({ captureRejections: true });
-
- if (options.intents) {
- process.emitWarning('Intents is not available.', 'DeprecationWarning');
- }
-
- /**
- * The options the client was instantiated with
- * @type {ClientOptions}
- */
- this.options = Util.mergeDefault(Options.createDefault(), options);
-
- /**
- * The REST manager of the client
- * @type {RESTManager}
- * @private
- */
- this.rest = new RESTManager(this);
- }
-
- /**
- * API shortcut
- * @type {Object}
- * @readonly
- * @private
- */
- get api() {
- return this.rest.api;
- }
-
- /**
- * Destroys all assets used by the base client.
- * @returns {void}
- */
- destroy() {
- if (this.rest.sweepInterval) clearInterval(this.rest.sweepInterval);
- }
-
- /**
- * Increments max listeners by one, if they are not zero.
- * @private
- */
- incrementMaxListeners() {
- const maxListeners = this.getMaxListeners();
- if (maxListeners !== 0) {
- this.setMaxListeners(maxListeners + 1);
- }
- }
-
- /**
- * Decrements max listeners by one, if they are not zero.
- * @private
- */
- decrementMaxListeners() {
- const maxListeners = this.getMaxListeners();
- if (maxListeners !== 0) {
- this.setMaxListeners(maxListeners - 1);
- }
- }
-
- toJSON(...props) {
- return Util.flatten(this, { domain: false }, ...props);
- }
-}
-
-module.exports = BaseClient;
-
-/**
- * Emitted for general debugging information.
- * @event BaseClient#debug
- * @param {string} info The debug information
- */
diff --git a/vendor/discord.js-selfbot-v13/src/client/Client.js b/vendor/discord.js-selfbot-v13/src/client/Client.js
deleted file mode 100644
index 9a182f1..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/Client.js
+++ /dev/null
@@ -1,1069 +0,0 @@
-/* eslint-disable no-unreachable */
-'use strict';
-
-const process = require('node:process');
-const { setInterval } = require('node:timers');
-const { setTimeout } = require('node:timers');
-const { Collection } = require('@discordjs/collection');
-const { authenticator } = require('otplib');
-const BaseClient = require('./BaseClient');
-const ActionsManager = require('./actions/ActionsManager');
-const ClientVoiceManager = require('./voice/ClientVoiceManager');
-const WebSocketManager = require('./websocket/WebSocketManager');
-const { Error, TypeError } = require('../errors');
-const BaseGuildEmojiManager = require('../managers/BaseGuildEmojiManager');
-const BillingManager = require('../managers/BillingManager');
-const ChannelManager = require('../managers/ChannelManager');
-const ClientUserSettingManager = require('../managers/ClientUserSettingManager');
-const GuildManager = require('../managers/GuildManager');
-const PresenceManager = require('../managers/PresenceManager');
-const RelationshipManager = require('../managers/RelationshipManager');
-const SessionManager = require('../managers/SessionManager');
-const UserManager = require('../managers/UserManager');
-const UserNoteManager = require('../managers/UserNoteManager');
-const VoiceStateManager = require('../managers/VoiceStateManager');
-const ShardClientUtil = require('../sharding/ShardClientUtil');
-const ClientPresence = require('../structures/ClientPresence');
-const GuildPreview = require('../structures/GuildPreview');
-const GuildTemplate = require('../structures/GuildTemplate');
-const Invite = require('../structures/Invite');
-const { Sticker } = require('../structures/Sticker');
-const StickerPack = require('../structures/StickerPack');
-const VoiceRegion = require('../structures/VoiceRegion');
-const Webhook = require('../structures/Webhook');
-const Widget = require('../structures/Widget');
-const Application = require('../structures/interfaces/Application');
-const { Events, Status } = require('../util/Constants');
-const DataResolver = require('../util/DataResolver');
-const Intents = require('../util/Intents');
-const DiscordAuthWebsocket = require('../util/RemoteAuth');
-const Sweepers = require('../util/Sweepers');
-
-/**
- * The main hub for interacting with the Discord API, and the starting point for any bot.
- * @extends {BaseClient}
- */
-class Client extends BaseClient {
- /**
- * @param {ClientOptions} [options] Options for the client
- */
- constructor(options) {
- super(options);
-
- this._validateOptions();
-
- /**
- * Functions called when a cache is garbage collected or the Client is destroyed
- * @type {Set}
- * @private
- */
- this._cleanups = new Set();
-
- /**
- * The finalizers used to cleanup items.
- * @type {FinalizationRegistry}
- * @private
- */
- this._finalizers = new FinalizationRegistry(this._finalize.bind(this));
-
- /**
- * The WebSocket manager of the client
- * @type {WebSocketManager}
- */
- this.ws = new WebSocketManager(this);
-
- /**
- * The action manager of the client
- * @type {ActionsManager}
- * @private
- */
- this.actions = new ActionsManager(this);
-
- /**
- * The voice manager of the client
- * @type {ClientVoiceManager}
- */
- this.voice = new ClientVoiceManager(this);
-
- /**
- * A manager of the voice states of this client (Support DM / Group DM)
- * @type {VoiceStateManager}
- */
- this.voiceStates = new VoiceStateManager({ client: this });
-
- /**
- * Shard helpers for the client (only if the process was spawned from a {@link ShardingManager})
- * @type {?ShardClientUtil}
- */
- this.shard = process.env.SHARDING_MANAGER
- ? ShardClientUtil.singleton(this, process.env.SHARDING_MANAGER_MODE)
- : null;
-
- /**
- * The user manager of this client
- * @type {UserManager}
- */
- this.users = new UserManager(this);
-
- /**
- * A manager of all the guilds the client is currently handling -
- * as long as sharding isn't being used, this will be *every* guild the bot is a member of
- * @type {GuildManager}
- */
- this.guilds = new GuildManager(this);
-
- /**
- * All of the {@link Channel}s that the client is currently handling -
- * as long as sharding isn't being used, this will be *every* channel in *every* guild the bot
- * is a member of. Note that DM channels will not be initially cached, and thus not be present
- * in the Manager without their explicit fetching or use.
- * @type {ChannelManager}
- */
- this.channels = new ChannelManager(this);
-
- /**
- * The sweeping functions and their intervals used to periodically sweep caches
- * @type {Sweepers}
- */
- this.sweepers = new Sweepers(this, this.options.sweepers);
-
- /**
- * The presence of the Client
- * @private
- * @type {ClientPresence}
- */
- this.presence = new ClientPresence(this, this.options.presence);
-
- /**
- * A manager of the presences belonging to this client
- * @type {PresenceManager}
- */
- this.presences = new PresenceManager(this);
-
- /**
- * All of the note that have been cached at any point, mapped by their ids
- * @type {UserManager}
- */
- this.notes = new UserNoteManager(this);
-
- /**
- * All of the relationships {@link User}
- * @type {RelationshipManager}
- */
- this.relationships = new RelationshipManager(this);
-
- /**
- * Manages the API methods
- * @type {BillingManager}
- */
- this.billing = new BillingManager(this);
-
- /**
- * All of the sessions of the client
- * @type {SessionManager}
- */
- this.sessions = new SessionManager(this);
-
- /**
- * All of the settings {@link Object}
- * @type {ClientUserSettingManager}
- */
- this.settings = new ClientUserSettingManager(this);
-
- Object.defineProperty(this, 'token', { writable: true });
- if (!this.token && 'DISCORD_TOKEN' in process.env) {
- /**
- * Authorization token for the logged in bot.
- * If present, this defaults to `process.env.DISCORD_TOKEN` when instantiating the client
- * This should be kept private at all times.
- * @type {?string}
- */
- this.token = process.env.DISCORD_TOKEN;
- } else {
- this.token = null;
- }
-
- /**
- * User that the client is logged in as
- * @type {?ClientUser}
- */
- this.user = null;
-
- /**
- * Time at which the client was last regarded as being in the `READY` state
- * (each time the client disconnects and successfully reconnects, this will be overwritten)
- * @type {?Date}
- */
- this.readyAt = null;
-
- /**
- * The authenticator used for TOTP
- * @type {Object}
- */
- this.authenticator = authenticator;
-
- this.authenticator.options = {
- step: 30,
- digits: 6,
- algorithm: 'sha1',
- };
-
- if (this.options.messageSweepInterval > 0) {
- process.emitWarning(
- 'The message sweeping client options are deprecated, use the global sweepers instead.',
- 'DeprecationWarning',
- );
- this.sweepMessageInterval = setInterval(
- this.sweepMessages.bind(this),
- this.options.messageSweepInterval * 1_000,
- ).unref();
- }
- }
-
- /**
- * A manager of all the custom emojis that the client has access to
- * @type {BaseGuildEmojiManager}
- * @readonly
- */
- get emojis() {
- const emojis = new BaseGuildEmojiManager(this);
- for (const guild of this.guilds.cache.values()) {
- if (guild.available)
- for (const emoji of guild.emojis.cache.values())
- emojis.cache.set(emoji.id, emoji);
- }
- return emojis;
- }
-
- /**
- * Timestamp of the time the client was last `READY` at
- * @type {?number}
- * @readonly
- */
- get readyTimestamp() {
- return this.readyAt?.getTime() ?? null;
- }
-
- /**
- * How long it has been since the client last entered the `READY` state in milliseconds
- * @type {?number}
- * @readonly
- */
- get uptime() {
- return this.readyAt ? Date.now() - this.readyAt : null;
- }
-
- /**
- * Logs the client in, establishing a WebSocket connection to Discord.
- * @param {string} [token=this.token] Token of the account to log in with
- * @returns {Promise} Token of the account used
- * @example
- * client.login('my token');
- */
- async login(token = this.token) {
- if (!token || typeof token !== 'string') throw new Error('TOKEN_INVALID');
- this.token = token = token.replace(/^(Bot|Bearer)\s*/i, '');
- this.emit(
- Events.DEBUG,
- `
- Logging on with a user token is unfortunately against the Discord
- \`Terms of Service\`
- and doing so might potentially get your account banned.
- Use this at your own risk.`,
- );
- this.emit(
- Events.DEBUG,
- `Provided token: ${token
- .split('.')
- .map((val, i) => (i > 1 ? val.replace(/./g, '*') : val))
- .join('.')}`,
- );
-
- if (this.options.presence) {
- this.options.ws.presence = this.presence._parse(this.options.presence);
- }
-
- this.emit(Events.DEBUG, 'Preparing to connect to the gateway...');
-
- try {
- await this.ws.connect();
- return this.token;
- } catch (error) {
- this.destroy();
- throw error;
- }
- }
-
- QRLogin() {
- const ws = new DiscordAuthWebsocket();
- ws.once('ready', () => ws.generateQR());
- return ws.connect(this);
- }
-
- /**
- * Logs the client in, establishing a WebSocket connection to Discord.
- * @param {string} email The email associated with the account
- * @param {string} password The password assicated with the account
- * @returns {string | null} Token of the account used
- *
- * @example
- * client.passLogin("test@gmail.com", "SuperSecretPa$$word", 1234)
- * @deprecated This method will not be updated until I find the most convenient way to implement MFA.
- */
- async passLogin(email, password) {
- const initial = await this.api.auth.login.post({
- auth: false,
- versioned: true,
- data: {
- gift_code_sku_id: null,
- login_source: null,
- undelete: false,
- login: email,
- password,
- },
- });
-
- if ('token' in initial) {
- return this.login(initial.token);
- } else if ('ticket' in initial) {
- if (!this.options.TOTPKey) throw new Error('TOTPKEY_MISSING');
- const otp = this.authenticator.generate(this.options.TOTPKey);
- const totp = await this.api.auth.mfa.totp.post({
- auth: false,
- versioned: true,
- data: {
- gift_code_sku_id: null,
- login_source: null,
- code: otp,
- ticket: initial.ticket,
- },
- });
- if ('token' in totp) {
- return this.login(totp.token);
- }
- }
-
- return null;
- }
-
- /**
- * Returns whether the client has logged in, indicative of being able to access
- * properties such as `user` and `application`.
- * @returns {boolean}
- */
- isReady() {
- return !this.ws.destroyed && this.ws.status === Status.READY;
- }
-
- /**
- * Logs out, terminates the connection to Discord, and destroys the client.
- * @returns {void}
- */
- destroy() {
- super.destroy();
-
- for (const fn of this._cleanups) fn();
- this._cleanups.clear();
-
- if (this.sweepMessageInterval) clearInterval(this.sweepMessageInterval);
-
- this.sweepers.destroy();
- this.ws.destroy();
- this.token = null;
- }
-
- /**
- * Logs out, terminates the connection to Discord, destroys the client and destroys the token.
- * @returns {Promise}
- */
- async logout() {
- await this.api.auth.logout.post({
- data: {
- provider: null,
- voip_provider: null,
- },
- });
- return this.destroy();
- }
-
- /**
- * Options used when fetching an invite from Discord.
- * @typedef {Object} ClientFetchInviteOptions
- * @property {Snowflake} [guildScheduledEventId] The id of the guild scheduled event to include with
- * the invite
- */
-
- /**
- * Obtains an invite from Discord.
- * @param {InviteResolvable} invite Invite code or URL
- * @param {ClientFetchInviteOptions} [options] Options for fetching the invite
- * @returns {Promise}
- * @example
- * client.fetchInvite('https://discord.gg/djs')
- * .then(invite => console.log(`Obtained invite with code: ${invite.code}`))
- * .catch(console.error);
- */
- async fetchInvite(invite, options) {
- const code = DataResolver.resolveInviteCode(invite);
- const data = await this.api.invites(code).get({
- query: {
- with_counts: true,
- guild_scheduled_event_id: options?.guildScheduledEventId,
- },
- });
- return new Invite(this, data);
- }
-
- /**
- * Obtains a template from Discord.
- * @param {GuildTemplateResolvable} template Template code or URL
- * @returns {Promise}
- * @example
- * client.fetchGuildTemplate('https://discord.new/FKvmczH2HyUf')
- * .then(template => console.log(`Obtained template with code: ${template.code}`))
- * .catch(console.error);
- */
- async fetchGuildTemplate(template) {
- const code = DataResolver.resolveGuildTemplateCode(template);
- const data = await this.api.guilds.templates(code).get();
- return new GuildTemplate(this, data);
- }
-
- /**
- * Obtains a webhook from Discord.
- * @param {Snowflake} id The webhook's id
- * @param {string} [token] Token for the webhook
- * @returns {Promise}
- * @example
- * client.fetchWebhook('id', 'token')
- * .then(webhook => console.log(`Obtained webhook with name: ${webhook.name}`))
- * .catch(console.error);
- */
- async fetchWebhook(id, token) {
- const data = await this.api.webhooks(id, token).get();
- return new Webhook(this, { token, ...data });
- }
-
- /**
- * Obtains the available voice regions from Discord.
- * @returns {Promise>}
- * @example
- * client.fetchVoiceRegions()
- * .then(regions => console.log(`Available regions are: ${regions.map(region => region.name).join(', ')}`))
- * .catch(console.error);
- */
- async fetchVoiceRegions() {
- const apiRegions = await this.api.voice.regions.get();
- const regions = new Collection();
- for (const region of apiRegions)
- regions.set(region.id, new VoiceRegion(region));
- return regions;
- }
-
- /**
- * Obtains a sticker from Discord.
- * @param {Snowflake} id The sticker's id
- * @returns {Promise}
- * @example
- * client.fetchSticker('id')
- * .then(sticker => console.log(`Obtained sticker with name: ${sticker.name}`))
- * .catch(console.error);
- */
- async fetchSticker(id) {
- const data = await this.api.stickers(id).get();
- return new Sticker(this, data);
- }
-
- /**
- * Obtains the list of sticker packs available to Nitro subscribers from Discord.
- * @returns {Promise>}
- * @example
- * client.fetchPremiumStickerPacks()
- * .then(packs => console.log(`Available sticker packs are: ${packs.map(pack => pack.name).join(', ')}`))
- * .catch(console.error);
- */
- async fetchPremiumStickerPacks() {
- const data = await this.api('sticker-packs').get();
- return new Collection(
- data.sticker_packs.map((p) => [p.id, new StickerPack(this, p)]),
- );
- }
- /**
- * A last ditch cleanup function for garbage collection.
- * @param {Function} options.cleanup The function called to GC
- * @param {string} [options.message] The message to send after a successful GC
- * @param {string} [options.name] The name of the item being GCed
- * @private
- */
- _finalize({ cleanup, message, name }) {
- try {
- cleanup();
- this._cleanups.delete(cleanup);
- if (message) {
- this.emit(Events.DEBUG, message);
- }
- } catch {
- this.emit(
- Events.DEBUG,
- `Garbage collection failed on ${name ?? 'an unknown item'}.`,
- );
- }
- }
-
- /**
- * Sweeps all text-based channels' messages and removes the ones older than the max message lifetime.
- * If the message has been edited, the time of the edit is used rather than the time of the original message.
- * @param {number} [lifetime=this.options.messageCacheLifetime] Messages that are older than this (in seconds)
- * will be removed from the caches. The default is based on {@link ClientOptions#messageCacheLifetime}
- * @returns {number} Amount of messages that were removed from the caches,
- * or -1 if the message cache lifetime is unlimited
- * @example
- * // Remove all messages older than 1800 seconds from the messages cache
- * const amount = client.sweepMessages(1800);
- * console.log(`Successfully removed ${amount} messages from the cache.`);
- */
- sweepMessages(lifetime = this.options.messageCacheLifetime) {
- if (typeof lifetime !== 'number' || isNaN(lifetime)) {
- throw new TypeError('INVALID_TYPE', 'lifetime', 'number');
- }
- if (lifetime <= 0) {
- this.emit(Events.DEBUG, "Didn't sweep messages - lifetime is unlimited");
- return -1;
- }
-
- const messages = this.sweepers.sweepMessages(
- Sweepers.outdatedMessageSweepFilter(lifetime)(),
- );
- this.emit(
- Events.DEBUG,
- `Swept ${messages} messages older than ${lifetime} seconds`,
- );
- return messages;
- }
-
- /**
- * Obtains a guild preview from Discord, available for all guilds the bot is in and all Discoverable guilds.
- * @param {GuildResolvable} guild The guild to fetch the preview for
- * @returns {Promise}
- */
- async fetchGuildPreview(guild) {
- const id = this.guilds.resolveId(guild);
- if (!id) throw new TypeError('INVALID_TYPE', 'guild', 'GuildResolvable');
- const data = await this.api.guilds(id).preview.get();
- return new GuildPreview(this, data);
- }
-
- /**
- * Obtains the widget data of a guild from Discord, available for guilds with the widget enabled.
- * @param {GuildResolvable} guild The guild to fetch the widget data for
- * @returns {Promise}
- */
- async fetchGuildWidget(guild) {
- const id = this.guilds.resolveId(guild);
- if (!id) throw new TypeError('INVALID_TYPE', 'guild', 'GuildResolvable');
- const data = await this.api.guilds(id, 'widget.json').get();
- return new Widget(this, data);
- }
-
- /**
- * Refresh the Discord CDN links with hashes so they can be usable.
- * @param {...string} urls Discord CDN URLs
- * @returns {Promise>}
- */
- async refreshAttachmentURL(...urls) {
- // Clean up the URLs
- urls = urls.map((url) => {
- const urlObject = new URL(url);
- // Clean query
- urlObject.search = '';
- return urlObject.toString();
- });
- const data = await this.api.attachments('refresh-urls').post({
- data: { attachment_urls: urls },
- });
- /**
-{
- "refreshed_urls": [
- {
- "original": "url",
- "refreshed": "url with hash"
- }
- ]
-}
- */
- return data.refreshed_urls;
- }
-
- /**
- * Options for {@link Client#generateInvite}.
- * @typedef {Object} InviteGenerationOptions
- * @property {InviteScope[]} scopes Scopes that should be requested
- * @property {PermissionResolvable} [permissions] Permissions to request
- * @property {GuildResolvable} [guild] Guild to preselect
- * @property {boolean} [disableGuildSelect] Whether to disable the guild selection
- */
-
- /**
- * The sleep function in JavaScript returns a promise that resolves after a specified timeout.
- * @param {number} timeout - The timeout parameter is the amount of time, in milliseconds, that the sleep
- * function will wait before resolving the promise and continuing execution.
- * @returns {void} The `sleep` function is returning a Promise.
- */
- sleep(timeout) {
- return new Promise((r) => setTimeout(r, timeout));
- }
-
- toJSON() {
- return super.toJSON({
- readyAt: false,
- });
- }
-
- /**
- * The current session id of the shard
- * @type {?string}
- */
- get sessionId() {
- return this.ws.shards.first()?.sessionId;
- }
-
- /**
- * Options for {@link Client#acceptInvite}.
- * @typedef {Object} AcceptInviteOptions
- * @property {boolean} [bypassOnboarding=true] Whether to bypass onboarding
- * @property {boolean} [bypassVerify=true] Whether to bypass rule screening
- */
-
- /**
- * Join this Guild / GroupDMChannel using this invite
- * @param {InviteResolvable} invite Invite code or URL
- * @param {AcceptInviteOptions} [options] Options
- * @returns {Promise}
- * @example
- * await client.acceptInvite('https://discord.gg/genshinimpact', { bypassOnboarding: true, bypassVerify: true })
- */
- async acceptInvite(
- invite,
- options = { bypassOnboarding: true, bypassVerify: true },
- ) {
- // ! throw new Error('METHOD_WARNING');
- const code = DataResolver.resolveInviteCode(invite);
- if (!code) throw new Error('INVITE_RESOLVE_CODE');
- const i = await this.fetchInvite(code);
- if (i.guild?.id && this.guilds.cache.has(i.guild?.id))
- return this.guilds.cache.get(i.guild?.id);
- if (this.channels.cache.has(i.channelId))
- return this.channels.cache.get(i.channelId);
- const data = await this.api.invites(code).post({
- DiscordContext: { location: 'Markdown Link' },
- data: {
- session_id: this.sessionId,
- },
- });
- this.emit(Events.DEBUG, `[Invite > Guild ${i.guild?.id}] Joined`);
- // Guild
- if (i.guild?.id) {
- const guild = this.guilds.cache.get(i.guild?.id);
- if (i.flags.has('GUEST')) {
- this.emit(Events.DEBUG, `[Invite > Guild ${i.guild?.id}] Guest invite`);
- return guild;
- }
- if (options.bypassOnboarding) {
- const onboardingData =
- await this.api.guilds[i.guild?.id].onboarding.get();
- // Onboarding
- if (onboardingData.enabled) {
- const prompts = onboardingData.prompts.filter((o) => o.in_onboarding);
- if (prompts.length) {
- const onboarding_prompts_seen = {};
- const onboarding_responses = [];
- const onboarding_responses_seen = {};
-
- const currentDate = Date.now();
-
- prompts.forEach((prompt) => {
- onboarding_prompts_seen[prompt.id] = currentDate;
- if (prompt.required)
- onboarding_responses.push(prompt.options[0].id);
- prompt.options.forEach((option) => {
- onboarding_responses_seen[option.id] = currentDate;
- });
- });
-
- await this.api.guilds[i.guild?.id]['onboarding-responses'].post({
- data: {
- onboarding_prompts_seen,
- onboarding_responses,
- onboarding_responses_seen,
- },
- });
- this.emit(
- Events.DEBUG,
- `[Invite > Guild ${i.guild?.id}] Bypassed onboarding`,
- );
- }
- }
- }
- // Read rule
- if (data.show_verification_form && options.bypassVerify) {
- // Check Guild
- if (i.guild.verificationLevel == 'VERY_HIGH' && !this.user.phone) {
- this.emit(
- Events.DEBUG,
- `[Invite > Guild ${i.guild?.id}] Cannot bypass verify (Phone required)`,
- );
- return this.guilds.cache.get(i.guild?.id);
- }
- if (i.guild.verificationLevel !== 'NONE' && !this.user.email) {
- this.emit(
- Events.DEBUG,
- `[Invite > Guild ${i.guild?.id}] Cannot bypass verify (Email required)`,
- );
- return this.guilds.cache.get(i.guild?.id);
- }
- const getForm = await this.api
- .guilds(i.guild?.id)
- ['member-verification'].get({
- query: { with_guild: false, invite_code: this.code },
- })
- .catch(() => {});
- if (getForm && getForm.form_fields[0]) {
- const form = Object.assign(getForm.form_fields[0], {
- response: true,
- });
- await this.api.guilds(i.guild?.id).requests['@me'].put({
- data: { form_fields: [form], version: getForm.version },
- });
- this.emit(
- Events.DEBUG,
- `[Invite > Guild ${i.guild?.id}] Bypassed verify`,
- );
- }
- }
- return guild;
- } else {
- return this.channels.cache.has(i.channelId || data.channel?.id);
- }
- }
-
- /**
- * Redeem nitro from code or url.
- * @param {string} nitro Nitro url or code
- * @param {TextChannelResolvable} [channel] Channel that the code was sent in
- * @param {Snowflake} [paymentSourceId] Payment source id
- * @returns {Promise}
- */
- redeemNitro(nitro, channel, paymentSourceId) {
- if (typeof nitro !== 'string') throw new Error('INVALID_NITRO');
- const nitroCode =
- nitro.match(
- /(discord.gift|discord.com|discordapp.com\/gifts)\/(\w{16,25})/,
- ) ||
- nitro.match(
- /(discord\.gift\/|discord\.com\/gifts\/|discordapp\.com\/gifts\/)(\w+)/,
- );
- if (!nitroCode) return false;
- const code = nitroCode[2];
- channel = this.channels.resolveId(channel);
- return this.api.entitlements['gift-codes'](code).redeem.post({
- auth: true,
- data: {
- channel_id: channel || null,
- payment_source_id: paymentSourceId || null,
- },
- });
- }
-
- /**
- * @typedef {Object} OAuth2AuthorizeOptions
- * @property {string} [guild_id] Guild ID
- * @property {string} [permissions] Permissions
- * @property {boolean} [authorize] Whether to authorize or not
- * @property {string} [code] 2FA Code
- * @property {string} [webhook_channel_id] Webhook Channel ID
- */
-
- /**
- * Authorize an application.
- * @param {string} urlOAuth2 Discord Auth URL
- * @param {OAuth2AuthorizeOptions} [options] Oauth2 options
- * @returns {Promise<{ location: string }>}
- * @example
- * client.authorizeURL(`https://discord.com/api/oauth2/authorize?client_id=botID&permissions=8&scope=applications.commands%20bot`, {
- guild_id: "guildID",
- })
- */
- authorizeURL(urlOAuth2, options = {}) {
- // ! throw new Error('METHOD_WARNING');
- const url = new URL(urlOAuth2);
- if (
- !/^https:\/\/(?:canary\.|ptb\.)?discord\.com(?:\/api(?:\/v\d{1,2})?)?\/oauth2\/authorize\?/.test(
- urlOAuth2,
- )
- ) {
- throw new Error('INVALID_URL', urlOAuth2);
- }
- const searchParams = Object.fromEntries(url.searchParams);
- // Assign options
- options = {
- authorize: true,
- permissions: '0',
- integration_type: 0,
- location_context: {
- guild_id: '10000',
- channel_id: '10000',
- channel_type: 10000,
- },
- ...searchParams,
- ...options,
- };
- delete searchParams.permissions;
- delete searchParams.integration_type;
- delete searchParams.guild_id;
- return this.api.oauth2.authorize.post({
- query: searchParams,
- data: options,
- });
- }
-
- /**
- * Install User Apps
- * @param {Snowflake} applicationId Discord Application id
- * @returns {Promise}
- */
- installUserApps(applicationId) {
- return this.api
- .applications(applicationId)
- .public.get({
- query: {
- with_guild: false,
- },
- })
- .then((rawData) => {
- const installTypes = rawData.integration_types_config['1'];
- if (installTypes) {
- return this.api.oauth2.authorize.post({
- query: {
- client_id: applicationId,
- scope: installTypes.oauth2_install_params.scopes.join(' '),
- },
- data: {
- permissions: '0',
- authorize: true,
- integration_type: 1,
- },
- });
- } else {
- return false;
- }
- });
- }
-
- /**
- * Deauthorizes an application or token.
- * @param {Snowflake} id - The ID of the Discord Application or Token.
- * @param {'application' | 'token'} [type='application'] - The type of the ID provided. Defaults to 'application'.
- * @returns {Promise} A promise that resolves when the deauthorization is complete.
- */
- deauthorize(id, type = 'application') {
- if (type === 'application') {
- return this.api.oauth2.tokens
- .get()
- .then((data) => data.find((o) => o.application.id == id))
- .then((o) => this.api.oauth2.tokens(o.id).delete());
- } else {
- return this.api.oauth2.tokens(id).delete();
- }
- }
-
- /**
- * @typedef {Object} AuthorizedApplicationData
- * @property {Application} application - The application object.
- * @property {Snowflake} authorizedApplicationId - The ID of the OAuth2 token.
- * @property {string[]} scopes - The scopes that were granted to this token.
- * @property {function(): Promise} deauthorize - Function to revoke this token.
- */
-
- /**
- * Retrieves the list of authorized applications (OAuth2 tokens).
- * @returns {Promise>}
- */
- authorizedApplications() {
- return this.api.oauth2.tokens.get().then((data) => {
- const results = new Collection();
- for (const o of data) {
- const application = new Application(this, o.application);
- const data = {
- application,
- authorizedApplicationId: o.id,
- scopes: o.scopes,
- deauthorize: () => this.deauthorize(o.id, 'token'),
- };
- results.set(o.application.id, data);
- }
- return results;
- });
- }
-
- /**
- * Calls {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script
- * with the client as `this`.
- * @param {string} script Script to eval
- * @returns {*}
- * @private
- */
- _eval(script) {
- return eval(script);
- }
-
- /**
- * Validates the client options.
- * @param {ClientOptions} [options=this.options] Options to validate
- * @private
- */
- _validateOptions(options = this.options) {
- if (typeof options.makeCache !== 'function') {
- throw new TypeError('CLIENT_INVALID_OPTION', 'makeCache', 'a function');
- }
- if (
- typeof options.messageCacheLifetime !== 'number' ||
- isNaN(options.messageCacheLifetime)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'The messageCacheLifetime',
- 'a number',
- );
- }
- if (
- typeof options.messageSweepInterval !== 'number' ||
- isNaN(options.messageSweepInterval)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'messageSweepInterval',
- 'a number',
- );
- }
- if (typeof options.sweepers !== 'object' || options.sweepers === null) {
- throw new TypeError('CLIENT_INVALID_OPTION', 'sweepers', 'an object');
- }
- if (
- typeof options.invalidRequestWarningInterval !== 'number' ||
- isNaN(options.invalidRequestWarningInterval)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'invalidRequestWarningInterval',
- 'a number',
- );
- }
- if (!Array.isArray(options.partials)) {
- throw new TypeError('CLIENT_INVALID_OPTION', 'partials', 'an Array');
- }
- if (
- typeof options.DMChannelVoiceStatusSync !== 'number' ||
- isNaN(options.DMChannelVoiceStatusSync)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'DMChannelVoiceStatusSync',
- 'a number',
- );
- }
- if (
- typeof options.waitGuildTimeout !== 'number' ||
- isNaN(options.waitGuildTimeout)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'waitGuildTimeout',
- 'a number',
- );
- }
- if (
- typeof options.restWsBridgeTimeout !== 'number' ||
- isNaN(options.restWsBridgeTimeout)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'restWsBridgeTimeout',
- 'a number',
- );
- }
- if (
- typeof options.restRequestTimeout !== 'number' ||
- isNaN(options.restRequestTimeout)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'restRequestTimeout',
- 'a number',
- );
- }
- if (
- typeof options.restGlobalRateLimit !== 'number' ||
- isNaN(options.restGlobalRateLimit)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'restGlobalRateLimit',
- 'a number',
- );
- }
- if (
- typeof options.restSweepInterval !== 'number' ||
- isNaN(options.restSweepInterval)
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'restSweepInterval',
- 'a number',
- );
- }
- if (typeof options.retryLimit !== 'number' || isNaN(options.retryLimit)) {
- throw new TypeError('CLIENT_INVALID_OPTION', 'retryLimit', 'a number');
- }
- if (typeof options.failIfNotExists !== 'boolean') {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'failIfNotExists',
- 'a boolean',
- );
- }
- if (
- typeof options.rejectOnRateLimit !== 'undefined' &&
- !(
- typeof options.rejectOnRateLimit === 'function' ||
- Array.isArray(options.rejectOnRateLimit)
- )
- ) {
- throw new TypeError(
- 'CLIENT_INVALID_OPTION',
- 'rejectOnRateLimit',
- 'an array or a function',
- );
- }
- if (typeof options.TOTPKey === 'string') {
- // Convert to base32 if not already
- options.TOTPKey = options.TOTPKey.replace(/ +/g, '').toUpperCase();
- }
- // Hardcode
- this.options.shardCount = 1;
- this.options.shards = [0];
- this.options.intents = Intents.ALL;
- }
-}
-
-module.exports = Client;
-
-/**
- * Emitted for general warnings.
- * @event Client#warn
- * @param {string} info The warning
- */
-
-/**
- * @external Collection
- * @see {@link https://discord.js.org/docs/packages/collection/stable/Collection:Class}
- */
diff --git a/vendor/discord.js-selfbot-v13/src/client/WebhookClient.js b/vendor/discord.js-selfbot-v13/src/client/WebhookClient.js
deleted file mode 100644
index 6064abb..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/WebhookClient.js
+++ /dev/null
@@ -1,65 +0,0 @@
-'use strict';
-
-const BaseClient = require('./BaseClient');
-const { Error } = require('../errors');
-const Webhook = require('../structures/Webhook');
-
-/**
- * The webhook client.
- * @implements {Webhook}
- * @extends {BaseClient}
- */
-class WebhookClient extends BaseClient {
- /**
- * The data for the webhook client containing either an id and token or just a URL
- * @typedef {Object} WebhookClientData
- * @property {Snowflake} [id] The id of the webhook
- * @property {string} [token] The token of the webhook
- * @property {string} [url] The full URL for the webhook client
- */
-
- /**
- * @param {WebhookClientData} data The data of the webhook
- * @param {ClientOptions} [options] Options for the client
- */
- constructor(data, options) {
- super(options);
- Object.defineProperty(this, 'client', { value: this });
- let { id, token } = data;
-
- if ('url' in data) {
- const url = data.url.match(
- // eslint-disable-next-line no-useless-escape
- /^https?:\/\/(?:canary|ptb)?\.?discord\.com\/api\/webhooks(?:\/v[0-9]\d*)?\/([^\/]+)\/([^\/]+)/i,
- );
-
- if (!url || url.length <= 1) throw new Error('WEBHOOK_URL_INVALID');
-
- [, id, token] = url;
- }
-
- this.id = id;
- Object.defineProperty(this, 'token', {
- value: token,
- writable: true,
- configurable: true,
- });
- }
-
- // These are here only for documentation purposes - they are implemented by Webhook
- /* eslint-disable no-empty-function */
- send() {}
- sendSlackMessage() {}
- fetchMessage() {}
- edit() {}
- editMessage() {}
- delete() {}
- deleteMessage() {}
- get createdTimestamp() {}
- get createdAt() {}
- get url() {}
-}
-
-Webhook.applyToClass(WebhookClient);
-
-module.exports = WebhookClient;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/Action.js b/vendor/discord.js-selfbot-v13/src/client/actions/Action.js
deleted file mode 100644
index 809667c..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/Action.js
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-const { PartialTypes } = require('../../util/Constants');
-
-/*
-
-ABOUT ACTIONS
-
-Actions are similar to WebSocket Packet Handlers, but since introducing
-the REST API methods, in order to prevent rewriting code to handle data,
-"actions" have been introduced. They're basically what Packet Handlers
-used to be but they're strictly for manipulating data and making sure
-that WebSocket events don't clash with REST methods.
-
-*/
-
-class GenericAction {
- constructor(client) {
- this.client = client;
- }
-
- handle(data) {
- return data;
- }
-
- getPayload(data, manager, id, partialType, cache) {
- const existing = manager.cache.get(id);
- if (!existing && this.client.options.partials.includes(partialType)) {
- return manager._add(data, cache);
- }
- return existing;
- }
-
- getChannel(data) {
- const payloadData = {};
- const id = data.channel_id ?? data.id;
-
- if (!('recipients' in data)) {
- // Try to resolve the recipient, but do not add the client user.
- const recipient = data.author ?? data.user ?? { id: data.user_id };
- if (recipient.id !== this.client.user.id)
- payloadData.recipients = [recipient];
- }
-
- if (id !== undefined) payloadData.id = id;
-
- return (
- data[this.client.actions.injectedChannel] ??
- this.getPayload(
- { ...data, ...payloadData },
- this.client.channels,
- id,
- PartialTypes.CHANNEL,
- )
- );
- }
-
- getMessage(data, channel, cache) {
- const id = data.message_id ?? data.id;
- return (
- data[this.client.actions.injectedMessage] ??
- this.getPayload(
- {
- id,
- channel_id: channel.id,
- guild_id: data.guild_id ?? channel.guild?.id,
- },
- channel.messages,
- id,
- PartialTypes.MESSAGE,
- cache,
- )
- );
- }
-
- getReaction(data, message, user) {
- const id = data.emoji.id ?? decodeURIComponent(data.emoji.name);
- return this.getPayload(
- {
- emoji: data.emoji,
- count: message.partial ? null : 0,
- me: user?.id === this.client.user.id,
- },
- message.reactions,
- id,
- PartialTypes.REACTION,
- );
- }
-
- getMember(data, guild) {
- return this.getPayload(
- data,
- guild.members,
- data.user.id,
- PartialTypes.GUILD_MEMBER,
- );
- }
-
- getUser(data) {
- const id = data.user_id;
- return (
- data[this.client.actions.injectedUser] ??
- this.getPayload({ id }, this.client.users, id, PartialTypes.USER)
- );
- }
-
- getUserFromMember(data) {
- if (data.guild_id && data.member?.user) {
- const guild = this.client.guilds.cache.get(data.guild_id);
- if (guild) {
- return guild.members._add(data.member).user;
- } else {
- return this.client.users._add(data.member.user);
- }
- }
- return this.getUser(data);
- }
-
- getScheduledEvent(data, guild) {
- const id = data.guild_scheduled_event_id ?? data.id;
- return this.getPayload(
- { id, guild_id: data.guild_id ?? guild.id },
- guild.scheduledEvents,
- id,
- PartialTypes.GUILD_SCHEDULED_EVENT,
- );
- }
-}
-
-module.exports = GenericAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ActionsManager.js b/vendor/discord.js-selfbot-v13/src/client/actions/ActionsManager.js
deleted file mode 100644
index 056ca61..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ActionsManager.js
+++ /dev/null
@@ -1,80 +0,0 @@
-'use strict';
-
-class ActionsManager {
- constructor(client) {
- this.client = client;
-
- // These symbols represent fully built data that we inject at times when calling actions manually.
- // Action#getUser for example, will return the injected data (which is assumed to be a built structure)
- // instead of trying to make it from provided data
- this.injectedUser = Symbol('djs.actions.injectedUser');
- this.injectedChannel = Symbol('djs.actions.injectedChannel');
- this.injectedMessage = Symbol('djs.actions.injectedMessage');
-
- this.register(require('./ApplicationCommandPermissionsUpdate'));
- this.register(require('./AutoModerationActionExecution'));
- this.register(require('./AutoModerationRuleCreate'));
- this.register(require('./AutoModerationRuleDelete'));
- this.register(require('./AutoModerationRuleUpdate'));
- this.register(require('./ChannelCreate'));
- this.register(require('./ChannelDelete'));
- this.register(require('./ChannelUpdate'));
- this.register(require('./GuildAuditLogEntryCreate'));
- this.register(require('./GuildBanAdd'));
- this.register(require('./GuildBanRemove'));
- this.register(require('./GuildChannelsPositionUpdate'));
- this.register(require('./GuildDelete'));
- this.register(require('./GuildEmojiCreate'));
- this.register(require('./GuildEmojiDelete'));
- this.register(require('./GuildEmojiUpdate'));
- this.register(require('./GuildEmojisUpdate'));
- this.register(require('./GuildIntegrationsUpdate'));
- this.register(require('./GuildMemberRemove'));
- this.register(require('./GuildMemberUpdate'));
- this.register(require('./GuildRoleCreate'));
- this.register(require('./GuildRoleDelete'));
- this.register(require('./GuildRoleUpdate'));
- this.register(require('./GuildRolesPositionUpdate'));
- this.register(require('./GuildScheduledEventCreate'));
- this.register(require('./GuildScheduledEventDelete'));
- this.register(require('./GuildScheduledEventUpdate'));
- this.register(require('./GuildScheduledEventUserAdd'));
- this.register(require('./GuildScheduledEventUserRemove'));
- this.register(require('./GuildStickerCreate'));
- this.register(require('./GuildStickerDelete'));
- this.register(require('./GuildStickerUpdate'));
- this.register(require('./GuildStickersUpdate'));
- this.register(require('./GuildUpdate'));
- this.register(require('./InviteCreate'));
- this.register(require('./InviteDelete'));
- this.register(require('./MessageCreate'));
- this.register(require('./MessageDelete'));
- this.register(require('./MessageDeleteBulk'));
- this.register(require('./MessagePollVoteAdd'));
- this.register(require('./MessagePollVoteRemove'));
- this.register(require('./MessageReactionAdd'));
- this.register(require('./MessageReactionRemove'));
- this.register(require('./MessageReactionRemoveAll'));
- this.register(require('./MessageReactionRemoveEmoji'));
- this.register(require('./MessageUpdate'));
- this.register(require('./PresenceUpdate'));
- this.register(require('./StageInstanceCreate'));
- this.register(require('./StageInstanceDelete'));
- this.register(require('./StageInstanceUpdate'));
- this.register(require('./ThreadCreate'));
- this.register(require('./ThreadDelete'));
- this.register(require('./ThreadListSync'));
- this.register(require('./ThreadMemberUpdate'));
- this.register(require('./ThreadMembersUpdate'));
- this.register(require('./TypingStart'));
- this.register(require('./UserUpdate'));
- this.register(require('./VoiceStateUpdate'));
- this.register(require('./WebhooksUpdate'));
- }
-
- register(Action) {
- this[Action.name.replace(/Action$/, '')] = new Action(this.client);
- }
-}
-
-module.exports = ActionsManager;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ApplicationCommandPermissionsUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/ApplicationCommandPermissionsUpdate.js
deleted file mode 100644
index 0aa518c..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ApplicationCommandPermissionsUpdate.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-/**
- * The data received in the {@link Client#event:applicationCommandPermissionsUpdate} event
- * @typedef {Object} ApplicationCommandPermissionsUpdateData
- * @property {Snowflake} id The id of the command or global entity that was updated
- * @property {Snowflake} guildId The id of the guild in which permissions were updated
- * @property {Snowflake} applicationId The id of the application that owns the command or entity being updated
- * @property {ApplicationCommandPermissions[]} permissions The updated permissions
- */
-
-class ApplicationCommandPermissionsUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- /**
- * Emitted whenever permissions for an application command in a guild were updated.
- * This includes permission updates for other applications in addition to the logged in client,
- * check `data.applicationId` to verify which application the update is for
- * @event Client#applicationCommandPermissionsUpdate
- * @param {ApplicationCommandPermissionsUpdateData} data The updated permissions
- */
- client.emit(Events.APPLICATION_COMMAND_PERMISSIONS_UPDATE, {
- permissions: data.permissions,
- id: data.id,
- guildId: data.guild_id,
- applicationId: data.application_id,
- });
- }
-}
-
-module.exports = ApplicationCommandPermissionsUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationActionExecution.js b/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationActionExecution.js
deleted file mode 100644
index 5dbb23d..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationActionExecution.js
+++ /dev/null
@@ -1,30 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const AutoModerationActionExecution = require('../../structures/AutoModerationActionExecution');
-const { Events } = require('../../util/Constants');
-
-class AutoModerationActionExecutionAction extends Action {
- handle(data) {
- const { client } = this;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- /**
- * Emitted whenever an auto moderation rule is triggered.
- * This event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.
- * @event Client#autoModerationActionExecution
- * @param {AutoModerationActionExecution} autoModerationActionExecution The data of the execution
- * @deprecated This event is not received by user accounts.
- */
- client.emit(
- Events.AUTO_MODERATION_ACTION_EXECUTION,
- new AutoModerationActionExecution(data, guild),
- );
- }
-
- return {};
- }
-}
-
-module.exports = AutoModerationActionExecutionAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleCreate.js
deleted file mode 100644
index e92fd1d..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleCreate.js
+++ /dev/null
@@ -1,28 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class AutoModerationRuleCreateAction extends Action {
- handle(data) {
- const { client } = this;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const autoModerationRule = guild.autoModerationRules._add(data);
-
- /**
- * Emitted whenever an auto moderation rule is created.
- * This event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.
- * @event Client#autoModerationRuleCreate
- * @param {AutoModerationRule} autoModerationRule The created auto moderation rule
- * @deprecated This event is not received by user accounts.
- */
- client.emit(Events.AUTO_MODERATION_RULE_CREATE, autoModerationRule);
- }
-
- return {};
- }
-}
-
-module.exports = AutoModerationRuleCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleDelete.js
deleted file mode 100644
index 07fd289..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleDelete.js
+++ /dev/null
@@ -1,32 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class AutoModerationRuleDeleteAction extends Action {
- handle(data) {
- const { client } = this;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const autoModerationRule = guild.autoModerationRules.cache.get(data.id);
-
- if (autoModerationRule) {
- guild.autoModerationRules.cache.delete(autoModerationRule.id);
-
- /**
- * Emitted whenever an auto moderation rule is deleted.
- * This event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.
- * @event Client#autoModerationRuleDelete
- * @param {AutoModerationRule} autoModerationRule The deleted auto moderation rule
- * @deprecated This event is not received by user accounts.
- */
- client.emit(Events.AUTO_MODERATION_RULE_DELETE, autoModerationRule);
- }
- }
-
- return {};
- }
-}
-
-module.exports = AutoModerationRuleDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleUpdate.js
deleted file mode 100644
index 23ca15a..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/AutoModerationRuleUpdate.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class AutoModerationRuleUpdateAction extends Action {
- handle(data) {
- const { client } = this;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const oldAutoModerationRule =
- guild.autoModerationRules.cache.get(data.id)?._clone() ?? null;
- const newAutoModerationRule = guild.autoModerationRules._add(data);
-
- /**
- * Emitted whenever an auto moderation rule gets updated.
- * This event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.
- * @event Client#autoModerationRuleUpdate
- * @param {?AutoModerationRule} oldAutoModerationRule The auto moderation rule before the update
- * @param {AutoModerationRule} newAutoModerationRule The auto moderation rule after the update
- * @deprecated This event is not received by user accounts.
- */
- client.emit(
- Events.AUTO_MODERATION_RULE_UPDATE,
- oldAutoModerationRule,
- newAutoModerationRule,
- );
- }
-
- return {};
- }
-}
-
-module.exports = AutoModerationRuleUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ChannelCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/ChannelCreate.js
deleted file mode 100644
index 68eb2dc..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ChannelCreate.js
+++ /dev/null
@@ -1,23 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class ChannelCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const existing = client.channels.cache.has(data.id);
- const channel = client.channels._add(data);
- if (!existing && channel) {
- /**
- * Emitted whenever a guild channel is created.
- * @event Client#channelCreate
- * @param {GuildChannel} channel The channel that was created
- */
- client.emit(Events.CHANNEL_CREATE, channel);
- }
- return { channel };
- }
-}
-
-module.exports = ChannelCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ChannelDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/ChannelDelete.js
deleted file mode 100644
index 43fdb32..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ChannelDelete.js
+++ /dev/null
@@ -1,39 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedChannels } = require('../../structures/Channel');
-const DMChannel = require('../../structures/DMChannel');
-const { deletedMessages } = require('../../structures/Message');
-const { Events } = require('../../util/Constants');
-
-class ChannelDeleteAction extends Action {
- constructor(client) {
- super(client);
- this.deleted = new Map();
- }
-
- handle(data) {
- const client = this.client;
- const channel = client.channels.cache.get(data.id);
-
- if (channel) {
- client.channels._remove(channel.id);
- deletedChannels.add(channel);
- if (channel.messages && !(channel instanceof DMChannel)) {
- for (const message of channel.messages.cache.values()) {
- deletedMessages.add(message);
- }
- }
- /**
- * Emitted whenever a channel is deleted.
- * @event Client#channelDelete
- * @param {DMChannel|GuildChannel} channel The channel that was deleted
- */
- client.emit(Events.CHANNEL_DELETE, channel);
- }
-
- return { channel };
- }
-}
-
-module.exports = ChannelDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ChannelUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/ChannelUpdate.js
deleted file mode 100644
index 11b3ade..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ChannelUpdate.js
+++ /dev/null
@@ -1,44 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Channel } = require('../../structures/Channel');
-const { ChannelTypes } = require('../../util/Constants');
-
-class ChannelUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- let channel = client.channels.cache.get(data.id);
-
- if (channel) {
- const old = channel._update(data);
-
- if (ChannelTypes[channel.type] !== data.type) {
- const newChannel = Channel.create(this.client, data, channel.guild);
-
- if (!newChannel) {
- this.client.channels.cache.delete(channel.id);
- return {};
- }
-
- if (channel.isText() && newChannel.isText()) {
- for (const [id, message] of channel.messages.cache)
- newChannel.messages.cache.set(id, message);
- }
-
- channel = newChannel;
- this.client.channels.cache.set(channel.id, channel);
- }
-
- return {
- old,
- updated: channel,
- };
- } else {
- client.channels._add(data);
- }
-
- return {};
- }
-}
-
-module.exports = ChannelUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildAuditLogEntryCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildAuditLogEntryCreate.js
deleted file mode 100644
index ea50f78..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildAuditLogEntryCreate.js
+++ /dev/null
@@ -1,29 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const GuildAuditLogsEntry = require('../../structures/GuildAuditLogs').Entry;
-const { Events } = require('../../util/Constants');
-
-class GuildAuditLogEntryCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- let auditLogEntry;
-
- if (guild) {
- auditLogEntry = new GuildAuditLogsEntry(guild, data);
-
- /**
- * Emitted whenever a guild audit log entry is created.
- * @event Client#guildAuditLogEntryCreate
- * @param {GuildAuditLogsEntry} auditLogEntry The entry that was created
- * @param {Guild} guild The guild where the entry was created
- */
- client.emit(Events.GUILD_AUDIT_LOG_ENTRY_CREATE, auditLogEntry, guild);
- }
-
- return { auditLogEntry };
- }
-}
-
-module.exports = GuildAuditLogEntryCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildBanAdd.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildBanAdd.js
deleted file mode 100644
index e97e789..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildBanAdd.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildBanAdd extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- /**
- * Emitted whenever a member is banned from a guild.
- * @event Client#guildBanAdd
- * @param {GuildBan} ban The ban that occurred
- */
- if (guild) client.emit(Events.GUILD_BAN_ADD, guild.bans._add(data));
- }
-}
-
-module.exports = GuildBanAdd;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildBanRemove.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildBanRemove.js
deleted file mode 100644
index 2574c03..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildBanRemove.js
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const GuildBan = require('../../structures/GuildBan');
-const { Events } = require('../../util/Constants');
-
-class GuildBanRemove extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- /**
- * Emitted whenever a member is unbanned from a guild.
- * @event Client#guildBanRemove
- * @param {GuildBan} ban The ban that was removed
- */
- if (guild) {
- const ban =
- guild.bans.cache.get(data.user.id) ?? new GuildBan(client, data, guild);
- guild.bans.cache.delete(ban.user.id);
- client.emit(Events.GUILD_BAN_REMOVE, ban);
- }
- }
-}
-
-module.exports = GuildBanRemove;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildChannelsPositionUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildChannelsPositionUpdate.js
deleted file mode 100644
index a393167..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildChannelsPositionUpdate.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-
-class GuildChannelsPositionUpdate extends Action {
- handle(data) {
- const client = this.client;
-
- const guild = client.guilds.cache.get(data.guild_id);
- if (guild) {
- for (const partialChannel of data.channels) {
- const channel = guild.channels.cache.get(partialChannel.id);
- if (channel) channel.rawPosition = partialChannel.position;
- }
- }
-
- return { guild };
- }
-}
-
-module.exports = GuildChannelsPositionUpdate;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildDelete.js
deleted file mode 100644
index e3417bb..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildDelete.js
+++ /dev/null
@@ -1,69 +0,0 @@
-'use strict';
-
-const { setTimeout } = require('node:timers');
-const Action = require('./Action');
-const { deletedGuilds } = require('../../structures/Guild');
-const { Events } = require('../../util/Constants');
-
-class GuildDeleteAction extends Action {
- constructor(client) {
- super(client);
- this.deleted = new Map();
- }
-
- handle(data) {
- const client = this.client;
-
- let guild = client.guilds.cache.get(data.id);
- if (guild) {
- if (data.unavailable) {
- // Guild is unavailable
- guild.available = false;
-
- /**
- * Emitted whenever a guild becomes unavailable, likely due to a server outage.
- * @event Client#guildUnavailable
- * @param {Guild} guild The guild that has become unavailable
- */
- client.emit(Events.GUILD_UNAVAILABLE, guild);
-
- // Stops the GuildDelete packet thinking a guild was actually deleted,
- // handles emitting of event itself
- return {
- guild: null,
- };
- }
-
- for (const channel of guild.channels.cache.values())
- this.client.channels._remove(channel.id);
- client.voice.adapters.get(data.id)?.destroy();
-
- // Delete guild
- client.guilds.cache.delete(guild.id);
- deletedGuilds.add(guild);
-
- /**
- * Emitted whenever a guild kicks the client or the guild is deleted/left.
- * @event Client#guildDelete
- * @param {Guild} guild The guild that was deleted
- */
- client.emit(Events.GUILD_DELETE, guild);
-
- this.deleted.set(guild.id, guild);
- this.scheduleForDeletion(guild.id);
- } else {
- guild = this.deleted.get(data.id) ?? null;
- }
-
- return { guild };
- }
-
- scheduleForDeletion(id) {
- setTimeout(
- () => this.deleted.delete(id),
- this.client.options.restWsBridgeTimeout,
- ).unref();
- }
-}
-
-module.exports = GuildDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiCreate.js
deleted file mode 100644
index ccc634c..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiCreate.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildEmojiCreateAction extends Action {
- handle(guild, createdEmoji) {
- const already = guild.emojis.cache.has(createdEmoji.id);
- const emoji = guild.emojis._add(createdEmoji);
- /**
- * Emitted whenever a custom emoji is created in a guild.
- * @event Client#emojiCreate
- * @param {GuildEmoji} emoji The emoji that was created
- */
- if (!already) this.client.emit(Events.GUILD_EMOJI_CREATE, emoji);
- return { emoji };
- }
-}
-
-module.exports = GuildEmojiCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiDelete.js
deleted file mode 100644
index 0c20287..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiDelete.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedEmojis } = require('../../structures/Emoji');
-const { Events } = require('../../util/Constants');
-
-class GuildEmojiDeleteAction extends Action {
- handle(emoji) {
- emoji.guild.emojis.cache.delete(emoji.id);
- deletedEmojis.add(emoji);
- /**
- * Emitted whenever a custom emoji is deleted in a guild.
- * @event Client#emojiDelete
- * @param {GuildEmoji} emoji The emoji that was deleted
- */
- this.client.emit(Events.GUILD_EMOJI_DELETE, emoji);
- return { emoji };
- }
-}
-
-module.exports = GuildEmojiDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiUpdate.js
deleted file mode 100644
index 9fa59c9..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojiUpdate.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildEmojiUpdateAction extends Action {
- handle(current, data) {
- const old = current._update(data);
- /**
- * Emitted whenever a custom emoji is updated in a guild.
- * @event Client#emojiUpdate
- * @param {GuildEmoji} oldEmoji The old emoji
- * @param {GuildEmoji} newEmoji The new emoji
- */
- this.client.emit(Events.GUILD_EMOJI_UPDATE, old, current);
- return { emoji: current };
- }
-}
-
-module.exports = GuildEmojiUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojisUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojisUpdate.js
deleted file mode 100644
index 7829db1..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildEmojisUpdate.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-
-class GuildEmojisUpdateAction extends Action {
- handle(data) {
- const guild = this.client.guilds.cache.get(data.guild_id);
- if (!guild?.emojis) return;
-
- const deletions = new Map(guild.emojis.cache);
-
- for (const emoji of data.emojis) {
- // Determine type of emoji event
- const cachedEmoji = guild.emojis.cache.get(emoji.id);
- if (cachedEmoji) {
- deletions.delete(emoji.id);
- if (!cachedEmoji.equals(emoji)) {
- // Emoji updated
- this.client.actions.GuildEmojiUpdate.handle(cachedEmoji, emoji);
- }
- } else {
- // Emoji added
- this.client.actions.GuildEmojiCreate.handle(guild, emoji);
- }
- }
-
- for (const emoji of deletions.values()) {
- // Emoji deleted
- this.client.actions.GuildEmojiDelete.handle(emoji);
- }
- }
-}
-
-module.exports = GuildEmojisUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildIntegrationsUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildIntegrationsUpdate.js
deleted file mode 100644
index bbce076..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildIntegrationsUpdate.js
+++ /dev/null
@@ -1,19 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildIntegrationsUpdate extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- /**
- * Emitted whenever a guild integration is updated
- * @event Client#guildIntegrationsUpdate
- * @param {Guild} guild The guild whose integrations were updated
- */
- if (guild) client.emit(Events.GUILD_INTEGRATIONS_UPDATE, guild);
- }
-}
-
-module.exports = GuildIntegrationsUpdate;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildMemberRemove.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildMemberRemove.js
deleted file mode 100644
index 23d786a..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildMemberRemove.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedGuildMembers } = require('../../structures/GuildMember');
-const { Events, Status } = require('../../util/Constants');
-
-class GuildMemberRemoveAction extends Action {
- handle(data, shard) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- let member = null;
- if (guild) {
- member = this.getMember({ user: data.user }, guild);
- guild.memberCount--;
- if (member) {
- deletedGuildMembers.add(member);
- guild.members.cache.delete(member.id);
- /**
- * Emitted whenever a member leaves a guild, or is kicked.
- * @event Client#guildMemberRemove
- * @param {GuildMember} member The member that has left/been kicked from the guild
- * @deprecated See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.
- */
- if (shard.status === Status.READY)
- client.emit(Events.GUILD_MEMBER_REMOVE, member);
- }
- guild.presences.cache.delete(data.user.id);
- guild.voiceStates.cache.delete(data.user.id);
- }
- return { guild, member };
- }
-}
-
-module.exports = GuildMemberRemoveAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildMemberUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildMemberUpdate.js
deleted file mode 100644
index f5d5f5a..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildMemberUpdate.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Status, Events } = require('../../util/Constants');
-
-class GuildMemberUpdateAction extends Action {
- handle(data, shard) {
- const { client } = this;
- if (data.user.username) {
- const user = client.users.cache.get(data.user.id);
- if (!user) {
- client.users._add(data.user);
- } else if (!user._equals(data.user)) {
- client.actions.UserUpdate.handle(data.user);
- }
- }
-
- const guild = client.guilds.cache.get(data.guild_id);
- if (guild) {
- const member = this.getMember({ user: data.user }, guild);
- if (member) {
- const old = member._update(data);
- /**
- * Emitted whenever a guild member changes - i.e. new role, removed role, nickname.
- * @event Client#guildMemberUpdate
- * @param {GuildMember} oldMember The member before the update
- * @param {GuildMember} newMember The member after the update
- * @deprecated See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.
- */
- if (shard.status === Status.READY && !member.equals(old))
- client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
- } else {
- const newMember = guild.members._add(data);
- /**
- * Emitted whenever a member becomes available.
- * @event Client#guildMemberAvailable
- * @param {GuildMember} member The member that became available
- */
- this.client.emit(Events.GUILD_MEMBER_AVAILABLE, newMember);
- }
- }
- }
-}
-
-module.exports = GuildMemberUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleCreate.js
deleted file mode 100644
index 102e0f6..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleCreate.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildRoleCreate extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- let role;
- if (guild) {
- const already = guild.roles.cache.has(data.role.id);
- role = guild.roles._add(data.role);
- /**
- * Emitted whenever a role is created.
- * @event Client#roleCreate
- * @param {Role} role The role that was created
- */
- if (!already) client.emit(Events.GUILD_ROLE_CREATE, role);
- }
- return { role };
- }
-}
-
-module.exports = GuildRoleCreate;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleDelete.js
deleted file mode 100644
index 9d156db..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleDelete.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedRoles } = require('../../structures/Role');
-const { Events } = require('../../util/Constants');
-
-class GuildRoleDeleteAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- let role;
-
- if (guild) {
- role = guild.roles.cache.get(data.role_id);
- if (role) {
- guild.roles.cache.delete(data.role_id);
- deletedRoles.add(role);
- /**
- * Emitted whenever a guild role is deleted.
- * @event Client#roleDelete
- * @param {Role} role The role that was deleted
- */
- client.emit(Events.GUILD_ROLE_DELETE, role);
- }
- }
-
- return { role };
- }
-}
-
-module.exports = GuildRoleDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleUpdate.js
deleted file mode 100644
index faea120..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRoleUpdate.js
+++ /dev/null
@@ -1,39 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildRoleUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- let old = null;
-
- const role = guild.roles.cache.get(data.role.id);
- if (role) {
- old = role._update(data.role);
- /**
- * Emitted whenever a guild role is updated.
- * @event Client#roleUpdate
- * @param {Role} oldRole The role before the update
- * @param {Role} newRole The role after the update
- */
- client.emit(Events.GUILD_ROLE_UPDATE, old, role);
- }
-
- return {
- old,
- updated: role,
- };
- }
-
- return {
- old: null,
- updated: null,
- };
- }
-}
-
-module.exports = GuildRoleUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRolesPositionUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildRolesPositionUpdate.js
deleted file mode 100644
index d7abca9..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildRolesPositionUpdate.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-
-class GuildRolesPositionUpdate extends Action {
- handle(data) {
- const client = this.client;
-
- const guild = client.guilds.cache.get(data.guild_id);
- if (guild) {
- for (const partialRole of data.roles) {
- const role = guild.roles.cache.get(partialRole.id);
- if (role) role.rawPosition = partialRole.position;
- }
- }
-
- return { guild };
- }
-}
-
-module.exports = GuildRolesPositionUpdate;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventCreate.js
deleted file mode 100644
index b1a2d92..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventCreate.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildScheduledEventCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- if (guild) {
- const guildScheduledEvent = guild.scheduledEvents._add(data);
-
- /**
- * Emitted whenever a guild scheduled event is created.
- * @event Client#guildScheduledEventCreate
- * @param {GuildScheduledEvent} guildScheduledEvent The created guild scheduled event
- */
- client.emit(Events.GUILD_SCHEDULED_EVENT_CREATE, guildScheduledEvent);
-
- return { guildScheduledEvent };
- }
-
- return {};
- }
-}
-
-module.exports = GuildScheduledEventCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventDelete.js
deleted file mode 100644
index 0e7baa1..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventDelete.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildScheduledEventDeleteAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const guildScheduledEvent = this.getScheduledEvent(data, guild);
- if (guildScheduledEvent) {
- guild.scheduledEvents.cache.delete(guildScheduledEvent.id);
-
- /**
- * Emitted whenever a guild scheduled event is deleted.
- * @event Client#guildScheduledEventDelete
- * @param {GuildScheduledEvent} guildScheduledEvent The deleted guild scheduled event
- */
- client.emit(Events.GUILD_SCHEDULED_EVENT_DELETE, guildScheduledEvent);
-
- return { guildScheduledEvent };
- }
- }
-
- return {};
- }
-}
-
-module.exports = GuildScheduledEventDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUpdate.js
deleted file mode 100644
index ecd7b62..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUpdate.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildScheduledEventUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const oldGuildScheduledEvent =
- guild.scheduledEvents.cache.get(data.id)?._clone() ?? null;
- const newGuildScheduledEvent = guild.scheduledEvents._add(data);
-
- /**
- * Emitted whenever a guild scheduled event gets updated.
- * @event Client#guildScheduledEventUpdate
- * @param {?GuildScheduledEvent} oldGuildScheduledEvent The guild scheduled event object before the update
- * @param {GuildScheduledEvent} newGuildScheduledEvent The guild scheduled event object after the update
- */
- client.emit(
- Events.GUILD_SCHEDULED_EVENT_UPDATE,
- oldGuildScheduledEvent,
- newGuildScheduledEvent,
- );
-
- return { oldGuildScheduledEvent, newGuildScheduledEvent };
- }
-
- return {};
- }
-}
-
-module.exports = GuildScheduledEventUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUserAdd.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUserAdd.js
deleted file mode 100644
index 878c8ad..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUserAdd.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildScheduledEventUserAddAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const guildScheduledEvent = this.getScheduledEvent(data, guild);
- const user = this.getUser(data);
-
- if (guildScheduledEvent && user) {
- /**
- * Emitted whenever a user subscribes to a guild scheduled event
- * @event Client#guildScheduledEventUserAdd
- * @param {GuildScheduledEvent} guildScheduledEvent The guild scheduled event
- * @param {User} user The user who subscribed
- */
- client.emit(
- Events.GUILD_SCHEDULED_EVENT_USER_ADD,
- guildScheduledEvent,
- user,
- );
-
- return { guildScheduledEvent, user };
- }
- }
-
- return {};
- }
-}
-
-module.exports = GuildScheduledEventUserAddAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUserRemove.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUserRemove.js
deleted file mode 100644
index ac08b89..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildScheduledEventUserRemove.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildScheduledEventUserRemoveAction extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- const guildScheduledEvent = this.getScheduledEvent(data, guild);
- const user = this.getUser(data);
-
- if (guildScheduledEvent && user) {
- /**
- * Emitted whenever a user unsubscribes from a guild scheduled event
- * @event Client#guildScheduledEventUserRemove
- * @param {GuildScheduledEvent} guildScheduledEvent The guild scheduled event
- * @param {User} user The user who unsubscribed
- */
- client.emit(
- Events.GUILD_SCHEDULED_EVENT_USER_REMOVE,
- guildScheduledEvent,
- user,
- );
-
- return { guildScheduledEvent, user };
- }
- }
-
- return {};
- }
-}
-
-module.exports = GuildScheduledEventUserRemoveAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerCreate.js
deleted file mode 100644
index c02cafa..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerCreate.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildStickerCreateAction extends Action {
- handle(guild, createdSticker) {
- const already = guild.stickers.cache.has(createdSticker.id);
- const sticker = guild.stickers._add(createdSticker);
- /**
- * Emitted whenever a custom sticker is created in a guild.
- * @event Client#stickerCreate
- * @param {Sticker} sticker The sticker that was created
- */
- if (!already) this.client.emit(Events.GUILD_STICKER_CREATE, sticker);
- return { sticker };
- }
-}
-
-module.exports = GuildStickerCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerDelete.js
deleted file mode 100644
index 4adfe52..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerDelete.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedStickers } = require('../../structures/Sticker');
-const { Events } = require('../../util/Constants');
-
-class GuildStickerDeleteAction extends Action {
- handle(sticker) {
- sticker.guild.stickers.cache.delete(sticker.id);
- deletedStickers.add(sticker);
- /**
- * Emitted whenever a custom sticker is deleted in a guild.
- * @event Client#stickerDelete
- * @param {Sticker} sticker The sticker that was deleted
- */
- this.client.emit(Events.GUILD_STICKER_DELETE, sticker);
- return { sticker };
- }
-}
-
-module.exports = GuildStickerDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerUpdate.js
deleted file mode 100644
index 0c3edc7..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickerUpdate.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildStickerUpdateAction extends Action {
- handle(current, data) {
- const old = current._update(data);
- /**
- * Emitted whenever a custom sticker is updated in a guild.
- * @event Client#stickerUpdate
- * @param {Sticker} oldSticker The old sticker
- * @param {Sticker} newSticker The new sticker
- */
- this.client.emit(Events.GUILD_STICKER_UPDATE, old, current);
- return { sticker: current };
- }
-}
-
-module.exports = GuildStickerUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickersUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickersUpdate.js
deleted file mode 100644
index ccf1d63..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildStickersUpdate.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-
-class GuildStickersUpdateAction extends Action {
- handle(data) {
- const guild = this.client.guilds.cache.get(data.guild_id);
- if (!guild?.stickers) return;
-
- const deletions = new Map(guild.stickers.cache);
-
- for (const sticker of data.stickers) {
- // Determine type of sticker event
- const cachedSticker = guild.stickers.cache.get(sticker.id);
- if (cachedSticker) {
- deletions.delete(sticker.id);
- if (!cachedSticker.equals(sticker)) {
- // Sticker updated
- this.client.actions.GuildStickerUpdate.handle(cachedSticker, sticker);
- }
- } else {
- // Sticker added
- this.client.actions.GuildStickerCreate.handle(guild, sticker);
- }
- }
-
- for (const sticker of deletions.values()) {
- // Sticker deleted
- this.client.actions.GuildStickerDelete.handle(sticker);
- }
- }
-}
-
-module.exports = GuildStickersUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/GuildUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/GuildUpdate.js
deleted file mode 100644
index 78a8afb..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/GuildUpdate.js
+++ /dev/null
@@ -1,33 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class GuildUpdateAction extends Action {
- handle(data) {
- const client = this.client;
-
- const guild = client.guilds.cache.get(data.id);
- if (guild) {
- const old = guild._update(data);
- /**
- * Emitted whenever a guild is updated - e.g. name change.
- * @event Client#guildUpdate
- * @param {Guild} oldGuild The guild before the update
- * @param {Guild} newGuild The guild after the update
- */
- client.emit(Events.GUILD_UPDATE, old, guild);
- return {
- old,
- updated: guild,
- };
- }
-
- return {
- old: null,
- updated: null,
- };
- }
-}
-
-module.exports = GuildUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/InviteCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/InviteCreate.js
deleted file mode 100644
index 2f7c216..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/InviteCreate.js
+++ /dev/null
@@ -1,28 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class InviteCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = client.channels.cache.get(data.channel_id);
- const guild = client.guilds.cache.get(data.guild_id);
- if (!channel) return false;
-
- const inviteData = Object.assign(data, { channel, guild });
- const invite = guild.invites._add(inviteData);
-
- /**
- * Emitted when an invite is created.
- * This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,
- * or `MANAGE_CHANNELS` permissions for the channel.
- * @event Client#inviteCreate
- * @param {Invite} invite The invite that was created
- */
- client.emit(Events.INVITE_CREATE, invite);
- return { invite };
- }
-}
-
-module.exports = InviteCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/InviteDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/InviteDelete.js
deleted file mode 100644
index 47c77fa..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/InviteDelete.js
+++ /dev/null
@@ -1,30 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const Invite = require('../../structures/Invite');
-const { Events } = require('../../util/Constants');
-
-class InviteDeleteAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = client.channels.cache.get(data.channel_id);
- const guild = client.guilds.cache.get(data.guild_id);
- if (!channel) return false;
-
- const inviteData = Object.assign(data, { channel, guild });
- const invite = new Invite(client, inviteData);
- guild.invites.cache.delete(invite.code);
-
- /**
- * Emitted when an invite is deleted.
- * This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,
- * or `MANAGE_CHANNELS` permissions for the channel.
- * @event Client#inviteDelete
- * @param {Invite} invite The invite that was deleted
- */
- client.emit(Events.INVITE_DELETE, invite);
- return { invite };
- }
-}
-
-module.exports = InviteDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageCreate.js
deleted file mode 100644
index ef34143..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageCreate.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-const process = require('node:process');
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-let deprecationEmitted = false;
-
-class MessageCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = this.getChannel({
- id: data.channel_id,
- author: data.author,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (channel) {
- if (!channel.isText()) return {};
-
- const existing = channel.messages.cache.get(data.id);
- if (existing && existing.author?.id !== this.client.user.id)
- return { message: existing };
- const message = existing ?? channel.messages._add(data);
- channel.lastMessageId = data.id;
-
- /**
- * Emitted whenever a message is created.
- * @event Client#messageCreate
- * @param {Message} message The created message
- */
- client.emit(Events.MESSAGE_CREATE, message);
-
- /**
- * Emitted whenever a message is created.
- * @event Client#message
- * @param {Message} message The created message
- * @deprecated Use {@link Client#event:messageCreate} instead
- */
- if (client.emit('message', message) && !deprecationEmitted) {
- deprecationEmitted = true;
- process.emitWarning(
- 'The message event is deprecated. Use messageCreate instead',
- 'DeprecationWarning',
- );
- }
-
- return { message };
- }
-
- return {};
- }
-}
-
-module.exports = MessageCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageDelete.js
deleted file mode 100644
index 86da89f..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageDelete.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedMessages } = require('../../structures/Message');
-const { Events } = require('../../util/Constants');
-
-class MessageDeleteAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = this.getChannel({
- id: data.channel_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- let message;
- if (channel) {
- if (!channel.isText()) return {};
-
- message = this.getMessage(data, channel);
- if (message) {
- channel.messages.cache.delete(message.id);
- deletedMessages.add(message);
- /**
- * Emitted whenever a message is deleted.
- * @event Client#messageDelete
- * @param {Message} message The deleted message
- */
- client.emit(Events.MESSAGE_DELETE, message);
- }
- }
-
- return { message };
- }
-}
-
-module.exports = MessageDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageDeleteBulk.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageDeleteBulk.js
deleted file mode 100644
index 31a3717..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageDeleteBulk.js
+++ /dev/null
@@ -1,46 +0,0 @@
-'use strict';
-
-const { Collection } = require('@discordjs/collection');
-const Action = require('./Action');
-const { deletedMessages } = require('../../structures/Message');
-const { Events } = require('../../util/Constants');
-
-class MessageDeleteBulkAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = client.channels.cache.get(data.channel_id);
-
- if (channel) {
- if (!channel.isText()) return {};
-
- const ids = data.ids;
- const messages = new Collection();
- for (const id of ids) {
- const message = this.getMessage(
- {
- id,
- guild_id: data.guild_id,
- },
- channel,
- false,
- );
- if (message) {
- deletedMessages.add(message);
- messages.set(message.id, message);
- channel.messages.cache.delete(id);
- }
- }
-
- /**
- * Emitted whenever messages are deleted in bulk.
- * @event Client#messageDeleteBulk
- * @param {Collection} messages The deleted messages, mapped by their id
- */
- if (messages.size > 0) client.emit(Events.MESSAGE_BULK_DELETE, messages);
- return { messages };
- }
- return {};
- }
-}
-
-module.exports = MessageDeleteBulkAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessagePollVoteAdd.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessagePollVoteAdd.js
deleted file mode 100644
index bbe29a2..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessagePollVoteAdd.js
+++ /dev/null
@@ -1,33 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class MessagePollVoteAddAction extends Action {
- handle(data) {
- const channel = this.getChannel(data);
- if (!channel?.isText()) return false;
-
- const message = this.getMessage(data, channel);
- if (!message) return false;
-
- const { poll } = message;
-
- const answer = poll?.answers.get(data.answer_id);
- if (!answer) return false;
-
- answer.voteCount++;
-
- /**
- * Emitted whenever a user votes in a poll.
- * @event Client#messagePollVoteAdd
- * @param {PollAnswer} pollAnswer The answer that was voted on
- * @param {Snowflake} userId The id of the user that voted
- */
- this.client.emit(Events.MESSAGE_POLL_VOTE_ADD, answer, data.user_id);
-
- return { poll };
- }
-}
-
-module.exports = MessagePollVoteAddAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessagePollVoteRemove.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessagePollVoteRemove.js
deleted file mode 100644
index 3986805..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessagePollVoteRemove.js
+++ /dev/null
@@ -1,33 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class MessagePollVoteRemoveAction extends Action {
- handle(data) {
- const channel = this.getChannel(data);
- if (!channel?.isText()) return false;
-
- const message = this.getMessage(data, channel);
- if (!message) return false;
-
- const { poll } = message;
-
- const answer = poll?.answers.get(data.answer_id);
- if (!answer) return false;
-
- answer.voteCount--;
-
- /**
- * Emitted whenever a user removes their vote in a poll.
- * @event Client#messagePollVoteRemove
- * @param {PollAnswer} pollAnswer The answer where the vote was removed
- * @param {Snowflake} userId The id of the user that removed their vote
- */
- this.client.emit(Events.MESSAGE_POLL_VOTE_REMOVE, answer, data.user_id);
-
- return { poll };
- }
-}
-
-module.exports = MessagePollVoteRemoveAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionAdd.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionAdd.js
deleted file mode 100644
index 2d80940..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionAdd.js
+++ /dev/null
@@ -1,73 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-const { PartialTypes } = require('../../util/Constants');
-
-/*
-{ user_id: 'id',
- message_id: 'id',
- emoji: { name: '�', id: null },
- channel_id: 'id',
- burst: boolean
- // If originating from a guild
- guild_id: 'id',
- member: { ..., user: { ... } } }
-*/
-
-class MessageReactionAdd extends Action {
- handle(data, fromStructure = false) {
- if (!data.emoji) return false;
-
- const user = this.getUserFromMember(data);
- if (!user) return false;
-
- // Verify channel
- const channel = this.getChannel({
- id: data.channel_id,
- user_id: data.user_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (!channel || !channel.isText()) return false;
-
- // Verify message
- const message = this.getMessage(data, channel);
- if (!message) return false;
-
- // Verify reaction
- const includePartial = this.client.options.partials.includes(
- PartialTypes.REACTION,
- );
- if (message.partial && !includePartial) return false;
- const reaction = message.reactions._add({
- emoji: data.emoji,
- count: message.partial ? null : 0,
- me: user.id === this.client.user.id,
- ...data,
- });
- if (!reaction) return false;
- reaction._add(user, data.burst);
- if (fromStructure) return { message, reaction, user };
- /**
- * Provides additional information about altered reaction
- * @typedef {Object} MessageReactionEventDetails
- * @property {ReactionType} type The type of the reaction
- * @property {boolean} burst Determines whether a super reaction was used
- */
- /**
- * Emitted whenever a reaction is added to a cached message.
- * @event Client#messageReactionAdd
- * @param {MessageReaction} messageReaction The reaction object
- * @param {User} user The user that applied the guild or reaction emoji
- * @param {MessageReactionEventDetails} details Details of adding the reaction
- */
- this.client.emit(Events.MESSAGE_REACTION_ADD, reaction, user, {
- type: data.type,
- burst: data.burst,
- });
-
- return { message, reaction, user };
- }
-}
-
-module.exports = MessageReactionAdd;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemove.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemove.js
deleted file mode 100644
index 5ac6eab..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemove.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-/*
-{ user_id: 'id',
- message_id: 'id',
- emoji: { name: '�', id: null },
- channel_id: 'id',
- guild_id: 'id' }
-*/
-
-class MessageReactionRemove extends Action {
- handle(data) {
- if (!data.emoji) return false;
-
- const user = this.getUser(data);
- if (!user) return false;
-
- // Verify channel
- const channel = this.getChannel({
- id: data.channel_id,
- user_id: data.user_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (!channel || !channel.isText()) return false;
-
- // Verify message
- const message = this.getMessage(data, channel);
- if (!message) return false;
-
- // Verify reaction
- const reaction = this.getReaction(data, message, user);
- if (!reaction) return false;
- reaction._remove(user, data.burst);
- /**
- * Emitted whenever a reaction is removed from a cached message.
- * @event Client#messageReactionRemove
- * @param {MessageReaction} messageReaction The reaction object
- * @param {User} user The user whose emoji or reaction emoji was removed
- * @param {MessageReactionEventDetails} details Details of removing the reaction
- */
- this.client.emit(Events.MESSAGE_REACTION_REMOVE, reaction, user, {
- type: data.type,
- burst: data.burst,
- });
-
- return { message, reaction, user };
- }
-}
-
-module.exports = MessageReactionRemove;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemoveAll.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemoveAll.js
deleted file mode 100644
index e7a3145..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemoveAll.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class MessageReactionRemoveAll extends Action {
- handle(data) {
- // Verify channel
- const channel = this.getChannel({
- id: data.channel_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (!channel || !channel.isText()) return false;
-
- // Verify message
- const message = this.getMessage(data, channel);
- if (!message) return false;
-
- // Copy removed reactions to emit for the event.
- const removed = message.reactions.cache.clone();
-
- message.reactions.cache.clear();
- this.client.emit(Events.MESSAGE_REACTION_REMOVE_ALL, message, removed);
-
- return { message };
- }
-}
-
-/**
- * Emitted whenever all reactions are removed from a cached message.
- * @event Client#messageReactionRemoveAll
- * @param {Message} message The message the reactions were removed from
- * @param {Collection} reactions The cached message reactions that were removed.
- */
-
-module.exports = MessageReactionRemoveAll;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemoveEmoji.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemoveEmoji.js
deleted file mode 100644
index 492001d..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageReactionRemoveEmoji.js
+++ /dev/null
@@ -1,32 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class MessageReactionRemoveEmoji extends Action {
- handle(data) {
- const channel = this.getChannel({
- id: data.channel_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (!channel || !channel.isText()) return false;
-
- const message = this.getMessage(data, channel);
- if (!message) return false;
-
- const reaction = this.getReaction(data, message);
- if (!reaction) return false;
- if (!message.partial)
- message.reactions.cache.delete(reaction.emoji.id ?? reaction.emoji.name);
-
- /**
- * Emitted when a bot removes an emoji reaction from a cached message.
- * @event Client#messageReactionRemoveEmoji
- * @param {MessageReaction} reaction The reaction that was removed
- */
- this.client.emit(Events.MESSAGE_REACTION_REMOVE_EMOJI, reaction);
- return { reaction };
- }
-}
-
-module.exports = MessageReactionRemoveEmoji;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/MessageUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/MessageUpdate.js
deleted file mode 100644
index 3513263..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/MessageUpdate.js
+++ /dev/null
@@ -1,32 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-
-class MessageUpdateAction extends Action {
- handle(data) {
- const channel = this.getChannel({
- id: data.channel_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (channel) {
- if (!channel.isText()) return {};
-
- const { id, channel_id, guild_id, author, timestamp, type } = data;
- const message = this.getMessage(
- { id, channel_id, guild_id, author, timestamp, type },
- channel,
- );
- if (message) {
- const old = message._update(data);
- return {
- old,
- updated: message,
- };
- }
- }
-
- return {};
- }
-}
-
-module.exports = MessageUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/PresenceUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/PresenceUpdate.js
deleted file mode 100644
index 4f6977d..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/PresenceUpdate.js
+++ /dev/null
@@ -1,61 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-const { PartialTypes } = require('../../util/Constants');
-
-class PresenceUpdateAction extends Action {
- handle(data) {
- let user = this.client.users.cache.get(data.user.id);
- if (!user && data.user?.username) user = this.client.users._add(data.user);
- if (
- !user &&
- ('username' in data.user ||
- this.client.options.partials.includes(PartialTypes.USER))
- ) {
- user = this.client.users._add(data.user);
- }
- if (!user) return;
-
- if (data.user?.username) {
- if (!user._equals(data.user))
- this.client.actions.UserUpdate.handle(data.user);
- }
-
- const guild = this.client.guilds.cache.get(data.guild_id);
-
- if (guild) {
- let member = guild.members.cache.get(user.id);
- if (!member && data.status !== 'offline') {
- member = guild.members._add({
- user,
- deaf: false,
- mute: false,
- });
- this.client.emit(Events.GUILD_MEMBER_AVAILABLE, member);
- }
- }
-
- const oldPresence =
- (guild || this.client).presences.cache.get(user.id)?._clone() ?? null;
-
- const newPresence = (guild || this.client).presences._add(
- Object.assign(data, { guild }),
- );
-
- if (
- this.client.listenerCount(Events.PRESENCE_UPDATE) &&
- !newPresence.equals(oldPresence)
- ) {
- /**
- * Emitted whenever a guild member's presence (e.g. status, activity) is changed.
- * @event Client#presenceUpdate
- * @param {?Presence} oldPresence The presence before the update, if one at all
- * @param {Presence} newPresence The presence after the update
- */
- this.client.emit(Events.PRESENCE_UPDATE, oldPresence, newPresence);
- }
- }
-}
-
-module.exports = PresenceUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceCreate.js
deleted file mode 100644
index fc8b242..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceCreate.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class StageInstanceCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = this.getChannel({
- id: data.channel_id,
- guild_id: data.guild_id,
- });
-
- if (channel) {
- const stageInstance = channel.guild.stageInstances._add(data);
-
- /**
- * Emitted whenever a stage instance is created.
- * @event Client#stageInstanceCreate
- * @param {StageInstance} stageInstance The created stage instance
- */
- client.emit(Events.STAGE_INSTANCE_CREATE, stageInstance);
-
- return { stageInstance };
- }
-
- return {};
- }
-}
-
-module.exports = StageInstanceCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceDelete.js
deleted file mode 100644
index bca4f9a..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceDelete.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedStageInstances } = require('../../structures/StageInstance');
-const { Events } = require('../../util/Constants');
-
-class StageInstanceDeleteAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = this.getChannel({
- id: data.channel_id,
- guild_id: data.guild_id,
- });
-
- if (channel) {
- const stageInstance = channel.guild.stageInstances._add(data);
- if (stageInstance) {
- channel.guild.stageInstances.cache.delete(stageInstance.id);
- deletedStageInstances.add(stageInstance);
-
- /**
- * Emitted whenever a stage instance is deleted.
- * @event Client#stageInstanceDelete
- * @param {StageInstance} stageInstance The deleted stage instance
- */
- client.emit(Events.STAGE_INSTANCE_DELETE, stageInstance);
-
- return { stageInstance };
- }
- }
-
- return {};
- }
-}
-
-module.exports = StageInstanceDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceUpdate.js
deleted file mode 100644
index eb1501c..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/StageInstanceUpdate.js
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class StageInstanceUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- const channel = this.getChannel({
- id: data.channel_id,
- guild_id: data.guild_id,
- });
-
- if (channel) {
- const oldStageInstance =
- channel.guild.stageInstances.cache.get(data.id)?._clone() ?? null;
- const newStageInstance = channel.guild.stageInstances._add(data);
-
- /**
- * Emitted whenever a stage instance gets updated - e.g. change in topic or privacy level
- * @event Client#stageInstanceUpdate
- * @param {?StageInstance} oldStageInstance The stage instance before the update
- * @param {StageInstance} newStageInstance The stage instance after the update
- */
- client.emit(
- Events.STAGE_INSTANCE_UPDATE,
- oldStageInstance,
- newStageInstance,
- );
-
- return { oldStageInstance, newStageInstance };
- }
-
- return {};
- }
-}
-
-module.exports = StageInstanceUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadCreate.js b/vendor/discord.js-selfbot-v13/src/client/actions/ThreadCreate.js
deleted file mode 100644
index d2d5859..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadCreate.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class ThreadCreateAction extends Action {
- handle(data) {
- const client = this.client;
- const existing = client.channels.cache.has(data.id);
- const thread = client.channels._add(data);
- if (!existing && thread) {
- /**
- * Emitted whenever a thread is created or when the client user is added to a thread.
- * @event Client#threadCreate
- * @param {ThreadChannel} thread The thread that was created
- * @param {boolean} newlyCreated Whether the thread was newly created
- */
- client.emit(Events.THREAD_CREATE, thread, data.newly_created ?? false);
- }
- return { thread };
- }
-}
-
-module.exports = ThreadCreateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadDelete.js b/vendor/discord.js-selfbot-v13/src/client/actions/ThreadDelete.js
deleted file mode 100644
index 9307dd2..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadDelete.js
+++ /dev/null
@@ -1,32 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { deletedChannels } = require('../../structures/Channel');
-const { deletedMessages } = require('../../structures/Message');
-const { Events } = require('../../util/Constants');
-
-class ThreadDeleteAction extends Action {
- handle(data) {
- const client = this.client;
- const thread = client.channels.cache.get(data.id);
-
- if (thread) {
- client.channels._remove(thread.id);
- deletedChannels.add(thread);
- for (const message of thread.messages.cache.values()) {
- deletedMessages.add(message);
- }
-
- /**
- * Emitted whenever a thread is deleted.
- * @event Client#threadDelete
- * @param {ThreadChannel} thread The thread that was deleted
- */
- client.emit(Events.THREAD_DELETE, thread);
- }
-
- return { thread };
- }
-}
-
-module.exports = ThreadDeleteAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadListSync.js b/vendor/discord.js-selfbot-v13/src/client/actions/ThreadListSync.js
deleted file mode 100644
index a0f8143..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadListSync.js
+++ /dev/null
@@ -1,59 +0,0 @@
-'use strict';
-
-const { Collection } = require('@discordjs/collection');
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class ThreadListSyncAction extends Action {
- handle(data) {
- const client = this.client;
-
- const guild = client.guilds.cache.get(data.guild_id);
- if (!guild) return {};
-
- if (data.channel_ids) {
- for (const id of data.channel_ids) {
- const channel = client.channels.cache.get(id);
- if (channel) this.removeStale(channel);
- }
- } else {
- for (const channel of guild.channels.cache.values()) {
- this.removeStale(channel);
- }
- }
-
- const syncedThreads = data.threads.reduce((coll, rawThread) => {
- const thread = client.channels._add(rawThread);
- return coll.set(thread.id, thread);
- }, new Collection());
-
- for (const rawMember of Object.values(data.members || {})) {
- // Discord sends the thread id as id in this object
- const thread = client.channels.cache.get(rawMember.id);
- if (thread) {
- thread.members._add(rawMember);
- }
- }
-
- /**
- * Emitted whenever the client user gains access to a text or news channel that contains threads
- * @event Client#threadListSync
- * @param {Collection} threads The threads that were synced
- */
- client.emit(Events.THREAD_LIST_SYNC, syncedThreads);
-
- return {
- syncedThreads,
- };
- }
-
- removeStale(channel) {
- channel.threads?.cache.forEach((thread) => {
- if (!thread.archived) {
- this.client.channels._remove(thread.id);
- }
- });
- }
-}
-
-module.exports = ThreadListSyncAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadMemberUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/ThreadMemberUpdate.js
deleted file mode 100644
index b84bcac..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadMemberUpdate.js
+++ /dev/null
@@ -1,30 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class ThreadMemberUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- // Discord sends the thread id as id in this object
- const thread = client.channels.cache.get(data.id);
- if (thread) {
- const member = thread.members.cache.get(data.user_id);
- if (!member) {
- const newMember = thread.members._add(data);
- return { newMember };
- }
- const old = member._update(data);
- /**
- * Emitted whenever the client user's thread member is updated.
- * @event Client#threadMemberUpdate
- * @param {ThreadMember} oldMember The member before the update
- * @param {ThreadMember} newMember The member after the update
- */
- client.emit(Events.THREAD_MEMBER_UPDATE, old, member);
- }
- return {};
- }
-}
-
-module.exports = ThreadMemberUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadMembersUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/ThreadMembersUpdate.js
deleted file mode 100644
index 92102ae..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/ThreadMembersUpdate.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class ThreadMembersUpdateAction extends Action {
- handle(data) {
- const client = this.client;
- const thread = client.channels.cache.get(data.id);
- if (thread) {
- const old = thread.members.cache.clone();
- thread.memberCount = data.member_count;
-
- data.added_members?.forEach((rawMember) => {
- thread.members._add(rawMember);
- });
-
- data.removed_member_ids?.forEach((memberId) => {
- thread.members.cache.delete(memberId);
- });
-
- /**
- * Emitted whenever members are added or removed from a thread. Requires `GUILD_MEMBERS` privileged intent
- * @event Client#threadMembersUpdate
- * @param {Collection} oldMembers The members before the update
- * @param {Collection} newMembers The members after the update
- */
- client.emit(Events.THREAD_MEMBERS_UPDATE, old, thread.members.cache);
- }
- return {};
- }
-}
-
-module.exports = ThreadMembersUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/TypingStart.js b/vendor/discord.js-selfbot-v13/src/client/actions/TypingStart.js
deleted file mode 100644
index f1aee23..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/TypingStart.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const Typing = require('../../structures/Typing');
-const { Events } = require('../../util/Constants');
-
-class TypingStart extends Action {
- handle(data) {
- const channel = this.getChannel({
- id: data.channel_id,
- ...('guild_id' in data && { guild_id: data.guild_id }),
- });
- if (!channel) return;
-
- if (!channel.isText()) {
- this.client.emit(
- Events.WARN,
- `Discord sent a typing packet to a ${channel.type} channel ${channel.id}`,
- );
- return;
- }
-
- const user = this.getUserFromMember(data);
- if (user) {
- /**
- * Emitted whenever a user starts typing in a channel.
- * @event Client#typingStart
- * @param {Typing} typing The typing state
- */
- this.client.emit(Events.TYPING_START, new Typing(channel, user, data));
- }
- }
-}
-
-module.exports = TypingStart;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/UserUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/UserUpdate.js
deleted file mode 100644
index bfba1b9..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/UserUpdate.js
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class UserUpdateAction extends Action {
- handle(data) {
- const client = this.client;
-
- const newUser =
- data.id === client.user.id
- ? client.user
- : client.users.cache.get(data.id);
- const oldUser = newUser._update(data);
-
- if (!oldUser.equals(newUser)) {
- /**
- * Emitted whenever a user's details (e.g. username) are changed.
- * Triggered by the Discord gateway events USER_UPDATE, GUILD_MEMBER_UPDATE, and PRESENCE_UPDATE.
- * @event Client#userUpdate
- * @param {User} oldUser The user before the update
- * @param {User} newUser The user after the update
- */
- client.emit(Events.USER_UPDATE, oldUser, newUser);
- return {
- old: oldUser,
- updated: newUser,
- };
- }
-
- return {
- old: null,
- updated: null,
- };
- }
-}
-
-module.exports = UserUpdateAction;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/VoiceStateUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/VoiceStateUpdate.js
deleted file mode 100644
index c68650d..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/VoiceStateUpdate.js
+++ /dev/null
@@ -1,55 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const VoiceState = require('../../structures/VoiceState');
-const { Events } = require('../../util/Constants');
-
-class VoiceStateUpdate extends Action {
- handle(data) {
- const client = this.client;
- const guild = client.guilds.cache.get(data.guild_id);
- if (guild) {
- // Update the state
- const oldState =
- guild.voiceStates.cache.get(data.user_id)?._clone() ??
- new VoiceState(guild, { user_id: data.user_id });
-
- const newState = guild.voiceStates._add(data);
-
- // Get the member
- let member = guild.members.cache.get(data.user_id);
- if (member && data.member) {
- member._patch(data.member);
- } else if (data.member?.user && data.member.joined_at) {
- member = guild.members._add(data.member);
- }
-
- /**
- * Emitted whenever a member changes voice state - e.g. joins/leaves a channel, mutes/unmutes.
- * @event Client#voiceStateUpdate
- * @param {VoiceState} oldState The voice state before the update
- * @param {VoiceState} newState The voice state after the update
- */
- client.emit(Events.VOICE_STATE_UPDATE, oldState, newState);
- } else {
- // Update the state
- const oldState =
- client.voiceStates.cache.get(data.user_id)?._clone() ??
- new VoiceState({ client }, { user_id: data.user_id });
-
- const newState = client.voiceStates._add(data);
-
- client.emit(Events.VOICE_STATE_UPDATE, oldState, newState);
- }
- // Emit event
- if (data.user_id === client.user?.id) {
- client.emit(
- 'debug',
- `[VOICE] received voice state update: ${JSON.stringify(data)}`,
- );
- client.voice.onVoiceStateUpdate(data);
- }
- }
-}
-
-module.exports = VoiceStateUpdate;
diff --git a/vendor/discord.js-selfbot-v13/src/client/actions/WebhooksUpdate.js b/vendor/discord.js-selfbot-v13/src/client/actions/WebhooksUpdate.js
deleted file mode 100644
index 3551e16..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/actions/WebhooksUpdate.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const Action = require('./Action');
-const { Events } = require('../../util/Constants');
-
-class WebhooksUpdate extends Action {
- handle(data) {
- const client = this.client;
- const channel = client.channels.cache.get(data.channel_id);
- /**
- * Emitted whenever a channel has its webhooks changed.
- * @event Client#webhookUpdate
- * @param {TextChannel|NewsChannel|VoiceChannel|StageChannel|ForumChannel|MediaChannel} channel
- * The channel that had a webhook update
- */
- if (channel) client.emit(Events.WEBHOOKS_UPDATE, channel);
- }
-}
-
-module.exports = WebhooksUpdate;
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/ClientVoiceManager.js b/vendor/discord.js-selfbot-v13/src/client/voice/ClientVoiceManager.js
deleted file mode 100644
index 53467ed..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/ClientVoiceManager.js
+++ /dev/null
@@ -1,168 +0,0 @@
-'use strict';
-
-const VoiceConnection = require('./VoiceConnection');
-const { Error } = require('../../errors');
-const { Events } = require('../../util/Constants');
-
-/**
- * Manages voice connections for the client
- * Feat: Support both lib & djs/voice
- */
-class ClientVoiceManager {
- constructor(client) {
- /**
- * The client that instantiated this voice manager
- * @type {Client}
- * @readonly
- * @name ClientVoiceManager#client
- */
- Object.defineProperty(this, 'client', { value: client });
-
- /**
- * A current connection objects
- * @type {?VoiceConnection}
- */
- this.connection = null;
-
- /**
- * Maps guild ids to voice adapters created for use with @discordjs/voice.
- * @type {Map}
- */
- this.adapters = new Map();
-
- client.on(Events.SHARD_DISCONNECT, (_, shardId) => {
- for (const [guildId, adapter] of this.adapters.entries()) {
- if (client.guilds.cache.get(guildId)?.shardId === shardId) {
- // Because it has 1 shard => adapter.destroy();
- }
- adapter.destroy();
- }
- });
- }
-
- onVoiceServer(payload) {
- const { guild_id, channel_id, token, endpoint } = payload;
- this.client.emit(
- 'debug',
- `[VOICE] voiceServer ${channel_id ? 'channel' : 'guild'}: ${
- channel_id || guild_id
- } token: ${token} endpoint: ${endpoint}`,
- );
- const connection = this.connection;
- if (connection) connection.setTokenAndEndpoint(token, endpoint);
- // Djs / voice
- if (payload.guild_id) {
- this.adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);
- } else {
- this.adapters.get(payload.channel_id)?.onVoiceServerUpdate(payload);
- }
- }
-
- onVoiceStateUpdate(payload) {
- const { guild_id, session_id, channel_id } = payload;
- // @discordjs/voice
- if (
- payload.guild_id &&
- payload.session_id &&
- payload.user_id === this.client.user?.id
- ) {
- this.adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);
- } else if (
- payload.channel_id &&
- payload.session_id &&
- payload.user_id === this.client.user?.id
- ) {
- this.adapters.get(payload.channel_id)?.onVoiceStateUpdate(payload);
- }
- // Main lib
- const connection = this.connection;
- this.client.emit(
- 'debug',
- `[VOICE] connection? ${!!connection}, ${guild_id} ${session_id} ${channel_id}`,
- );
- if (!connection) return;
- if (!channel_id) {
- connection._disconnect();
- this.connection = null;
- return;
- }
- const channel = this.client.channels.cache.get(channel_id);
- if (channel) {
- connection.channel = channel;
- connection.setSessionId(session_id);
- } else {
- this.client.emit(
- 'debug',
- `[VOICE] disconnecting from guild ${guild_id} as channel ${channel_id} is uncached`,
- );
- connection.disconnect();
- }
- }
-
- /**
- * @property {boolean} [selfMute=false]
- * @property {boolean} [selfDeaf=false]
- * @property {boolean} [selfVideo=false]
- * @property {VideoCodec} [videoCodec='H264']
- * @typedef {Object} JoinChannelConfig
- */
-
- /**
- * Sets up a request to join a voice channel.
- * @param {VoiceChannel | StageChannel | DMChannel | GroupDMChannel | Snowflake} channel The voice channel to join
- * @param {JoinChannelConfig} config Config to join voice channel
- * @returns {Promise}
- */
- joinChannel(channel, config = {}) {
- return new Promise((resolve, reject) => {
- channel = this.client.channels.resolve(channel);
- if (!['DM', 'GROUP_DM'].includes(channel?.type) && !channel.joinable) {
- throw new Error('VOICE_JOIN_CHANNEL', channel.full);
- }
-
- let connection = this.connection;
-
- if (connection) {
- if (connection.channel.id !== channel.id) {
- this.connection.updateChannel(channel);
- }
- resolve(connection);
- return;
- } else {
- connection = new VoiceConnection(this, channel);
- if (config?.videoCodec) connection.setVideoCodec(config.videoCodec);
- connection.on('debug', (msg) =>
- this.client.emit(
- 'debug',
- `[VOICE (${channel.guild?.id || channel.id}:${connection.status})]: ${msg}`,
- ),
- );
- connection.authenticate({
- self_mute: Boolean(config.selfMute),
- self_deaf: Boolean(config.selfDeaf),
- self_video: Boolean(config.selfVideo),
- });
- this.connection = connection;
- }
-
- connection.once('failed', (reason) => {
- this.connection = null;
- reject(reason);
- });
-
- connection.on('error', reject);
-
- connection.once('authenticated', () => {
- connection.once('ready', () => {
- resolve(connection);
- connection.removeListener('error', reject);
- });
- connection.once('disconnect', () => {
- this.connection = null;
- });
- });
- });
- }
-}
-
-module.exports = ClientVoiceManager;
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/VoiceConnection.js b/vendor/discord.js-selfbot-v13/src/client/voice/VoiceConnection.js
deleted file mode 100644
index 2238b1c..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/VoiceConnection.js
+++ /dev/null
@@ -1,1324 +0,0 @@
-'use strict';
-
-const EventEmitter = require('events');
-const { getCiphers } = require('node:crypto');
-const { setTimeout } = require('node:timers');
-const { Collection } = require('@discordjs/collection');
-const VoiceUDP = require('./networking/VoiceUDPClient');
-const VoiceWebSocket = require('./networking/VoiceWebSocket');
-const MediaPlayer = require('./player/MediaPlayer');
-const VoiceReceiver = require('./receiver/Receiver');
-const { parseStreamKey } = require('./util/Function');
-const PlayInterface = require('./util/PlayInterface');
-const Silence = require('./util/Silence');
-const { Error } = require('../../errors');
-const {
- Opcodes,
- VoiceOpcodes,
- VoiceStatus,
- Events,
-} = require('../../util/Constants');
-const Speaking = require('../../util/Speaking');
-const Util = require('../../util/Util');
-
-// Workaround for Discord now requiring silence to be sent before being able to receive audio
-class SingleSilence extends Silence {
- _read() {
- super._read();
- this.push(null);
- }
-}
-
-const SUPPORTED_MODES = ['aead_xchacha20_poly1305_rtpsize'];
-
-// Just in case there's some system that doesn't come with aes-256-gcm, conditionally add it as supported
-if (getCiphers().includes('aes-256-gcm')) {
- SUPPORTED_MODES.unshift('aead_aes256_gcm_rtpsize');
-}
-
-const SUPPORTED_CODECS = ['VP8', 'H264'];
-
-/**
- * Represents a connection to a guild's voice server.
- * ```js
- * // Obtained using:
- * client.voice.joinChannel(channel)
- * .then(connection => {
- *
- * });
- * ```
- * @extends {EventEmitter}
- * @implements {PlayInterface}
- */
-class VoiceConnection extends EventEmitter {
- constructor(voiceManager, channel) {
- super();
-
- /**
- * The voice manager that instantiated this connection
- * @type {ClientVoiceManager}
- */
- this.voiceManager = voiceManager;
-
- /**
- * The voice channel this connection is currently serving
- * @type {VoiceChannel}
- */
- this.channel = channel;
-
- /**
- * The current status of the voice connection
- * @type {VoiceStatus}
- */
- this.status = VoiceStatus.AUTHENTICATING;
-
- /**
- * Our current speaking state
- * @type {Readonly}
- */
- this.speaking = new Speaking().freeze();
-
- /**
- * Our current video state
- * @type {boolean | null}
- */
- this.videoStatus = null;
-
- /**
- * The authentication data needed to connect to the voice server
- * @type {Object}
- * @private
- */
- this.authentication = {};
-
- /**
- * The audio player for this voice connection
- * @type {MediaPlayer}
- */
- this.player = new MediaPlayer(
- this,
- this.constructor.name === 'StreamConnection',
- );
-
- this.player.on('debug', (m) => {
- /**
- * Debug info from the connection.
- * @event VoiceConnection#debug
- * @param {string} message The debug message
- */
- this.emit('debug', `media player - ${m}`);
- });
-
- this.player.on('error', (e) => {
- /**
- * Warning info from the connection.
- * @event VoiceConnection#warn
- * @param {string|Error} warning The warning
- */
- this.emit('warn', e);
- });
-
- this.once('closing', () => this.player.destroy());
-
- /**
- * Map SSRC values to user IDs
- * @type {Map}
- * @private
- */
- this.ssrcMap = new Map();
-
- /**
- * Tracks which users are talking
- * @type {Map>}
- * @private
- */
- this._speaking = new Map();
-
- /**
- * Object that wraps contains the `ws` and `udp` sockets of this voice connection
- * @type {Object}
- * @private
- */
- this.sockets = {};
-
- /**
- * The voice receiver of this connection
- * @type {VoiceReceiver}
- */
- this.receiver = new VoiceReceiver(this);
-
- /**
- * Video codec
- * * `VP8`
- * * `VP9` (Not supported for encoding & decoding)
- * * `H264`
- * * `H265` (Not supported for encoding & decoding)
- * * `AV1` (Not supported for encoding & decoding)
- * @typedef {string} VideoCodec
- */
-
- /**
- * Video codec (encoded) of this connection
- * @type {VideoCodec}
- */
- this.videoCodec = 'H264';
-
- /**
- * Create a stream connection ?
- * @type {?StreamConnection}
- */
- this.streamConnection = null;
-
- /**
- * All stream watch connection
- * @type {Collection}
- */
- this.streamWatchConnection = new Collection();
- }
-
- /**
- * The client that instantiated this connection
- * @type {Client}
- * @readonly
- */
- get client() {
- return this.voiceManager.client;
- }
-
- /**
- * The current audio dispatcher (if any)
- * @type {?AudioDispatcher}
- * @readonly
- */
- get dispatcher() {
- return this.player.dispatcher;
- }
-
- /**
- * The current video dispatcher (if any)
- * @type {?VideoDispatcher}
- * @readonly
- */
- get videoDispatcher() {
- return this.player.videoDispatcher;
- }
-
- /**
- * Sets whether the voice connection should display as "speaking", "soundshare" or "none".
- * @param {BitFieldResolvable} value The new speaking state
- */
- setSpeaking(value) {
- if (this.speaking.equals(value)) return;
- if (this.status !== VoiceStatus.CONNECTED) return;
- this.speaking = new Speaking(value).freeze();
- this.sockets.ws
- .sendPacket({
- op: VoiceOpcodes.SPEAKING,
- d: {
- speaking: this.speaking.bitfield,
- delay: 0,
- ssrc: this.authentication.ssrc,
- },
- })
- .catch((e) => {
- this.emit('debug', e);
- });
- }
-
- /**
- * Set video codec before select protocol
- * @param {VideoCodec} value Codec
- * @returns {VoiceConnection}
- */
- setVideoCodec(value) {
- if (!SUPPORTED_CODECS.includes(value))
- throw new Error('INVALID_VIDEO_CODEC', SUPPORTED_CODECS);
- this.videoCodec = value;
- return this;
- }
-
- /**
- * Sets video status
- * @param {boolean} value Video on or off
- */
- setVideoStatus(value) {
- if (value === this.videoStatus) return;
- if (this.status !== VoiceStatus.CONNECTED) return;
- this.videoStatus = value;
- if (!value) {
- this.sockets.ws
- .sendPacket({
- op: VoiceOpcodes.SOURCES,
- d: {
- audio_ssrc: this.authentication.ssrc,
- video_ssrc: 0,
- rtx_ssrc: 0,
- streams: [],
- },
- })
- .catch((e) => {
- this.emit('debug', e);
- });
- } else {
- this.sockets.ws
- .sendPacket({
- op: VoiceOpcodes.SOURCES,
- d: {
- audio_ssrc: this.authentication.ssrc,
- video_ssrc: this.authentication.ssrc + 1,
- rtx_ssrc: this.authentication.ssrc + 2,
- streams: [
- {
- type: 'video',
- rid: '100',
- ssrc: this.authentication.ssrc + 1,
- active: true,
- quality: 100,
- rtx_ssrc: this.authentication.ssrc + 2,
- max_bitrate: 8000000,
- max_framerate: 60,
- max_resolution: {
- type: 'source',
- width: 0,
- height: 0,
- },
- },
- ],
- },
- })
- .catch((e) => {
- this.emit('debug', e);
- });
- }
- }
-
- /**
- * The voice state of this connection
- * @type {?VoiceState}
- */
- get voice() {
- return this.client.user.voice;
- }
-
- /**
- * Sends a request to the main gateway to join a voice channel.
- * @param {Object} [options] The options to provide
- * @returns {Promise}
- * @private
- */
- sendVoiceStateUpdate(options = {}) {
- options = Util.mergeDefault(
- {
- guild_id: this.channel.guild?.id || null,
- channel_id: this.channel.id,
- self_mute: this.voice ? this.voice.selfMute : false,
- self_deaf: this.voice ? this.voice.selfDeaf : false,
- self_video: this.voice ? this.voice.selfVideo : false,
- flags: 2,
- },
- options,
- );
-
- this.emit(
- 'debug',
- `Sending voice state update: ${JSON.stringify(options)}`,
- );
-
- return this.channel.client.ws.broadcast({
- op: Opcodes.VOICE_STATE_UPDATE,
- d: options,
- });
- }
-
- /**
- * Set the token and endpoint required to connect to the voice servers.
- * @param {string} token The voice token
- * @param {string} endpoint The voice endpoint
- * @returns {void}
- * @private
- */
- setTokenAndEndpoint(token, endpoint) {
- this.emit('debug', `Token "${token}" and endpoint "${endpoint}"`);
- if (!endpoint) {
- // Signifies awaiting endpoint stage
- return;
- }
-
- if (!token) {
- this.authenticateFailed('VOICE_TOKEN_ABSENT');
- return;
- }
-
- endpoint = endpoint.match(/([^:]*)/)[0];
- this.emit('debug', `Endpoint resolved as ${endpoint}`);
-
- if (!endpoint) {
- this.authenticateFailed('VOICE_INVALID_ENDPOINT');
- return;
- }
-
- if (this.status === VoiceStatus.AUTHENTICATING) {
- this.authentication.token = token;
- this.authentication.endpoint = endpoint;
- this.checkAuthenticated();
- } else if (
- token !== this.authentication.token ||
- endpoint !== this.authentication.endpoint
- ) {
- this.reconnect(token, endpoint);
- }
- }
-
- /**
- * Sets the Session ID for the connection.
- * @param {string} sessionId The voice session ID
- * @private
- */
- setSessionId(sessionId) {
- this.emit(
- 'debug',
- `Setting sessionId ${sessionId} (stored as "${this.authentication.sessionId}")`,
- );
- if (!sessionId) {
- this.authenticateFailed('VOICE_SESSION_ABSENT');
- return;
- }
-
- if (this.status === VoiceStatus.AUTHENTICATING) {
- this.authentication.sessionId = sessionId;
- this.checkAuthenticated();
- } else if (sessionId !== this.authentication.sessionId) {
- this.authentication.sessionId = sessionId;
- /**
- * Emitted when a new session ID is received.
- * @event VoiceConnection#newSession
- * @private
- */
- this.emit('newSession', sessionId);
- }
- }
-
- /**
- * Checks whether the voice connection is authenticated.
- * @private
- */
- checkAuthenticated() {
- const { token, endpoint, sessionId } = this.authentication;
- this.emit('debug', `Authenticated with sessionId ${sessionId}`);
- if (token && endpoint && sessionId) {
- this.status = VoiceStatus.CONNECTING;
- /**
- * Emitted when we successfully initiate a voice connection.
- * @event VoiceConnection#authenticated
- */
- this.emit('authenticated');
- this.connect();
- }
- }
-
- /**
- * Invoked when we fail to initiate a voice connection.
- * @param {string} reason The reason for failure
- * @private
- */
- authenticateFailed(reason) {
- clearTimeout(this.connectTimeout);
- this.emit('debug', `Authenticate failed - ${reason}`);
- if (this.status === VoiceStatus.AUTHENTICATING) {
- /**
- * Emitted when we fail to initiate a voice connection.
- * @event VoiceConnection#failed
- * @param {Error} error The encountered error
- */
- this.emit('failed', new Error(reason));
- } else {
- /**
- * Emitted whenever the connection encounters an error.
- * @event VoiceConnection#error
- * @param {Error} error The encountered error
- */
- this.emit('error', new Error(reason));
- }
- this.status = VoiceStatus.DISCONNECTED;
- }
-
- /**
- * Move to a different voice channel in the same guild.
- * @param {VoiceChannel} channel The channel to move to
- * @private
- */
- updateChannel(channel) {
- this.channel = channel;
- this.sendVoiceStateUpdate();
- }
-
- /**
- * Attempts to authenticate to the voice server.
- * @param {Object} options Join config
- * @private
- */
- authenticate(options = {}) {
- this.sendVoiceStateUpdate(options);
- this.connectTimeout = setTimeout(
- () => this.authenticateFailed('VOICE_CONNECTION_TIMEOUT'),
- 15_000,
- ).unref();
- }
-
- /**
- * Attempts to reconnect to the voice server (typically after a region change).
- * @param {string} token The voice token
- * @param {string} endpoint The voice endpoint
- * @private
- */
- reconnect(token, endpoint) {
- this.authentication.token = token;
- this.authentication.endpoint = endpoint;
- this.speaking = new Speaking().freeze();
- this.status = VoiceStatus.RECONNECTING;
- this.emit('debug', `Reconnecting to ${endpoint}`);
- /**
- * Emitted when the voice connection is reconnecting (typically after a region change).
- * @event VoiceConnection#reconnecting
- */
- this.emit('reconnecting');
- this.connect();
- }
-
- /**
- * Disconnects the voice connection, causing a disconnect and closing event to be emitted.
- */
- disconnect() {
- this.emit('closing');
- this.emit('debug', 'disconnect() triggered');
- clearTimeout(this.connectTimeout);
- const conn = this.voiceManager.connection;
- if (conn === this) this.voiceManager.connection = null;
- this.sendVoiceStateUpdate({
- channel_id: null,
- });
- this._disconnect();
- }
-
- /**
- * Internally disconnects (doesn't send disconnect packet).
- * @private
- */
- _disconnect() {
- this.cleanup();
- this.status = VoiceStatus.DISCONNECTED;
- /**
- * Emitted when the voice connection disconnects.
- * @event VoiceConnection#disconnect
- */
- this.emit('disconnect');
- }
-
- /**
- * Cleans up after disconnect.
- * @private
- */
- cleanup() {
- this.player.destroy();
- this.speaking = new Speaking().freeze();
- const { ws, udp } = this.sockets;
-
- this.emit('debug', 'Connection clean up');
-
- if (ws) {
- ws.removeAllListeners('error');
- ws.removeAllListeners('ready');
- ws.removeAllListeners('sessionDescription');
- ws.removeAllListeners('speaking');
- ws.shutdown();
- }
-
- if (udp) udp.removeAllListeners('error');
-
- this.sockets.ws = null;
- this.sockets.udp = null;
- }
-
- /**
- * Connect the voice connection.
- * @private
- */
- connect() {
- this.emit('debug', `Connect triggered`);
- if (this.status !== VoiceStatus.RECONNECTING) {
- if (this.sockets.ws) throw new Error('WS_CONNECTION_EXISTS');
- if (this.sockets.udp) throw new Error('UDP_CONNECTION_EXISTS');
- }
-
- if (this.sockets.ws) this.sockets.ws.shutdown();
- if (this.sockets.udp) this.sockets.udp.shutdown();
-
- this.sockets.ws = new VoiceWebSocket(this);
- this.sockets.udp = new VoiceUDP(this);
-
- const { ws, udp } = this.sockets;
-
- ws.on('debug', (msg) => this.emit('debug', msg));
- udp.on('debug', (msg) => this.emit('debug', msg));
- ws.on('error', (err) => this.emit('error', err));
- udp.on('error', (err) => this.emit('error', err));
- ws.on('ready', this.onReady.bind(this));
- ws.on('sessionDescription', this.onSessionDescription.bind(this));
- ws.on('startSpeaking', this.onStartSpeaking.bind(this));
- ws.on('startStreaming', this.onStartStreaming.bind(this));
-
- this.sockets.ws.connect();
- }
-
- /**
- * Invoked when the voice websocket is ready.
- * @param {Object} data The received data
- * @private
- */
- onReady(data) {
- Object.assign(this.authentication, data);
- for (let mode of data.modes) {
- if (SUPPORTED_MODES.includes(mode)) {
- this.authentication.mode = mode;
- this.emit('debug', `Selecting the ${mode} mode`);
- break;
- }
- }
- this.sockets.udp.createUDPSocket(data.ip);
- }
-
- /**
- * Invoked when a session description is received.
- * @param {Object} data The received data
- * @private
- */
- onSessionDescription(data) {
- Object.assign(this.authentication, data);
- this.status = VoiceStatus.CONNECTED;
- const ready = () => {
- clearTimeout(this.connectTimeout);
- this.emit(
- 'debug',
- `Ready with authentication details: ${JSON.stringify(this.authentication)}`,
- );
- /**
- * Emitted once the connection is ready, when a promise to join a voice channel resolves,
- * the connection will already be ready.
- * @event VoiceConnection#ready
- */
- this.emit('ready');
- };
- if (this.dispatcher || this.videoDispatcher) {
- ready();
- } else {
- // This serves to provide support for voice receive, sending audio is required to receive it.
- const dispatcher = this.playAudio(new SingleSilence(), {
- type: 'opus',
- volume: false,
- });
- dispatcher.once('finish', ready);
- }
- }
-
- onStartSpeaking({ user_id, ssrc, speaking }) {
- this.ssrcMap.set(+ssrc, {
- ...(this.ssrcMap.get(+ssrc) || {}),
- userId: user_id,
- speaking: speaking,
- });
- }
-
- onStartStreaming({ video_ssrc, user_id, audio_ssrc }) {
- this.ssrcMap.set(+audio_ssrc, {
- ...(this.ssrcMap.get(+audio_ssrc) || {}),
- userId: user_id,
- hasVideo: Boolean(video_ssrc), // Maybe ?
- });
- /**
-{
- video_ssrc: 0,
- user_id: 'uid',
- streams: [
- {
- ssrc: 27734,
- rtx_ssrc: 27735,
- rid: '100',
- quality: 100,
- max_resolution: { width: 0, type: 'source', height: 0 },,
- max_framerate: 60,
- active: false
- }
- ],
- audio_ssrc: 27733
-}
- */
- }
-
- /**
- * Invoked when a speaking event is received.
- * @param {Object} data The received data
- * @private
- */
- onSpeaking({ user_id, speaking }) {
- speaking = new Speaking(speaking).freeze();
- const guild = this.channel.guild;
- const user = this.client.users.cache.get(user_id);
- const old = this._speaking.get(user_id) || new Speaking(0).freeze();
- this._speaking.set(user_id, speaking);
- /**
- * Emitted whenever a user changes speaking state.
- * @event VoiceConnection#speaking
- * @param {User} user The user that has changed speaking state
- * @param {Readonly} speaking The speaking state of the user
- */
- if (this.status === VoiceStatus.CONNECTED) {
- this.emit('speaking', user, speaking);
- if (!speaking.has(Speaking.FLAGS.SPEAKING)) {
- this.receiver.packets._stoppedSpeaking(user_id);
- }
- }
-
- if (guild && user && !speaking.equals(old)) {
- const member = guild.members.cache.get(user);
- if (member) {
- /**
- * Emitted once a guild member changes speaking state.
- * @event Client#guildMemberSpeaking
- * @param {GuildMember} member The member that started/stopped speaking
- * @param {Readonly} speaking The speaking state of the member
- */
- this.client.emit(Events.GUILD_MEMBER_SPEAKING, member, speaking);
- }
- }
- }
-
- playAudio() {} // eslint-disable-line no-empty-function
- playVideo() {} // eslint-disable-line no-empty-function
-
- /**
- * Create new connection to screenshare stream
- * @returns {Promise}
- */
- createStreamConnection() {
- // eslint-disable-next-line consistent-return
- return new Promise((resolve, reject) => {
- if (this.streamConnection) {
- return resolve(this.streamConnection);
- } else {
- const connection = (this.streamConnection = new StreamConnection(
- this.voiceManager,
- this.channel,
- this,
- ));
- connection.setVideoCodec(this.videoCodec); // Sync :?
- // Setup event...
- if (!this.eventHook) {
- this.eventHook = true; // Dont listen this event two times :/
- this.channel.client.on('raw', (packet) => {
- if (
- typeof packet !== 'object' ||
- !packet.t ||
- !packet.d ||
- !packet.d?.stream_key
- ) {
- return;
- }
- const { t: event, d: data } = packet;
- const StreamKey = parseStreamKey(data.stream_key);
- if (
- StreamKey.userId === this.channel.client.user.id &&
- this.channel.id == StreamKey.channelId &&
- this.streamConnection
- ) {
- // Current user stream
- switch (event) {
- case 'STREAM_CREATE': {
- this.streamConnection.setSessionId(
- this.authentication.sessionId,
- );
- this.streamConnection.serverId = data.rtc_server_id;
- break;
- }
- case 'STREAM_SERVER_UPDATE': {
- this.streamConnection.setTokenAndEndpoint(
- data.token,
- data.endpoint,
- );
- break;
- }
- case 'STREAM_DELETE': {
- this.streamConnection.disconnect();
- break;
- }
- case 'STREAM_UPDATE': {
- this.streamConnection.update(data);
- break;
- }
- }
- }
- if (
- this.streamWatchConnection.has(StreamKey.userId) &&
- this.channel.id == StreamKey.channelId
- ) {
- const streamConnection = this.streamWatchConnection.get(
- StreamKey.userId,
- );
- // Watch user stream
- switch (event) {
- case 'STREAM_CREATE': {
- streamConnection.setSessionId(this.authentication.sessionId);
- streamConnection.serverId = data.rtc_server_id;
- break;
- }
- case 'STREAM_SERVER_UPDATE': {
- streamConnection.setTokenAndEndpoint(
- data.token,
- data.endpoint,
- );
- break;
- }
- case 'STREAM_DELETE': {
- streamConnection.disconnect();
- streamConnection.receiver.packets.destroyAllStream();
- break;
- }
- case 'STREAM_UPDATE': {
- streamConnection.update(data);
- break;
- }
- }
- }
- });
- }
-
- connection.sendSignalScreenshare();
- connection.sendScreenshareState(true);
-
- connection.on('debug', (msg) =>
- this.channel.client.emit(
- 'debug',
- `[VOICE STREAM (${this.channel.guild?.id || this.channel.id}:${connection.status})]: ${msg}`,
- ),
- );
- connection.once('failed', (reason) => {
- this.streamConnection = null;
- reject(reason);
- });
-
- connection.on('error', reject);
-
- connection.once('authenticated', () => {
- connection.once('ready', () => {
- resolve(connection);
- connection.removeListener('error', reject);
- });
- connection.once('disconnect', () => {
- this.streamConnection = null;
- });
- });
- }
- });
- }
-
- /**
- * Watch user stream
- * @param {UserResolvable} user Discord user
- * @returns {Promise}
- */
- async joinStreamConnection(user) {
- const userId = this.client.users.resolveId(user);
- // Check if user is streaming
- if (!userId) {
- throw new Error('VOICE_USER_MISSING');
- }
- const voiceState =
- this.channel.guild?.voiceStates.cache.get(userId) ||
- this.client.voiceStates.cache.get(userId);
- if (!voiceState || !voiceState.streaming) {
- throw new Error('VOICE_USER_NOT_STREAMING');
- }
- // eslint-disable-next-line consistent-return
- return new Promise((resolve, reject) => {
- if (this.streamWatchConnection.has(userId)) {
- return resolve(this.streamWatchConnection.get(userId));
- } else {
- const connection = new StreamConnectionReadonly(
- this.voiceManager,
- this.channel,
- this,
- userId,
- );
- this.streamWatchConnection.set(userId, connection);
- connection.setVideoCodec(this.videoCodec);
- // Setup event...
- if (!this.eventHook) {
- this.eventHook = true; // Dont listen this event two times :/
- this.channel.client.on('raw', (packet) => {
- if (
- typeof packet !== 'object' ||
- !packet.t ||
- !packet.d ||
- !packet.d?.stream_key
- ) {
- return;
- }
- const { t: event, d: data } = packet;
- const StreamKey = parseStreamKey(data.stream_key);
- if (
- StreamKey.userId === this.channel.client.user.id &&
- this.channel.id == StreamKey.channelId &&
- this.streamConnection
- ) {
- // Current user stream
- switch (event) {
- case 'STREAM_CREATE': {
- this.streamConnection.setSessionId(
- this.authentication.sessionId,
- );
- this.streamConnection.serverId = data.rtc_server_id;
- break;
- }
- case 'STREAM_SERVER_UPDATE': {
- this.streamConnection.setTokenAndEndpoint(
- data.token,
- data.endpoint,
- );
- break;
- }
- case 'STREAM_DELETE': {
- this.streamConnection.disconnect();
- break;
- }
- case 'STREAM_UPDATE': {
- this.streamConnection.update(data);
- break;
- }
- }
- }
- if (
- this.streamWatchConnection.has(StreamKey.userId) &&
- this.channel.id == StreamKey.channelId
- ) {
- const streamConnection = this.streamWatchConnection.get(
- StreamKey.userId,
- );
- // Watch user stream
- switch (event) {
- case 'STREAM_CREATE': {
- streamConnection.setSessionId(this.authentication.sessionId);
- streamConnection.serverId = data.rtc_server_id;
- break;
- }
- case 'STREAM_SERVER_UPDATE': {
- streamConnection.setTokenAndEndpoint(
- data.token,
- data.endpoint,
- );
- break;
- }
- case 'STREAM_DELETE': {
- streamConnection.disconnect();
- streamConnection.receiver.packets.destroyAllStream();
- break;
- }
- case 'STREAM_UPDATE': {
- streamConnection.update(data);
- break;
- }
- }
- }
- });
- }
-
- connection.sendSignalScreenshare();
-
- connection.on('debug', (msg) =>
- this.channel.client.emit(
- 'debug',
- `[VOICE STREAM WATCH (${userId}>${this.channel.guild?.id || this.channel.id}:${
- connection.status
- })]: ${msg}`,
- ),
- );
- connection.once('failed', (reason) => {
- this.streamWatchConnection.delete(userId);
- reject(reason);
- });
-
- connection.on('error', reject);
-
- connection.once('authenticated', () => {
- connection.once('ready', () => {
- resolve(connection);
- connection.removeListener('error', reject);
- });
- connection.once('disconnect', () => {
- this.streamWatchConnection.delete(userId);
- });
- });
- }
- });
- }
-
- /**
- * @event VoiceConnection#streamUpdate
- * @description Emitted when the StreamConnection or StreamConnectionReadonly
- * state changes, providing the previous and current stream state.
- *
- * @param {StreamState} oldData - The previous state of the stream.
- * @param {StreamState} newData - The current state of the stream.
- *
- * @typedef {Object} StreamState
- * @property {boolean} isPaused - Indicates whether the stream is currently paused.
- * @property {string|null} region - The region where the stream is hosted, or null if not specified.
- * @property {Snowflake[]} viewerIds - An array of Snowflake IDs representing the viewers connected to the stream.
- */
-}
-
-/**
- * Represents a connection to a guild's voice server.
- * ```js
- * // Obtained using:
- * client.voice.joinChannel(channel)
- * .then(connection => connection.createStreamConnection())
- * .then(connection => {
- *
- * });
- * ```
- * @extends {VoiceConnection}
- */
-class StreamConnection extends VoiceConnection {
- #requestDisconnect = false;
- /**
- * @param {ClientVoiceManager} voiceManager Voice manager
- * @param {Channel} channel any channel (joinable)
- * @param {VoiceConnection} voiceConnection parent
- */
- constructor(voiceManager, channel, voiceConnection) {
- super(voiceManager, channel);
-
- /**
- * Current voice connection
- * @type {VoiceConnection}
- */
- this.voiceConnection = voiceConnection;
-
- Object.defineProperty(this, 'voiceConnection', {
- value: voiceConnection,
- writable: false,
- });
-
- /**
- * Server Id
- * @type {string | null}
- */
- this.serverId = null;
-
- /**
- * Stream state
- * @type {boolean | null}
- */
- this.isPaused = null;
-
- /**
- * Viewer IDs
- * @type {Snowflake[]}
- */
- this.viewerIds = [];
-
- /**
- * Voice region name
- * @type {string | null}
- */
- this.region = null;
- }
-
- createStreamConnection() {
- return Promise.resolve(this);
- }
-
- joinStreamConnection() {
- throw new Error('STREAM_CANNOT_JOIN');
- }
-
- get streamConnection() {
- return this;
- }
-
- set streamConnection(value) {
- // Why ?
- }
-
- get streamWatchConnection() {
- return new Collection();
- }
-
- set streamWatchConnection(value) {
- // Why ?
- }
-
- disconnect() {
- if (this.#requestDisconnect) return;
- this.emit('closing');
- this.emit('debug', 'Stream: disconnect() triggered');
- clearTimeout(this.connectTimeout);
- if (this.voiceConnection.streamConnection === this)
- this.voiceConnection.streamConnection = null;
- this.sendStopScreenshare();
- this._disconnect();
- }
-
- /**
- * Create new stream connection (WS packet)
- * @returns {void}
- */
- sendSignalScreenshare() {
- const data = {
- type: ['DM', 'GROUP_DM'].includes(this.channel.type) ? 'call' : 'guild',
- guild_id: this.channel.guild?.id || null,
- channel_id: this.channel.id,
- preferred_region: null,
- };
- this.emit('debug', `Signal Stream: ${JSON.stringify(data)}`);
- return this.channel.client.ws.broadcast({
- op: Opcodes.STREAM_CREATE,
- d: data,
- });
- }
-
- /**
- * Send screenshare state... (WS)
- * @param {boolean} isPaused screenshare paused ?
- * @returns {void}
- */
- sendScreenshareState(isPaused = false) {
- if (isPaused == this.isPaused) return;
- this.emit(
- 'streamUpdate',
- {
- isPaused: this.isPaused,
- region: this.region,
- viewerIds: this.viewerIds,
- },
- {
- isPaused,
- region: this.region,
- viewerIds: this.viewerIds,
- },
- );
- this.isPaused = isPaused;
- this.channel.client.ws.broadcast({
- op: Opcodes.STREAM_SET_PAUSED,
- d: {
- stream_key: this.streamKey,
- paused: isPaused,
- },
- });
- }
-
- /**
- * Stop screenshare, delete this connection (WS)
- * @returns {void}
- * @private Using StreamConnection#disconnect()
- */
- sendStopScreenshare() {
- this.#requestDisconnect = true;
- this.channel.client.ws.broadcast({
- op: Opcodes.STREAM_DELETE,
- d: {
- stream_key: this.streamKey,
- },
- });
- }
-
- update(data) {
- this.emit(
- 'streamUpdate',
- {
- isPaused: this.isPaused,
- region: this.region,
- viewerIds: this.viewerIds.slice(),
- },
- {
- isPaused: data.paused,
- region: data.region,
- viewerIds: data.viewer_ids,
- },
- );
- this.viewerIds = data.viewer_ids;
- this.region = data.region;
- }
-
- /**
- * Current stream key
- * @type {string}
- */
- get streamKey() {
- return `${['DM', 'GROUP_DM'].includes(this.channel.type) ? 'call' : `guild:${this.channel.guild.id}`}:${
- this.channel.id
- }:${this.channel.client.user.id}`;
- }
-}
-
-/**
- * Represents a connection to a guild's voice server.
- * ```js
- * // Obtained using:
- * client.voice.joinChannel(channel)
- * .then(connection => connection.createStreamConnection())
- * .then(connection => {
- *
- * });
- * ```
- * @extends {VoiceConnection}
- */
-class StreamConnectionReadonly extends VoiceConnection {
- #requestDisconnect = false;
- /**
- * @param {ClientVoiceManager} voiceManager Voice manager
- * @param {Channel} channel any channel (joinable)
- * @param {VoiceConnection} voiceConnection parent
- * @param {Snowflake} userId User ID
- */
- constructor(voiceManager, channel, voiceConnection, userId) {
- super(voiceManager, channel);
-
- /**
- * Current voice connection
- * @type {VoiceConnection}
- */
- this.voiceConnection = voiceConnection;
-
- /**
- * User ID (who started the stream)
- * @type {Snowflake}
- */
- this.userId = userId;
-
- Object.defineProperty(this, 'voiceConnection', {
- value: voiceConnection,
- writable: false,
- });
-
- /**
- * Server Id
- * @type {string | null}
- */
- this.serverId = null;
-
- /**
- * Stream state
- * @type {boolean}
- */
- this.isPaused = false;
-
- /**
- * Viewer IDs
- * @type {Snowflake[]}
- */
- this.viewerIds = [];
-
- /**
- * Voice region name
- * @type {string | null}
- */
- this.region = null;
- }
-
- createStreamConnection() {
- throw new Error('STREAM_CONNECTION_READONLY');
- }
-
- joinStreamConnection() {
- return Promise.resolve(this);
- }
-
- get streamConnection() {
- return null;
- }
-
- set streamConnection(value) {
- // Why ?
- }
-
- get streamWatchConnection() {
- return new Collection();
- }
-
- set streamWatchConnection(value) {
- // Why ?
- }
-
- disconnect() {
- if (this.#requestDisconnect) return;
- this.emit('closing');
- this.emit('debug', 'Stream: disconnect() triggered');
- clearTimeout(this.connectTimeout);
- this.voiceConnection.streamWatchConnection.delete(this.userId);
- this.sendStopScreenshare();
- this._disconnect();
- }
-
- /**
- * Create new stream connection (WS packet)
- * @returns {void}
- */
- sendSignalScreenshare() {
- this.emit('debug', `Signal Stream Watch: ${this.streamKey}`);
- return this.channel.client.ws.broadcast({
- op: Opcodes.STREAM_WATCH,
- d: {
- stream_key: this.streamKey,
- },
- });
- }
-
- /**
- * Stop screenshare, delete this connection (WS)
- * @returns {void}
- * @private Using StreamConnection#disconnect()
- */
- sendStopScreenshare() {
- this.#requestDisconnect = true;
- this.channel.client.ws.broadcast({
- op: Opcodes.STREAM_DELETE,
- d: {
- stream_key: this.streamKey,
- },
- });
- }
-
- update(data) {
- this.emit(
- 'streamUpdate',
- {
- isPaused: this.isPaused,
- region: this.region,
- viewerIds: this.viewerIds.slice(),
- },
- {
- isPaused: data.paused,
- region: data.region,
- viewerIds: data.viewer_ids,
- },
- );
- this.isPaused = data.paused;
- this.viewerIds = data.viewer_ids;
- this.region = data.region;
- }
-
- /**
- * Current stream key
- * @type {string}
- */
- get streamKey() {
- return `${['DM', 'GROUP_DM'].includes(this.channel.type) ? 'call' : `guild:${this.channel.guild.id}`}:${
- this.channel.id
- }:${this.userId}`;
- }
-}
-
-PlayInterface.applyToClass(VoiceConnection);
-PlayInterface.applyToClass(StreamConnection);
-
-module.exports = VoiceConnection;
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/AnnexBDispatcher.js b/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/AnnexBDispatcher.js
deleted file mode 100644
index d292b31..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/AnnexBDispatcher.js
+++ /dev/null
@@ -1,155 +0,0 @@
-'use strict';
-
-/*
-Credit: https://github.com/dank074/Discord-video-stream
-The use of video streaming in this library is an incomplete implementation with many bugs, primarily aimed at lazy users.
-The video streaming features in this library are sourced from https://github.com/dank074/Discord-video-stream.
-
-Please use the @dank074/discord-video-stream library to access all advanced and professional features,
-along with comprehensive support. I will not actively fix bugs related to streaming and encourage everyone to
-use https://github.com/dank074/Discord-video-stream for stable and smooth streaming.
-
-To reiterate: This is an incomplete implementation of the library https://github.com/dank074/Discord-video-stream.
-
-Thanks to dank074 and longnguyen2004 for implementing new codecs (H264, H265).
-Thanks to mrjvs for discovering how Discord transmits data and the VP8 codec.
-
-Please use the @dank074/discord-video-stream library for the best support.
-*/
-
-const { Buffer } = require('buffer');
-const VideoDispatcher = require('./VideoDispatcher');
-const Util = require('../../../util/Util');
-const {
- H264Helpers,
- H265Helpers,
-} = require('../player/processing/AnnexBNalSplitter');
-
-class AnnexBDispatcher extends VideoDispatcher {
- constructor(
- player,
- highWaterMark = 12,
- streams,
- fps,
- nalFunctions,
- payloadType,
- ) {
- super(player, highWaterMark, streams, fps, payloadType);
- this._nalFunctions = nalFunctions;
- }
-
- _codecCallback(frame) {
- let accessUnit = frame;
- let offset = 0;
-
- // Extract NALUs from the access unit
- while (offset < accessUnit.length) {
- const naluSize = accessUnit.readUInt32BE(offset);
- offset += 4;
- const nalu = accessUnit.subarray(offset, offset + naluSize);
- const isLastNal = offset + naluSize >= accessUnit.length;
- if (nalu.length <= this.mtu) {
- // Send as Single NAL Unit Packet.
- this._playChunk(
- Buffer.concat([this.createPayloadExtension(), nalu]),
- isLastNal,
- );
- } else {
- const [naluHeader, naluData] = this._nalFunctions.splitHeader(nalu);
- const dataFragments = this.partitionMtu(naluData);
- // Send as Fragmentation Unit A (FU-A):
- for (
- let fragmentIndex = 0;
- fragmentIndex < dataFragments.length;
- fragmentIndex++
- ) {
- const data = dataFragments[fragmentIndex];
- const isFirstPacket = fragmentIndex === 0;
- const isFinalPacket = fragmentIndex === dataFragments.length - 1;
-
- this._playChunk(
- Buffer.concat([
- this.createPayloadExtension(),
- this.makeFragmentationUnitHeader(
- isFirstPacket,
- isFinalPacket,
- naluHeader,
- ),
- data,
- ]),
- isLastNal && isFinalPacket,
- );
- }
- }
- offset += naluSize;
- }
- }
-}
-
-class H264Dispatcher extends AnnexBDispatcher {
- constructor(player, highWaterMark = 12, streams, fps) {
- super(
- player,
- highWaterMark,
- streams,
- fps,
- H264Helpers,
- Util.getPayloadType('H264'),
- );
- }
-
- makeFragmentationUnitHeader(isFirstPacket, isLastPacket, naluHeader) {
- const nal0 = naluHeader[0];
- const fuPayloadHeader = Buffer.alloc(2);
- const nalType = H264Helpers.getUnitType(naluHeader);
- const fnri = nal0 & 0xe0;
-
- fuPayloadHeader[0] = 0x1c | fnri;
-
- if (isFirstPacket) {
- fuPayloadHeader[1] = 0x80 | nalType;
- } else if (isLastPacket) {
- fuPayloadHeader[1] = 0x40 | nalType;
- } else {
- fuPayloadHeader[1] = nalType;
- }
-
- return fuPayloadHeader;
- }
-}
-
-class H265Dispatcher extends AnnexBDispatcher {
- constructor(player, highWaterMark = 12, streams, fps) {
- super(
- player,
- highWaterMark,
- streams,
- fps,
- H265Helpers,
- Util.getPayloadType('H265'),
- );
- }
-
- makeFragmentationUnitHeader(isFirstPacket, isLastPacket, naluHeader) {
- const fuIndicatorHeader = Buffer.allocUnsafe(3);
- naluHeader.copy(fuIndicatorHeader);
- const nalType = H265Helpers.getUnitType(naluHeader);
-
- fuIndicatorHeader[0] = (fuIndicatorHeader[0] & 0b10000001) | (49 << 1);
-
- if (isFirstPacket) {
- fuIndicatorHeader[2] = 0x80 | nalType;
- } else if (isLastPacket) {
- fuIndicatorHeader[2] = 0x40 | nalType;
- } else {
- fuIndicatorHeader[2] = nalType;
- }
-
- return fuIndicatorHeader;
- }
-}
-
-module.exports = {
- H264Dispatcher,
- H265Dispatcher,
-};
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/AudioDispatcher.js b/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/AudioDispatcher.js
deleted file mode 100644
index 4b52031..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/AudioDispatcher.js
+++ /dev/null
@@ -1,150 +0,0 @@
-'use strict';
-
-const BaseDispatcher = require('./BaseDispatcher');
-const Util = require('../../../util/Util');
-const Silence = require('../util/Silence');
-const VolumeInterface = require('../util/VolumeInterface');
-
-const CHANNELS = 2;
-
-/**
- * @external WritableStream
- * @see {@link https://nodejs.org/api/stream.html#stream_class_stream_writable}
- */
-
-/**
- * The class that sends voice packet data to the voice connection.
- * ```js
- * // Obtained using:
- * client.voice.joinChannel(channel).then(connection => {
- * // You can play a file or a stream here:
- * const dispatcher = connection.playAudio('/home/hydrabolt/audio.mp3');
- * });
- * ```
- * @implements {VolumeInterface}
- * @extends {BaseDispatcher}
- */
-class AudioDispatcher extends BaseDispatcher {
- constructor(
- player,
- { seek = 0, volume = 1, fec, plp, bitrate = 96, highWaterMark = 12 } = {},
- streams,
- ) {
- const streamOptions = { seek, volume, fec, plp, bitrate, highWaterMark };
- super(player, highWaterMark, Util.getPayloadType('opus'), false, streams);
-
- this.streamOptions = streamOptions;
-
- this.streams.silence = new Silence();
-
- this.setVolume(volume);
- this.setBitrate(bitrate);
- if (typeof fec !== 'undefined') this.setFEC(fec);
- if (typeof plp !== 'undefined') this.setPLP(plp);
- }
-
- get TIMESTAMP_INC() {
- return 480 * CHANNELS;
- }
-
- get FRAME_LENGTH() {
- return 20;
- }
-
- /**
- * Get the type of the dispatcher
- * @returns {'audio'}
- */
- getTypeDispatcher() {
- return 'audio';
- }
-
- /**
- * Set the bitrate of the current Opus encoder if using a compatible Opus stream.
- * @param {number} value New bitrate, in kbps
- * If set to 'auto', the voice channel's bitrate will be used
- * @returns {boolean} true if the bitrate has been successfully changed.
- */
- setBitrate(value) {
- if (!value || !this.bitrateEditable) return false;
- const bitrate =
- value === 'auto' ? this.player.voiceConnection.channel.bitrate : value;
- this.streams.opus.setBitrate(bitrate * 1000);
- return true;
- }
-
- /**
- * Sets the expected packet loss percentage if using a compatible Opus stream.
- * @param {number} value between 0 and 1
- * @returns {boolean} Returns true if it was successfully set.
- */
- setPLP(value) {
- if (!this.bitrateEditable) return false;
- this.streams.opus.setPLP(value);
- return true;
- }
-
- /**
- * Enables or disables forward error correction if using a compatible Opus stream.
- * @param {boolean} enabled true to enable
- * @returns {boolean} Returns true if it was successfully set.
- */
- setFEC(enabled) {
- if (!this.bitrateEditable) return false;
- this.streams.opus.setFEC(enabled);
- return true;
- }
-
- get volumeEditable() {
- return Boolean(this.streams.volume);
- }
-
- /**
- * Whether or not the Opus bitrate of this stream is editable
- * @type {boolean}
- * @readonly
- */
- get bitrateEditable() {
- return this.streams.opus && this.streams.opus.setBitrate;
- }
-
- // Volume
- get volume() {
- return this.streams.volume ? this.streams.volume.volume : 1;
- }
-
- setVolume(value) {
- if (!this.streams.volume) return false;
- /**
- * Emitted when the volume of this dispatcher changes.
- * @event AudioDispatcher#volumeChange
- * @param {number} oldVolume The old volume of this dispatcher
- * @param {number} newVolume The new volume of this dispatcher
- */
- this.emit('volumeChange', this.volume, value);
- this.streams.volume.setVolume(value);
- return true;
- }
-
- /**
- * Sync with another video dispatcher to ensure that the audio and video are played at the same time.
- * @param {VideoDispatcher} otherDispatcher The video dispatcher to sync with
- */
- setSyncVideoDispatcher(otherDispatcher) {
- if (otherDispatcher.getTypeDispatcher() !== 'video') {
- throw new Error('Dispatcher must be a video dispatcher');
- }
- this._syncDispatcher = otherDispatcher;
- }
-
- // Volume stubs for docs
- /* eslint-disable no-empty-function*/
- get volumeDecibels() {}
- get volumeLogarithmic() {}
- setVolumeDecibels() {}
- setVolumeLogarithmic() {}
-}
-
-VolumeInterface.applyToClass(AudioDispatcher);
-
-module.exports = AudioDispatcher;
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/BaseDispatcher.js b/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/BaseDispatcher.js
deleted file mode 100644
index 2e4156e..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/BaseDispatcher.js
+++ /dev/null
@@ -1,490 +0,0 @@
-'use strict';
-
-const { Buffer } = require('node:buffer');
-const crypto = require('node:crypto');
-const { Writable } = require('node:stream');
-const { setTimeout } = require('node:timers');
-const secretbox = require('../util/Secretbox');
-
-const MAX_UINT_16 = 2 ** 16 - 1;
-const MAX_UINT_32 = 2 ** 32 - 1;
-
-const extensions = [{ id: 5, length: 2, value: 0 }];
-
-/**
- * @external WritableStream
- * @see {@link https://nodejs.org/api/stream.html#stream_class_stream_writable}
- */
-
-/**
- * @extends {Writable}
- */
-class BaseDispatcher extends Writable {
- constructor(
- player,
- highWaterMark = 12,
- payloadType,
- extensionEnabled,
- streams = {},
- ) {
- super({
- highWaterMark,
- });
- this.streams = streams;
- /**
- * The Player that controls this dispatcher
- * @type {MediaPlayer}
- */
- this.player = player;
- this.payloadType = payloadType;
- this.extensionEnabled = extensionEnabled;
-
- this._nonce = 0;
- this._nonceBuffer = null;
-
- /**
- * The time that the stream was paused at (null if not paused)
- * @type {?number}
- */
- this.pausedSince = null;
- this._writeCallback = null;
-
- this._pausedTime = 0;
- this._silentPausedTime = 0;
-
- this.count = 0;
- this.sequence = 0;
- this.timestamp = 0;
-
- const streamError = (type, err) => {
- /**
- * Emitted when the dispatcher encounters an error.
- * @event BaseDispatcher#error
- */
- if (type && err) {
- err.message = `${type} stream: ${err.message}`;
- this.emit(this.player.dispatcher === this ? 'error' : 'debug', err);
- }
- this.destroy();
- };
-
- this.on('error', () => streamError());
- if (this.streams.input)
- this.streams.input.on('error', (err) => streamError('input', err));
- if (this.streams.ffmpeg)
- this.streams.ffmpeg.on('error', (err) => streamError('ffmpeg', err));
- if (this.streams.opus)
- this.streams.opus.on('error', (err) => streamError('opus', err));
- if (this.streams.volume)
- this.streams.volume.on('error', (err) => streamError('volume', err));
-
- this.on('finish', () => {
- this._cleanup();
- this._setSpeaking(0);
- this._setVideoStatus(false);
- this._setStreamStatus(true);
- });
- }
-
- getTypeDispatcher() {
- return 'base';
- }
-
- resetNonceBuffer() {
- this._nonceBuffer =
- this.player.voiceConnection.authentication.mode ===
- 'aead_aes256_gcm_rtpsize'
- ? Buffer.alloc(12)
- : Buffer.alloc(24);
- }
-
- getNewSequence() {
- const currentSeq = this.sequence;
- this.sequence++;
- if (this.sequence > MAX_UINT_16) this.sequence = 0;
- return currentSeq;
- }
-
- _write(chunk, enc, done) {
- if (!this.startTime) {
- /**
- * Emitted once the stream has started to play.
- * @event BaseDispatcher#start
- */
- this.emit('start');
- this.startTime = performance.now();
- }
- if (this._syncDispatcher && !this._syncDispatcher.startTime) {
- this.pause();
- const cb = () => {
- this.resume();
- clearTimeout(timeout);
- };
- this._syncDispatcher.once('start', cb);
- let timeout = setTimeout(() => {
- this.removeListener('start', cb);
- this.resume();
- }, 10_000).unref();
- }
- if (this.getTypeDispatcher() === 'video') {
- this._codecCallback(chunk);
- } else {
- this._playChunk(chunk);
- }
- this._step(done);
- }
-
- _destroy(err, cb) {
- this._cleanup();
- super._destroy(err, cb);
- }
-
- _cleanup() {
- if (this.player.dispatcher === this) {
- this.player.dispatcher.destroy();
- this.player.dispatcher = null;
- }
- if (this.player.videoDispatcher === this) {
- this.player.videoDispatcher.destroy();
- this.player.videoDispatcher = null;
- }
- const { streams } = this;
- if (streams.opus) streams.opus.destroy();
- streams.ffmpeg?.destroy();
- }
-
- /**
- * Pauses playback
- * @param {boolean} [silence=false] Whether to play silence while paused to prevent audio glitches
- */
- pause(silence = false) {
- if (this.paused) return;
- if (this.streams.opus) this.streams.opus.unpipe(this); // Audio
- if (this.streams.video) {
- this.streams.ffmpeg.pause();
- this.streams.video.unpipe(this);
- }
- if (this.getTypeDispatcher() === 'audio') {
- if (silence) {
- this.streams.silence.pipe(this);
- this._silence = true;
- } else {
- this._setSpeaking(0);
- }
- }
- this.pausedSince = performance.now();
- }
-
- /**
- * Whether or not playback is paused
- * @type {boolean}
- * @readonly
- */
- get paused() {
- return Boolean(this.pausedSince);
- }
-
- /**
- * Total time that this dispatcher has been paused in milliseconds
- * @type {number}
- * @readonly
- */
- get pausedTime() {
- return (
- this._silentPausedTime +
- this._pausedTime +
- (this.paused ? performance.now() - this.pausedSince : 0)
- );
- }
-
- /**
- * Resumes playback
- */
- resume() {
- if (!this.pausedSince) return;
- if (this.getTypeDispatcher() === 'audio') this.streams.silence.unpipe(this);
- if (this.streams.opus) this.streams.opus.pipe(this);
- if (this.streams.video) {
- this.streams.ffmpeg.resume();
- this.streams.video.pipe(this);
- }
- if (this._silence) {
- this._silentPausedTime += performance.now() - this.pausedSince;
- this._silence = false;
- } else {
- this._pausedTime += performance.now() - this.pausedSince;
- }
- this.pausedSince = null;
- if (typeof this._writeCallback === 'function') this._writeCallback();
- }
-
- /**
- * The time (in milliseconds) that the dispatcher has been playing audio for, taking into account skips and pauses
- * @type {number}
- * @readonly
- */
- get totalStreamTime() {
- return performance.now() - this.startTime;
- }
-
- _step(done) {
- this._writeCallback = () => {
- this._writeCallback = null;
- done();
- };
- const next =
- (this.count + 1) * this.FRAME_LENGTH -
- (performance.now() - this.startTime - this._pausedTime);
- setTimeout(() => {
- if ((!this.pausedSince || this._silence) && this._writeCallback)
- this._writeCallback();
- }, next).unref();
- this.timestamp += this.TIMESTAMP_INC;
- if (this.timestamp > MAX_UINT_32) this.timestamp = 0;
- this.count++;
- if (this.count > MAX_UINT_16) this.count = 0;
- }
-
- _final(callback) {
- this._writeCallback = null;
- callback();
- }
-
- _playChunk(chunk, isLastPacket = false) {
- if (
- (this.player.dispatcher !== this &&
- this.player.videoDispatcher !== this) ||
- !this.player.voiceConnection.authentication.secret_key
- ) {
- return;
- }
- const packet = this._createPacket(chunk, isLastPacket);
- if (packet) this._sendPacket(packet);
- }
-
- /**
- * Creates a one-byte extension header
- * https://www.rfc-editor.org/rfc/rfc5285#section-4.2
- * @returns {Buffer}
- */
- createHeaderExtension() {
- /**
- * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | defined by profile | length |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
- const profile = Buffer.alloc(4);
- profile[0] = 0xbe;
- profile[1] = 0xde;
- profile.writeInt16BE(extensions.length, 2); // Extension count
-
- return profile;
- }
-
- /**
- * Creates a one-byte extension header & a single extension of type playout-delay
- * @see https://docs.discord.food/topics/voice-connections#sending-and-receiving-voice
- * Discord expects a playout delay RTP extension header on every video packet.
- * @see https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/playout-delay
- * @returns {Buffer} playout-delay extension
- */
- createPayloadExtension() {
- const extensionsData = [];
- for (let ext of extensions) {
- /**
- * EXTENSION DATA - each extension payload is 32 bits
- */
- const data = Buffer.alloc(4);
-
- // https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/playout-delay
- if (ext.id === 5) {
- /**
- * 0 1 2 3 4 5 6 7
- +-+-+-+-+-+-+-+-+
- | ID | len |
- +-+-+-+-+-+-+-+-+
-
- where len = actual length - 1
- /
- data[0] = (ext.id & 0b00001111) << 4;
- data[0] |= (ext.len - 1) & 0b00001111;
-
- /** Specific to type playout-delay
- * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | MIN delay | MAX delay |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
- data.writeUIntBE(ext.value, 1, 2); // Not quite but its 0 anyway
- }
- extensionsData.push(data);
- }
- return Buffer.concat(extensionsData);
- }
-
- _encrypt(buffer, additionalData) {
- const { secret_key, mode } = this.player.voiceConnection.authentication;
- // Both supported encryption methods want the nonce to be an incremental integer
- this._nonce++;
- if (this._nonce > MAX_UINT_32) this._nonce = 0;
- if (!this._nonceBuffer) {
- this.resetNonceBuffer();
- }
- this._nonceBuffer.writeUInt32BE(this._nonce, 0);
-
- // 4 extra bytes of padding on the end of the encrypted packet
- const noncePadding = this._nonceBuffer.slice(0, 4);
-
- let encrypted;
-
- switch (mode) {
- case 'aead_aes256_gcm_rtpsize': {
- const cipher = crypto.createCipheriv(
- 'aes-256-gcm',
- secret_key,
- this._nonceBuffer,
- );
- cipher.setAAD(additionalData);
-
- encrypted = Buffer.concat([
- cipher.update(buffer),
- cipher.final(),
- cipher.getAuthTag(),
- ]);
-
- return [encrypted, noncePadding];
- }
- case 'aead_xchacha20_poly1305_rtpsize': {
- encrypted =
- secretbox.methods.crypto_aead_xchacha20poly1305_ietf_encrypt(
- buffer,
- additionalData,
- this._nonceBuffer,
- secret_key,
- );
-
- return [encrypted, noncePadding];
- }
- default: {
- // This should never happen. Our encryption mode is chosen from a list given to us by the gateway and checked with the ones we support.
- throw new RangeError(`Unsupported encryption method: ${mode}`);
- }
- }
- }
-
- _createPacket(buffer, isLastPacket) {
- /*
- // Packet is raw rtp from ffmpeg
- const rtp = webrtc.RtpPacket.deSerialize(buffer);
- if (!rtp.payload) {
- console.log('no payload', rtp);
- return null;
- }
- // Header
- // https://docs.discord.food/topics/voice-connections#rtp-packet-structure
- let rtpHeader = buffer.slice(0, 12); // RTP_HEADER_SIZE
- rtpHeader[0] = 0x80; // Version + Flags (1 byte)
- rtpHeader[1] = this.payloadType; // Payload Type (1 byte)
- if (this.extensionEnabled) {
- rtpHeader = Buffer.concat([rtpHeader, this.createHeaderExtension()]);
- rtpHeader[0] |= 1 << 4; // 0x90
- }
- rtpHeader.writeUIntBE(this.getNewSequence(), 2, 2);
- rtpHeader.writeUIntBE(this.timestamp, 4, 4);
- rtpHeader.writeUIntBE(
- this.player.voiceConnection.authentication.ssrc + Number(this.getTypeDispatcher() === 'video'),
- 8,
- 4,
- );
- */
- // Header
- let rtpHeader = Buffer.alloc(12); // RTP_HEADER_SIZE
- rtpHeader[0] = 0x80; // Version + Flags (1 byte)
- rtpHeader[1] = this.payloadType; // Payload Type (1 byte)
- if (this.extensionEnabled) {
- rtpHeader = Buffer.concat([rtpHeader, this.createHeaderExtension()]);
- rtpHeader[0] |= 1 << 4; // 0x90
- }
- if (this.getTypeDispatcher() === 'video' && isLastPacket) {
- rtpHeader[1] |= 1 << 7; // Marker bit
- }
-
- rtpHeader.writeUIntBE(this.getNewSequence(), 2, 2);
- rtpHeader.writeUIntBE(this.timestamp, 4, 4);
- rtpHeader.writeUIntBE(
- this.player.voiceConnection.authentication.ssrc +
- Number(this.getTypeDispatcher() === 'video'),
- 8,
- 4,
- );
- return Buffer.concat([rtpHeader, ...this._encrypt(buffer, rtpHeader)]);
- }
-
- _sendPacket(packet) {
- /**
- * Emitted whenever the dispatcher has debug information.
- * @event BaseDispatcher#debug
- * @param {string} info The debug info
- */
- if (this.getTypeDispatcher() === 'audio') {
- this._setSpeaking(this.player.isScreenSharing ? 1 << 1 : 1 << 0); // 1 << 0 = SPEAKING, 1 << 1 = SOUND SHARE
- } else if (this.getTypeDispatcher() === 'video') {
- this._setVideoStatus(true);
- this._setStreamStatus(false);
- }
- if (!this.player.voiceConnection.sockets.udp) {
- this.emit('debug', 'Failed to send a packet - no UDP socket');
- return;
- }
- this.player.voiceConnection.sockets.udp.send(packet).catch((e) => {
- if (this.getTypeDispatcher() === 'audio') {
- this._setSpeaking(this._setSpeaking(0));
- } else if (this.getTypeDispatcher() === 'video') {
- this._setVideoStatus(false);
- this._setStreamStatus(true);
- }
- this.emit('debug', `Failed to send a packet - ${e}`);
- });
- }
-
- _setSpeaking(value) {
- if (typeof this.player.voiceConnection !== 'undefined') {
- this.player.voiceConnection.setSpeaking(value);
- }
- /**
- * Emitted when the dispatcher starts/stops speaking.
- * @event AudioDispatcher#speaking
- * @param {boolean} value Whether or not the dispatcher is speaking
- */
- this.emit('speaking', value);
- }
-
- _setVideoStatus(value) {
- if (typeof this.player.voiceConnection !== 'undefined') {
- this.player.voiceConnection.setVideoStatus(value);
- }
- /**
- * Emitted when the dispatcher starts/stops video.
- * @event VideoDispatcher#videoStatus
- * @param {boolean} value Whether or not the dispatcher is enable video
- */
- this.emit('videoStatus', value);
- }
-
- _setStreamStatus(value) {
- if (
- typeof this.player.voiceConnection?.sendScreenshareState !== 'undefined'
- ) {
- this.player.voiceConnection.sendScreenshareState(value);
- }
- /**
- * Emitted when the dispatcher starts/stops video.
- * @event VideoDispatcher#streamStatus
- * @param {boolean} isPaused Whether or not the dispatcher is pause video
- */
- this.emit('streamStatus', value);
- }
-}
-
-module.exports = BaseDispatcher;
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/VPxDispatcher.js b/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/VPxDispatcher.js
deleted file mode 100644
index 789dd20..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/VPxDispatcher.js
+++ /dev/null
@@ -1,61 +0,0 @@
-'use strict';
-
-/*
-Credit: https://github.com/dank074/Discord-video-stream
-The use of video streaming in this library is an incomplete implementation with many bugs, primarily aimed at lazy users.
-The video streaming features in this library are sourced from https://github.com/dank074/Discord-video-stream.
-
-Please use the @dank074/discord-video-stream library to access all advanced and professional features,
-along with comprehensive support. I will not actively fix bugs related to streaming and encourage everyone to
-use https://github.com/dank074/Discord-video-stream for stable and smooth streaming.
-
-To reiterate: This is an incomplete implementation of the library https://github.com/dank074/Discord-video-stream.
-
-Thanks to dank074 and longnguyen2004 for implementing new codecs (H264, H265).
-Thanks to mrjvs for discovering how Discord transmits data and the VP8 codec.
-
-Please use the @dank074/discord-video-stream library for the best support.
-*/
-
-const { Buffer } = require('node:buffer');
-const VideoDispatcher = require('./VideoDispatcher');
-const Util = require('../../../util/Util');
-
-class VP8Dispatcher extends VideoDispatcher {
- constructor(player, highWaterMark = 12, streams, fps) {
- super(player, highWaterMark, streams, fps, Util.getPayloadType('VP8'));
- }
-
- makeChunk(buffer, isFirstPacket) {
- // Vp8 payload descriptor
- const payloadDescriptorBuf = Buffer.alloc(2);
- payloadDescriptorBuf[0] = 0x80;
- payloadDescriptorBuf[1] = 0x80;
- if (isFirstPacket) {
- payloadDescriptorBuf[0] |= 1 << 4; // Mark S bit, indicates start of frame
- }
- // Vp8 pictureid payload extension
- const pictureIdBuf = Buffer.alloc(2);
- pictureIdBuf.writeUintBE(this.count, 0, 2);
- pictureIdBuf[0] |= 0x80;
- return Buffer.concat([
- this.createPayloadExtension(),
- payloadDescriptorBuf,
- pictureIdBuf,
- buffer,
- ]);
- }
-
- _codecCallback(chunk) {
- const chunkSplit = this.partitionMtu(chunk).map((c, i) =>
- this.makeChunk(c, i === 0),
- );
- for (let i = 0; i < chunkSplit.length; i++) {
- this._playChunk(chunkSplit[i], i + 1 === chunkSplit.length);
- }
- }
-}
-
-module.exports = {
- VP8Dispatcher,
-};
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/VideoDispatcher.js b/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/VideoDispatcher.js
deleted file mode 100644
index 5607e60..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/dispatcher/VideoDispatcher.js
+++ /dev/null
@@ -1,68 +0,0 @@
-'use strict';
-
-const BaseDispatcher = require('./BaseDispatcher');
-
-/**
- * The class that sends video packet data to the voice connection.
- * ```js
- * // Obtained using:
- * client.voice.joinChannel(channel).then(connection => {
- * // You can play a file or a stream here:
- * const dispatcher = connection.playVideo('/home/hydrabolt/video.mp4', { fps: 60, preset: 'ultrafast' });
- * });
- * ```
- * @extends {BaseDispatcher}
- */
-class VideoDispatcher extends BaseDispatcher {
- constructor(player, highWaterMark = 12, streams, fps, payloadType) {
- super(player, highWaterMark, payloadType, true, streams);
- /**
- * Video FPS
- * @type {number}
- */
- this.fps = fps;
-
- this.mtu = 1200;
- }
-
- get TIMESTAMP_INC() {
- return 90000 / this.fps;
- }
-
- get FRAME_LENGTH() {
- return 1000 / this.fps;
- }
-
- /**
- * Get the type of the dispatcher
- * @returns {'video'}
- */
- getTypeDispatcher() {
- return 'video';
- }
-
- partitionMtu(data) {
- const out = [];
- const dataLength = data.length;
-
- for (let i = 0; i < dataLength; i += this.mtu) {
- out.push(data.slice(i, i + this.mtu));
- }
-
- return out;
- }
-
- /**
- * Set FPS
- * @param {number} value fps
- */
- setFPSSource(value) {
- this.fps = value;
- }
-
- _codecCallback() {
- throw new Error('The _codecCallback method must be implemented');
- }
-}
-
-module.exports = VideoDispatcher;
diff --git a/vendor/discord.js-selfbot-v13/src/client/voice/networking/VoiceUDPClient.js b/vendor/discord.js-selfbot-v13/src/client/voice/networking/VoiceUDPClient.js
deleted file mode 100644
index 71e3e04..0000000
--- a/vendor/discord.js-selfbot-v13/src/client/voice/networking/VoiceUDPClient.js
+++ /dev/null
@@ -1,186 +0,0 @@
-'use strict';
-
-const udp = require('dgram');
-const EventEmitter = require('events');
-const { isIP } = require('net');
-const { Buffer } = require('node:buffer');
-const { Error } = require('../../../errors');
-const { VoiceOpcodes } = require('../../../util/Constants');
-const Util = require('../../../util/Util');
-
-/**
- * Represents a UDP client for a Voice Connection.
- * @extends {EventEmitter}
- * @private
- */
-class VoiceConnectionUDPClient extends EventEmitter {
- constructor(voiceConnection) {
- super();
-
- /**
- * The voice connection that this UDP client serves
- * @type {VoiceConnection}
- */
- this.voiceConnection = voiceConnection;
-
- /**
- * The UDP socket
- * @type {?Socket}
- */
- this.socket = null;
-
- /**
- * The address of the Discord voice server
- * @type {?string}
- */
- this.discordAddress = null;
-
- /**
- * The local IP address
- * @type {?string}
- */
- this.localAddress = null;
-
- /**
- * The local port
- * @type {?string}
- */
- this.localPort = null;
-
- this.voiceConnection.on('closing', this.shutdown.bind(this));
- }
-
- shutdown() {
- this.emit('debug', `[UDP] shutdown requested`);
- if (this.socket) {
- this.socket.removeAllListeners('message');
- try {
- this.socket.close();
- } finally {
- this.socket = null;
- }
- }
- }
-
- /**
- * The port of the Discord voice server
- * @type {number}
- * @readonly
- */
- get discordPort() {
- return this.voiceConnection.authentication.port;
- }
-
- /**
- * Send a packet to the UDP client.
- * @param {Object} packet The packet to send
- * @returns {Promise