refactor: requested changes

This commit is contained in:
almeidx
2026-04-07 21:23:19 +01:00
parent 7f1ffc8371
commit a3f9fbfd40
5 changed files with 144 additions and 50 deletions

View File

@@ -103,6 +103,8 @@ exports.VoiceStateManager = require('./managers/VoiceStateManager.js').VoiceStat
// Structures
exports.ActionRow = require('./structures/ActionRow.js').ActionRow;
exports.Activity = require('./structures/Presence.js').Activity;
exports.ActivityInstance = require('./structures/ActivityInstance.js').ActivityInstance;
exports.ActivityLocation = require('./structures/ActivityLocation.js').ActivityLocation;
exports.AnnouncementChannel = require('./structures/AnnouncementChannel.js').AnnouncementChannel;
exports.AnonymousGuild = require('./structures/AnonymousGuild.js').AnonymousGuild;
exports.AuthorizingIntegrationOwners =

View File

@@ -0,0 +1,52 @@
'use strict';
const { ActivityLocation } = require('./ActivityLocation.js');
const { Base } = require('./Base.js');
/**
* Represents an activity instance.
*
* @extends {Base}
*/
class ActivityInstance extends Base {
constructor(client, data) {
super(client);
/**
* The id of the application
*
* @type {Snowflake}
*/
this.applicationId = data.application_id;
/**
* The activity instance id
*
* @type {string}
*/
this.instanceId = data.instance_id;
/**
* The unique identifier for the launch
*
* @type {Snowflake}
*/
this.launchId = data.launch_id;
/**
* The location the instance is running in
*
* @type {ActivityLocation}
*/
this.location = new ActivityLocation(client, data.location);
/**
* The ids of the users connected to the instance
*
* @type {Snowflake[]}
*/
this.users = data.users;
}
}
exports.ActivityInstance = ActivityInstance;

View File

@@ -0,0 +1,65 @@
'use strict';
const { Base } = require('./Base.js');
/**
* Represents the location of an activity instance.
*
* @extends {Base}
*/
class ActivityLocation extends Base {
constructor(client, data) {
super(client);
/**
* The unique identifier for the location
*
* @type {string}
*/
this.id = data.id;
/**
* The kind of location
*
* @type {ActivityLocationKind}
*/
this.kind = data.kind;
/**
* The id of the channel
*
* @type {Snowflake}
*/
this.channelId = data.channel_id;
/**
* The id of the guild
*
* @type {?Snowflake}
*/
this.guildId = data.guild_id ?? null;
}
/**
* The channel of this activity location
*
* @type {?Channel}
* @readonly
*/
get channel() {
return this.client.channels.cache.get(this.channelId) ?? null;
}
/**
* The guild of this activity location
*
* @type {?Guild}
* @readonly
*/
get guild() {
if (!this.guildId) return null;
return this.client.guilds.cache.get(this.guildId) ?? null;
}
}
exports.ActivityLocation = ActivityLocation;

View File

@@ -9,6 +9,7 @@ const { SubscriptionManager } = require('../managers/SubscriptionManager.js');
const { ApplicationFlagsBitField } = require('../util/ApplicationFlagsBitField.js');
const { resolveImage } = require('../util/DataResolver.js');
const { PermissionsBitField } = require('../util/PermissionsBitField.js');
const { ActivityInstance } = require('./ActivityInstance.js');
const { ApplicationRoleConnectionMetadata } = require('./ApplicationRoleConnectionMetadata.js');
const { SKU } = require('./SKU.js');
const { Team } = require('./Team.js');
@@ -447,47 +448,15 @@ class ClientApplication extends Application {
return skus.reduce((coll, sku) => coll.set(sku.id, new SKU(this.client, sku)), new Collection());
}
/**
* Represents the location of an activity instance.
*
* @typedef {Object} ActivityLocation
* @property {string} id Unique identifier for the location
* @property {ActivityLocationKind} kind The kind of location
* @property {Snowflake} channelId The id of the channel
* @property {?Snowflake} guildId The id of the guild
*/
/**
* Represents an activity instance.
*
* @typedef {Object} ActivityInstanceData
* @property {Snowflake} applicationId The application id
* @property {string} instanceId The activity instance id
* @property {Snowflake} launchId Unique identifier for the launch
* @property {ActivityLocation} location The location the instance is running in
* @property {Snowflake[]} users The ids of the users connected to the instance
*/
/**
* Fetches an activity instance for this application.
*
* @param {string} instanceId The id of the activity instance
* @returns {Promise<ActivityInstanceData>}
* @returns {Promise<ActivityInstance>}
*/
async fetchActivityInstance(instanceId) {
const data = await this.client.rest.get(Routes.applicationActivityInstance(this.id, instanceId));
return {
applicationId: data.application_id,
instanceId: data.instance_id,
launchId: data.launch_id,
location: {
id: data.location.id,
kind: data.location.kind,
channelId: data.location.channel_id,
guildId: data.location.guild_id ?? null,
},
users: data.users,
};
return new ActivityInstance(this.client, data);
}
}

View File

@@ -9,6 +9,8 @@ import { WebSocketManager, WebSocketManagerOptions } from '@discordjs/ws';
import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';
import {
ActivityFlags,
APIActivityInstance,
APIActivityLocation,
ActivityLocationKind,
ActivityType,
APIActionRowComponent,
@@ -247,6 +249,25 @@ export class Activity {
public toString(): string;
}
export class ActivityInstance extends Base {
private constructor(client: Client<true>, data: APIActivityInstance);
public applicationId: Snowflake;
public instanceId: string;
public launchId: Snowflake;
public location: ActivityLocation;
public users: Snowflake[];
}
export class ActivityLocation extends Base {
private constructor(client: Client<true>, data: APIActivityLocation);
public id: string;
public kind: ActivityLocationKind;
public channelId: Snowflake;
public guildId: Snowflake | null;
public get channel(): Channel | null;
public get guild(): Guild | null;
}
export type ActivityFlagsString = keyof typeof ActivityFlags;
export interface BaseComponentData {
@@ -1005,7 +1026,7 @@ export class ClientApplication extends Application {
public roleConnectionsVerificationURL: string | null;
public edit(options: ClientApplicationEditOptions): Promise<ClientApplication>;
public fetch(): Promise<ClientApplication>;
public fetchActivityInstance(instanceId: string): Promise<ActivityInstanceData>;
public fetchActivityInstance(instanceId: string): Promise<ActivityInstance>;
public fetchRoleConnectionMetadataRecords(): Promise<ApplicationRoleConnectionMetadata[]>;
public fetchSKUs(): Promise<Collection<Snowflake, SKU>>;
public editRoleConnectionMetadataRecords(
@@ -7404,21 +7425,6 @@ export interface ClientApplicationInstallParams {
scopes: readonly OAuth2Scopes[];
}
export interface ActivityLocation {
channelId: Snowflake;
guildId: Snowflake | null;
id: string;
kind: ActivityLocationKind;
}
export interface ActivityInstanceData {
applicationId: Snowflake;
instanceId: string;
launchId: Snowflake;
location: ActivityLocation;
users: readonly Snowflake[];
}
export type Serialized<Value> = Value extends bigint | symbol | (() => any)
? never
: Value extends boolean | number | string | undefined