Move Models/Schemas to server-util

This commit is contained in:
Flam3rboy 2021-02-05 21:55:07 +01:00
parent 7e3d6d1d9d
commit 9b7f4e2b66
14 changed files with 312 additions and 2 deletions

1
.gitignore vendored
View File

@ -101,3 +101,4 @@ typings/
# TernJS port file # TernJS port file
.tern-port .tern-port
.DS_Store

3
dist/index.d.ts vendored
View File

@ -1,5 +1,6 @@
import { checkToken } from "./checkToken"; import { checkToken } from "./checkToken";
import Config, { DefaultOptions } from "./Config"; import Config, { DefaultOptions } from "./Config";
import db from "./Database"; import { db } from "discord-server-util";
import * as Constants from "./Constants"; import * as Constants from "./Constants";
export { checkToken, Config, Constants, db, DefaultOptions }; export { checkToken, Config, Constants, db, DefaultOptions };

41
src/Schema/Activity.ts Normal file
View File

@ -0,0 +1,41 @@
import { EmojiSchema } from "./Emoji";
export const ActivitySchema = {
afk: Boolean,
status: String,
$activities: [
{
name: String, // the activity's name
type: Number, // activity type // TODO: check if its between range 0-5
$url: String, // stream url, is validated when type is 1
$created_at: Number, // unix timestamp of when the activity was added to the user's session
$timestamps: {
// unix timestamps for start and/or end of the game
start: Number,
end: Number,
},
$application_id: BigInt, // application id for the game
$details: String,
$State: String,
$emoji: EmojiSchema,
$party: {
$id: String,
$size: [Number], // used to show the party's current and maximum size // TODO: array length 2
},
$assets: {
$large_image: String, // the id for a large asset of the activity, usually a snowflake
$large_text: String, // text displayed when hovering over the large image of the activity
$small_image: String, // the id for a small asset of the activity, usually a snowflake
$small_text: String, // text displayed when hovering over the small image of the activity
},
$secrets: {
$join: String, // the secret for joining a party
$spectate: String, // the secret for spectating a game
$match: String, // the secret for a specific instanced match
},
$instance: Boolean,
flags: BigInt, // activity flags OR d together, describes what the payload includes
},
],
$since: Number, // unix time (in milliseconds) of when the client went idle, or null if the client is not idle
};

5
src/Schema/Emoji.ts Normal file
View File

@ -0,0 +1,5 @@
export const EmojiSchema = {
name: String, // the name of the emoji
id: BigInt, // the id of the emoji
animated: Boolean, // whether this emoji is animated
};

17
src/Schema/Identify.ts Normal file
View File

@ -0,0 +1,17 @@
import { ActivitySchema } from "./Activity";
export const IdentifySchema = {
token: String,
properties: {
// bruh discord really uses $ in the property key, so we need to double prefix it, because instanceOf treats $ (prefix) as a optional key
$$os: String,
$$browser: String,
$$device: String,
},
intents: BigInt, // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt
$presence: ActivitySchema,
$compress: Boolean,
$large_threshold: Number,
$shard: [Number],
$guild_subscriptions: Boolean,
};

View File

@ -2,5 +2,12 @@ import { checkToken } from "./checkToken";
import Config, { DefaultOptions } from "./Config"; import Config, { DefaultOptions } from "./Config";
import db from "./Database"; import db from "./Database";
import * as Constants from "./Constants"; import * as Constants from "./Constants";
import { Channel } from "./models/Channel";
import { Emoji } from "./models/Emoji";
import { Guild } from "./models/Guild";
import { Invite } from "./models/Invite";
import { Member } from "./models/Member";
import { Role } from "./models/Role";
import { User } from "./models/User";
export { checkToken, Config, Constants, db, DefaultOptions }; export { checkToken, Config, Constants, db, DefaultOptions, Channel, Emoji, Guild, Invite, Member, Role, User };

19
src/models/Channel.ts Normal file
View File

@ -0,0 +1,19 @@
export interface Channel {
id: bigint;
guild_id: bigint;
last_message_id: string;
last_pin_timestamp: string;
name: string;
nsfw: boolean;
parent_id: bigint;
position: number;
rate_limit_per_user: number;
topic: string | null;
type: number;
permission_overwrites: {
allow: bigint;
deny: bigint;
id: bigint;
type: number;
}[];
}

12
src/models/Emoji.ts Normal file
View File

@ -0,0 +1,12 @@
export interface Emoji {
allNamesString: string; // e.g. :thonk:
animated: boolean;
available: boolean;
guildId: bigint;
id: bigint;
managed: boolean;
name: string;
require_colons: boolean;
url: string;
roles: [];
}

53
src/models/Guild.ts Normal file
View File

@ -0,0 +1,53 @@
import { Channel } from "./Channel";
import { Emoji } from "./Emoji";
import { Member } from "./Member";
import { Role } from "./Role";
export interface Guild {
id: bigint;
name: string;
icon: string;
icon_hash: string;
splash: string;
discovery_splash: string;
owner: boolean;
owner_id: bigint;
permissions: string;
region: string;
afk_channel_id: bigint;
afk_timeout: number;
widget_enabled: boolean;
widget_channel_id: bigint;
verification_level: number;
default_message_notifications: number;
explicit_content_filter: number;
roles: Role[];
emojis: Emoji[];
features: [];
mfa_level: number;
application_id: bigint;
system_channel_id: bigint;
system_channel_flags: number;
rules_channel_id: bigint;
joined_at: number;
large: boolean;
unavailable: boolean;
member_count: number;
voice_states: []; // ! tf is this
members: Member[];
channels: Channel[];
presences: []; // TODO: add model
max_presences: number;
max_members: number;
vanity_url_code: string;
description: string;
banner: string;
premium_tier: number;
premium_subscription_count: number;
preferred_locale: string;
public_updates_channel_id: bigint;
max_video_channel_users: number;
approximate_member_count: number;
approximate_presence_count: number;
welcome_screen: []; // ! what is this
}

38
src/models/Guild.ts.OLD Normal file
View File

@ -0,0 +1,38 @@
export interface Guild {
id: bigint;
name: string;
icon: string; // e.g. "28776e7ad42922582be25bb06cdc5b53"
icon_hash: string;
afk_channel_id: bigint;
afk_timeout: number;
application_id: bigint;
banner: string; // id
description: string;
explicit_content_filter: number;
features: string[];
/* guild_hashes: // ? what is this
channels: {hash: "uZsNP+TWAFY", omitted: false}
metadata: {hash: "JCboqYj68bQ", omitted: false}
roles: {hash: "1d7EJBRgVqg", omitted: false}
version: 1
*/
joined_at: string; // user specific, Date Iso: "2021-01-23T19:01:23.126002+00:00"
large: boolean;
lazy: boolean; // ? what is this
max_members: number; // e.g. default 100.000
max_video_channel_users: number; // ? default: 25, is this max 25 streaming or watching
member_count: number; // current member count
mfa_level: number;
owner_id: bigint;
preferred_locale: string; // only partnered/verified guilds can choose this
premium_subscription_count: number; // number of boosts
premium_tier: number; // ? what is this
public_updates_channel_id: bigint; //
rules_channel_id: bigint;
splash: string; // e.g. "32bec3d01f1dc90933cbb0bd75d333b0"
system_channel_flags: number;
system_channel_id: bigint;
vanity_url_code: string;
verification_level: number;
threads: []; // ? not yet finished
}

31
src/models/Invite.ts Normal file
View File

@ -0,0 +1,31 @@
export interface Invite {
code: string;
guild: {
id: bigint;
name: string;
splash: string;
description: string;
icon: string;
features: Object;
verification_level: number;
};
channel: {
id: bigint;
name: string;
type: number;
};
inviter: {
id: bigint;
username: string;
avatar: string;
discriminator: number;
};
target_user: {
id: bigint;
username: string;
avatar: string;
discriminator: number;
};
target_user_type: number;
}

14
src/models/Member.ts Normal file
View File

@ -0,0 +1,14 @@
import { Role } from "./Role";
import { User } from "./User";
export interface Member {
user: User;
nick: string;
roles: Role[];
joined_at: number;
premium_since: number;
deaf: boolean;
mute: boolean;
pending: boolean;
permissions: string;
}

9
src/models/Role.ts Normal file
View File

@ -0,0 +1,9 @@
export interface Role {
color: number;
hoist: boolean;
managed: boolean;
mentionable: boolean;
name: string;
permissions: bigint;
position: number;
}

62
src/models/User.ts Normal file
View File

@ -0,0 +1,62 @@
import { UserFlags } from "../util/UserFlags";
export interface User {
id: bigint;
username: string;
discriminator: string;
avatar: string | null;
bot: boolean;
system: boolean;
mfa_enabled: boolean;
created_at: number;
verified: boolean;
email: string;
flags: bigint; // TODO: automatically convert BigInt to BitField of UserFlags
hash: string; // hash of the password, salt is saved in password (bcrypt)
valid_tokens_since: number; // all tokens with a previous issue date are invalid
user_settings: UserSettings;
}
export interface UserSettings {
afk_timeout: number;
allow_accessibility_detection: boolean;
animate_emoji: boolean;
animate_stickers: number;
contact_sync_enabled: boolean;
convert_emoticons: boolean;
custom_status: {
emoji_id: bigint | null;
emoji_name: string | null;
expires_at: number | null;
text: string | null;
};
default_guilds_restricted: boolean;
detect_platform_accounts: boolean;
developer_mode: boolean;
disable_games_tab: boolean;
enable_tts_command: boolean;
explicit_content_filter: number;
friend_source_flags: { all: boolean };
gif_auto_play: boolean;
guild_folders: // every top guild is displayed as a "folder"
{
color: number;
guild_ids: bigint[];
id: number;
name: string;
}[];
guild_positions: bigint[]; // guild ids ordered by position
inline_attachment_media: boolean;
inline_embed_media: boolean;
locale: string; // en_US
message_display_compact: boolean;
native_phone_integration_enabled: boolean;
render_embeds: boolean;
render_reactions: boolean;
restricted_guilds: bigint[];
show_current_game: boolean;
status: "online" | "offline" | "dnd" | "idle";
stream_notifications_enabled: boolean;
theme: "dark" | "white"; // dark
timezone_offset: number; // e.g -60
}