summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/util/entities/Guild.ts48
-rw-r--r--src/util/util/Config.ts9
2 files changed, 27 insertions, 30 deletions
diff --git a/src/util/entities/Guild.ts b/src/util/entities/Guild.ts
index 676d851f..c86a5787 100644
--- a/src/util/entities/Guild.ts
+++ b/src/util/entities/Guild.ts
@@ -61,7 +61,7 @@ export class Guild extends BaseClass {
 	afk_channel?: Channel;
 
 	@Column({ nullable: true })
-	afk_timeout?: number;
+	afk_timeout?: number = Config.get().defaults.guild.afkTimeout;
 
 	// * commented out -> use owner instead
 	// application id of the guild creator if it is bot-created
@@ -79,7 +79,7 @@ export class Guild extends BaseClass {
 	banner?: string;
 
 	@Column({ nullable: true })
-	default_message_notifications?: number;
+	default_message_notifications?: number = Config.get().defaults.guild.defaultMessageNotifications;
 
 	@Column({ nullable: true })
 	description?: string;
@@ -88,10 +88,10 @@ export class Guild extends BaseClass {
 	discovery_splash?: string;
 
 	@Column({ nullable: true })
-	explicit_content_filter?: number;
+	explicit_content_filter?: number = Config.get().defaults.guild.explicitContentFilter;
 
 	@Column({ type: "simple-array" })
-	features: string[]; //TODO use enum
+	features: string[] = Config.get().guild.defaultFeatures || []; //TODO use enum
 	//TODO: https://discord.com/developers/docs/resources/guild#guild-object-guild-features
 
 	@Column({ nullable: true })
@@ -100,17 +100,17 @@ export class Guild extends BaseClass {
 	@Column({ nullable: true })
 	icon?: string;
 
-	@Column({ nullable: true })
-	large?: boolean;
+	@Column()
+	large?: boolean = false;
 
 	@Column({ nullable: true })
-	max_members?: number; // e.g. default 100.000
+	max_members?: number = Config.get().limits.guild.maxMembers;
 
 	@Column({ nullable: true })
-	max_presences?: number;
+	max_presences?: number = Config.get().defaults.guild.maxPresences;
 
 	@Column({ nullable: true })
-	max_video_channel_users?: number;
+	max_video_channel_users?: number = Config.get().defaults.guild.maxVideoChannelUsers;
 
 	@Column({ nullable: true })
 	member_count?: number;
@@ -208,7 +208,7 @@ export class Guild extends BaseClass {
 	@Column({ nullable: true })
 	premium_subscription_count?: number;
 
-	@Column({ nullable: true })
+	@Column()
 	premium_tier?: number; // crowd premium level
 
 	@Column({ nullable: true })
@@ -228,7 +228,7 @@ export class Guild extends BaseClass {
 	rules_channel?: string;
 
 	@Column({ nullable: true })
-	region?: string;
+	region?: string = Config.get().regions.default;
 
 	@Column({ nullable: true })
 	splash?: string;
@@ -244,8 +244,8 @@ export class Guild extends BaseClass {
 	@Column({ nullable: true })
 	system_channel_flags?: number;
 
-	@Column({ nullable: true })
-	unavailable?: boolean;
+	@Column()
+	unavailable: boolean = false;
 
 	@Column({ nullable: true })
 	verification_level?: number;
@@ -270,14 +270,14 @@ export class Guild extends BaseClass {
 	@ManyToOne(() => Channel)
 	widget_channel?: Channel;
 
-	@Column({ nullable: true })
-	widget_enabled?: boolean;
+	@Column()
+	widget_enabled: boolean = true;
 
 	@Column({ nullable: true })
 	nsfw_level?: number;
 
 	@Column()
-	nsfw: boolean;
+	nsfw: boolean = false;
 
 	// TODO: nested guilds
 	@Column({ nullable: true })
@@ -288,7 +288,7 @@ export class Guild extends BaseClass {
 
 	//new guild settings, 11/08/2022:
 	@Column({ nullable: true })
-	premium_progress_bar_enabled: boolean;
+	premium_progress_bar_enabled: boolean = false;
 
 	static async createGuild(body: {
 		name?: string;
@@ -299,19 +299,10 @@ export class Guild extends BaseClass {
 		const guild_id = Snowflake.generate();
 
 		const guild = await Guild.create({
+			id: guild_id,
 			name: body.name || "Fosscord",
 			icon: await handleFile(`/icons/${guild_id}`, body.icon as string),
-			region: Config.get().regions.default,
 			owner_id: body.owner_id, // TODO: need to figure out a way for ownerless guilds and multiply-owned guilds
-			afk_timeout: 300,
-			default_message_notifications: 1, // defaults effect: setting the push default at mentions-only will save a lot
-			explicit_content_filter: 0,
-			features: Config.get().guild.defaultFeatures || [],
-			primary_category_id: undefined,
-			id: guild_id,
-			max_members: 250000,
-			max_presences: 250000,
-			max_video_channel_users: 200,
 			presence_count: 0,
 			member_count: 0, // will automatically be increased by addMember()
 			mfa_level: 0,
@@ -319,8 +310,6 @@ export class Guild extends BaseClass {
 			premium_subscription_count: 0,
 			premium_tier: 0,
 			system_channel_flags: 4, // defaults effect: suppress the setup tips to save performance
-			unavailable: false,
-			nsfw: false,
 			nsfw_level: 0,
 			verification_level: 0,
 			welcome_screen: {
@@ -328,7 +317,6 @@ export class Guild extends BaseClass {
 				description: "Fill in your description",
 				welcome_channels: [],
 			},
-			widget_enabled: true, // NB: don't set it as false to prevent artificial restrictions
 		}).save();
 
 		// we have to create the role _after_ the guild because else we would get a "SQLITE_CONSTRAINT: FOREIGN KEY constraint failed" error
diff --git a/src/util/util/Config.ts b/src/util/util/Config.ts
index f5758212..e3ac4177 100644
--- a/src/util/util/Config.ts
+++ b/src/util/util/Config.ts
@@ -39,6 +39,15 @@ export const Config = {
 		return this.set(config);
 	},
 	get: function get() {
+		if (!config) {
+			// If we haven't initialised the config yet, return default config.
+			// Typeorm instantiates each entity once when initising database,
+			// which means when we use config values as default values in entity classes,
+			// the config isn't initialised yet and would throw an error about the config being undefined.
+
+			return new ConfigValue();
+		}
+
 		return config;
 	},
 	set: function set(val: Partial<ConfigValue>) {