diff --git a/src/util/entities/Channel.ts b/src/util/entities/Channel.ts
index 9ce04848..e23d93db 100644
--- a/src/util/entities/Channel.ts
+++ b/src/util/entities/Channel.ts
@@ -482,3 +482,27 @@ export enum ChannelPermissionOverwriteType {
member = 1,
group = 2,
}
+
+export function isTextChannel(type: ChannelType): boolean {
+ switch (type) {
+ case ChannelType.GUILD_STORE:
+ case ChannelType.GUILD_VOICE:
+ case ChannelType.GUILD_STAGE_VOICE:
+ case ChannelType.GUILD_CATEGORY:
+ case ChannelType.GUILD_FORUM:
+ case ChannelType.DIRECTORY:
+ throw new HTTPError("not a text channel", 400);
+ case ChannelType.DM:
+ case ChannelType.GROUP_DM:
+ case ChannelType.GUILD_NEWS:
+ case ChannelType.GUILD_NEWS_THREAD:
+ case ChannelType.GUILD_PUBLIC_THREAD:
+ case ChannelType.GUILD_PRIVATE_THREAD:
+ case ChannelType.GUILD_TEXT:
+ case ChannelType.ENCRYPTED:
+ case ChannelType.ENCRYPTED_THREAD:
+ return true;
+ default:
+ throw new HTTPError("unimplemented", 400);
+ }
+}
diff --git a/src/util/entities/Guild.ts b/src/util/entities/Guild.ts
index e8454986..e2b3e1bd 100644
--- a/src/util/entities/Guild.ts
+++ b/src/util/entities/Guild.ts
@@ -24,7 +24,7 @@ import {
OneToMany,
RelationId,
} from "typeorm";
-import { Config, handleFile, Snowflake } from "..";
+import { Config, GuildWelcomeScreen, handleFile, Snowflake } from "..";
import { Ban } from "./Ban";
import { BaseClass } from "./BaseClass";
import { Channel } from "./Channel";
@@ -77,7 +77,7 @@ export class Guild extends BaseClass {
afk_channel?: Channel;
@Column({ nullable: true })
- afk_timeout?: number = Config.get().defaults.guild.afkTimeout;
+ afk_timeout?: number;
// * commented out -> use owner instead
// application id of the guild creator if it is bot-created
@@ -95,8 +95,7 @@ export class Guild extends BaseClass {
banner?: string;
@Column({ nullable: true })
- default_message_notifications?: number =
- Config.get().defaults.guild.defaultMessageNotifications;
+ default_message_notifications?: number;
@Column({ nullable: true })
description?: string;
@@ -105,11 +104,10 @@ export class Guild extends BaseClass {
discovery_splash?: string;
@Column({ nullable: true })
- explicit_content_filter?: number =
- Config.get().defaults.guild.explicitContentFilter;
+ explicit_content_filter?: number;
@Column({ type: "simple-array" })
- features: string[] = Config.get().guild.defaultFeatures || []; //TODO use enum
+ features: string[] = []; //TODO use enum
//TODO: https://discord.com/developers/docs/resources/guild#guild-object-guild-features
@Column({ nullable: true })
@@ -122,14 +120,13 @@ export class Guild extends BaseClass {
large?: boolean = false;
@Column({ nullable: true })
- max_members?: number = Config.get().limits.guild.maxMembers;
+ max_members?: number;
@Column({ nullable: true })
- max_presences?: number = Config.get().defaults.guild.maxPresences;
+ max_presences?: number;
@Column({ nullable: true })
- max_video_channel_users?: number =
- Config.get().defaults.guild.maxVideoChannelUsers;
+ max_video_channel_users?: number;
@Column({ nullable: true })
member_count?: number;
@@ -247,7 +244,7 @@ export class Guild extends BaseClass {
rules_channel?: string;
@Column({ nullable: true })
- region?: string = Config.get().regions.default;
+ region?: string;
@Column({ nullable: true })
splash?: string;
@@ -270,16 +267,7 @@ export class Guild extends BaseClass {
verification_level?: number;
@Column({ type: "simple-json" })
- welcome_screen: {
- enabled: boolean;
- description: string;
- welcome_channels: {
- description: string;
- emoji_id?: string;
- emoji_name?: string;
- channel_id: string;
- }[];
- };
+ welcome_screen: GuildWelcomeScreen;
@Column({ nullable: true })
@RelationId((guild: Guild) => guild.widget_channel)
@@ -336,6 +324,18 @@ export class Guild extends BaseClass {
description: "Fill in your description",
welcome_channels: [],
},
+
+ afk_timeout: Config.get().defaults.guild.afkTimeout,
+ default_message_notifications:
+ Config.get().defaults.guild.defaultMessageNotifications,
+ explicit_content_filter:
+ Config.get().defaults.guild.explicitContentFilter,
+ features: Config.get().guild.defaultFeatures,
+ max_members: Config.get().limits.guild.maxMembers,
+ max_presences: Config.get().defaults.guild.maxPresences,
+ max_video_channel_users:
+ Config.get().defaults.guild.maxVideoChannelUsers,
+ region: Config.get().regions.default,
}).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/entities/User.ts b/src/util/entities/User.ts
index df9af328..3e72c3c9 100644
--- a/src/util/entities/User.ts
+++ b/src/util/entities/User.ts
@@ -26,11 +26,11 @@ import {
OneToOne,
} from "typeorm";
import {
- adjustEmail,
Config,
Email,
FieldErrors,
Snowflake,
+ adjustEmail,
trimSpecial,
} from "..";
import { BitField } from "../util/BitField";
@@ -86,8 +86,7 @@ export const PrivateUserProjection = [
// Private user data that should never get sent to the client
export type PublicUser = Pick<User, PublicUserKeys>;
-
-export type UserPublic = Pick<User, PublicUserKeys>;
+export type PrivateUser = Pick<User, PrivateUserKeys>;
export interface UserPrivate extends Pick<User, PrivateUserKeys> {
locale: string;
@@ -110,8 +109,10 @@ export class User extends BaseClass {
@Column({ nullable: true })
banner?: string; // hash of the user banner
+ // TODO: Separate `User` and `UserProfile` models
+ // puyo: changed from [number, number] because it breaks openapi
@Column({ nullable: true, type: "simple-array" })
- theme_colors?: [number, number]; // TODO: Separate `User` and `UserProfile` models
+ theme_colors?: number[];
@Column({ nullable: true })
pronouns?: string;
@@ -126,10 +127,10 @@ export class User extends BaseClass {
mobile: boolean = false; // if the user has mobile app installed
@Column()
- premium: boolean = Config.get().defaults.user.premium ?? false; // if user bought individual premium
+ premium: boolean; // if user bought individual premium
@Column()
- premium_type: number = Config.get().defaults.user.premiumType ?? 0; // individual premium level
+ premium_type: number; // individual premium level
@Column()
bot: boolean = false; // if user is bot
@@ -156,13 +157,13 @@ export class User extends BaseClass {
totp_last_ticket?: string = "";
@Column()
- created_at: Date = new Date(); // registration date
+ created_at: Date; // registration date
@Column({ nullable: true })
premium_since: Date; // premium date
@Column({ select: false })
- verified: boolean = Config.get().defaults.user.verified ?? true; // email is verified
+ verified: boolean; // email is verified
@Column()
disabled: boolean = false; // if the account is disabled
@@ -381,11 +382,16 @@ export class User extends BaseClass {
valid_tokens_since: new Date(),
},
extended_settings: "{}",
+ settings: settings,
+
premium_since: Config.get().defaults.user.premium
? new Date()
: undefined,
- settings: settings,
rights: Config.get().register.defaultRights,
+ premium: Config.get().defaults.user.premium ?? false,
+ premium_type: Config.get().defaults.user.premiumType ?? 0,
+ verified: Config.get().defaults.user.verified ?? true,
+ created_at: new Date(),
});
user.validate();
|