commit
						9a50b35f8b
					
				
					 41 changed files with 1694 additions and 102 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -106,3 +106,6 @@ dist | ||||||
| # Used ESLint for linting so block package-lock | # Used ESLint for linting so block package-lock | ||||||
| package-lock.json | package-lock.json | ||||||
| yarn.lock | yarn.lock | ||||||
|  | 
 | ||||||
|  | # PRIVACY XDDDD | ||||||
|  | src/test/config.ts | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							|  | @ -2,5 +2,8 @@ | ||||||
|   "deno.enable": true, |   "deno.enable": true, | ||||||
|   "deno.lint": false, |   "deno.lint": false, | ||||||
|   "deno.unstable": false, |   "deno.unstable": false, | ||||||
|   "deepscan.enable": true |   "deepscan.enable": true, | ||||||
|  |   "deno.import_intellisense_origins": { | ||||||
|  |     "https://deno.land": true | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| export const DISCORD_API_URL = 'https://discord.com/api' //여기 v8 들어가야하는거 아닌가... <- gateway.ts 참조바람 왜 거기 endpoint에서 import에서 에러나지 왜??
 | export const DISCORD_API_URL = 'https://discord.com/api' | ||||||
| 
 | 
 | ||||||
| export const DISCORD_GATEWAY_URL = 'wss://gateway.discord.com' | export const DISCORD_GATEWAY_URL = 'wss://gateway.discord.gg' | ||||||
| 
 | 
 | ||||||
| export const DISCORD_CDN_URL = 'https://cdn.discordapp.com' | export const DISCORD_CDN_URL = 'https://cdn.discordapp.com' | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								src/models/client.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/models/client.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | import { GatewayIntents } from '../types/gatewayTypes.ts' | ||||||
|  | import { Gateway } from './gateway.ts' | ||||||
|  | import { Rest } from "./rest.ts" | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Discord Client. | ||||||
|  |  */ | ||||||
|  | export class Client { | ||||||
|  |   gateway?: Gateway | ||||||
|  |   rest?: Rest | ||||||
|  |   user?: User | ||||||
|  |   ping = 0 | ||||||
|  | 
 | ||||||
|  |   constructor () {} | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * This function is used for connect to discord. | ||||||
|  |    * @param token Your token. This is required. | ||||||
|  |    * @param intents Gateway intents in array. This is required. | ||||||
|  |    */ | ||||||
|  |   connect (token: string, intents: GatewayIntents[]) { | ||||||
|  |     this.gateway = new Gateway(this, token, intents) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -1,10 +1,16 @@ | ||||||
| import { inflate } from 'https://deno.land/x/denoflate/mod.ts' | import { unzlib } from 'https://deno.land/x/denoflate/mod.ts' | ||||||
|  | import { Client } from './client.ts' | ||||||
| import { | import { | ||||||
|   DISCORD_GATEWAY_URL, |   DISCORD_GATEWAY_URL, | ||||||
|   DISCORD_API_VERSION |   DISCORD_API_VERSION | ||||||
| } from '../consts/urlsAndVersions.ts' | } from '../consts/urlsAndVersions.ts' | ||||||
| import { GatewayResponse } from '../types/gatewayResponse.ts' | import { GatewayResponse } from '../types/gatewayResponse.ts' | ||||||
| import { GatewayOpcodes, GatewayIntents } from '../types/gatewayTypes.ts' | import { | ||||||
|  |   GatewayOpcodes, | ||||||
|  |   GatewayIntents, | ||||||
|  |   GatewayEvents | ||||||
|  | } from '../types/gatewayTypes.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Handles Discord gateway connection. |  * Handles Discord gateway connection. | ||||||
|  | @ -15,20 +21,31 @@ import { GatewayOpcodes, GatewayIntents } from '../types/gatewayTypes.ts' | ||||||
| class Gateway { | class Gateway { | ||||||
|   websocket: WebSocket |   websocket: WebSocket | ||||||
|   token: string |   token: string | ||||||
|   intents: [GatewayIntents] |   intents: GatewayIntents[] | ||||||
|   connected = false |   connected = false | ||||||
|   initialized = false |   initialized = false | ||||||
|   heartbeatInterval = 0 |   heartbeatInterval = 0 | ||||||
|   heartbeatIntervalID?: number |   heartbeatIntervalID?: number | ||||||
|  |   heartbeatCheckerIntervalID?: number | ||||||
|   sequenceID?: number |   sequenceID?: number | ||||||
|  |   sessionID?: string | ||||||
|  |   lastPingTimestemp = 0 | ||||||
|   heartbeatServerResponded = false |   heartbeatServerResponded = false | ||||||
|  |   client: Client | ||||||
| 
 | 
 | ||||||
|   constructor (token: string, intents: [GatewayIntents]) { |   constructor (client: Client, token: string, intents: GatewayIntents[]) { | ||||||
|     this.websocket = new WebSocket( |  | ||||||
|       `${DISCORD_GATEWAY_URL}/?v=${DISCORD_API_VERSION}&encoding=json` |  | ||||||
|     ) |  | ||||||
|     this.token = token |     this.token = token | ||||||
|     this.intents = intents |     this.intents = intents | ||||||
|  |     this.client = client | ||||||
|  |     this.websocket = new WebSocket( | ||||||
|  |       `${DISCORD_GATEWAY_URL}/?v=${DISCORD_API_VERSION}&encoding=json`, | ||||||
|  |       [] | ||||||
|  |     ) | ||||||
|  |     this.websocket.binaryType = 'arraybuffer' | ||||||
|  |     this.websocket.onopen = this.onopen.bind(this) | ||||||
|  |     this.websocket.onmessage = this.onmessage.bind(this) | ||||||
|  |     this.websocket.onclose = this.onclose.bind(this) | ||||||
|  |     this.websocket.onerror = this.onerror.bind(this) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   onopen () { |   onopen () { | ||||||
|  | @ -41,16 +58,8 @@ class Gateway { | ||||||
|       data = new Uint8Array(data) |       data = new Uint8Array(data) | ||||||
|     } |     } | ||||||
|     if (data instanceof Uint8Array) { |     if (data instanceof Uint8Array) { | ||||||
|       const dataSuffix = data.slice(-4) |       data = unzlib(data) | ||||||
| 
 |       data = new TextDecoder('utf-8').decode(data) | ||||||
|       if ( |  | ||||||
|         dataSuffix[0] === 0 && |  | ||||||
|         dataSuffix[1] === 0 && |  | ||||||
|         dataSuffix[2] === 0xff && |  | ||||||
|         dataSuffix[3] === 0xff |  | ||||||
|       ) { |  | ||||||
|         data = inflate(data) |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const { op, d, s, t }: GatewayResponse = JSON.parse(data) |     const { op, d, s, t }: GatewayResponse = JSON.parse(data) | ||||||
|  | @ -59,56 +68,122 @@ class Gateway { | ||||||
|       case GatewayOpcodes.HELLO: |       case GatewayOpcodes.HELLO: | ||||||
|         this.heartbeatInterval = d.heartbeat_interval |         this.heartbeatInterval = d.heartbeat_interval | ||||||
|         this.heartbeatIntervalID = setInterval(() => { |         this.heartbeatIntervalID = setInterval(() => { | ||||||
|  |           if (this.heartbeatServerResponded) { | ||||||
|  |             this.heartbeatServerResponded = false | ||||||
|  |           } else { | ||||||
|  |             clearInterval(this.heartbeatIntervalID) | ||||||
|  |             clearInterval(this.heartbeatCheckerIntervalID) | ||||||
|  |             this.websocket.close() | ||||||
|  |             this.initWebsocket() | ||||||
|  |             return | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|           this.websocket.send( |           this.websocket.send( | ||||||
|             JSON.stringify({ |             JSON.stringify({ | ||||||
|               op: GatewayOpcodes.HEARTBEAT, |               op: GatewayOpcodes.HEARTBEAT, | ||||||
|               d: this.sequenceID ?? null |               d: this.sequenceID ?? null | ||||||
|             }) |             }) | ||||||
|           ) |           ) | ||||||
| 
 |           this.lastPingTimestemp = Date.now() | ||||||
|           if (this.heartbeatServerResponded) { |  | ||||||
|             this.heartbeatServerResponded = false |  | ||||||
|           } else { |  | ||||||
|             // TODO: Add heartbeat failed error
 |  | ||||||
|           } |  | ||||||
|         }, this.heartbeatInterval) |         }, this.heartbeatInterval) | ||||||
| 
 | 
 | ||||||
|         this.websocket.send( |         if (!this.initialized) { | ||||||
|           JSON.stringify({ |           this.sendIdentify() | ||||||
|             token: this.token, |           this.initialized = true | ||||||
|             properties: { |         } else { | ||||||
|               $os: Deno.build.os, |           this.websocket.send( | ||||||
|               $browser: 'discord.deno', |             JSON.stringify({ | ||||||
|               $device: 'discord.deno' |               op: GatewayOpcodes.RESUME, | ||||||
|             }, |               d: { | ||||||
|             compress: true, |                 token: this.token, | ||||||
|             shard: [0, 1], // TODO: Make sharding possible
 |                 session_id: this.sessionID, | ||||||
|             intents: this.intents.reduce( |                 seq: this.sequenceID | ||||||
|               (previous, current) => previous | current, |               } | ||||||
|               0 |             }) | ||||||
|             ), |           ) | ||||||
|             presence: { |         } | ||||||
|               // TODO: User should can customize this
 |  | ||||||
|               status: 'online', |  | ||||||
|               since: null, |  | ||||||
|               afk: false |  | ||||||
|             } |  | ||||||
|           }) |  | ||||||
|         ) |  | ||||||
|         break |         break | ||||||
| 
 | 
 | ||||||
|       case GatewayOpcodes.HEARTBEAT_ACK: |       case GatewayOpcodes.HEARTBEAT_ACK: | ||||||
|         this.heartbeatServerResponded = true |         this.heartbeatServerResponded = true | ||||||
|  |         this.client.ping = Date.now() - this.lastPingTimestemp | ||||||
|  |         break | ||||||
|  | 
 | ||||||
|  |       case GatewayOpcodes.INVALID_SESSION: | ||||||
|  |         setTimeout(this.sendIdentify, 3000) | ||||||
|         break |         break | ||||||
| 
 | 
 | ||||||
|       case GatewayOpcodes.DISPATCH: |       case GatewayOpcodes.DISPATCH: | ||||||
|         switch (t) { |         if (s !== null) { | ||||||
|  |           this.sequenceID = s | ||||||
|         } |         } | ||||||
| 
 |         switch (t) { | ||||||
|  |           case GatewayEvents.Ready: | ||||||
|  |             this.client.user = new User(this.client, d.user) | ||||||
|  |             this.sessionID = d.session_id | ||||||
|  |             break | ||||||
|  |           default: | ||||||
|  |             break | ||||||
|  |         } | ||||||
|  |         break | ||||||
|       default: |       default: | ||||||
|         return |         break | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   onclose (event: CloseEvent) { | ||||||
|  |     // TODO: Handle close event codes.
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   onerror (event: Event | ErrorEvent) { | ||||||
|  |     const eventError = event as ErrorEvent | ||||||
|  | 
 | ||||||
|  |     console.log(eventError) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   sendIdentify () { | ||||||
|  |     this.websocket.send( | ||||||
|  |       JSON.stringify({ | ||||||
|  |         op: GatewayOpcodes.IDENTIFY, | ||||||
|  |         d: { | ||||||
|  |           token: this.token, | ||||||
|  |           properties: { | ||||||
|  |             $os: Deno.build.os, | ||||||
|  |             $browser: 'discord.deno', | ||||||
|  |             $device: 'discord.deno' | ||||||
|  |           }, | ||||||
|  |           compress: true, | ||||||
|  |           shard: [0, 1], // TODO: Make sharding possible
 | ||||||
|  |           intents: this.intents.reduce( | ||||||
|  |             (previous, current) => previous | current, | ||||||
|  |             0 | ||||||
|  |           ), | ||||||
|  |           presence: { | ||||||
|  |             // TODO: User should can customize this
 | ||||||
|  |             status: 'online', | ||||||
|  |             since: null, | ||||||
|  |             afk: false | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   initWebsocket () { | ||||||
|  |     this.websocket = new WebSocket( | ||||||
|  |       `${DISCORD_GATEWAY_URL}/?v=${DISCORD_API_VERSION}&encoding=json`, | ||||||
|  |       [] | ||||||
|  |     ) | ||||||
|  |     this.websocket.binaryType = 'arraybuffer' | ||||||
|  |     this.websocket.onopen = this.onopen.bind(this) | ||||||
|  |     this.websocket.onmessage = this.onmessage.bind(this) | ||||||
|  |     this.websocket.onclose = this.onclose.bind(this) | ||||||
|  |     this.websocket.onerror = this.onerror.bind(this) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   close () { | ||||||
|  |     this.websocket.close(1000) | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export { Gateway } | export { Gateway } | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/models/rest.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/models/rest.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | import { Client } from "./client.ts"; | ||||||
|  | 
 | ||||||
|  | class Rest  { | ||||||
|  |     client: Client | ||||||
|  |     constructor(client: Client) { | ||||||
|  |         this.client = client | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     //TODO: make endpoints function
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export { Rest } | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| // 일단 대충 여러 봇 라이브러리에서 본 구조 가져오는 중..
 | import { Client } from '../models/client.ts' | ||||||
| 
 | 
 | ||||||
| class Base { | export class Base { | ||||||
|   id?: string |   // property 읍
 | ||||||
|   constructor (id: string | undefined) { |   client: Client | ||||||
|     if (id) { |   constructor (client: Client) { | ||||||
|       this.id = id |     this.client = client | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | // discord.js 보는중
 | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								src/structures/cdn.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/structures/cdn.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | import { ImageFormats, ImageSize } from "../types/cdnTypes.ts"; | ||||||
|  | 
 | ||||||
|  | export const ImageURL = ( | ||||||
|  |     url: string,  | ||||||
|  |     format: ImageFormats, | ||||||
|  |     size?: ImageSize | 128 | ||||||
|  | ) => { | ||||||
|  |     if (url.includes('a_')) { | ||||||
|  |         return url + '.gif' + '?size=' + size | ||||||
|  |     } else return url + '.' + format + '?size=' + size | ||||||
|  | } | ||||||
|  | @ -0,0 +1,29 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { ChannelPayload, ChannelTypes } from '../types/channelTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | import { PrivateChannel } from './dm.ts' | ||||||
|  | import { TextChannel } from './textChannel.ts' | ||||||
|  | 
 | ||||||
|  | export class Channel extends Base { | ||||||
|  |   type: ChannelTypes | ||||||
|  |   id: string | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: ChannelPayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.type = data.type | ||||||
|  |     this.id = data.id | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   get mention () { | ||||||
|  |     return `<#${this.id}>` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static from (data: ChannelPayload, client: Client) { | ||||||
|  |     switch (data.type) { | ||||||
|  |       case ChannelTypes.GUILD_TEXT: | ||||||
|  |         return new TextChannel(client, data) | ||||||
|  |       case ChannelTypes.DM: | ||||||
|  |         return new PrivateChannel(client, data) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								src/structures/dm.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/structures/dm.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { ChannelPayload } from '../types/channelTypes.ts' | ||||||
|  | import { Channel } from './channel.ts' | ||||||
|  | 
 | ||||||
|  | export class PrivateChannel extends Channel implements ChannelPayload { | ||||||
|  |   constructor (client: Client, data: ChannelPayload) { | ||||||
|  |     super(client, data) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,32 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { | ||||||
|  |   EmbedAuthor, | ||||||
|  |   EmbedField, | ||||||
|  |   EmbedFooter, | ||||||
|  |   EmbedImage, | ||||||
|  |   EmbedPayload, | ||||||
|  |   EmbedProvider, | ||||||
|  |   EmbedThumbnail, | ||||||
|  |   EmbedTypes, | ||||||
|  |   EmbedVideo | ||||||
|  | } from '../types/channelTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | 
 | ||||||
|  | export class Embed extends Base implements EmbedPayload { | ||||||
|  |   title?: string | ||||||
|  |   type?: EmbedTypes | ||||||
|  |   description?: string | ||||||
|  |   url?: string | ||||||
|  |   timestamp?: string | ||||||
|  |   color?: number | ||||||
|  |   footer?: EmbedFooter | ||||||
|  |   image?: EmbedImage | ||||||
|  |   thumbnail?: EmbedThumbnail | ||||||
|  |   video?: EmbedVideo | ||||||
|  |   provider?: EmbedProvider | ||||||
|  |   author?: EmbedAuthor | ||||||
|  |   fields?: EmbedField[] | ||||||
|  |   constructor (client: Client, data: EmbedPayload) { | ||||||
|  |     super(client) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/structures/emoji.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/structures/emoji.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { EmojiPayload } from '../types/emojiTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | import { User } from './user.ts' | ||||||
|  | 
 | ||||||
|  | export class Emoji extends Base implements EmojiPayload { | ||||||
|  |   id: string | ||||||
|  |   name: string | ||||||
|  |   roles?: [] | ||||||
|  |   user?: User | ||||||
|  |   require_colons?: boolean | ||||||
|  |   managed?: boolean | ||||||
|  |   animated?: boolean | ||||||
|  |   available?: boolean | ||||||
|  | 
 | ||||||
|  |   get CustomEmoji () { | ||||||
|  |     if (this.animated === false) { | ||||||
|  |      return `<:${this.name}:${this.id}>` | ||||||
|  |     } else return `<a:${this.name}:${this.id}>` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: EmojiPayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.id = data.id | ||||||
|  |     this.name = data.name | ||||||
|  |     this.roles = data.roles | ||||||
|  |     this.user = data.user | ||||||
|  |     this.require_colons = data.require_colons | ||||||
|  |     this.managed = data.managed | ||||||
|  |     this.animated = data.animated | ||||||
|  |     this.available = data.available | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,106 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { EmojiPayload } from '../types/emojiTypes.ts' | ||||||
|  | import { GuildFeatures, GuildPayload } from '../types/guildTypes.ts' | ||||||
|  | import { PresenceUpdatePayload } from '../types/presenceTypes.ts' | ||||||
|  | import { VoiceStatePayload } from '../types/voiceTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | import { Channel } from './channel.ts' | ||||||
|  | import { Emoji } from './emoji.ts' | ||||||
|  | import { Member } from './member.ts' | ||||||
|  | import { Role } from './role.ts' | ||||||
|  | 
 | ||||||
|  | export class Guild extends Base implements GuildPayload { | ||||||
|  |   id: string | ||||||
|  |   name: string | ||||||
|  |   icon: string | undefined | ||||||
|  |   icon_hash?: string | undefined | ||||||
|  |   splash: string | undefined | ||||||
|  |   discovery_splash: string | undefined | ||||||
|  |   owner?: boolean | undefined | ||||||
|  |   owner_id: string | ||||||
|  |   permissions?: string | undefined | ||||||
|  |   region: string | ||||||
|  |   afk_channel_id: string | undefined | ||||||
|  |   afk_timeout: number | ||||||
|  |   widget_enabled?: boolean | undefined | ||||||
|  |   widge_channel_id?: string | undefined | ||||||
|  |   verification_level: string | ||||||
|  |   default_message_notifications: string | ||||||
|  |   explicit_content_filter: string | ||||||
|  |   roles: Role[] | ||||||
|  |   emojis: Emoji[] | ||||||
|  |   features: GuildFeatures[] | ||||||
|  |   mfa_level: string | ||||||
|  |   application_id: string | undefined | ||||||
|  |   system_channel_id: string | undefined | ||||||
|  |   system_channel_flags: string | ||||||
|  |   rules_channel_id: string | undefined | ||||||
|  |   joined_at?: string | undefined | ||||||
|  |   large?: boolean | undefined | ||||||
|  |   unavailable: boolean | ||||||
|  |   member_count?: number | undefined | ||||||
|  |   voice_states?: VoiceStatePayload[] | undefined | ||||||
|  |   members?: Member[] | undefined | ||||||
|  |   channels?: Channel[] | undefined | ||||||
|  |   presences?: PresenceUpdatePayload[] | undefined | ||||||
|  |   max_presences?: number | undefined | ||||||
|  |   max_members?: number | undefined | ||||||
|  |   vanity_url_code: string | undefined | ||||||
|  |   description: string | undefined | ||||||
|  |   banner: string | undefined | ||||||
|  |   premium_tier: number | ||||||
|  |   premium_subscription_count?: number | undefined | ||||||
|  |   preferred_locale: string | ||||||
|  |   public_updates_channel_id: string | undefined | ||||||
|  |   max_video_channel_users?: number | undefined | ||||||
|  |   approximate_number_count?: number | undefined | ||||||
|  |   approximate_presence_count?: number | undefined | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: GuildPayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.id = data.id | ||||||
|  |     this.name = data.name | ||||||
|  |     this.icon = data.icon | ||||||
|  |     this.icon_hash = data.icon_hash | ||||||
|  |     this.splash = data.splash | ||||||
|  |     this.discovery_splash = data.discovery_splash | ||||||
|  |     this.owner = data.owner | ||||||
|  |     this.owner_id = data.owner_id | ||||||
|  |     this.permissions = data.permissions | ||||||
|  |     this.region = data.region | ||||||
|  |     this.afk_timeout = data.afk_timeout | ||||||
|  |     this.afk_channel_id = data.afk_channel_id | ||||||
|  |     this.widget_enabled = data.widget_enabled | ||||||
|  |     this.widge_channel_id = data.widge_channel_id | ||||||
|  |     this.verification_level = data.verification_level | ||||||
|  |     this.default_message_notifications = data.default_message_notifications | ||||||
|  |     this.explicit_content_filter = data.explicit_content_filter | ||||||
|  |     this.roles = data.roles | ||||||
|  |     this.emojis = data.emojis | ||||||
|  |     this.features = data.features | ||||||
|  |     this.mfa_level = data.mfa_level | ||||||
|  |     this.system_channel_id = data.system_channel_id | ||||||
|  |     this.system_channel_flags = data.system_channel_flags | ||||||
|  |     this.rules_channel_id = data.rules_channel_id | ||||||
|  |     this.joined_at = data.joined_at | ||||||
|  |     this.large = data.large | ||||||
|  |     this.unavailable = data.unavailable | ||||||
|  |     this.member_count = data.member_count | ||||||
|  |     this.voice_states = data.voice_states | ||||||
|  |     this.members = data.members | ||||||
|  |     this.channels = data.channels | ||||||
|  |     this.presences = data.presences | ||||||
|  |     this.max_presences = data.max_presences | ||||||
|  |     this.max_members = data.max_members | ||||||
|  |     this.vanity_url_code = data.vanity_url_code | ||||||
|  |     this.description = data.description | ||||||
|  |     this.banner = data.banner | ||||||
|  |     this.premium_tier = data.premium_tier | ||||||
|  |     this.premium_subscription_count = data.premium_subscription_count | ||||||
|  |     this.preferred_locale = data.preferred_locale | ||||||
|  |     this.public_updates_channel_id = data.public_updates_channel_id | ||||||
|  |     this.max_video_channel_users = data.max_video_channel_users | ||||||
|  |     this.approximate_number_count = data.approximate_number_count | ||||||
|  |     this.approximate_presence_count = data.approximate_presence_count | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								src/structures/guildChannel.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/structures/guildChannel.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { ChannelPayload } from '../types/channelTypes.ts' | ||||||
|  | import { Channel } from './channel.ts' | ||||||
|  | 
 | ||||||
|  | export class GuildChannel extends Channel { | ||||||
|  |   constructor (client: Client, data: ChannelPayload) { | ||||||
|  |     super(client, data) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								src/structures/invite.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/structures/invite.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { Channel } from '../structures/channel.ts' | ||||||
|  | import { Guild } from '../structures/guild.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | import { InvitePayload } from '../types/inviteTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | 
 | ||||||
|  | export class Invite extends Base implements InvitePayload { | ||||||
|  |   code: string | ||||||
|  |   guild?: Guild | ||||||
|  |   channel: Channel | ||||||
|  |   inviter?: User | ||||||
|  |   target_user?: User | ||||||
|  |   target_user_type?: number | ||||||
|  |   approximate_presence_count?: number | ||||||
|  |   approximate_member_count?: number | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   get link () { | ||||||
|  |     return `discord.gg/${this.code}` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: InvitePayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.code = data.code | ||||||
|  |     this.guild = data.guild | ||||||
|  |     this.channel = data.channel | ||||||
|  |     this.inviter = data.inviter | ||||||
|  |     this.target_user = data.target_user | ||||||
|  |     this.target_user_type = data.target_user_type | ||||||
|  |     this.approximate_member_count = data.approximate_member_count | ||||||
|  |     this.approximate_presence_count = data.approximate_presence_count | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								src/structures/member.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/structures/member.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { MemberPayload } from '../types/guildTypes.ts' | ||||||
|  | import { UserPayload } from '../types/userTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | import { Guild } from './guild.ts' | ||||||
|  | import { Role } from './role.ts' | ||||||
|  | import { User } from './user.ts' | ||||||
|  | 
 | ||||||
|  | export class Member extends Base implements MemberPayload { | ||||||
|  |   user: User | ||||||
|  |   nick: string | undefined | ||||||
|  |   roles: Role[] | ||||||
|  |   joined_at: string | ||||||
|  |   premium_since?: string | undefined | ||||||
|  |   deaf: boolean | ||||||
|  |   mute: boolean | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: MemberPayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.user = data.user | ||||||
|  |     this.nick = data.nick | ||||||
|  |     this.roles = data.roles | ||||||
|  |     this.joined_at = data.joined_at | ||||||
|  |     this.premium_since = data.premium_since | ||||||
|  |     this.deaf = data.deaf | ||||||
|  |     this.mute = data.mute | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -1 +1,69 @@ | ||||||
| // 여긴가
 | import { Base } from './base.ts' | ||||||
|  | import { | ||||||
|  |   Attachment, | ||||||
|  |   ChannelMention, | ||||||
|  |   EmbedPayload, | ||||||
|  |   MessageActivity, | ||||||
|  |   MessageApplication, | ||||||
|  |   MessagePayload, | ||||||
|  |   MessageReference, | ||||||
|  |   Reaction | ||||||
|  | } from '../types/channelTypes.ts' | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { User } from './user.ts' | ||||||
|  | import { Role } from './role.ts' | ||||||
|  | import { Embed } from './embed.ts' | ||||||
|  | 
 | ||||||
|  | class Message extends Base implements MessagePayload { | ||||||
|  |   id: string | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | undefined | ||||||
|  |   author: User | ||||||
|  |   member?: any | ||||||
|  |   content: string | ||||||
|  |   timestamp: string | ||||||
|  |   edited_timestamp: string | undefined | ||||||
|  |   tts: boolean | ||||||
|  |   mention_everyone: boolean | ||||||
|  |   mentions: User[] | ||||||
|  |   mention_roles: Role[] | ||||||
|  |   mention_channels?: ChannelMention[] | undefined | ||||||
|  |   attachments: Attachment[] | ||||||
|  |   embeds: EmbedPayload[] | ||||||
|  |   reactions?: Reaction[] | undefined | ||||||
|  |   nonce?: string | number | undefined | ||||||
|  |   pinned: boolean | ||||||
|  |   webhook_id?: string | undefined | ||||||
|  |   type: number | ||||||
|  |   activity?: MessageActivity | ||||||
|  |   application?: MessageApplication | ||||||
|  |   message_reference?: MessageReference | ||||||
|  |   flags?: number | undefined | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: MessagePayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.id = data.id | ||||||
|  |     this.channel_id = data.channel_id | ||||||
|  |     this.guild_id = data.guild_id | ||||||
|  |     this.author = data.author | ||||||
|  |     this.member = data.member | ||||||
|  |     this.content = data.content | ||||||
|  |     this.timestamp = data.timestamp | ||||||
|  |     this.edited_timestamp = data.edited_timestamp | ||||||
|  |     this.tts = data.tts | ||||||
|  |     this.mention_everyone = data.mention_everyone | ||||||
|  |     this.mentions = data.mentions | ||||||
|  |     this.mention_roles = data.mention_roles | ||||||
|  |     this.attachments = data.attachments | ||||||
|  |     this.embeds = data.embeds | ||||||
|  |     this.reactions = data.reactions | ||||||
|  |     this.nonce = data.nonce | ||||||
|  |     this.pinned = data.pinned | ||||||
|  |     this.webhook_id = data.webhook_id | ||||||
|  |     this.type = data.type | ||||||
|  |     this.activity = data.activity | ||||||
|  |     this.application = data.application | ||||||
|  |     this.message_reference = data.message_reference | ||||||
|  |     this.flags = data.flags | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								src/structures/role.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/structures/role.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | import { RolePayload } from '../types/roleTypes.ts' | ||||||
|  | 
 | ||||||
|  | export class Role extends Base implements RolePayload { | ||||||
|  |   id: string | ||||||
|  |   name: string | ||||||
|  |   color: number | ||||||
|  |   hoist: boolean | ||||||
|  |   position: number | ||||||
|  |   permissions: string | ||||||
|  |   managed: boolean | ||||||
|  |   mentionable: boolean | ||||||
|  | 
 | ||||||
|  |   get mention () { | ||||||
|  |     return `<@&${this.id}>` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: RolePayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.id = data.id | ||||||
|  |     this.name = data.name | ||||||
|  |     this.color = data.color | ||||||
|  |     this.hoist = data.hoist | ||||||
|  |     this.position = data.position | ||||||
|  |     this.permissions = data.permissions | ||||||
|  |     this.managed = data.managed | ||||||
|  |     this.mentionable = data.mentionable | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,36 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { GuildChannel } from './guildChannel.ts' | ||||||
|  | import { ChannelPayload } from '../types/channelTypes.ts' | ||||||
|  | import { User } from './user.ts' | ||||||
|  | 
 | ||||||
|  | export class TextChannel extends GuildChannel implements ChannelPayload { | ||||||
|  |   id: string | ||||||
|  |   type: number | ||||||
|  |   guild_id?: string | undefined | ||||||
|  |   position?: number | undefined | ||||||
|  |   approximate_member_count?: any | ||||||
|  |   name?: string | undefined | ||||||
|  |   topic?: string | undefined | ||||||
|  |   nsfw?: boolean | undefined | ||||||
|  |   last_message_id?: string | undefined | ||||||
|  |   bitrate?: number | undefined | ||||||
|  |   user_limit?: number | undefined | ||||||
|  |   rate_limit_per_user?: number | undefined | ||||||
|  |   recipients?: User | ||||||
|  |   icon?: string | undefined | ||||||
|  |   owner_id?: string | undefined | ||||||
|  |   application_id?: string | undefined | ||||||
|  |   parent_id?: string | undefined | ||||||
|  |   last_pin_timestamp?: string | undefined | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   get mention () { | ||||||
|  |     return `<#${this.id}>` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: ChannelPayload) { | ||||||
|  |     super(client, data) | ||||||
|  |     this.id = data.id | ||||||
|  |     this.type = data.type | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								src/structures/user.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/structures/user.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { UserPayload } from '../types/userTypes.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | 
 | ||||||
|  | export class User extends Base implements UserPayload { | ||||||
|  |   id: string | ||||||
|  |   username: string | ||||||
|  |   discriminator: string | ||||||
|  |   avatar?: string | ||||||
|  |   bot?: boolean | ||||||
|  |   system?: boolean | ||||||
|  |   mfa_enabled?: boolean | ||||||
|  |   locale?: string | ||||||
|  |   verified?: boolean | ||||||
|  |   email?: string | ||||||
|  |   flags?: number | ||||||
|  |   premium_type?: 0 | 1 | 2 | ||||||
|  |   public_flags?: number | ||||||
|  | 
 | ||||||
|  |   get nickMention () { | ||||||
|  |     return `<@!${this.id}>` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   get mention () { | ||||||
|  |     return `<@${this.id}>` | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   constructor (client: Client, data: UserPayload) { | ||||||
|  |     super(client) | ||||||
|  |     this.id = data.id | ||||||
|  |     this.username = data.username | ||||||
|  |     this.discriminator = data.discriminator | ||||||
|  |     this.avatar = data.avatar | ||||||
|  |     this.bot = data.bot | ||||||
|  |     this.system = data.system | ||||||
|  |     this.mfa_enabled = data.mfa_enabled | ||||||
|  |     this.locale = data.locale | ||||||
|  |     this.verified = data.verified | ||||||
|  |     this.email = data.email | ||||||
|  |     this.flags = data.flags | ||||||
|  |     this.premium_type = data.premium_type | ||||||
|  |     this.public_flags = data.public_flags | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/structures/voicestate.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/structures/voicestate.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | import { Client } from "../models/client.ts" | ||||||
|  | import { VoiceStatePayload } from "../types/voiceTypes.ts" | ||||||
|  | import { Base } from "./base.ts" | ||||||
|  | import { Member } from "./member.ts" | ||||||
|  | 
 | ||||||
|  | export class VoiceState extends Base implements VoiceStatePayload { | ||||||
|  |     guild_id?: string | ||||||
|  |     channel_id: string | undefined | ||||||
|  |     user_id: string | ||||||
|  |     member?: Member | ||||||
|  |     session_id: string | ||||||
|  |     deaf: boolean | ||||||
|  |     mute: boolean | ||||||
|  |     self_deaf: boolean | ||||||
|  |     self_mute: boolean | ||||||
|  |     self_stream?: boolean | ||||||
|  |     self_video: boolean | ||||||
|  |     suppress: boolean | ||||||
|  | 
 | ||||||
|  |     constructor (client: Client, data: VoiceStatePayload) { | ||||||
|  |         super(client) | ||||||
|  |         this.channel_id = data.channel_id | ||||||
|  |         this.session_id = data.session_id | ||||||
|  |         this.user_id = data.user_id | ||||||
|  |         this.deaf = data.deaf | ||||||
|  |         this.mute = data.mute | ||||||
|  |         this.self_deaf = data.self_deaf | ||||||
|  |         this.self_mute = data.self_mute | ||||||
|  |         this.self_stream = data.self_stream | ||||||
|  |         this.self_video = data.self_video | ||||||
|  |         this.suppress = data.suppress | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								src/structures/webhook.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/structures/webhook.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | import { Client } from "../models/client.ts" | ||||||
|  | import { WebhookPayload } from "../types/webhookTypes.ts" | ||||||
|  | import { Base } from "./base.ts" | ||||||
|  | import { User } from "./user.ts" | ||||||
|  | 
 | ||||||
|  | export class VoiceState extends Base implements WebhookPayload { | ||||||
|  |     id: string | ||||||
|  |     type: 1 | 2 | ||||||
|  |     guild_id?: string | ||||||
|  |     channel_id: string | ||||||
|  |     user?: User | ||||||
|  |     name: string | undefined | ||||||
|  |     avatar: string | undefined | ||||||
|  |     token?: string | ||||||
|  |     application_id: string | undefined | ||||||
|  | 
 | ||||||
|  |     constructor (client: Client, data: WebhookPayload) { | ||||||
|  |         super(client) | ||||||
|  |         this.id = data.id | ||||||
|  |         this.type = data.type | ||||||
|  |         this.channel_id = data.channel_id | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								src/test/config.ts.sample
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/test/config.ts.sample
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | const TOKEN = '' | ||||||
|  | export { TOKEN } | ||||||
							
								
								
									
										7
									
								
								src/test/index.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/test/index.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { GatewayIntents } from '../types/gatewayTypes.ts' | ||||||
|  | import { TOKEN } from './config.ts' | ||||||
|  | 
 | ||||||
|  | const bot = new Client() | ||||||
|  | 
 | ||||||
|  | bot.connect(TOKEN, [GatewayIntents.GUILD_MESSAGES]) | ||||||
							
								
								
									
										2
									
								
								src/types/cdnTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/types/cdnTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | export type ImageSize = 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | ||||||
|  | export type ImageFormats = "jpg" | "jpeg" | "png" | "webp" | "gif" | ||||||
							
								
								
									
										251
									
								
								src/types/channelTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								src/types/channelTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,251 @@ | ||||||
|  | import { Member } from '../structures/member.ts' | ||||||
|  | import { Role } from '../structures/role.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | import { EmojiPayload } from './emojiTypes.ts' | ||||||
|  | 
 | ||||||
|  | interface ChannelPayload { | ||||||
|  |   id: string | ||||||
|  |   type: ChannelTypes | ||||||
|  |   guild_id?: string | ||||||
|  |   position?: number | ||||||
|  |   approximate_member_count?: Overwrite | ||||||
|  |   name?: string | ||||||
|  |   topic?: string | ||||||
|  |   nsfw?: boolean | ||||||
|  |   last_message_id?: string | ||||||
|  |   bitrate?: number | ||||||
|  |   user_limit?: number | ||||||
|  |   rate_limit_per_user?: number | ||||||
|  |   recipients?: User | ||||||
|  |   icon?: string | ||||||
|  |   owner_id?: string | ||||||
|  |   application_id?: string | ||||||
|  |   parent_id?: string | ||||||
|  |   last_pin_timestamp?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Overwrite { | ||||||
|  |   id: string | ||||||
|  |   type: number | ||||||
|  |   allow: string | ||||||
|  |   deny: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum ChannelTypes { | ||||||
|  |   GUILD_TEXT = 0, | ||||||
|  |   DM = 1, | ||||||
|  |   GUILD_VOICE = 2, | ||||||
|  |   GROUP_DM = 3, | ||||||
|  |   GUILD_CATEGORY = 4, | ||||||
|  |   GUILD_NEWS = 5, | ||||||
|  |   GUILD_STORE = 6 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessagePayload { | ||||||
|  |   id: string | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   author: User | ||||||
|  |   member?: Member | ||||||
|  |   content: string | ||||||
|  |   timestamp: string | ||||||
|  |   edited_timestamp: string | undefined | ||||||
|  |   tts: boolean | ||||||
|  |   mention_everyone: boolean | ||||||
|  |   mentions: User[] | ||||||
|  |   mention_roles: Role[] | ||||||
|  |   mention_channels?: ChannelMention[] | ||||||
|  |   attachments: Attachment[] | ||||||
|  |   embeds: EmbedPayload[] | ||||||
|  |   reactions?: Reaction[] | ||||||
|  |   nonce?: number | string | ||||||
|  |   pinned: boolean | ||||||
|  |   webhook_id?: string | ||||||
|  |   type: number | ||||||
|  |   activity?: MessageActivity | ||||||
|  |   application?: MessageApplication | ||||||
|  |   message_reference?: MessageReference | ||||||
|  |   flags?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ChannelMention { | ||||||
|  |   id: string | ||||||
|  |   guild_id: string | ||||||
|  |   type: ChannelTypes | ||||||
|  |   name: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Attachment { | ||||||
|  |   id: string | ||||||
|  |   filename: string | ||||||
|  |   size: number | ||||||
|  |   url: string | ||||||
|  |   proxy_url: string | ||||||
|  |   height: number | undefined | ||||||
|  |   width: number | undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedPayload { | ||||||
|  |   title?: string | ||||||
|  |   type?: EmbedTypes | ||||||
|  |   description?: string | ||||||
|  |   url?: string | ||||||
|  |   timestamp?: string | ||||||
|  |   color?: number | ||||||
|  |   footer?: EmbedFooter | ||||||
|  |   image?: EmbedImage | ||||||
|  |   thumbnail?: EmbedThumbnail | ||||||
|  |   video?: EmbedVideo | ||||||
|  |   provider?: EmbedProvider | ||||||
|  |   author?: EmbedAuthor | ||||||
|  |   fields?: EmbedField[] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type EmbedTypes = 'rich' | 'image' | 'video' | 'gifv' | 'article' | 'link' | ||||||
|  | 
 | ||||||
|  | interface EmbedField { | ||||||
|  |   name: string | ||||||
|  |   value: string | ||||||
|  |   inline?: boolean | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedAuthor { | ||||||
|  |   name?: string | ||||||
|  |   url?: string | ||||||
|  |   icon_url?: string | ||||||
|  |   proxy_icon_url?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedFooter { | ||||||
|  |   text: string | ||||||
|  |   icon_url?: string | ||||||
|  |   proxy_icon_url?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedImage { | ||||||
|  |   url?: string | ||||||
|  |   proxy_url?: string | ||||||
|  |   height?: number | ||||||
|  |   width?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedProvider { | ||||||
|  |   name?: string | ||||||
|  |   url?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedVideo { | ||||||
|  |   url?: string | ||||||
|  |   height?: number | ||||||
|  |   width?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface EmbedThumbnail { | ||||||
|  |   url?: string | ||||||
|  |   proxy_url?: string | ||||||
|  |   height?: number | ||||||
|  |   width?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Reaction { | ||||||
|  |   count: number | ||||||
|  |   me: boolean | ||||||
|  |   emoji: EmojiPayload | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageActivity { | ||||||
|  |   type: MessageTypes | ||||||
|  |   party_id?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageApplication { | ||||||
|  |   id: string | ||||||
|  |   cover_image?: string | ||||||
|  |   desription: string | ||||||
|  |   icon: string | undefined | ||||||
|  |   name: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageReference { | ||||||
|  |   message_id?: string | ||||||
|  |   channel_id?: string | ||||||
|  |   guild_id?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum MessageTypes { | ||||||
|  |   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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum MessageActivityTypes { | ||||||
|  |   JOIN = 1, | ||||||
|  |   SPECTATE = 2, | ||||||
|  |   LISTEN = 3, | ||||||
|  |   JOIN_REQUEST = 4 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum MessageFlags { | ||||||
|  |   CROSSPOSTED = 1 << 0, | ||||||
|  |   IS_CROSSPOST = 1 << 1, | ||||||
|  |   SUPPRESS_EMBEDS = 1 << 2, | ||||||
|  |   SOURCE_MESSAGE_DELETED = 1 << 3, | ||||||
|  |   URGENT = 1 << 4 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface FollowedChannel { | ||||||
|  |   channel_id: string | ||||||
|  |   webhook_id: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Reaction { | ||||||
|  |   count: number | ||||||
|  |   me: boolean | ||||||
|  |   emoji: EmojiPayload | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Overwrite { | ||||||
|  |   id: string | ||||||
|  |   type: number | ||||||
|  |   allow: string | ||||||
|  |   deny: string | ||||||
|  | } | ||||||
|  | interface ChannelMention { | ||||||
|  |   id: string | ||||||
|  |   guild_id: string | ||||||
|  |   type: ChannelTypes | ||||||
|  |   name: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export { | ||||||
|  |   ChannelPayload, | ||||||
|  |   ChannelTypes, | ||||||
|  |   ChannelMention, | ||||||
|  |   Attachment, | ||||||
|  |   Reaction, | ||||||
|  |   MessageActivity, | ||||||
|  |   MessageApplication, | ||||||
|  |   MessageReference, | ||||||
|  |   MessagePayload, | ||||||
|  |   EmbedPayload, | ||||||
|  |   EmbedTypes, | ||||||
|  |   EmbedFooter, | ||||||
|  |   EmbedImage, | ||||||
|  |   EmbedThumbnail, | ||||||
|  |   EmbedVideo, | ||||||
|  |   EmbedProvider, | ||||||
|  |   EmbedAuthor, | ||||||
|  |   EmbedField | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								src/types/emojiTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/types/emojiTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | 
 | ||||||
|  | export interface EmojiPayload { | ||||||
|  |   id: string | ||||||
|  |   name: string | ||||||
|  |   roles?: [] | ||||||
|  |   user?: User | ||||||
|  |   require_colons?: boolean | ||||||
|  |   managed?: boolean | ||||||
|  |   animated?: boolean | ||||||
|  |   available?: boolean | ||||||
|  | } | ||||||
|  | @ -4,7 +4,7 @@ import { | ||||||
|   DISCORD_API_URL, |   DISCORD_API_URL, | ||||||
|   DISCORD_API_VERSION, |   DISCORD_API_VERSION, | ||||||
|   DISCORD_CDN_URL |   DISCORD_CDN_URL | ||||||
| } from '../consts/urlsAndVersions' | } from '../consts/urlsAndVersions.ts' | ||||||
| 
 | 
 | ||||||
| //Guild Endpoints
 | //Guild Endpoints
 | ||||||
| const GUILDS = `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds` | const GUILDS = `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds` | ||||||
|  | @ -16,10 +16,6 @@ const GUILD_WIDGET = (guildID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/widget` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/widget` | ||||||
| const GUILD_EMOJI = (guildID: string, emoji_id: string) => | const GUILD_EMOJI = (guildID: string, emoji_id: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emoji_id}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emoji_id}` | ||||||
| const GUILD_EMOJIS = (guildID: string) => |  | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis` |  | ||||||
| const GUILD_REGIONS = (guildID: string) => |  | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/regions` |  | ||||||
| const GUILD_ROLE = (guildID: string, roleID: string) => | const GUILD_ROLE = (guildID: string, roleID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/roles/${roleID}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/roles/${roleID}` | ||||||
| const GUILD_ROLES = (guildID: string) => | const GUILD_ROLES = (guildID: string) => | ||||||
|  | @ -40,6 +36,8 @@ const GUILD_CHANNELS = (guildID: string, channelID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/channels` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/channels` | ||||||
| const GUILD_MEMBER = (guildID: string, memberID: string) => | const GUILD_MEMBER = (guildID: string, memberID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}` | ||||||
|  | const GUILD_MEMBERS = (guildID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members` | ||||||
| const GUILD_MEMBER_ROLE = (guildID: string, memberID: string, roleID: string) => | const GUILD_MEMBER_ROLE = (guildID: string, memberID: string, roleID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}/roles/${roleID}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}/roles/${roleID}` | ||||||
| const GUILD_INVITES = (guildID: string) => | const GUILD_INVITES = (guildID: string) => | ||||||
|  | @ -48,9 +46,14 @@ const GUILD_LEAVE = (guildID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/guilds/${guildID}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/guilds/${guildID}` | ||||||
| const GUILD_PRUNE = (guildID: string) => | const GUILD_PRUNE = (guildID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/prune` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/prune` | ||||||
| const VANITY_URL = (guildID: string) => | const GUILD_VANITY_URL = (guildID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/vanity-url` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/vanity-url` | ||||||
| 
 | const GUILD_NICK = (guildID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/@me/nick` | ||||||
|  | const GUILD_WIDGET_IMAGE = (guildID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/widget.png` | ||||||
|  | const GUILD_PREVIEW = (guildID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/preview` | ||||||
| 
 | 
 | ||||||
| //Channel Endpoints
 | //Channel Endpoints
 | ||||||
| const CHANNEL = (channelID: string) => | const CHANNEL = (channelID: string) => | ||||||
|  | @ -65,11 +68,24 @@ const CHANNEL_CROSSPOST = (channelID: string, messageID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/crosspost` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/crosspost` | ||||||
| const MESSAGE_REACTIONS = (channelID: string, messageID: string) => | const MESSAGE_REACTIONS = (channelID: string, messageID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions` | ||||||
| const MESSAGE_REACTION = (channelID: string, messageID: string, emoji: string) => | const MESSAGE_REACTION = ( | ||||||
|  |   channelID: string, | ||||||
|  |   messageID: string, | ||||||
|  |   emoji: string | ||||||
|  | ) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emoji}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emoji}` | ||||||
| const MESSAGE_REACTION_ME = (channelID: string, messageID: string, emojiID: string) => | const MESSAGE_REACTION_ME = ( | ||||||
|  |   channelID: string, | ||||||
|  |   messageID: string, | ||||||
|  |   emojiID: string | ||||||
|  | ) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/@me` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/@me` | ||||||
| const MESSAGE_REACTION_USER = (channelID: string, messageID: string, emojiID: string, userID: string) => | const MESSAGE_REACTION_USER = ( | ||||||
|  |   channelID: string, | ||||||
|  |   messageID: string, | ||||||
|  |   emojiID: string, | ||||||
|  |   userID: string | ||||||
|  | ) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/${userID}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/${userID}` | ||||||
| const CHANNEL_BULK_DELETE = (channelID: string) => | const CHANNEL_BULK_DELETE = (channelID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/bulk-delete` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/bulk-delete` | ||||||
|  | @ -77,8 +93,16 @@ const CHANNEL_FOLLOW = (channelID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/followers` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/followers` | ||||||
| const CHANNEL_INVITES = (channelID: string) => | const CHANNEL_INVITES = (channelID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/invites` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/invites` | ||||||
|  | const CHANNEL_PIN = (channelID: string, messageID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/pins/${messageID}` | ||||||
| const CHANNEL_PINS = (channelID: string) => | const CHANNEL_PINS = (channelID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/pins` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/pins` | ||||||
|  | const CHANNEL_PERMISSION = (channelID: string, overrideID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/permissions/${overrideID}` | ||||||
|  | const CHANNEL_TYPING = (channelID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/typing` | ||||||
|  | const GROUP_RECIPIENT = (channelID: string, userID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/recipient/${userID}` | ||||||
| 
 | 
 | ||||||
| //User Endpoints
 | //User Endpoints
 | ||||||
| const CURRENT_USER = `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me` | const CURRENT_USER = `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me` | ||||||
|  | @ -90,8 +114,6 @@ const LEAVE_GUILD = (guildID: string) => | ||||||
| const USER = (userID: string) => | const USER = (userID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/${userID}` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/${userID}` | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //Webhook Endpoints
 | //Webhook Endpoints
 | ||||||
| const CHANNEL_WEBHOOKS = (channelID: string) => | const CHANNEL_WEBHOOKS = (channelID: string) => | ||||||
|   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/webhooks` |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/webhooks` | ||||||
|  | @ -112,22 +134,47 @@ const GATEWAY_BOT = `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/gateway/bot` | ||||||
| 
 | 
 | ||||||
| //CDN Endpoints
 | //CDN Endpoints
 | ||||||
| const CUSTOM_EMOJI = (emojiID: string) => | const CUSTOM_EMOJI = (emojiID: string) => | ||||||
|   `${DISCORD_CDN_URL}/emojis/${emojiID}.png` |   `${DISCORD_CDN_URL}/emojis/${emojiID}` | ||||||
| const GUILD_ICON = (guildID: string, iconID: number) => | const GUILD_ICON = (guildID: string, iconID: number) => | ||||||
|   `${DISCORD_CDN_URL}/icons/${guildID}/${iconID}.png` |   `${DISCORD_CDN_URL}/icons/${guildID}/${iconID}` | ||||||
| const GUILD_SPLASH = (guildID: string, guildSPLASH: string) => | const GUILD_SPLASH = (guildID: string, guildSPLASH: string) => | ||||||
|   `${DISCORD_CDN_URL}/splashes/${guildID}/${guildSPLASH}.png` |   `${DISCORD_CDN_URL}/splashes/${guildID}/${guildSPLASH}` | ||||||
| const GUILD_DISCOVERY_SPLASH = (guildID: string, guildDiscoverySplash: string) => | const GUILD_DISCOVERY_SPLASH = ( | ||||||
|   `${DISCORD_CDN_URL}/discovery-splashes/${guildID}/${guildDiscoverySplash}.png	` |   guildID: string, | ||||||
|  |   guildDiscoverySplash: string | ||||||
|  | ) => | ||||||
|  |   `${DISCORD_CDN_URL}/discovery-splashes/${guildID}/${guildDiscoverySplash}` | ||||||
| const GUILD_BANNER = (guildID: string, guildBANNER: string) => | const GUILD_BANNER = (guildID: string, guildBANNER: string) => | ||||||
|   `${DISCORD_CDN_URL}/banners/${guildID}/${guildBANNER}.png` |   `${DISCORD_CDN_URL}/banners/${guildID}/${guildBANNER}` | ||||||
| const DEFAULT_USER_AVATAR = (iconID: string) => | const DEFAULT_USER_AVATAR = (iconID: string) => | ||||||
|   `${DISCORD_CDN_URL}/embed/avatars/${iconID}.png` |   `${DISCORD_CDN_URL}/embed/avatars/${iconID}` | ||||||
| const USER_AVATAR = (userID: string, iconID: string) => | const USER_AVATAR = (userID: string, iconID: string) => | ||||||
|   `${DISCORD_CDN_URL}/avatars/${userID}/${iconID}.png` |   `${DISCORD_CDN_URL}/avatars/${userID}/${iconID}` | ||||||
| const APPLICATION_ASSET = (applicationID: string, assetID: number) => | const APPLICATION_ASSET = (applicationID: string, assetID: number) => | ||||||
|   `${DISCORD_CDN_URL}/app-icons/${applicationID}/${assetID}.png` |   `${DISCORD_CDN_URL}/app-icons/${applicationID}/${assetID}` | ||||||
| const ACHIEVEMENT_ICON = (applicationID: string, achievementID: string,  iconHASH: string) => | const ACHIEVEMENT_ICON = ( | ||||||
|   `${DISCORD_CDN_URL}/app-assets/${applicationID}/achievements/${achievementID}/icons/${iconHASH}.png` |   applicationID: string, | ||||||
|  |   achievementID: string, | ||||||
|  |   iconHASH: string | ||||||
|  | ) => | ||||||
|  |   `${DISCORD_CDN_URL}/app-assets/${applicationID}/achievements/${achievementID}/icons/${iconHASH}` | ||||||
| const TEAM_ICON = (teamID: string, iconID: string) => | const TEAM_ICON = (teamID: string, iconID: string) => | ||||||
|   `${DISCORD_CDN_URL}/team-icons/${teamID}/${iconID}.png` |   `${DISCORD_CDN_URL}/team-icons/${teamID}/${iconID}` | ||||||
|  | 
 | ||||||
|  | //Emoji Endpoints
 | ||||||
|  | const EMOJI = (guildID: string, emojiID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emojiID}` | ||||||
|  | const EMOJIS = (guildID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis` | ||||||
|  | 
 | ||||||
|  | //Template Endpoint
 | ||||||
|  | const TEMPLATE = (templateCODE: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/templates/${templateCODE}` | ||||||
|  | 
 | ||||||
|  | //Invite Endpoint
 | ||||||
|  | const INVITE = (inviteCODE: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/invites/${inviteCODE}` | ||||||
|  | 
 | ||||||
|  | //Voice Endpoint
 | ||||||
|  | const VOICE_REGIONS = (guildID: string) => | ||||||
|  |   `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/regions` | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import { GatewayOpcodes } from '../types/gatewayTypes.ts' | import { GatewayOpcodes, GatewayEvents } from '../types/gatewayTypes.ts' | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Gateway response from Discord. |  * Gateway response from Discord. | ||||||
|  | @ -8,7 +8,7 @@ interface GatewayResponse { | ||||||
|   op: GatewayOpcodes |   op: GatewayOpcodes | ||||||
|   d: any |   d: any | ||||||
|   s?: number |   s?: number | ||||||
|   t?: string |   t?: GatewayEvents | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export { GatewayResponse } | export { GatewayResponse } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,11 @@ | ||||||
| // https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway
 | // https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway
 | ||||||
|  | // https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-events
 | ||||||
|  | import { Emoji } from '../structures/emoji.ts' | ||||||
|  | import { Member } from '../structures/member.ts' | ||||||
|  | import { Role } from '../structures/role.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | import { MemberPayload } from './guildTypes.ts' | ||||||
|  | import { ActivityPayload, PresenceUpdatePayload } from './presenceTypes.ts' | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Gateway OPcodes from Discord docs. |  * Gateway OPcodes from Discord docs. | ||||||
|  | @ -55,4 +62,339 @@ enum GatewayIntents { | ||||||
|   DIRECT_MESSAGE_TYPING = 1 << 13 |   DIRECT_MESSAGE_TYPING = 1 << 13 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export { GatewayCloseCodes, GatewayOpcodes, GatewayIntents } | enum GatewayEvents { | ||||||
|  |   Hello = 'HELLO', | ||||||
|  |   Ready = 'READY', | ||||||
|  |   Resumed = 'RESUMED', | ||||||
|  |   Reconnect = 'RECONNECT', | ||||||
|  |   Invalid_Session = 'INVALID_SESSION', | ||||||
|  |   Channel_Create = 'CHANNEL_CREATE', | ||||||
|  |   Channel_Update = 'CHANNEL_UPDATE', | ||||||
|  |   Channel_Delete = 'CHANNEL_DELETE', | ||||||
|  |   Channel_Pins_Update = 'CHANNEL_PIN_UPDATE', | ||||||
|  |   Guild_Create = 'GUILD_CREATE', | ||||||
|  |   Guild_Update = 'GUILD_UPDATE', | ||||||
|  |   Guild_Delete = 'GUILD_DELETE', | ||||||
|  |   Guild_Ban_Add = 'GUILD_BAN_ADD', | ||||||
|  |   Guild_Ban_Remove = 'GUILD_BAN_REMOVE', | ||||||
|  |   Guild_Emojis_Update = 'GUILD_EMOJIS_UPDATE', | ||||||
|  |   Guild_Integrations_Update = 'GUILD_INTEGRATIONS_UPDATE', | ||||||
|  |   Guild_Member_Add = 'GUILD_MEMBER_ADD', | ||||||
|  |   Guild_Member_Remove = 'GUILD_MEMBER_REMOVE', | ||||||
|  |   Guild_Member_Update = 'GUILD_MEMBER_UPDATE', | ||||||
|  |   Guild_Members_Chunk = 'GUILD_MEMBERS_CHUNK', | ||||||
|  |   Guild_Role_Create = 'GUILD_ROLE_CREATE', | ||||||
|  |   Guild_Role_Update = 'GUILD_ROLE_UPDATE', | ||||||
|  |   Guild_Role_Delete = 'GUILD_ROLE_DELETE', | ||||||
|  |   Invite_Create = 'INVITE_CREATE', | ||||||
|  |   Invite_Delete = 'INVITE_DELETE', | ||||||
|  |   Message_Create = 'MESSAGE_CREATE', | ||||||
|  |   Message_Update = 'MESSAGE_UPDATE', | ||||||
|  |   Message_Delete = 'MESSAG_DELETE', | ||||||
|  |   Message_Delete_Bulk = 'MESSAGE_DELETE_BULK', | ||||||
|  |   Message_Reaction_Add = 'MESSAGE_REACTION_ADD', | ||||||
|  |   Message_Reaction_Remove = 'MESSAGE_REACTION_REMOVE', | ||||||
|  |   Message_Reaction_Remove_All = 'MESSAGE_REACTION_REMOVE_ALL', | ||||||
|  |   Message_Reaction_Remove_Emoji = 'MESSAGE_REACTION_REMOVE_EMOJI', | ||||||
|  |   Presence_Update = 'PRESENCE_UPDATE', | ||||||
|  |   Typing_Start = 'TYPING_START', | ||||||
|  |   User_Update = 'USER_UPDATE', | ||||||
|  |   Voice_State_Update = 'VOICE_STATE_UPDATE', | ||||||
|  |   Voice_Server_Update = 'VOICE_SERVER_UPDATE', | ||||||
|  |   Webhooks_Update = 'WEBHOOKS_UPDATE' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface IdentityPayload { | ||||||
|  |   token: string | ||||||
|  |   properties: IdentityConnection | ||||||
|  |   compress?: boolean | ||||||
|  |   large_threshold?: number | ||||||
|  |   shard?: number[] | ||||||
|  |   presence?: UpdateStatus | ||||||
|  |   guildSubscriptions?: boolean | ||||||
|  |   intents: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum UpdateStatus { | ||||||
|  |   online = 'online', | ||||||
|  |   dnd = 'dnd', | ||||||
|  |   afk = 'idle', | ||||||
|  |   invisible = 'invisible', | ||||||
|  |   offline = 'offline' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface IdentityConnection { | ||||||
|  |   $os: 'linux' | ||||||
|  |   $browser: 'discord.deno' | ||||||
|  |   $device: 'discord.deno' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Resume { | ||||||
|  |   token: string | ||||||
|  |   session_id: string | ||||||
|  |   seq: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildRequestMembers { | ||||||
|  |   guild_id: string | string[] | ||||||
|  |   query?: string | ||||||
|  |   limit: number | ||||||
|  |   presences?: boolean //do you have any problems? tell me! i am so handsome
 | ||||||
|  |   user_ids?: string | string[] | ||||||
|  |   nonce?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GatewayVoiceStateUpdate { | ||||||
|  |   guild_id: string | ||||||
|  |   channel_id: string | ||||||
|  |   self_mute: boolean | ||||||
|  |   self_deaf: boolean | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GatewayStatusUpdate { | ||||||
|  |   since: number | undefined | ||||||
|  |   activities: ActivityPayload[] | ||||||
|  |   status: string | ||||||
|  |   afk: boolean | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Hello { | ||||||
|  |   heartbeat_interval: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ReadyEvent { | ||||||
|  |   v: number | ||||||
|  |   user: User | ||||||
|  |   privateChannels: [] | ||||||
|  |   guilds: [] | ||||||
|  |   session_id: string | ||||||
|  |   shard?: number[] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ChannelPinsUpdate { | ||||||
|  |   guild_id?: string | ||||||
|  |   channel_id: string | ||||||
|  |   last_pin_timestamp?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildBanAdd { | ||||||
|  |   guild_id: string | ||||||
|  |   user: User | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildBanRemove { | ||||||
|  |   guild_id: string | ||||||
|  |   user: User | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildEmojiUpdate { | ||||||
|  |   guild_id: string | ||||||
|  |   emojis: [] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildIntegrationsUpdate { | ||||||
|  |   guild_id: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildMemberAddExtra { | ||||||
|  |   guild_id: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildMemberRemove { | ||||||
|  |   guild_id: string | ||||||
|  |   user: User | ||||||
|  | } | ||||||
|  | interface GuildMemberUpdate { | ||||||
|  |   guild_id: string | ||||||
|  |   roles: string[] | ||||||
|  |   user: User | ||||||
|  |   nick?: string | undefined | ||||||
|  |   joined_at: string | ||||||
|  |   premium_since?: string | undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildMemberChunk { | ||||||
|  |   guild_id: string | ||||||
|  |   members: MemberPayload[] | ||||||
|  |   chunk_index: number | ||||||
|  |   chunk_count: number | ||||||
|  |   not_found?: [] | ||||||
|  |   presences?: PresenceUpdatePayload[] | ||||||
|  |   nonce?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildRoleCreate { | ||||||
|  |   guild_id: string | ||||||
|  |   role: Role | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildRoleUpdate { | ||||||
|  |   guild_id: string | ||||||
|  |   role: Role | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface GuildRoleDelete { | ||||||
|  |   guild_id: string | ||||||
|  |   role_id: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface InviteCreate { | ||||||
|  |   channel_id: string | ||||||
|  |   code: string | ||||||
|  |   created_at: string | ||||||
|  |   guild_id?: string | ||||||
|  |   inviter?: User | ||||||
|  |   max_age: number | ||||||
|  |   max_uses: number | ||||||
|  |   target_user?: User | ||||||
|  |   target_user_type?: number | ||||||
|  |   temporary: boolean | ||||||
|  |   uses: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface InviteDelete { | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   code: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageDelete { | ||||||
|  |   id: string | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageDeleteBulk { | ||||||
|  |   ids: string[] | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageReactionAdd { | ||||||
|  |   user_id: string | ||||||
|  |   channel_id: string | ||||||
|  |   message_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   emoji: Emoji | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageReactionRemove { | ||||||
|  |   user_id: string | ||||||
|  |   channel_id: string | ||||||
|  |   message_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   emoji: Emoji | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageReactionRemoveAll { | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   message_id: string | ||||||
|  |   emoji: Emoji | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MessageReactionRemove { | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   message_id: string | ||||||
|  |   emoji: Emoji | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface PresenceUpdate { | ||||||
|  |   user: User | ||||||
|  |   guild_id: string | ||||||
|  |   status: string | ||||||
|  |   activities: ActivityPayload[] | ||||||
|  |   client_status: UpdateStatus[] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface CilentStatus { | ||||||
|  |   desktop?: string | ||||||
|  |   moblie?: string | ||||||
|  |   web?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface Activity { | ||||||
|  |   name: string | ||||||
|  |   type: number | ||||||
|  |   url?: string | undefined | ||||||
|  |   created_at: number | ||||||
|  |   timestamps?: string | ||||||
|  |   application_id: string | ||||||
|  |   details?: string | undefined | ||||||
|  |   state?: string | undefined | ||||||
|  |   emoji?: Emoji | undefined | ||||||
|  |   party?: ActivityParty | ||||||
|  |   assets?: ActivityAssets | ||||||
|  |   secrets?: ActivitySecrets | ||||||
|  |   instance?: boolean | ||||||
|  |   flags?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum ActivityTypes { | ||||||
|  |   GAME = 0, | ||||||
|  |   STREAMING = 1, | ||||||
|  |   LISTENING = 2, | ||||||
|  |   CUSTOM = 4, | ||||||
|  |   COMPETING = 5 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityTimestamps { | ||||||
|  |   start?: number | ||||||
|  |   end?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityEmoji { | ||||||
|  |   name: string | ||||||
|  |   id?: string | ||||||
|  |   animated?: boolean | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityParty { | ||||||
|  |   id?: string | ||||||
|  |   size?: number[] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityAssets { | ||||||
|  |   large_image?: string | ||||||
|  |   large_text?: string | ||||||
|  |   small_image?: string | ||||||
|  |   small_text?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivitySecrets { | ||||||
|  |   join?: string | ||||||
|  |   spectate?: string | ||||||
|  |   match?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum ActivityFlags { | ||||||
|  |   INSTANCE = 1 << 0, | ||||||
|  |   JOIN = 1 << 1, | ||||||
|  |   SPECTATE = 1 << 2, | ||||||
|  |   JOIN_REQUEST = 1 << 3, | ||||||
|  |   SYNC = 1 << 4, | ||||||
|  |   PLAY = 1 << 5 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface TypeStart { | ||||||
|  |   channel_id: string | ||||||
|  |   guild_id?: string | ||||||
|  |   user_id: string | ||||||
|  |   timestamp: number | ||||||
|  |   member?: Member | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface VoiceServerUpdate { | ||||||
|  |   token: string | ||||||
|  |   guild_id: string | ||||||
|  |   endpoint: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface WebhooksUpdate { | ||||||
|  |   guild_id: string | ||||||
|  |   channel_id: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //https://discord.com/developers/docs/topics/gateway#typing-start-typing-start-event-fields
 | ||||||
|  | export { GatewayCloseCodes, GatewayOpcodes, GatewayIntents, GatewayEvents } | ||||||
|  |  | ||||||
							
								
								
									
										117
									
								
								src/types/guildTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								src/types/guildTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,117 @@ | ||||||
|  | import { Channel } from '../structures/channel.ts' | ||||||
|  | import { Emoji } from '../structures/emoji.ts' | ||||||
|  | import { Member } from '../structures/member.ts' | ||||||
|  | import { Role } from '../structures/role.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | import { PresenceUpdatePayload } from './presenceTypes.ts' | ||||||
|  | import { VoiceStatePayload } from './voiceTypes.ts' | ||||||
|  | 
 | ||||||
|  | interface GuildPayload { | ||||||
|  |   id: string | ||||||
|  |   name: string | ||||||
|  |   icon: string | undefined | ||||||
|  |   icon_hash?: string | undefined | ||||||
|  |   splash: string | undefined | ||||||
|  |   discovery_splash: string | undefined | ||||||
|  |   owner?: boolean | ||||||
|  |   owner_id: string | ||||||
|  |   permissions?: string | ||||||
|  |   region: string | ||||||
|  |   afk_channel_id: string | undefined | ||||||
|  |   afk_timeout: number | ||||||
|  |   widget_enabled?: boolean | ||||||
|  |   widge_channel_id?: string | undefined | ||||||
|  |   verification_level: string | ||||||
|  |   default_message_notifications: string | ||||||
|  |   explicit_content_filter: string | ||||||
|  |   roles: Role[] | ||||||
|  |   emojis: Emoji[] | ||||||
|  |   features: GuildFeatures[] | ||||||
|  |   mfa_level: string | ||||||
|  |   application_id: string | undefined | ||||||
|  |   system_channel_id: string | undefined | ||||||
|  |   system_channel_flags: string | ||||||
|  |   rules_channel_id: string | undefined | ||||||
|  |   joined_at?: string | ||||||
|  |   large?: boolean | ||||||
|  |   unavailable: boolean | ||||||
|  |   member_count?: number | ||||||
|  |   voice_states?: VoiceStatePayload[] | ||||||
|  |   members?: Member[] | ||||||
|  |   channels?: Channel[] | ||||||
|  |   presences?: PresenceUpdatePayload[] | ||||||
|  |   max_presences?: number | undefined | ||||||
|  |   max_members?: number | ||||||
|  |   vanity_url_code: string | undefined | ||||||
|  |   description: string | undefined | ||||||
|  |   banner: string | undefined | ||||||
|  |   premium_tier: number | ||||||
|  |   premium_subscription_count?: number | ||||||
|  |   preferred_locale: string | ||||||
|  |   public_updates_channel_id: string | undefined | ||||||
|  |   max_video_channel_users?: number | ||||||
|  |   approximate_number_count?: number | ||||||
|  |   approximate_presence_count?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface MemberPayload { | ||||||
|  |   user: User | ||||||
|  |   nick: string | undefined | ||||||
|  |   roles: Role[] | ||||||
|  |   joined_at: string | ||||||
|  |   premium_since?: string | undefined | ||||||
|  |   deaf: boolean | ||||||
|  |   mute: boolean | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum MessageNotification { | ||||||
|  |   ALL_MESSAGES = 0, | ||||||
|  |   ONLY_MENTIONS = 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum ContentFilter { | ||||||
|  |   DISABLED = 0, | ||||||
|  |   MEMBERS_WITHOUT_ROLES = 1, | ||||||
|  |   ALL_MEMBERS = 3 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum MFA { | ||||||
|  |   NONE = 0, | ||||||
|  |   ELEVATED = 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum Verification { | ||||||
|  |   NONE = 0, | ||||||
|  |   LOW = 1, | ||||||
|  |   MEDIUM = 2, | ||||||
|  |   HIGH = 3, | ||||||
|  |   VERY_HIGH = 4 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum PremiumTier { | ||||||
|  |   NONE = 0, | ||||||
|  |   TIER_1 = 1, | ||||||
|  |   TIER_2 = 2, | ||||||
|  |   TIER_3 = 3 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum SystemChannelFlags { | ||||||
|  |   SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0, | ||||||
|  |   SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GuildFeatures = | ||||||
|  |   | 'INVITE_SPLASH' | ||||||
|  |   | 'VIP_REGIONS' | ||||||
|  |   | 'VANITY_URL' | ||||||
|  |   | 'VERIFIED' | ||||||
|  |   | 'PARTNERED' | ||||||
|  |   | 'PUBLIC' | ||||||
|  |   | 'COMMERCE' | ||||||
|  |   | 'NEWS' | ||||||
|  |   | 'DISCOVERABLE' | ||||||
|  |   | 'FEATURABLE' | ||||||
|  |   | 'ANIMATED_ICON' | ||||||
|  |   | 'BANNER' | ||||||
|  | 
 | ||||||
|  | export { MemberPayload, GuildPayload, GuildFeatures } | ||||||
							
								
								
									
										14
									
								
								src/types/inviteTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/types/inviteTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | import { Channel } from '../structures/channel.ts' | ||||||
|  | import { Guild } from '../structures/guild.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | 
 | ||||||
|  | export interface InvitePayload { | ||||||
|  |   code: string | ||||||
|  |   guild?: Guild | ||||||
|  |   channel: Channel | ||||||
|  |   inviter?: User | ||||||
|  |   target_user?: User | ||||||
|  |   target_user_type?: number | ||||||
|  |   approximate_presence_count?: number | ||||||
|  |   approximate_member_count?: number | ||||||
|  | } | ||||||
|  | @ -1,8 +1,4 @@ | ||||||
| // https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags
 | // https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags
 | ||||||
| // 귀하는 해갈
 |  | ||||||
| // 그렇습니다
 |  | ||||||
| 
 |  | ||||||
| //이거 필요한건가 -와갈드- -UnderC-
 |  | ||||||
| 
 | 
 | ||||||
| enum PermissionFlags { | enum PermissionFlags { | ||||||
|   CREATE_INSTANT_INVITE = 0x00000001, |   CREATE_INSTANT_INVITE = 0x00000001, | ||||||
|  |  | ||||||
							
								
								
									
										72
									
								
								src/types/presenceTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/types/presenceTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | 
 | ||||||
|  | interface PresenceUpdatePayload { | ||||||
|  |   user: User | ||||||
|  |   guild_id: string | ||||||
|  |   status: string | ||||||
|  |   activities: ActivityPayload | ||||||
|  |   client_status: ClientStatus | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ClientStatus { | ||||||
|  |   desktop?: string | ||||||
|  |   mobile?: string | ||||||
|  |   web?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityPayload { | ||||||
|  |   name: string | ||||||
|  |   type: 0 | 1 | 2 | 3 | 4 | 5 | ||||||
|  |   url?: string | undefined | ||||||
|  |   created_at: number | ||||||
|  |   timestamps?: ActivityTimestamps | ||||||
|  |   application_id?: string | ||||||
|  |   details?: string | undefined | ||||||
|  |   state?: string | undefined | ||||||
|  |   emoji?: ActivityEmoji | ||||||
|  |   party?: ActivityParty | ||||||
|  |   assets?: ActivityAssets | ||||||
|  |   secrets?: ActivitySecrets | ||||||
|  |   instance?: boolean | ||||||
|  |   flags?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityTimestamps { | ||||||
|  |   start?: number | ||||||
|  |   end?: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityEmoji { | ||||||
|  |   name: string | ||||||
|  |   id?: string | ||||||
|  |   animated?: boolean | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityParty { | ||||||
|  |   id?: string | ||||||
|  |   size?: number[] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivityAssets { | ||||||
|  |   large_image?: string | ||||||
|  |   large_text?: string | ||||||
|  |   small_image?: string | ||||||
|  |   small_text?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface ActivitySecrets { | ||||||
|  |   join?: string | ||||||
|  |   spectate?: string | ||||||
|  |   match?: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum ActivityFlags { | ||||||
|  |   INSTANCE = 1 << 0, | ||||||
|  |   JOIN = 1 << 1, | ||||||
|  |   SPECTATE = 1 << 2, | ||||||
|  |   JOIN_REQUEST = 1 << 3, | ||||||
|  |   SYNC = 1 << 4, | ||||||
|  |   PLAY = 1 << 5 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export { ActivityPayload, PresenceUpdatePayload } | ||||||
							
								
								
									
										10
									
								
								src/types/roleTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/types/roleTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | ||||||
|  | export interface RolePayload { | ||||||
|  |   id: string | ||||||
|  |   name: string | ||||||
|  |   color: number | ||||||
|  |   hoist: boolean | ||||||
|  |   position: number | ||||||
|  |   permissions: string | ||||||
|  |   managed: boolean | ||||||
|  |   mentionable: boolean | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								src/types/snowflake.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/types/snowflake.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | export class Snowflake { | ||||||
|  |   id: string | ||||||
|  |   constructor (id: string) { | ||||||
|  |     this.id = id | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   deconstruct () { | ||||||
|  |     const snowflake = BigInt.asUintN(64, BigInt(this.id)) | ||||||
|  |     const res = { | ||||||
|  |       timestamp: ((snowflake << BigInt(22)) + BigInt(1420070400000)).toString(), | ||||||
|  |       workerId: ((snowflake & BigInt(0x3e0000)) >> BigInt(17)).toString(), | ||||||
|  |       processId: ((snowflake & BigInt(0x1f000)) >> BigInt(12)).toString(), | ||||||
|  |       increment: (snowflake & BigInt(0xfff)).toString() | ||||||
|  |     } | ||||||
|  |     return res | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // BigInt라서 이걸 어케 할까 고심끝에 나온게 toString 읍
 | ||||||
|  | // 엄...
 | ||||||
|  | 
 | ||||||
|  | // deconstruct가 소멸자임? 색 봐서는 아닌거같은데
 | ||||||
							
								
								
									
										16
									
								
								src/types/templateTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/types/templateTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | import { Guild } from '../structures/guild.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | 
 | ||||||
|  | export interface TemplatePayload { | ||||||
|  |   code: string | ||||||
|  |   name: string | ||||||
|  |   description: string | undefined | ||||||
|  |   usage_count: number | ||||||
|  |   creator_id: string | ||||||
|  |   creator: User | ||||||
|  |   created_at: string | ||||||
|  |   updated_at: string | ||||||
|  |   source_guild_id: string | ||||||
|  |   serialized_source_guild: Guild | ||||||
|  |   is_dirty: boolean | undefined | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								src/types/userTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/types/userTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | export interface UserPayload { | ||||||
|  |   id: string | ||||||
|  |   username: string | ||||||
|  |   discriminator: string | ||||||
|  |   avatar?: string | ||||||
|  |   bot?: boolean | ||||||
|  |   system?: boolean | ||||||
|  |   mfa_enabled?: boolean | ||||||
|  |   locale?: string | ||||||
|  |   verified?: boolean | ||||||
|  |   email?: string | ||||||
|  |   flags?: number | ||||||
|  |   premium_type?: 0 | 1 | 2 | ||||||
|  |   public_flags?: number | ||||||
|  | } | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| // https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice
 | // https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice
 | ||||||
|  | import { Member } from '../structures/member.ts' | ||||||
| 
 | 
 | ||||||
| enum VoiceOpcodes { // VoiceOpcodes 추가 - UnderC -
 | enum VoiceOpcodes { // VoiceOpcodes 추가 - UnderC -
 | ||||||
|   IDENTIFY = 0, |   IDENTIFY = 0, | ||||||
|  | @ -27,3 +28,18 @@ enum VoiceCloseCodes { | ||||||
|   VOICE_SERVER_CRASHED = 4015, |   VOICE_SERVER_CRASHED = 4015, | ||||||
|   UNKNOWN_ENCRYPTION_MODE = 4016 |   UNKNOWN_ENCRYPTION_MODE = 4016 | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export interface VoiceStatePayload { | ||||||
|  |   guild_id?: string | ||||||
|  |   channel_id: string | undefined | ||||||
|  |   user_id: string | ||||||
|  |   member?: Member | ||||||
|  |   session_id: string | ||||||
|  |   deaf: boolean | ||||||
|  |   mute: boolean | ||||||
|  |   self_deaf: boolean | ||||||
|  |   self_mute: boolean | ||||||
|  |   self_stream?: boolean | ||||||
|  |   self_video: boolean | ||||||
|  |   suppress: boolean | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								src/types/webhookTypes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/types/webhookTypes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | 
 | ||||||
|  | export interface WebhookPayload { | ||||||
|  |   id: string | ||||||
|  |   type: 1 | 2 | ||||||
|  |   guild_id?: string | ||||||
|  |   channel_id: string | ||||||
|  |   user?: User | ||||||
|  |   name: string | undefined | ||||||
|  |   avatar: string | undefined | ||||||
|  |   token?: string | ||||||
|  |   application_id: string | undefined | ||||||
|  | } | ||||||
|  | @ -1,14 +1,15 @@ | ||||||
| { | { | ||||||
|   "compilerOptions": { |   "compilerOptions": { | ||||||
|     /* Visit https://aka.ms/tsconfig.json to read more about this file */ |     /* Visit https://aka.ms/tsconfig.json to read more about this file */ | ||||||
| 
 |  | ||||||
|     /* Basic Options */ |     /* Basic Options */ | ||||||
|     // "incremental": true,                   /* Enable incremental compilation */ |     // "incremental": true,                   /* Enable incremental compilation */ | ||||||
|     "target": "ESNEXT", |     "target": "ESNext", | ||||||
|     /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ |     /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ | ||||||
|     "module": "ESNext", |     "module": "ESNext", | ||||||
|     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ |     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ | ||||||
|     // "lib": [],                             /* Specify library files to be included in the compilation. */ |     "lib": [ | ||||||
|  |       "esnext", | ||||||
|  |     ], /* Specify library files to be included in the compilation. */ | ||||||
|     // "allowJs": true,                       /* Allow javascript files to be compiled. */ |     // "allowJs": true,                       /* Allow javascript files to be compiled. */ | ||||||
|     // "checkJs": true,                       /* Report errors in .js files. */ |     // "checkJs": true,                       /* Report errors in .js files. */ | ||||||
|     // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ |     // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ | ||||||
|  | @ -25,7 +26,6 @@ | ||||||
|     // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */ |     // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */ | ||||||
|     // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ |     // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ | ||||||
|     // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ |     // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ | ||||||
| 
 |  | ||||||
|     /* Strict Type-Checking Options */ |     /* Strict Type-Checking Options */ | ||||||
|     "strict": true, |     "strict": true, | ||||||
|     /* Enable all strict type-checking options. */ |     /* Enable all strict type-checking options. */ | ||||||
|  | @ -36,13 +36,11 @@ | ||||||
|     // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */ |     // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */ | ||||||
|     // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */ |     // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */ | ||||||
|     // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */ |     // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */ | ||||||
| 
 |  | ||||||
|     /* Additional Checks */ |     /* Additional Checks */ | ||||||
|     // "noUnusedLocals": true,                /* Report errors on unused locals. */ |     // "noUnusedLocals": true,                /* Report errors on unused locals. */ | ||||||
|     // "noUnusedParameters": true,            /* Report errors on unused parameters. */ |     // "noUnusedParameters": true,            /* Report errors on unused parameters. */ | ||||||
|     // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */ |     // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */ | ||||||
|     // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */ |     // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */ | ||||||
| 
 |  | ||||||
|     /* Module Resolution Options */ |     /* Module Resolution Options */ | ||||||
|     "moduleResolution": "node", |     "moduleResolution": "node", | ||||||
|     /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ |     /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ | ||||||
|  | @ -56,17 +54,14 @@ | ||||||
|     /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ |     /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ | ||||||
|     // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */ |     // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */ | ||||||
|     // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */ |     // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */ | ||||||
| 
 |  | ||||||
|     /* Source Map Options */ |     /* Source Map Options */ | ||||||
|     // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */ |     // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */ | ||||||
|     // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */ |     // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */ | ||||||
|     // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */ |     // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */ | ||||||
|     // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ |     // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ | ||||||
| 
 |  | ||||||
|     /* Experimental Options */ |     /* Experimental Options */ | ||||||
|     // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */ |     // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */ | ||||||
|     // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */ |     // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */ | ||||||
| 
 |  | ||||||
|     /* Advanced Options */ |     /* Advanced Options */ | ||||||
|     "skipLibCheck": true, |     "skipLibCheck": true, | ||||||
|     /* Skip type checking of declaration files. */ |     /* Skip type checking of declaration files. */ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue