feat: new class Call
This commit is contained in:
parent
11ac55fcf0
commit
ee906b544e
@ -1,4 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
const Call = require('../../../structures/Call');
|
||||||
const { Events } = require('../../../util/Constants');
|
const { Events } = require('../../../util/Constants');
|
||||||
module.exports = (client, packet) => {
|
module.exports = (client, packet) => {
|
||||||
for (const voice of packet.d.voice_states) {
|
for (const voice of packet.d.voice_states) {
|
||||||
@ -7,9 +8,7 @@ module.exports = (client, packet) => {
|
|||||||
/**
|
/**
|
||||||
* Emitted whenever received a call
|
* Emitted whenever received a call
|
||||||
* @event Client#callCreate
|
* @event Client#callCreate
|
||||||
* @param {Snowflake} channelId DM / Group DM channel ID
|
* @param {Call} call Call
|
||||||
* @param {string} region Voice server region
|
|
||||||
* @param {?Snowflake[]} ringing List of user ID who is ringing
|
|
||||||
*/
|
*/
|
||||||
client.emit(Events.CALL_CREATE, packet.d.channel_id, packet.d.region, packet.d.ringing);
|
client.emit(Events.CALL_CREATE, new Call(client, packet.d));
|
||||||
};
|
};
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
const Call = require('../../../structures/Call');
|
||||||
const { Events } = require('../../../util/Constants');
|
const { Events } = require('../../../util/Constants');
|
||||||
module.exports = (client, packet) => {
|
module.exports = (client, packet) => {
|
||||||
/**
|
/**
|
||||||
* Emitted whenever delete a call
|
* Emitted whenever delete a call
|
||||||
* @event Client#callDelete
|
* @event Client#callDelete
|
||||||
* @param {Snowflake} channelId DM / Group DM channel ID
|
* @param {Call} call Call
|
||||||
*/
|
*/
|
||||||
client.emit(Events.CALL_DELETE, packet.d.channel_id);
|
client.emit(Events.CALL_DELETE, new Call(client, packet.d));
|
||||||
};
|
};
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
const Call = require('../../../structures/Call');
|
||||||
const { Events } = require('../../../util/Constants');
|
const { Events } = require('../../../util/Constants');
|
||||||
module.exports = (client, packet) => {
|
module.exports = (client, packet) => {
|
||||||
/**
|
/**
|
||||||
* Emitted whenever update a call
|
* Emitted whenever update a call
|
||||||
* @event Client#callUpdate
|
* @event Client#callUpdate
|
||||||
* @param {Snowflake} channelId DM / Group DM channel ID
|
* @param {Call} call Call
|
||||||
* @param {string} region Voice server region
|
|
||||||
* @param {?Snowflake[]} ringing List of user ID who is ringing
|
|
||||||
*/
|
*/
|
||||||
client.emit(Events.CALL_UPDATE, packet.d.channel_id, packet.d.region, packet.d.ringing);
|
client.emit(Events.CALL_UPDATE, new Call(client, packet.d));
|
||||||
};
|
};
|
||||||
|
56
src/structures/Call.js
Normal file
56
src/structures/Call.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const { Collection } = require('@discordjs/collection');
|
||||||
|
const Base = require('./Base');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a call
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Call extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
/**
|
||||||
|
* The channel ID of the call
|
||||||
|
* @type {Snowflake}
|
||||||
|
*/
|
||||||
|
this.channelId = data.channel_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of user ID who is ringing
|
||||||
|
* @type {Collection<Snowflake, User>}
|
||||||
|
*/
|
||||||
|
this.ringing = new Collection();
|
||||||
|
}
|
||||||
|
_patch(data) {
|
||||||
|
if ('region' in data) {
|
||||||
|
/**
|
||||||
|
* The region of the call
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.region = data.region;
|
||||||
|
}
|
||||||
|
if ('ringing' in data) {
|
||||||
|
for (const userId of data.ringing) {
|
||||||
|
this.ringing.set(userId, this.client.users.cache.get(userId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The channel of the call
|
||||||
|
* @type {?DMChannel|PartialGroupDMChannel}
|
||||||
|
*/
|
||||||
|
get channel() {
|
||||||
|
return this.client.channels.cache.get(this.channelId);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the voice region of the call
|
||||||
|
* @param {string} region Region of the call
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
setVoiceRegion(region) {
|
||||||
|
return this.client.api.channels(this.channelId).call.patch({ data: { region } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Call;
|
@ -563,6 +563,19 @@ class ClientUser extends User {
|
|||||||
else this._packageName = null;
|
else this._packageName = null;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop ringing
|
||||||
|
* @param {ChannelResolvable} channel DMChannel | GroupDMChannel
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
stopRinging(channel) {
|
||||||
|
const id = this.client.channels.resolveId(channel);
|
||||||
|
if (!channel) return false;
|
||||||
|
return this.client.api.channels(id).call['stop-ringing'].post({
|
||||||
|
data: {},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ClientUser;
|
module.exports = ClientUser;
|
||||||
|
@ -471,7 +471,7 @@ class User extends Base {
|
|||||||
* @returns {Promise<boolean>}
|
* @returns {Promise<boolean>}
|
||||||
*/
|
*/
|
||||||
ring() {
|
ring() {
|
||||||
if (!this.dmChannel?.id) return Promise.reject(new Error('USER_NO_DM_CHANNEL'));
|
if (this.relationships !== 'FRIEND') return Promise.reject(new Error('USER_NOT_FRIEND'));
|
||||||
if (!this.client.user.voice?.channelId || !this.client.callVoice) {
|
if (!this.client.user.voice?.channelId || !this.client.callVoice) {
|
||||||
return Promise.reject(new Error('CLIENT_NO_CALL'));
|
return Promise.reject(new Error('CLIENT_NO_CALL'));
|
||||||
}
|
}
|
||||||
|
19
typings/index.d.ts
vendored
19
typings/index.d.ts
vendored
@ -249,6 +249,15 @@ export class DiscordRPCServer extends EventEmitter {
|
|||||||
public on(event: 'activity', listener: (data: RPCActivityData) => void): this;
|
public on(event: 'activity', listener: (data: RPCActivityData) => void): this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Call extends Base {
|
||||||
|
constructor(client: Client, data: object);
|
||||||
|
public channelId: Snowflake;
|
||||||
|
public ringing: Collection<Snowflake, User>;
|
||||||
|
public region?: string;
|
||||||
|
public readonly channel: PartialDMChannel | PartialGroupDMChannel;
|
||||||
|
public setVoiceRegion(region: string): Promise<undefined>;
|
||||||
|
}
|
||||||
|
|
||||||
export interface RPCActivityData {
|
export interface RPCActivityData {
|
||||||
activity?: RichPresence;
|
activity?: RichPresence;
|
||||||
pid: number;
|
pid: number;
|
||||||
@ -1064,6 +1073,7 @@ export class ClientUser extends User {
|
|||||||
public readonly phoneNumber: string;
|
public readonly phoneNumber: string;
|
||||||
public readonly nsfwAllowed: boolean;
|
public readonly nsfwAllowed: boolean;
|
||||||
public readonly emailAddress: string;
|
public readonly emailAddress: string;
|
||||||
|
public stopRinging(channel: ChannelResolvable): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
type NitroType = 'NONE' | 'NITRO_CLASSIC' | 'NITRO_BOOST' | 'NITRO_BASIC';
|
type NitroType = 'NONE' | 'NITRO_CLASSIC' | 'NITRO_BOOST' | 'NITRO_BASIC';
|
||||||
@ -4708,9 +4718,9 @@ export interface ClientEvents extends BaseClientEvents {
|
|||||||
emojiDelete: [emoji: GuildEmoji];
|
emojiDelete: [emoji: GuildEmoji];
|
||||||
emojiUpdate: [oldEmoji: GuildEmoji, newEmoji: GuildEmoji];
|
emojiUpdate: [oldEmoji: GuildEmoji, newEmoji: GuildEmoji];
|
||||||
error: [error: Error];
|
error: [error: Error];
|
||||||
callCreate: [channelId: Snowflake, region: string, ringing?: Snowflake[]];
|
callCreate: [call: Call];
|
||||||
callDelete: [channelId: Snowflake];
|
callDelete: [call: Call];
|
||||||
callUpdate: [channelId: Snowflake, region: string, ringing?: Snowflake[]];
|
callUpdate: [call: Call];
|
||||||
guildBanAdd: [ban: GuildBan];
|
guildBanAdd: [ban: GuildBan];
|
||||||
guildBanRemove: [ban: GuildBan];
|
guildBanRemove: [ban: GuildBan];
|
||||||
guildCreate: [guild: Guild];
|
guildCreate: [guild: Guild];
|
||||||
@ -7271,7 +7281,8 @@ export type AnyChannel =
|
|||||||
| TextChannel
|
| TextChannel
|
||||||
| ThreadChannel
|
| ThreadChannel
|
||||||
| VoiceChannel
|
| VoiceChannel
|
||||||
| ForumChannel;
|
| ForumChannel
|
||||||
|
| PartialGroupDMChannel;
|
||||||
|
|
||||||
export type TextBasedChannel = Exclude<
|
export type TextBasedChannel = Exclude<
|
||||||
Extract<AnyChannel, { messages: MessageManager; interactions: InteractionManager }>,
|
Extract<AnyChannel, { messages: MessageManager; interactions: InteractionManager }>,
|
||||||
|
Loading…
Reference in New Issue
Block a user