diff --git a/src/errors/Messages.js b/src/errors/Messages.js index fbf5a3d..f4c8126 100644 --- a/src/errors/Messages.js +++ b/src/errors/Messages.js @@ -75,6 +75,7 @@ const Messages = { CLIENT_NO_CALL: 'No call exists!', VOICE_NOT_STAGE_CHANNEL: 'You are only allowed to do this in stage channels.', + VOICE_NOT_IN_GUILD: 'You are only allowed to do this in guild channels.', VOICE_STATE_NOT_OWN: 'You cannot self-deafen/mute/request to speak on VoiceStates that do not belong to the ClientUser.', diff --git a/src/structures/VoiceState.js b/src/structures/VoiceState.js index 550a5fb..90fbdb5 100644 --- a/src/structures/VoiceState.js +++ b/src/structures/VoiceState.js @@ -214,6 +214,32 @@ class VoiceState extends Base { return this.guild.members.edit(this.id, { channel }, reason); } + /** + * Sets the status of the voice channel + * @param {string} status The message to set the channel status to + * @example + * // Setting the status to something + * guild.members.me.voice.setStatus("something") + * @example + * // Removing the status + * guild.members.me.voice.setStatus("") + * @returns {Promise} + */ + async setStatus(status) { + // PUT https://discord.com/api/v9/channels/channelID/voice-status + if (this.channel?.id) { + // You can set the staus in normal voice channels and in stages so any type starting with GUILD should work + if (!this.channel?.type.startsWith('GUILD')) throw new Error('VOICE_NOT_IN_GUILD'); + + await this.client.api.channels(this.channel.id, 'voice-status').put({ + data: { + status, + }, + versioned: true, + }); + } + } + /** * Toggles the request to speak in the channel. * Only applicable for stage channels and for the client's own voice state. diff --git a/typings/index.d.ts b/typings/index.d.ts index 2aac51b..2a6fcc0 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -3434,6 +3434,7 @@ export class VoiceState extends Base { public setMute(mute?: boolean, reason?: string): Promise; public disconnect(reason?: string): Promise; public setChannel(channel: GuildVoiceChannelResolvable | null, reason?: string): Promise; + public setStatus(status: string): Promise; public setRequestToSpeak(request?: boolean): Promise; public setSuppressed(suppressed?: boolean): Promise; public getPreview(): Promise;