diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | dist/index.d.ts | 3 | ||||
-rw-r--r-- | src/Schema/Activity.ts | 41 | ||||
-rw-r--r-- | src/Schema/Emoji.ts | 5 | ||||
-rw-r--r-- | src/Schema/Identify.ts | 17 | ||||
-rw-r--r-- | src/index.ts | 9 | ||||
-rw-r--r-- | src/models/Channel.ts | 19 | ||||
-rw-r--r-- | src/models/Emoji.ts | 12 | ||||
-rw-r--r-- | src/models/Guild.ts | 53 | ||||
-rw-r--r-- | src/models/Guild.ts.OLD | 38 | ||||
-rw-r--r-- | src/models/Invite.ts | 31 | ||||
-rw-r--r-- | src/models/Member.ts | 14 | ||||
-rw-r--r-- | src/models/Role.ts | 9 | ||||
-rw-r--r-- | src/models/User.ts | 62 |
14 files changed, 312 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore index adb2c197..92bc6247 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,4 @@ typings/ # TernJS port file .tern-port +.DS_Store diff --git a/dist/index.d.ts b/dist/index.d.ts index 46dcff5a..45a3252d 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,5 +1,6 @@ import { checkToken } from "./checkToken"; import Config, { DefaultOptions } from "./Config"; -import db from "./Database"; +import { db } from "discord-server-util"; + import * as Constants from "./Constants"; export { checkToken, Config, Constants, db, DefaultOptions }; diff --git a/src/Schema/Activity.ts b/src/Schema/Activity.ts new file mode 100644 index 00000000..e502cebd --- /dev/null +++ b/src/Schema/Activity.ts @@ -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 +}; diff --git a/src/Schema/Emoji.ts b/src/Schema/Emoji.ts new file mode 100644 index 00000000..ebb9afdd --- /dev/null +++ b/src/Schema/Emoji.ts @@ -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 +}; diff --git a/src/Schema/Identify.ts b/src/Schema/Identify.ts new file mode 100644 index 00000000..8775fac3 --- /dev/null +++ b/src/Schema/Identify.ts @@ -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, +}; diff --git a/src/index.ts b/src/index.ts index 69c592f9..1d501baf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,5 +2,12 @@ import { checkToken } from "./checkToken"; import Config, { DefaultOptions } from "./Config"; import db from "./Database"; 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 }; diff --git a/src/models/Channel.ts b/src/models/Channel.ts new file mode 100644 index 00000000..81fec185 --- /dev/null +++ b/src/models/Channel.ts @@ -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; + }[]; +} diff --git a/src/models/Emoji.ts b/src/models/Emoji.ts new file mode 100644 index 00000000..1facc252 --- /dev/null +++ b/src/models/Emoji.ts @@ -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: []; +} diff --git a/src/models/Guild.ts b/src/models/Guild.ts new file mode 100644 index 00000000..3d84a9c8 --- /dev/null +++ b/src/models/Guild.ts @@ -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 +} diff --git a/src/models/Guild.ts.OLD b/src/models/Guild.ts.OLD new file mode 100644 index 00000000..a4e7460f --- /dev/null +++ b/src/models/Guild.ts.OLD @@ -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 +} diff --git a/src/models/Invite.ts b/src/models/Invite.ts new file mode 100644 index 00000000..900eb4a1 --- /dev/null +++ b/src/models/Invite.ts @@ -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; +} diff --git a/src/models/Member.ts b/src/models/Member.ts new file mode 100644 index 00000000..c0c5516d --- /dev/null +++ b/src/models/Member.ts @@ -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; +} diff --git a/src/models/Role.ts b/src/models/Role.ts new file mode 100644 index 00000000..44ddfea1 --- /dev/null +++ b/src/models/Role.ts @@ -0,0 +1,9 @@ +export interface Role { + color: number; + hoist: boolean; + managed: boolean; + mentionable: boolean; + name: string; + permissions: bigint; + position: number; +} diff --git a/src/models/User.ts b/src/models/User.ts new file mode 100644 index 00000000..4cef39c6 --- /dev/null +++ b/src/models/User.ts @@ -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 +} |