1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-09-20 09:41:35 +02:00

updated other models

This commit is contained in:
Flam3rboy 2021-02-11 20:44:12 +01:00
parent b601263099
commit 1f7ebe256e
13 changed files with 478 additions and 58 deletions

View File

@ -3,14 +3,50 @@ import Config, { DefaultOptions } from "./util/Config";
import db from "./util/Database";
import * as Constants from "./util/Constants";
import { Channel } from "./models/Channel";
import {
Channel,
ChannelType,
DMChannel,
GuildChannel,
ReadState,
TextBasedChannel,
TextChannel,
VoiceChannel,
} from "./models/Channel";
import { Emoji } from "./models/Emoji";
import { Guild } from "./models/Guild";
import { Event } from "./models/Event";
import { Invite } from "./models/Invite";
import { Member } from "./models/Member";
import { Member, MuteConfig, PublicMember, UserGuildSettings } from "./models/Member";
import { Role } from "./models/Role";
import { User } from "./models/User";
import { User, ConnectedAccount, PublicUser, Relationship, UserSettings } from "./models/User";
import { Activity, ActivityType, Presence } from "./models/Activity";
import {
ApplicationCommand,
ApplicationCommandInteractionData,
ApplicationCommandInteractionDataOption,
ApplicationCommandOption,
ApplicationCommandOptionChoice,
ApplicationCommandOptionType,
} from "./models/Application";
import { ApplicationCommandPayload, EVENT, Event, MessagePayload } from "./models/Event";
import {
Interaction,
InteractionApplicationCommandCallbackData,
InteractionResponseType,
InteractionType,
} from "./models/Interaction";
import {
AllowedMentions,
Attachment,
Embed,
EmbedImage,
Message,
MessageType,
PartialEmoji,
Reaction,
} from "./models/Message";
import { ClientStatus, Status } from "./models/Status";
import { VoiceState } from "./models/VoiceState";
import { trimSpecial } from "./util/String";
import { BitField } from "./util/BitField";
@ -26,19 +62,60 @@ export {
Config,
Constants,
db,
Activity,
ActivityType,
Presence,
BitField,
DefaultOptions,
Permissions,
MessageFlags,
UserFlags,
VoiceState,
Snowflake,
Intents,
Channel,
Event,
ChannelType,
DMChannel,
GuildChannel,
ReadState,
TextBasedChannel,
TextChannel,
VoiceChannel,
Emoji,
Guild,
Invite,
Member,
ClientStatus,
Status,
MuteConfig,
PublicMember,
UserGuildSettings,
Role,
User,
UserFlags,
UserSettings,
ConnectedAccount,
PublicUser,
Relationship,
EVENT,
Event,
MessageType,
Message,
MessageFlags,
MessagePayload,
AllowedMentions,
Attachment,
Embed,
EmbedImage,
PartialEmoji,
Reaction,
Interaction,
InteractionApplicationCommandCallbackData,
InteractionResponseType,
InteractionType,
ApplicationCommand,
ApplicationCommandPayload,
ApplicationCommandInteractionData,
ApplicationCommandInteractionDataOption,
ApplicationCommandOption,
ApplicationCommandOptionChoice,
ApplicationCommandOptionType,
};

54
src/models/Activity.ts Normal file
View File

@ -0,0 +1,54 @@
import { User } from "..";
import { ClientStatus, Status } from "./Status";
export interface Presence {
user: User;
guild_id: bigint;
status: Status;
activities: Activity[];
client_status: ClientStatus;
}
export interface Activity {
name: string;
type: ActivityType;
url?: string;
created_at: number;
timestamps?: {
start: number;
end: number;
}[];
application_id?: bigint;
details?: string;
state?: string;
emoji?: {
name: string;
id?: bigint;
amimated?: boolean;
};
party?: {
id?: string;
size?: [number, number];
};
assets?: {
large_image: string;
large_text: string;
small_image: string;
small_text: string;
};
secrets?: {
join?: string;
spectate?: string;
match?: string;
};
instance?: boolean;
flags?: bigint;
}
export enum ActivityType {
GAME = 0,
STREAMING = 1,
LISTENING = 2,
CUSTOM = 4,
COMPETING = 5,
}

44
src/models/Application.ts Normal file
View File

@ -0,0 +1,44 @@
export interface ApplicationCommand {
id: bigint;
application_id: bigint;
name: string;
description: string;
options?: ApplicationCommandOption[];
}
export interface ApplicationCommandOption {
type: ApplicationCommandOptionType;
name: string;
description: string;
required?: boolean;
choices?: ApplicationCommandOptionChoice[];
options?: ApplicationCommandOption[];
}
export interface ApplicationCommandOptionChoice {
name: string;
value: string | number;
}
export enum ApplicationCommandOptionType {
SUB_COMMAND = 1,
SUB_COMMAND_GROUP = 2,
STRING = 3,
INTEGER = 4,
BOOLEAN = 5,
USER = 6,
CHANNEL = 7,
ROLE = 8,
}
export interface ApplicationCommandInteractionData {
id: bigint;
name: string;
options?: ApplicationCommandInteractionDataOption[];
}
export interface ApplicationCommandInteractionDataOption {
name: string;
value?: any;
options?: ApplicationCommandInteractionDataOption[];
}

View File

@ -1,15 +1,27 @@
export interface Channel {
id: bigint;
guild_id: bigint;
last_message_id: string;
last_pin_timestamp: string;
created_at: number;
name: string;
nsfw: boolean;
parent_id: bigint;
position: number;
rate_limit_per_user: number;
topic: string | null;
type: number;
read_state: ReadState[];
}
export interface ReadState {
last_message_id: bigint;
last_pin_timestamp: number;
mention_count: number;
}
export interface TextBasedChannel {
messages: any[];
last_message_id?: bigint;
last_pin_timestamp?: number;
}
export interface GuildChannel extends Channel {
guild_id: bigint;
position: number;
parent_id?: bigint;
permission_overwrites: {
allow: bigint;
deny: bigint;
@ -17,3 +29,26 @@ export interface Channel {
type: number;
}[];
}
export interface VoiceChannel extends GuildChannel {}
export interface TextChannel extends GuildChannel, TextBasedChannel {
nsfw: boolean;
rate_limit_per_user: number;
topic?: string;
}
export interface DMChannel extends Channel, TextBasedChannel {
owner_id: bigint;
recipients: bigint[];
}
export enum ChannelType {
GUILD_TEXT = 0, // a text channel within a server
DM = 1, // a direct message between users
GUILD_VOICE = 2, // a voice channel within a server
GROUP_DM = 3, // a direct message between multiple users
GUILD_CATEGORY = 4, // an organizational category that contains up to 50 channels
GUILD_NEWS = 5, // a channel that users can follow and crosspost into their own server
GUILD_STORE = 6, // a channel in which game developers can sell their game on Discord
}

View File

@ -1,4 +1,4 @@
import { Channel } from "./Channel";
import { GuildChannel } from "./Channel";
import { Emoji } from "./Emoji";
import { Member } from "./Member";
import { Role } from "./Role";
@ -8,13 +8,13 @@ export interface Guild {
afk_timeout?: number;
application_id?: bigint;
banner?: string;
channels: Channel[];
channels: GuildChannel[];
default_message_notifications?: number;
description?: string;
discovery_splash?: string;
emojis: Emoji[];
explicit_content_filter?: number;
features: [];
features: string[];
icon?: string;
id: bigint;
// joined_at?: number; \n // owner?: boolean; // ! member specific should be removed

View File

@ -1,37 +0,0 @@
export interface Guild {
id: bigint;
name: string;
icon: string; // e.g. "28776e7ad42922582be25bb06cdc5b53"
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
}

32
src/models/Interaction.ts Normal file
View File

@ -0,0 +1,32 @@
import { AllowedMentions, Embed } from "./Message";
export interface Interaction {
id: bigint;
type: InteractionType;
data?: {};
guild_id: bigint;
channel_id: bigint;
member_id: bigint;
token: string;
version: number;
}
export enum InteractionType {
Ping = 1,
ApplicationCommand = 2,
}
export enum InteractionResponseType {
Pong = 1,
Acknowledge = 2,
ChannelMessage = 3,
ChannelMessageWithSource = 4,
AcknowledgeWithSource = 5,
}
export interface InteractionApplicationCommandCallbackData {
tts?: boolean;
content: string;
embeds?: Embed[];
allowed_mentions?: AllowedMentions;
}

View File

@ -1,5 +1,10 @@
export interface Invite {
code: string;
temporary: boolean;
uses: number;
max_uses: number;
max_age: number;
created_at: number;
guild: {
id: bigint;
name: string;

View File

@ -1,3 +1,5 @@
import { PublicUser } from "./User";
export interface Member {
id: bigint;
nick?: string;
@ -8,4 +10,30 @@ export interface Member {
mute: boolean;
pending: boolean;
permissions: bigint;
settings: UserGuildSettings;
}
export interface PublicMember extends Omit<Member, "settings" | "id"> {
user: PublicUser;
}
export interface UserGuildSettings {
channel_overrides: {
channel_id: bigint;
message_notifications: number;
mute_config: MuteConfig;
muted: boolean;
}[];
message_notifications: number;
mobile_push: boolean;
mute_config: MuteConfig;
muted: boolean;
suppress_everyone: boolean;
suppress_roles: boolean;
version: number;
}
export interface MuteConfig {
end_time: number;
selected_time_window: number;
}

126
src/models/Message.ts Normal file
View File

@ -0,0 +1,126 @@
import { ChannelType } from "./Channel";
export interface Message {
id: bigint;
author_id?: bigint;
webhook_id?: bigint;
application_id: bigint;
content: string;
timestamp: number;
edited_timestamp: number;
tts: boolean;
mention_everyone: boolean;
mentions: bigint[];
mention_roles: bigint[];
mention_channels?: {
id: bigint;
guild_id: bigint;
type: ChannelType;
name: string;
}[];
attachments: Attachment[];
embeds: Embed[];
reactions?: Reaction[];
nonce?: string | number;
pinned: boolean;
type: MessageType;
activity?: {
type: number;
party_id: string;
}[];
flags?: bigint;
stickers?: [];
message_reference?: {
message_id: bigint;
channel_id?: bigint;
guild_id?: bigint;
};
}
export enum MessageType {
DEFAULT = 0,
RECIPIENT_ADD = 1,
RECIPIENT_REMOVE = 2,
CALL = 3,
CHANNEL_NAME_CHANGE = 4,
CHANNEL_ICON_CHANGE = 5,
CHANNEL_PINNED_MESSAGE = 6,
GUILD_MEMBER_JOIN = 7,
USER_PREMIUM_GUILD_SUBSCRIPTION = 8,
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1 = 9,
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2 = 10,
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3 = 11,
CHANNEL_FOLLOW_ADD = 12,
GUILD_DISCOVERY_DISQUALIFIED = 14,
GUILD_DISCOVERY_REQUALIFIED = 15,
REPLY = 19,
APPLICATION_COMMAND = 20,
}
export interface Attachment {
id: bigint; // attachment id
filename: string; // name of file attached
size: number; // size of file in bytes
url: string; // source url of file
proxy_url: string; // a proxied url of file
height: number; // height of file (if image)
width: number; // width of file (if image)
}
export interface Embed {
title?: string; //title of embed
type?: string; // type of embed (always "rich" for webhook embeds)
description?: string; // description of embed
url?: string; // url of embed
timestamp?: number; // timestamp of embed content
color?: number; // color code of the embed
footer?: {
text: string;
icon_url?: string;
proxy_icon_url?: string;
}; // footer object footer information
image?: EmbedImage; // image object image information
thumbnail?: EmbedImage; // thumbnail object thumbnail information
video?: EmbedImage; // video object video information
provider?: {
name?: string;
url?: string;
}; // provider object provider information
author?: {
name?: string;
url?: string;
icon_url?: string;
proxy_icon_url?: string;
}; // author object author information
fields?: {
name: string;
value: string;
inline?: boolean;
}[];
}
export interface EmbedImage {
url?: string;
proxy_url?: string;
height?: number;
width?: number;
}
export interface Reaction {
count: number;
//// not saved in the database // me: boolean; // whether the current user reacted using this emoji
emoji: PartialEmoji;
}
export interface PartialEmoji {
id?: bigint;
name: string;
animated?: boolean;
}
export interface AllowedMentions {
parse?: ("users" | "roles" | "everyone")[];
roles?: bigint[];
users?: bigint[];
replied_user?: boolean;
}

7
src/models/Status.ts Normal file
View File

@ -0,0 +1,7 @@
export type Status = "idle" | "dnd" | "online" | "offline";
export interface ClientStatus {
desktop?: string; // e.g. Windows/Linux/Mac
mobile?: string; // e.g. iOS/Android
web?: string; // e.g. browser, bot account
}

View File

@ -1,21 +1,55 @@
import { UserFlags } from "../util/UserFlags";
export interface User {
id: bigint;
username: string;
discriminator: string;
avatar: string | null;
phone?: string;
desktop: boolean;
mobile: boolean;
premium: boolean;
premium_type: number;
bot: boolean;
system: boolean;
nsfw_allowed: boolean;
mfa_enabled: boolean;
created_at: number;
verified: boolean;
email: string;
flags: bigint; // TODO: automatically convert BigInt to BitField of UserFlags
public_flags: bigint;
hash: string; // hash of the password, salt is saved in password (bcrypt)
guilds: bigint[]; // array of guild ids the user is part of
valid_tokens_since: number; // all tokens with a previous issue date are invalid
user_settings: UserSettings;
guilds: bigint[] // array of guild ids the user is part of
relationships: Relationship[];
connected_accounts: ConnectedAccount[];
}
export interface PublicUser {
id: bigint;
discriminator: string;
username: string;
avatar?: string;
publicFlags: bigint;
}
export interface ConnectedAccount {
access_token: string;
friend_sync: boolean;
id: string;
name: string;
revoked: boolean;
show_activity: boolean;
type: string;
verifie: boolean;
visibility: number;
}
export interface Relationship {
id: bigint;
nickname?: string;
type: number;
user_id: bigint;
}
export interface UserSettings {

15
src/models/VoiceState.ts Normal file
View File

@ -0,0 +1,15 @@
import { PublicMember } from "./Member";
export interface VoiceState {
guild_id?: bigint;
channel_id: bigint;
user_id: bigint;
session_id: string;
deaf: boolean;
mute: boolean;
self_deaf: boolean;
self_mute: boolean;
self_stream?: boolean;
self_video: boolean;
suppress: boolean; // whether this user is muted by the current user
}