diff --git a/packages/core/src/biscuit.ts b/packages/core/src/biscuit.ts index 6161bb5..4872048 100644 --- a/packages/core/src/biscuit.ts +++ b/packages/core/src/biscuit.ts @@ -133,7 +133,12 @@ export type PickOptions = Pick< export interface BiscuitOptions { intents?: GatewayIntents; token: string; - + precense?: { + status: keyof typeof StatusTypes; + afk: boolean; + since: number | null; + activities: Activities[]; + }; events?: { adapter?: { new (...args: any[]): EventAdapter }; options: any; @@ -244,6 +249,7 @@ export class Session { token: this.options.token, intents: this.options.intents, }, + makePresence: this.options.precense }; } @@ -341,39 +347,43 @@ export class Session { status: status.status, since: null, afk: false, - activities: status.activities.map(activity => { - return { - name: activity.name, - type: activity.type, - url: activity.url, - created_at: activity.createdAt, - timestamps: activity.timestamps, - application_id: this.applicationId, - details: activity.details, - state: activity.state, - emoji: activity.emoji && { - name: activity.emoji.name, - id: activity.emoji.id, - animated: activity.emoji.animated, - }, - party: activity.party, - assets: activity.assets && - { - large_image: activity.assets.largeImage, - large_text: activity.assets.largeText, - small_image: activity.assets.smallImage, - small_text: activity.assets.smallText, - }, - secrets: activity.secrets, - instance: activity.instance, - flags: activity.flags, - buttons: activity.buttons, - }; - }), + activities: this.makePresenceActivites(status.activities), }, }, prio); } + private makePresenceActivites(act: Activities[]): Record[] { + return act.map(activity => { + return { + name: activity.name, + type: activity.type, + url: activity.url, + created_at: activity.createdAt, + timestamps: activity.timestamps, + application_id: this.applicationId, + details: activity.details, + state: activity.state, + emoji: activity.emoji && { + name: activity.emoji.name, + id: activity.emoji.id, + animated: activity.emoji.animated, + }, + party: activity.party, + assets: activity.assets && + { + large_image: activity.assets.largeImage, + large_text: activity.assets.largeText, + small_image: activity.assets.smallImage, + small_text: activity.assets.smallText, + }, + secrets: activity.secrets, + instance: activity.instance, + flags: activity.flags, + buttons: activity.buttons, + }; + }); + } + // END PRESENCE // INTERACTIONS diff --git a/packages/ws/src/services/shard-manager.ts b/packages/ws/src/services/shard-manager.ts index c833181..0a54342 100644 --- a/packages/ws/src/services/shard-manager.ts +++ b/packages/ws/src/services/shard-manager.ts @@ -102,6 +102,8 @@ export class ShardManager { config: this.options.config, + presence: this.options.makePresence, + handlePayloads: async (shard, payload) => { await this.options.handleDiscordPayload(shard, payload); // remove await? }, diff --git a/packages/ws/src/services/shard.ts b/packages/ws/src/services/shard.ts index 37407e3..0f9418f 100644 --- a/packages/ws/src/services/shard.ts +++ b/packages/ws/src/services/shard.ts @@ -118,6 +118,7 @@ export class Shard { }, intents: this.options.config.intents, shard: [this.options.id, this.options.gateway.shards], + presence: this.options.presence } }); } diff --git a/packages/ws/src/types.ts b/packages/ws/src/types.ts index fca384b..c39c570 100644 --- a/packages/ws/src/types.ts +++ b/packages/ws/src/types.ts @@ -1,4 +1,4 @@ -import type { DiscordGatewayPayload, DiscordGetGatewayBot, GatewayIntents } from '@biscuitland/api-types'; +import type { DiscordGatewayPayload, DiscordGetGatewayBot, GatewayIntents, DiscordActivity } from '@biscuitland/api-types'; import type { ShardManager } from './services/shard-manager'; import type { Shard } from './services/shard'; @@ -23,6 +23,14 @@ export interface SMO { token: string; }; + /** Presence on identify */ + makePresence?: { + status: 'idle' | 'dnd' | 'online' | 'offline'; + afk: boolean; + since: number | null; + activities: DiscordActivity[]; + }; + /** Options shards */ shards: ShardManagerShardsOptions; } @@ -81,6 +89,9 @@ export interface SO { token: string; }; + /** Presence on identify */ + presence?: ShardManagerOptions['makePresence']; + /** Function for interpretation of messages from discord */ handlePayloads: (shard: Shard, data: DiscordGatewayPayload) => Promise;