2022-07-09 20:46:26 +00:00

85 lines
2.6 KiB
TypeScript

import type {
ActivityTypes,
DiscordActivityButton,
DiscordActivitySecrets,
DiscordClientStatus,
DiscordPresenceUpdate,
} from "../../discordeno/mod.ts";
import type { Session } from "../Session.ts";
import { User } from "./User.ts";
import { Snowflake } from "../Snowflake.ts";
import type { ComponentEmoji } from "../Util.ts";
export interface ActivityAssets {
largeImage?: string;
largeText?: string;
smallImage?: string;
smallText?: string;
}
export interface Activities {
name: string;
type: ActivityTypes;
url?: string;
createdAt: number;
timestamps?: {
start?: number;
end?: number;
};
applicationId: Snowflake;
details?: string;
state?: string;
emoji?: ComponentEmoji;
party?: {
id?: string;
size?: number[];
};
assets?: ActivityAssets;
secrets?: DiscordActivitySecrets;
instance?: boolean;
flags?: number;
buttons?: DiscordActivityButton;
}
export class Presence {
constructor(session: Session, data: DiscordPresenceUpdate) {
this.session = session;
this.user = new User(this.session, data.user);
this.guildId = data.guild_id;
this.status = data.status;
this.activities = data.activities.map<Activities>((activity) =>
Object.create({
name: activity.name,
type: activity.type,
url: activity.url ? activity.url : undefined,
createdAt: activity.created_at,
timestamps: activity.timestamps,
applicationId: activity.application_id,
details: activity.details ? activity.details : undefined,
state: activity.state,
emoji: activity.emoji ? activity.emoji : undefined,
party: activity.party ? activity.party : undefined,
assets: activity.assets
? {
largeImage: activity.assets.large_image,
largeText: activity.assets.large_text,
smallImage: activity.assets.small_image,
smallText: activity.assets.small_text,
}
: null,
secrets: activity.secrets ? activity.secrets : undefined,
instance: !!activity.instance,
flags: activity.flags,
buttons: activity.buttons,
})
);
this.clientStatus = data.client_status;
}
session: Session;
user: User;
guildId: Snowflake;
status: string;
activities: Activities[];
clientStatus: DiscordClientStatus;
}