diff --git a/src/util/dtos/ReadyGuildDTO.ts b/src/util/dtos/ReadyGuildDTO.ts
new file mode 100644
index 00000000..0cf30331
--- /dev/null
+++ b/src/util/dtos/ReadyGuildDTO.ts
@@ -0,0 +1,153 @@
+import { Channel, Emoji, Guild, Member, Role, Sticker } from "../entities";
+
+export interface IReadyGuildDTO {
+ application_command_counts?: { 1: number; 2: number; 3: number }; // ????????????
+ channels: Channel[];
+ data_mode: string; // what is this
+ emojis: Emoji[];
+ guild_scheduled_events: any[];
+ id: string;
+ large: boolean | undefined;
+ lazy: boolean;
+ member_count: number | undefined;
+ members: Member[];
+ premium_subscription_count: number | undefined;
+ properties: {
+ name: string;
+ description?: string | null;
+ icon?: string | null;
+ splash?: string | null;
+ banner?: string | null;
+ features: string[];
+ preferred_locale?: string | null;
+ owner_id?: string | null;
+ application_id?: string | null;
+ afk_channel_id?: string | null;
+ afk_timeout: number | undefined;
+ system_channel_id?: string | null;
+ verification_level: number | undefined;
+ explicit_content_filter: number | undefined;
+ default_message_notifications: number | undefined;
+ mfa_level: number | undefined;
+ vanity_url_code?: string | null;
+ premium_tier: number | undefined;
+ premium_progress_bar_enabled: boolean;
+ system_channel_flags: number | undefined;
+ discovery_splash?: string | null;
+ rules_channel_id?: string | null;
+ public_updates_channel_id?: string | null;
+ max_video_channel_users: number | undefined;
+ max_members: number | undefined;
+ nsfw_level: number | undefined;
+ hub_type?: any | null; // ????
+ };
+ roles: Role[];
+ stage_instances: any[];
+ stickers: Sticker[];
+ threads: any[];
+ version: string;
+}
+
+export class ReadyGuildDTO implements IReadyGuildDTO {
+ application_command_counts?: { 1: number; 2: number; 3: number }; // ????????????
+ channels: Channel[];
+ data_mode: string; // what is this
+ emojis: Emoji[];
+ guild_scheduled_events: any[];
+ id: string;
+ large: boolean | undefined;
+ lazy: boolean;
+ member_count: number | undefined;
+ members: Member[];
+ premium_subscription_count: number | undefined;
+ properties: {
+ name: string;
+ description?: string | null;
+ icon?: string | null;
+ splash?: string | null;
+ banner?: string | null;
+ features: string[];
+ preferred_locale?: string | null;
+ owner_id?: string | null;
+ application_id?: string | null;
+ afk_channel_id?: string | null;
+ afk_timeout: number | undefined;
+ system_channel_id?: string | null;
+ verification_level: number | undefined;
+ explicit_content_filter: number | undefined;
+ default_message_notifications: number | undefined;
+ mfa_level: number | undefined;
+ vanity_url_code?: string | null;
+ premium_tier: number | undefined;
+ premium_progress_bar_enabled: boolean;
+ system_channel_flags: number | undefined;
+ discovery_splash?: string | null;
+ rules_channel_id?: string | null;
+ public_updates_channel_id?: string | null;
+ max_video_channel_users: number | undefined;
+ max_members: number | undefined;
+ nsfw_level: number | undefined;
+ hub_type?: any | null; // ????
+ };
+ roles: Role[];
+ stage_instances: any[];
+ stickers: Sticker[];
+ threads: any[];
+ version: string;
+
+ constructor(guild: Guild) {
+ this.application_command_counts = {
+ 1: 5,
+ 2: 2,
+ 3: 2,
+ }; // ?????
+ this.channels = guild.channels;
+ this.data_mode = "full";
+ this.emojis = guild.emojis;
+ this.guild_scheduled_events = [];
+ this.id = guild.id;
+ this.large = guild.large;
+ this.lazy = true; // ??????????
+ this.member_count = guild.member_count;
+ this.members = guild.members;
+ this.premium_subscription_count = guild.premium_subscription_count;
+ this.properties = {
+ name: guild.name,
+ description: guild.description,
+ icon: guild.icon,
+ splash: guild.splash,
+ banner: guild.banner,
+ features: guild.features,
+ preferred_locale: guild.preferred_locale,
+ owner_id: guild.owner_id,
+ application_id: null, // ?????
+ afk_channel_id: guild.afk_channel_id,
+ afk_timeout: guild.afk_timeout,
+ system_channel_id: guild.system_channel_id,
+ verification_level: guild.verification_level,
+ explicit_content_filter: guild.explicit_content_filter,
+ default_message_notifications: guild.default_message_notifications,
+ mfa_level: guild.mfa_level,
+ vanity_url_code: null, // ?????
+ premium_tier: guild.premium_tier,
+ premium_progress_bar_enabled: guild.premium_progress_bar_enabled,
+ system_channel_flags: guild.system_channel_flags,
+ discovery_splash: guild.discovery_splash,
+ rules_channel_id: guild.rules_channel_id,
+ public_updates_channel_id: guild.public_updates_channel_id,
+ max_video_channel_users: guild.max_video_channel_users,
+ max_members: guild.max_members,
+ nsfw_level: guild.nsfw_level,
+ hub_type: null,
+ };
+ this.roles = guild.roles;
+ this.stage_instances = [];
+ this.stickers = guild.stickers;
+ this.threads = [];
+ this.version = "1"; // ??????
+ }
+
+ toJSON() {
+ return this as IReadyGuildDTO;
+ }
+}
diff --git a/src/util/dtos/index.ts b/src/util/dtos/index.ts
index 0e8f8459..b25cac9c 100644
--- a/src/util/dtos/index.ts
+++ b/src/util/dtos/index.ts
@@ -1,2 +1,3 @@
export * from "./DmChannelDTO";
+export * from "./ReadyGuildDTO";
export * from "./UserDTO";
diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts
index 1c8bfbef..bffec326 100644
--- a/src/util/entities/Member.ts
+++ b/src/util/entities/Member.ts
@@ -29,6 +29,7 @@ import { Role } from "./Role";
import { BaseClassWithoutId } from "./BaseClass";
import { Ban, PublicGuildRelations } from ".";
import { DiscordApiErrors } from "../util/Constants";
+import { ReadyGuildDTO } from "../dtos";
export const MemberPrivateProjection: (keyof Member)[] = [
"id",
@@ -363,7 +364,7 @@ export class Member extends BaseClassWithoutId {
emitEvent({
event: "GUILD_CREATE",
data: {
- ...guild,
+ ...new ReadyGuildDTO(guild).toJSON(),
members: [...memberPreview, { ...member, user }],
member_count: memberCount + 1,
guild_hashes: {},
@@ -373,6 +374,7 @@ export class Member extends BaseClassWithoutId {
stage_instances: [],
threads: [],
embedded_activities: [],
+ voice_states: guild.voice_states
},
user_id,
} as GuildCreateEvent),
diff --git a/src/util/interfaces/Event.ts b/src/util/interfaces/Event.ts
index 36eedbfc..f5bccb2f 100644
--- a/src/util/interfaces/Event.ts
+++ b/src/util/interfaces/Event.ts
@@ -20,6 +20,7 @@ import {
Status,
Presence,
UserSettings,
+ IReadyGuildDTO,
} from "@fosscord/util";
export interface Event {
@@ -62,7 +63,7 @@ export interface ReadyEventData {
};
private_channels: Channel[]; // this will be empty for bots
session_id: string; // resuming
- guilds: Guild[];
+ guilds: IReadyGuildDTO[];
analytics_token?: string;
connected_accounts?: ConnectedAccount[];
consents?: {
@@ -155,7 +156,7 @@ export interface ChannelRecipientRemoveEvent extends Event {
export interface GuildCreateEvent extends Event {
event: "GUILD_CREATE";
- data: Guild & {
+ data: IReadyGuildDTO & {
joined_at: Date;
// TODO: add them to guild
guild_scheduled_events: never[];
diff --git a/src/util/schemas/IdentifySchema.ts b/src/util/schemas/IdentifySchema.ts
index 848ea0a6..0e44af38 100644
--- a/src/util/schemas/IdentifySchema.ts
+++ b/src/util/schemas/IdentifySchema.ts
@@ -44,6 +44,8 @@ export const IdentifySchema = {
$user_settings_version: undefined,
$useruser_guild_settings_version: undefined,
$private_channels_version: Number,
+ $guild_versions: Object,
+ $api_code_version: Number,
},
$clientState: {
$guildHashes: Object,
@@ -51,6 +53,8 @@ export const IdentifySchema = {
$readStateVersion: Number,
$useruserGuildSettingsVersion: undefined,
$userGuildSettingsVersion: undefined,
+ $guildVersions: Object,
+ $apiCodeVersion: Number,
},
$v: Number,
$version: Number,
@@ -96,6 +100,8 @@ export interface IdentifySchema {
user_settings_version?: number;
useruser_guild_settings_version?: number;
private_channels_version?: number;
+ guild_versions?: any;
+ api_code_version?: number;
};
clientState?: {
guildHashes?: any;
@@ -103,6 +109,8 @@ export interface IdentifySchema {
readStateVersion?: number;
userGuildSettingsVersion?: number;
useruserGuildSettingsVersion?: number;
+ guildVersions?: any;
+ apiCodeVersion?: number;
};
v?: number;
}
|