feat: stage setSuppressed & postPreview

This commit is contained in:
Elysia 2023-07-28 12:05:44 +07:00
parent eb9d68bcc9
commit 6e09894492
2 changed files with 28 additions and 6 deletions

View File

@ -270,6 +270,7 @@ class VoiceState extends Base {
data: { data: {
channel_id: this.channelId, channel_id: this.channelId,
suppress: suppressed, suppress: suppressed,
request_to_speak_timestamp: null,
}, },
}); });
} }
@ -277,19 +278,39 @@ class VoiceState extends Base {
/** /**
* Get URL Image of the user's streaming video (NOT STREAMING !!!) * Get URL Image of the user's streaming video (NOT STREAMING !!!)
* @returns {string} URL Image of the user's streaming video * @returns {Promise<string>} URL Image of the user's streaming video
*/ */
async getPreview() { async getPreview() {
if (!this.guild?.id) return null;
if (!this.streaming) throw new Error('USER_NOT_STREAMING'); if (!this.streaming) throw new Error('USER_NOT_STREAMING');
// URL: https://discord.com/api/v9/streams/guild:guildid:voicechannelid:userid/preview // URL: https://discord.com/api/v9/streams/guild:guildid:voicechannelid:userid/preview
const data = await this.client.api.streams[ // URL: https://discord.com/api/v9/streams/call:channelId:userId/preview
`guild%3A${this.guild.id}%3A${this.channelId}%3A${this.id}` const streamKey = this.guild.id
].preview.get(); ? `guild:${this.guild.id}:${this.channelId}:${this.id}`
: `call:${this.channelId}:${this.id}`;
const data = await this.client.api.streams[encodeURIComponent(streamKey)].preview.get();
return data.url; return data.url;
} }
/**
* Post Preview Image to the client user's streaming video
* @param {string} base64Image Base64 URI (data:image/jpeg;base64,data)
* @returns {Promise<void>}
*/
async postPreview(base64Image) {
if (!this.client.user.id === this.id || !this.streaming) throw new Error('USER_NOT_STREAMING');
// URL: https://discord.com/api/v9/streams/guild:guildid:voicechannelid:userid/preview
// URL: https://discord.com/api/v9/streams/call:channelId:userId/preview
const streamKey = this.guild.id
? `guild:${this.guild.id}:${this.channelId}:${this.id}`
: `call:${this.channelId}:${this.id}`;
await this.client.api.streams[encodeURIComponent(streamKey)].preview.post({
data: {
thumbnail: base64Image,
},
});
return true;
}
toJSON() { toJSON() {
return super.toJSON({ return super.toJSON({
id: true, id: true,

1
typings/index.d.ts vendored
View File

@ -3437,6 +3437,7 @@ export class VoiceState extends Base {
public setRequestToSpeak(request?: boolean): Promise<void>; public setRequestToSpeak(request?: boolean): Promise<void>;
public setSuppressed(suppressed?: boolean): Promise<void>; public setSuppressed(suppressed?: boolean): Promise<void>;
public getPreview(): Promise<string>; public getPreview(): Promise<string>;
public postPreview(base64Image: string): Promise<void>;
} }
export class Webhook extends WebhookMixin() { export class Webhook extends WebhookMixin() {