Has some errors but since we didn't committed so long
Co-Authored-By: Aki <71239005+AkiaCode@users.noreply.github.com> Co-Authored-By: Lee Hyun <ink0416@naver.com> Co-Authored-By: khk4912 <30457148+khk4912@users.noreply.github.com> Co-Authored-By: Choi Minseo <minseo0388@outlook.com> Co-Authored-By: Y <8479056+yky4589@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									1d067a957c
								
							
						
					
					
						commit
						e899738b55
					
				
					 27 changed files with 602 additions and 206 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								src/.DS_Store
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/.DS_Store
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -44,4 +44,5 @@ const resetCaches = (): void => { | |||
|   caches = {} | ||||
| } | ||||
| 
 | ||||
| export default { get, set, del, deleteCache, resetCaches } | ||||
| export { get, set, del, deleteCache, resetCaches } | ||||
|  |  | |||
|  | @ -130,10 +130,7 @@ class Gateway { | |||
|             this.client.user = new User(this.client, d.user) | ||||
|             this.sessionID = d.session_id | ||||
|             d.guilds.forEach((guild: GuildPayload) => { | ||||
|               Guild.autoInit(this.client, { | ||||
|                 endpoint: 'guild', | ||||
|                 restURLfuncArgs: [guild.id] | ||||
|               }) | ||||
|               cache.set('guild', guild.id, new Guild(this.client, guild)) | ||||
|             }) | ||||
|             this.client.emit('ready') | ||||
|             break | ||||
|  | @ -171,43 +168,63 @@ class Gateway { | |||
|           case GatewayEvents.Channel_Update: { | ||||
|             const oldChannel: Channel = cache.get('channel', d.id) | ||||
| 
 | ||||
|             if (oldChannel.type !== d.type) { | ||||
|               let channel: Channel = oldChannel | ||||
|               switch (d.type) { | ||||
|                 case ChannelTypes.DM: | ||||
|                   channel = new DMChannel(this.client, d) | ||||
|                   break | ||||
|                 case ChannelTypes.GROUP_DM: | ||||
|                   channel = new GroupDMChannel(this.client, d) | ||||
|                   break | ||||
|                 case ChannelTypes.GUILD_TEXT: | ||||
|                   channel = new GuildTextChannel(this.client, d) | ||||
|                   break | ||||
|                 case ChannelTypes.GUILD_VOICE: | ||||
|                   channel = new VoiceChannel(this.client, d) | ||||
|                   break | ||||
|                 case ChannelTypes.GUILD_CATEGORY: | ||||
|                   channel = new CategoryChannel(this.client, d) | ||||
|                   break | ||||
|                 case ChannelTypes.GUILD_NEWS: | ||||
|                   channel = new NewsChannel(this.client, d) | ||||
|                   break | ||||
|                 default: | ||||
|                   break | ||||
|             if (oldChannel !== undefined) { | ||||
|               if (oldChannel.type !== d.type) { | ||||
|                 let channel: Channel = oldChannel | ||||
|                 switch (d.type) { | ||||
|                   case ChannelTypes.DM: | ||||
|                     channel = new DMChannel(this.client, d) | ||||
|                     break | ||||
|                   case ChannelTypes.GROUP_DM: | ||||
|                     channel = new GroupDMChannel(this.client, d) | ||||
|                     break | ||||
|                   case ChannelTypes.GUILD_TEXT: | ||||
|                     channel = new GuildTextChannel(this.client, d) | ||||
|                     break | ||||
|                   case ChannelTypes.GUILD_VOICE: | ||||
|                     channel = new VoiceChannel(this.client, d) | ||||
|                     break | ||||
|                   case ChannelTypes.GUILD_CATEGORY: | ||||
|                     channel = new CategoryChannel(this.client, d) | ||||
|                     break | ||||
|                   case ChannelTypes.GUILD_NEWS: | ||||
|                     channel = new NewsChannel(this.client, d) | ||||
|                     break | ||||
|                   default: | ||||
|                     break | ||||
|                 } | ||||
|                 cache.set('channel', channel.id, channel) | ||||
|                 this.client.emit('channelUpdate', oldChannel, channel) | ||||
|               } else { | ||||
|                 const before = oldChannel.refreshFromData(d) | ||||
|                 this.client.emit('channelUpdate', before, oldChannel) | ||||
|               } | ||||
|               cache.set('channel', channel.id, channel) | ||||
|               this.client.emit('channelUpdate', oldChannel, channel) | ||||
|             } else { | ||||
|               const before = oldChannel.refreshFromData(d) | ||||
|               this.client.emit('channelUpdate', before, oldChannel) | ||||
|             } | ||||
|             break | ||||
|           } | ||||
|           case GatewayEvents.Channel_Delete: { | ||||
|             const channel: Channel = cache.get('channel', d.id) | ||||
|             cache.del('channel', d.id) | ||||
| 
 | ||||
|             this.client.emit('channelDelete', channel) | ||||
|             if (channel !== undefined) { | ||||
|               cache.del('channel', d.id) | ||||
|               this.client.emit('channelDelete', channel) | ||||
|             } | ||||
|             break | ||||
|           } | ||||
|           case GatewayEvents.Channel_Pins_Update: { | ||||
|             const channel: Channel = cache.get('channel', d.channel_id) | ||||
|             if (channel !== undefined && d.last_pin_timestamp !== null) { | ||||
|               channel.refreshFromData({ | ||||
|                 last_pin_timestamp: d.last_pin_timestamp | ||||
|               }) | ||||
|               this.client.emit('channelPinsUpdate', channel) | ||||
|             } | ||||
|             break | ||||
|           } | ||||
|           case GatewayEvents.Guild_Create: { | ||||
|             const guild: Guild = cache.get('guild', d.id) | ||||
|             if (guild !== undefined) { | ||||
|               guild.refreshFromData(guild) | ||||
|             } | ||||
|             break | ||||
|           } | ||||
|           default: | ||||
|  |  | |||
|  | @ -1,10 +1,9 @@ | |||
| import { Client } from '../models/client.ts' | ||||
| import * as cache from '../models/cache.ts' | ||||
| import endpoints from '../types/endpoint.ts' | ||||
| 
 | ||||
| interface IInit { | ||||
|   useCache?: boolean | ||||
|   endpoint: string | ||||
|   endpoint: (...restURLfuncArgs: string[]) => string | ||||
|   restURLfuncArgs: string[] | ||||
| } | ||||
| 
 | ||||
|  | @ -31,24 +30,15 @@ export class Base { | |||
|         return cached | ||||
|       } | ||||
|     } | ||||
|     this.restFunc = endpoints.find(v => v.name === endpoint) | ||||
|     // TODO: Make error for this
 | ||||
|     if (this.restFunc !== undefined) { | ||||
|       const resp = await fetch(this.restFunc(...restURLfuncArgs), { | ||||
|         headers: { | ||||
|           Authorization: `Bot ${client.token}` | ||||
|         } | ||||
|       }) | ||||
|       const jsonParsed = await resp.json() | ||||
| 
 | ||||
|       cache.set( | ||||
|         this.cacheName ?? this.name, | ||||
|         cacheID, | ||||
|         new this(client, jsonParsed) | ||||
|       ) | ||||
|     const resp = await fetch(endpoint(...restURLfuncArgs), { | ||||
|       headers: { | ||||
|         Authorization: `Bot ${client.token}` | ||||
|       } | ||||
|     }) | ||||
|     const jsonParsed = await resp.json() | ||||
| 
 | ||||
|       return new this(client, jsonParsed) | ||||
|     } | ||||
|     return new this(client, jsonParsed) | ||||
|   } | ||||
| 
 | ||||
|   async refreshFromAPI ( | ||||
|  | @ -56,58 +46,26 @@ export class Base { | |||
|     { endpoint, restURLfuncArgs }: IInit | ||||
|   ): Promise<this> { | ||||
|     const oldOne = Object.assign(Object.create(this), this) | ||||
|     const restFunc: | ||||
|       | ((...restURLfuncArgs: string[]) => string) | ||||
|       | undefined = endpoints.find(v => v.name === endpoint) | ||||
|     // TODO: Make error for this
 | ||||
|     if (restFunc !== undefined) { | ||||
|       const resp = await fetch(restFunc(...restURLfuncArgs), { | ||||
|         headers: { | ||||
|           Authorization: `Bot ${client.token}` | ||||
|         } | ||||
|       }) | ||||
|       const jsonParsed = await resp.json() | ||||
|       const result: { [k: string]: any } = {} | ||||
|       Object.keys(jsonParsed).forEach(key => { | ||||
|         result[this.convertPropertyNameToStandard(key)] = jsonParsed[key] | ||||
|       }) | ||||
| 
 | ||||
|       Object.assign(this, result) | ||||
|     } | ||||
|     const resp = await fetch(endpoint(...restURLfuncArgs), { | ||||
|       headers: { | ||||
|         Authorization: `Bot ${client.token}` | ||||
|       } | ||||
|     }) | ||||
|     const jsonParsed = await resp.json() | ||||
| 
 | ||||
|     this.readFromData(jsonParsed) | ||||
| 
 | ||||
|     return oldOne | ||||
|   } | ||||
| 
 | ||||
|   refreshFromData (data: { [k: string]: any }): this { | ||||
|     const oldOne = Object.assign(Object.create(this), this) | ||||
|     const result: { [k: string]: any } = {} | ||||
|     Object.keys(data).forEach(key => { | ||||
|       result[this.convertPropertyNameToStandard(key)] = data[key] | ||||
|     }) | ||||
| 
 | ||||
|     Object.assign(this, result) | ||||
|     this.readFromData(data) | ||||
|     return oldOne | ||||
|   } | ||||
| 
 | ||||
|   convertPropertyNameToStandard (name: string): string { | ||||
|     if (name in this.propertyConverterOverride) { | ||||
|       return this.propertyConverterOverride[name] | ||||
|     } | ||||
| 
 | ||||
|     name = name.replaceAll('_id', 'ID') | ||||
|     name = name | ||||
|       .split('_') | ||||
|       .map((value, index) => { | ||||
|         if (index !== 0) { | ||||
|           value = value[0].toUpperCase() + value.slice(1) | ||||
|         } | ||||
|         return value | ||||
|       }) | ||||
|       .join('') | ||||
|     return name | ||||
|   } | ||||
|   readFromData (data: { [k: string]: any }): void {} | ||||
| 
 | ||||
|   // toJSON() {}
 | ||||
| } | ||||
| 
 | ||||
| // 오류를 해결하기 위해 저는 2개로 접속하겠습니다. VS2019
 | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { ChannelPayload, ChannelTypes } from '../types/channelTypes.ts' | ||||
| import { Base } from './base.ts' | ||||
|  | @ -14,5 +15,12 @@ export class Channel extends Base { | |||
|     super(client, data) | ||||
|     this.type = data.type | ||||
|     this.id = data.id | ||||
|     cache.set('channel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: ChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.type = data.type ?? this.type | ||||
|     this.id = data.id ?? this.id | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { DMChannelPayload } from '../types/channelTypes.ts' | ||||
| import { UserPayload } from '../types/userTypes.ts' | ||||
|  | @ -9,5 +10,11 @@ export class DMChannel extends TextChannel { | |||
|   constructor (client: Client, data: DMChannelPayload) { | ||||
|     super(client, data) | ||||
|     this.recipients = data.recipients | ||||
|     cache.set('dmchannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: DMChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.recipients = data.recipients ?? this.recipients | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| import { Client } from '../models/client.ts' | ||||
| import { | ||||
|   EmbedAuthor, | ||||
|   EmbedField, | ||||
|  | @ -25,21 +24,124 @@ export class Embed { | |||
|   provider?: EmbedProvider | ||||
|   author?: EmbedAuthor | ||||
|   fields?: EmbedField[] | ||||
|   constructor (client: Client, data?: EmbedPayload) { | ||||
|     if (data !== undefined) { | ||||
|       this.title = data.title | ||||
|       this.type = data.type | ||||
|       this.description = data.description | ||||
|       this.url = data.url | ||||
|       this.timestamp = data.timestamp | ||||
|       this.color = data.color | ||||
|       this.footer = data.footer | ||||
|       this.image = data.image | ||||
|       this.thumbnail = data.thumbnail | ||||
|       this.video = data.video | ||||
|       this.provider = data.provider | ||||
|       this.author = data.author | ||||
|       this.fields = data.fields | ||||
| 
 | ||||
|   constructor (data?: EmbedPayload) { | ||||
|     this.title = data?.title | ||||
|     this.type = data?.type | ||||
|     this.description = data?.description | ||||
|     this.url = data?.url | ||||
|     this.timestamp = data?.timestamp | ||||
|     this.color = data?.color | ||||
|     this.footer = data?.footer | ||||
|     this.image = data?.image | ||||
|     this.thumbnail = data?.thumbnail | ||||
|     this.video = data?.video | ||||
|     this.provider = data?.provider | ||||
|     this.author = data?.author | ||||
|     this.fields = data?.fields | ||||
|   } | ||||
| 
 | ||||
|   // khk4912
 | ||||
|   toJSON (): EmbedPayload { | ||||
|     return { | ||||
|       title: this.title, | ||||
|       type: this.type, | ||||
|       description: this.description, | ||||
|       url: this.url, | ||||
|       timestamp: this.timestamp, | ||||
|       color: this.color, | ||||
|       footer: this.footer, | ||||
|       image: this.image, | ||||
|       thumbnail: this.thumbnail, | ||||
|       video: this.video, | ||||
|       provider: this.provider, | ||||
|       author: this.author, | ||||
|       fields: this.fields | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   setTitle (title: string): Embed { | ||||
|     this.title = title | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setDescription (description: string): Embed { | ||||
|     this.description = description | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setType (type: EmbedTypes): Embed { | ||||
|     this.type = type | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setURL (url: string): Embed { | ||||
|     this.url = url | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setTimestamp (timestamp: string): Embed { | ||||
|     this.timestamp = timestamp | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setColor (hex: number): Embed { | ||||
|     this.color = hex | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setFooter (footer: EmbedFooter): Embed { | ||||
|     this.footer = footer | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setImage (image: EmbedImage): Embed { | ||||
|     this.image = image | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setThumbnail (thumbnail: EmbedThumbnail): Embed { | ||||
|     this.thumbnail = thumbnail | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setVideo (video: EmbedVideo): Embed { | ||||
|     this.video = video | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setProvider (provider: EmbedProvider): Embed { | ||||
|     this.provider = provider | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setAuthor (author: EmbedAuthor): Embed { | ||||
|     this.author = author | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   setFields (fields: EmbedField[]): Embed { | ||||
|     this.fields = fields | ||||
|     return this | ||||
|   } | ||||
| 
 | ||||
|   addField (name: string, value: string, inline?: boolean): Embed { | ||||
|     if (this.fields === undefined) { | ||||
|       this.fields = [ | ||||
|         { | ||||
|           name: name, | ||||
|           value: value, | ||||
|           inline: inline | ||||
|         } | ||||
|       ] | ||||
|     } else { | ||||
|       this.fields.push({ | ||||
|         name: name, | ||||
|         value: value, | ||||
|         inline: inline | ||||
|       }) | ||||
|     } | ||||
| 
 | ||||
|     return this | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,22 +1,14 @@ | |||
| import { Client } from '../models/client.ts' | ||||
| import { EmojiPayload } from '../types/emojiTypes.ts' | ||||
| import { USER } from '../types/endpoint.ts' | ||||
| import { Base } from './base.ts' | ||||
| import { User } from './user.ts' | ||||
| 
 | ||||
| export class Emoji extends Base { | ||||
|   // eslint-disable-next-line @typescript-eslint/prefer-readonly
 | ||||
|   private data: EmojiPayload | ||||
|   client: Client | ||||
|   id: string | ||||
|   name: string | ||||
|   roles?: [] | ||||
| 
 | ||||
|   get user (): User | undefined { | ||||
|     if (this.data.user !== undefined) { | ||||
|       return new User(this.client, this.data.user) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   roles?: string[] | ||||
|   user?: User | ||||
|   requireColons?: boolean | ||||
|   managed?: boolean | ||||
|   animated?: boolean | ||||
|  | @ -30,14 +22,35 @@ export class Emoji extends Base { | |||
| 
 | ||||
|   constructor (client: Client, data: EmojiPayload) { | ||||
|     super(client, data) | ||||
|     this.data = data | ||||
|     this.client = client | ||||
|     this.id = data.id | ||||
|     this.name = data.name | ||||
|     this.roles = data.roles | ||||
|     if (data.user !== undefined) { | ||||
|       User.autoInit(this.client, { | ||||
|         endpoint: USER, | ||||
|         restURLfuncArgs: [data.user.id] | ||||
|       }).then(user => (this.user = user)) | ||||
|     } | ||||
|     this.requireColons = data.require_colons | ||||
|     this.managed = data.managed | ||||
|     this.animated = data.animated | ||||
|     this.available = data.available | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: EmojiPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.id = data.id ?? this.id | ||||
|     this.name = data.name ?? this.name | ||||
|     this.roles = data.roles ?? this.roles | ||||
|     this.requireColons = data.require_colons ?? this.requireColons | ||||
|     this.managed = data.managed ?? this.managed | ||||
|     this.animated = data.animated ?? this.animated | ||||
|     this.available = data.available ?? this.available | ||||
|     if (data.user !== undefined && data.user.id !== this.user?.id) { | ||||
|       User.autoInit(this.client, { | ||||
|         endpoint: USER, | ||||
|         restURLfuncArgs: [data.user.id] | ||||
|       }).then(user => (this.user = user)) | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { GroupDMChannelPayload } from '../types/channelTypes.ts' | ||||
| import { Channel } from './channel.ts' | ||||
|  | @ -13,5 +14,13 @@ export class GroupDMChannel extends Channel { | |||
|     this.name = data.name | ||||
|     this.icon = data.icon | ||||
|     this.ownerID = data.owner_id | ||||
|     cache.set('groupchannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: GroupDMChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.name = data.name ?? this.name | ||||
|     this.icon = data.icon ?? this.icon | ||||
|     this.ownerID = data.owner_id ?? this.ownerID | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -7,32 +7,33 @@ import { Emoji } from './emoji.ts' | |||
| import { Member } from './member.ts' | ||||
| import { Role } from './role.ts' | ||||
| import { VoiceState } from './voiceState.ts' | ||||
| import cache from '../models/cache.ts' | ||||
| 
 | ||||
| export class Guild extends Base { | ||||
|   id: string | ||||
|   name: string | ||||
|   name?: string | ||||
|   icon?: string | ||||
|   iconHash?: string | ||||
|   splash?: string | ||||
|   discoverySplash?: string | ||||
|   owner?: boolean | ||||
|   ownerID: string | ||||
|   ownerID?: string | ||||
|   permissions?: string | ||||
|   region: string | ||||
|   region?: string | ||||
|   afkChannelID?: string | ||||
|   afkTimeout: number | ||||
|   afkTimeout?: number | ||||
|   widgetEnabled?: boolean | ||||
|   widgetChannelID?: string | ||||
|   verificationLevel: string | ||||
|   defaultMessageNotifications: string | ||||
|   explicitContentFilter: string | ||||
|   roles: Role[] | ||||
|   emojis: Emoji[] | ||||
|   features: GuildFeatures[] | ||||
|   mfaLevel: string | ||||
|   verificationLevel?: string | ||||
|   defaultMessageNotifications?: string | ||||
|   explicitContentFilter?: string | ||||
|   roles?: Role[] | ||||
|   emojis?: Emoji[] | ||||
|   features?: GuildFeatures[] | ||||
|   mfaLevel?: string | ||||
|   applicationID?: string | ||||
|   systemChannelID?: string | ||||
|   systemChannelFlags: string | ||||
|   systemChannelFlags?: string | ||||
|   rulesChannelID?: string | ||||
|   joinedAt?: string | ||||
|   large?: boolean | ||||
|  | @ -47,9 +48,9 @@ export class Guild extends Base { | |||
|   vanityURLCode?: string | ||||
|   description?: string | ||||
|   banner?: string | ||||
|   premiumTier: number | ||||
|   premiumTier?: number | ||||
|   premiumSubscriptionCount?: number | ||||
|   preferredLocale: string | ||||
|   preferredLocale?: string | ||||
|   publicUpdatesChannelID?: string | ||||
|   maxVideoChannelUsers?: number | ||||
|   approximateNumberCount?: number | ||||
|  | @ -58,48 +59,144 @@ export class Guild extends Base { | |||
|   constructor (client: Client, data: GuildPayload) { | ||||
|     super(client, data) | ||||
|     this.id = data.id | ||||
|     this.name = data.name | ||||
|     this.icon = data.icon | ||||
|     this.iconHash = data.icon_hash | ||||
|     this.splash = data.splash | ||||
|     this.discoverySplash = data.discovery_splash | ||||
|     this.owner = data.owner | ||||
|     this.ownerID = data.owner_id | ||||
|     this.permissions = data.permissions | ||||
|     this.region = data.region | ||||
|     this.afkTimeout = data.afk_timeout | ||||
|     this.afkChannelID = data.afk_channel_id | ||||
|     this.widgetEnabled = data.widget_enabled | ||||
|     this.widgetChannelID = data.widget_channel_id | ||||
|     this.verificationLevel = data.verification_level | ||||
|     this.defaultMessageNotifications = data.default_message_notifications | ||||
|     this.explicitContentFilter = data.explicit_content_filter | ||||
|     this.roles = data.roles.map(v => new Role(client, v)) | ||||
|     this.emojis = data.emojis.map(v => new Emoji(client, v)) | ||||
|     this.features = data.features | ||||
|     this.mfaLevel = data.mfa_level | ||||
|     this.systemChannelID = data.system_channel_id | ||||
|     this.systemChannelFlags = data.system_channel_flags | ||||
|     this.rulesChannelID = data.rules_channel_id | ||||
|     this.joinedAt = data.joined_at | ||||
|     this.large = data.large | ||||
|     this.unavailable = data.unavailable | ||||
|     this.memberCount = data.member_count | ||||
|     this.voiceStates = data.voice_states?.map(v => new VoiceState(client, v)) | ||||
|     this.members = data.members?.map(v => new Member(client, v)) | ||||
|     this.channels = data.channels?.map(v => new Channel(client, v)) | ||||
|     this.presences = data.presences | ||||
|     this.maxPresences = data.max_presences | ||||
|     this.maxMembers = data.max_members | ||||
|     this.vanityURLCode = data.vanity_url_code | ||||
|     this.description = data.description | ||||
|     this.banner = data.banner | ||||
|     this.premiumTier = data.premium_tier | ||||
|     this.premiumSubscriptionCount = data.premium_subscription_count | ||||
|     this.preferredLocale = data.preferred_locale | ||||
|     this.publicUpdatesChannelID = data.public_updates_channel_id | ||||
|     this.maxVideoChannelUsers = data.max_video_channel_users | ||||
|     this.approximateNumberCount = data.approximate_number_count | ||||
|     this.approximatePresenceCount = data.approximate_presence_count | ||||
| 
 | ||||
|     if (!this.unavailable) { | ||||
|       this.name = data.name | ||||
|       this.icon = data.icon | ||||
|       this.iconHash = data.icon_hash | ||||
|       this.splash = data.splash | ||||
|       this.discoverySplash = data.discovery_splash | ||||
|       this.owner = data.owner | ||||
|       this.ownerID = data.owner_id | ||||
|       this.permissions = data.permissions | ||||
|       this.region = data.region | ||||
|       this.afkTimeout = data.afk_timeout | ||||
|       this.afkChannelID = data.afk_channel_id | ||||
|       this.widgetEnabled = data.widget_enabled | ||||
|       this.widgetChannelID = data.widget_channel_id | ||||
|       this.verificationLevel = data.verification_level | ||||
|       this.defaultMessageNotifications = data.default_message_notifications | ||||
|       this.explicitContentFilter = data.explicit_content_filter | ||||
|       this.roles = data.roles.map( | ||||
|         v => cache.get('role', v.id) ?? new Role(client, v) | ||||
|       ) | ||||
|       this.emojis = data.emojis.map( | ||||
|         v => cache.get('emoji', v.id) ?? new Emoji(client, v) | ||||
|       ) | ||||
|       this.features = data.features | ||||
|       this.mfaLevel = data.mfa_level | ||||
|       this.systemChannelID = data.system_channel_id | ||||
|       this.systemChannelFlags = data.system_channel_flags | ||||
|       this.rulesChannelID = data.rules_channel_id | ||||
|       this.joinedAt = data.joined_at | ||||
|       this.large = data.large | ||||
|       this.memberCount = data.member_count | ||||
|       this.voiceStates = data.voice_states?.map( | ||||
|         v => | ||||
|           cache.get('voiceState', `${v.guild_id}:${v.user_id}`) ?? | ||||
|           new VoiceState(client, v) | ||||
|       ) | ||||
|       this.members = data.members?.map( | ||||
|         v => | ||||
|           cache.get('member', `${this.id}:${v.user.id}`) ?? | ||||
|           new Member(client, v) | ||||
|       ) | ||||
|       this.channels = data.channels?.map( | ||||
|         v => cache.get('channel', v.id) ?? new Channel(client, v) | ||||
|       ) | ||||
|       this.presences = data.presences | ||||
|       this.maxPresences = data.max_presences | ||||
|       this.maxMembers = data.max_members | ||||
|       this.vanityURLCode = data.vanity_url_code | ||||
|       this.description = data.description | ||||
|       this.banner = data.banner | ||||
|       this.premiumTier = data.premium_tier | ||||
|       this.premiumSubscriptionCount = data.premium_subscription_count | ||||
|       this.preferredLocale = data.preferred_locale | ||||
|       this.publicUpdatesChannelID = data.public_updates_channel_id | ||||
|       this.maxVideoChannelUsers = data.max_video_channel_users | ||||
|       this.approximateNumberCount = data.approximate_number_count | ||||
|       this.approximatePresenceCount = data.approximate_presence_count | ||||
|     } | ||||
|     cache.set('guild', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: GuildPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.id = data.id ?? this.id | ||||
|     this.unavailable = data.unavailable ?? this.unavailable | ||||
| 
 | ||||
|     if (!this.unavailable) { | ||||
|       this.name = data.name ?? this.name | ||||
|       this.icon = data.icon ?? this.icon | ||||
|       this.iconHash = data.icon_hash ?? this.iconHash | ||||
|       this.splash = data.splash ?? this.splash | ||||
|       this.discoverySplash = data.discovery_splash ?? this.discoverySplash | ||||
|       this.owner = data.owner ?? this.owner | ||||
|       this.ownerID = data.owner_id ?? this.ownerID | ||||
|       this.permissions = data.permissions ?? this.permissions | ||||
|       this.region = data.region ?? this.region | ||||
|       this.afkTimeout = data.afk_timeout ?? this.afkTimeout | ||||
|       this.afkChannelID = data.afk_channel_id ?? this.afkChannelID | ||||
|       this.widgetEnabled = data.widget_enabled ?? this.widgetEnabled | ||||
|       this.widgetChannelID = data.widget_channel_id ?? this.widgetChannelID | ||||
|       this.verificationLevel = data.verification_level ?? this.verificationLevel | ||||
|       this.defaultMessageNotifications = | ||||
|         data.default_message_notifications ?? this.defaultMessageNotifications | ||||
|       this.explicitContentFilter = | ||||
|         data.explicit_content_filter ?? this.explicitContentFilter | ||||
|       this.roles = | ||||
|         data.roles.map( | ||||
|           v => cache.get('role', v.id) ?? new Role(this.client, v) | ||||
|         ) ?? this.roles | ||||
|       this.emojis = | ||||
|         data.emojis.map( | ||||
|           v => cache.get('emoji', v.id) ?? new Emoji(this.client, v) | ||||
|         ) ?? this.emojis | ||||
|       this.features = data.features ?? this.features | ||||
|       this.mfaLevel = data.mfa_level ?? this.mfaLevel | ||||
|       this.systemChannelID = data.system_channel_id ?? this.systemChannelID | ||||
|       this.systemChannelFlags = | ||||
|         data.system_channel_flags ?? this.systemChannelFlags | ||||
|       this.rulesChannelID = data.rules_channel_id ?? this.rulesChannelID | ||||
|       this.joinedAt = data.joined_at ?? this.joinedAt | ||||
|       this.large = data.large ?? this.large | ||||
|       this.memberCount = data.member_count ?? this.memberCount | ||||
|       this.voiceStates = | ||||
|         data.voice_states?.map( | ||||
|           v => | ||||
|             cache.get('voiceState', `${v.guild_id}:${v.user_id}`) ?? | ||||
|             new VoiceState(this.client, v) | ||||
|         ) ?? this.voiceStates | ||||
|       this.members = | ||||
|         data.members?.map( | ||||
|           v => | ||||
|             cache.get('member', `${this.id}:${v.user.id}`) ?? | ||||
|             new Member(this.client, v) | ||||
|         ) ?? this.members | ||||
|       this.channels = | ||||
|         data.channels?.map( | ||||
|           v => cache.get('channel', v.id) ?? new Channel(this.client, v) | ||||
|         ) ?? this.members | ||||
|       this.presences = data.presences ?? this.presences | ||||
|       this.maxPresences = data.max_presences ?? this.maxPresences | ||||
|       this.maxMembers = data.max_members ?? this.maxMembers | ||||
|       this.vanityURLCode = data.vanity_url_code ?? this.vanityURLCode | ||||
|       this.description = data.description ?? this.description | ||||
|       this.banner = data.banner ?? this.banner | ||||
|       this.premiumTier = data.premium_tier ?? this.premiumTier | ||||
|       this.premiumSubscriptionCount = | ||||
|         data.premium_subscription_count ?? this.premiumSubscriptionCount | ||||
|       this.preferredLocale = data.preferred_locale ?? this.preferredLocale | ||||
|       this.publicUpdatesChannelID = | ||||
|         data.public_updates_channel_id ?? this.publicUpdatesChannelID | ||||
|       this.maxVideoChannelUsers = | ||||
|         data.max_video_channel_users ?? this.maxVideoChannelUsers | ||||
|       this.approximateNumberCount = | ||||
|         data.approximate_number_count ?? this.approximateNumberCount | ||||
|       this.approximatePresenceCount = | ||||
|         data.approximate_presence_count ?? this.approximatePresenceCount | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ import { | |||
|   GuildChannelCategoryPayload, | ||||
|   Overwrite | ||||
| } from '../types/channelTypes.ts' | ||||
| import cache from '../models/cache.ts' | ||||
| 
 | ||||
| export class CategoryChannel extends Channel { | ||||
|   guildID: string | ||||
|  | @ -21,5 +22,17 @@ export class CategoryChannel extends Channel { | |||
|     this.permissionOverwrites = data.permission_overwrites | ||||
|     this.nsfw = data.nsfw | ||||
|     this.parentID = data.parent_id | ||||
|     cache.set('guildcategorychannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: GuildChannelCategoryPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.guildID = data.guild_id ?? this.guildID | ||||
|     this.name = data.name ?? this.name | ||||
|     this.position = data.position ?? this.position | ||||
|     this.permissionOverwrites = | ||||
|       data.permission_overwrites ?? this.permissionOverwrites | ||||
|     this.nsfw = data.nsfw ?? this.nsfw | ||||
|     this.parentID = data.parent_id ?? this.parentID | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { GuildChannelPayload, Overwrite } from '../types/channelTypes.ts' | ||||
| import { Channel } from './channel.ts' | ||||
|  | @ -18,5 +19,17 @@ export class GuildChannel extends Channel { | |||
|     this.permissionOverwrites = data.permission_overwrites | ||||
|     this.nsfw = data.nsfw | ||||
|     this.parentID = data.parent_id | ||||
|     cache.set('guildchannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: GuildChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.guildID = data.guild_id ?? this.guildID | ||||
|     this.name = data.name ?? this.name | ||||
|     this.position = data.position ?? this.position | ||||
|     this.permissionOverwrites = | ||||
|       data.permission_overwrites ?? this.permissionOverwrites | ||||
|     this.nsfw = data.nsfw ?? this.nsfw | ||||
|     this.parentID = data.parent_id ?? this.parentID | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| import { Client } from '../models/client.ts' | ||||
| import { GuildChannel } from './guildChannel.ts' | ||||
| import { GuildTextChannelPayload } from '../types/channelTypes.ts' | ||||
| import cache from '../models/cache.ts' | ||||
| 
 | ||||
| export class GuildTextChannel extends GuildChannel { | ||||
|   rateLimit: number | ||||
|  | @ -14,5 +15,12 @@ export class GuildTextChannel extends GuildChannel { | |||
|     super(client, data) | ||||
|     this.topic = data.topic | ||||
|     this.rateLimit = data.rate_limit_per_user | ||||
|     cache.set('guildtextchannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: GuildTextChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.topic = data.topic ?? this.topic | ||||
|     this.rateLimit = data.rate_limit_per_user ?? this.rateLimit | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { GuildVoiceChannelPayload, Overwrite } from '../types/channelTypes.ts' | ||||
| import { Channel } from './channel.ts' | ||||
|  | @ -22,5 +23,19 @@ export class VoiceChannel extends Channel { | |||
|     this.permissionOverwrites = data.permission_overwrites | ||||
|     this.nsfw = data.nsfw | ||||
|     this.parentID = data.parent_id | ||||
|     cache.set('guildvoicechannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: GuildVoiceChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.bitrate = data.bitrate ?? this.bitrate | ||||
|     this.userLimit = data.user_limit ?? this.userLimit | ||||
|     this.guildID = data.guild_id ?? this.guildID | ||||
|     this.name = data.name ?? this.name | ||||
|     this.position = data.position ?? this.position | ||||
|     this.permissionOverwrites = | ||||
|       data.permission_overwrites ?? this.permissionOverwrites | ||||
|     this.nsfw = data.nsfw ?? this.nsfw | ||||
|     this.parentID = data.parent_id ?? this.parentID | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -30,4 +30,18 @@ export class Invite extends Base { | |||
|     this.approximateMemberCount = data.approximate_member_count | ||||
|     this.approximatePresenceCount = data.approximate_presence_count | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: InvitePayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.code = data.code ?? this.code | ||||
|     this.guild = data.guild ?? this.guild | ||||
|     this.channel = data.channel ?? this.channel | ||||
|     this.inviter = data.inviter ?? this.inviter | ||||
|     this.targetUser = data.target_user ?? this.targetUser | ||||
|     this.targetUserType = data.target_user_type ?? this.targetUserType | ||||
|     this.approximateMemberCount = | ||||
|       data.approximate_member_count ?? this.approximateMemberCount | ||||
|     this.approximatePresenceCount = | ||||
|       data.approximate_presence_count ?? this.approximatePresenceCount | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,11 +1,11 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { MemberPayload } from '../types/guildTypes.ts' | ||||
| import { Role } from './role.ts' | ||||
| import { User } from './user.ts' | ||||
| 
 | ||||
| export class Member extends User { | ||||
|   nick?: string | ||||
|   roles: Role[] | ||||
|   roles: string[] | ||||
|   joinedAt: string | ||||
|   premiumSince?: string | ||||
|   deaf: boolean | ||||
|  | @ -14,10 +14,21 @@ export class Member extends User { | |||
|   constructor (client: Client, data: MemberPayload) { | ||||
|     super(client, data.user) | ||||
|     this.nick = data.nick | ||||
|     this.roles = data.roles.map(v => new Role(client, v)) | ||||
|     this.roles = data.roles | ||||
|     this.joinedAt = data.joined_at | ||||
|     this.premiumSince = data.premium_since | ||||
|     this.deaf = data.deaf | ||||
|     this.mute = data.mute | ||||
|     cache.set('member', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: MemberPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.nick = data.nick ?? this.nick | ||||
|     this.roles = data.roles ?? this.roles | ||||
|     this.joinedAt = data.joined_at ?? this.joinedAt | ||||
|     this.premiumSince = data.premium_since ?? this.premiumSince | ||||
|     this.deaf = data.deaf ?? this.deaf | ||||
|     this.mute = data.mute ?? this.mute | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -13,8 +13,8 @@ import { Client } from '../models/client.ts' | |||
| import { User } from './user.ts' | ||||
| import { Member } from './member.ts' | ||||
| import { Embed } from './embed.ts' | ||||
| import { Role } from './role.ts' | ||||
| import { CHANNEL_MESSAGE } from '../types/endpoint.ts' | ||||
| import cache from '../models/cache.ts' | ||||
| 
 | ||||
| export class Message extends Base { | ||||
|   // eslint-disable-next-line @typescript-eslint/prefer-readonly
 | ||||
|  | @ -23,27 +23,21 @@ export class Message extends Base { | |||
|   channelID: string | ||||
|   guildID?: string | ||||
|   author: User | ||||
|   member?: Member | ||||
|   content: string | ||||
|   timestamp: string | ||||
|   editedTimestamp?: string | ||||
|   tts: boolean | ||||
| 
 | ||||
|   get member (): Member | undefined { | ||||
|     if (this.data.member !== undefined) { | ||||
|       return new Member(this.client, this.data.member) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   mentionEveryone: boolean | ||||
|   mentions: Member[] | ||||
|   mentionRoles: Role[] | ||||
|   mentions: User[] | ||||
|   mentionRoles: string[] | ||||
|   mentionChannels?: ChannelMention[] | ||||
|   attachments: Attachment[] | ||||
|   embeds: Embed[] | ||||
|   reactions?: Reaction[] | ||||
|   nonce?: string | number | ||||
|   pinned: boolean | ||||
|   webhookId?: string | ||||
|   webhookID?: string | ||||
|   type: number | ||||
|   activity?: MessageActivity | ||||
|   application?: MessageApplication | ||||
|  | @ -56,27 +50,65 @@ export class Message extends Base { | |||
|     this.id = data.id | ||||
|     this.channelID = data.channel_id | ||||
|     this.guildID = data.guild_id | ||||
|     this.author = new User(client, data.author) | ||||
|     this.author = | ||||
|       cache.get('user', data.author.id) ?? new User(this.client, data.author) | ||||
|     this.content = data.content | ||||
|     this.timestamp = data.timestamp | ||||
|     this.editedTimestamp = data.edited_timestamp | ||||
|     this.tts = data.tts | ||||
|     this.mentionEveryone = data.mention_everyone | ||||
|     this.mentions = data.mentions.map(v => new Member(client, v)) | ||||
|     this.mentionRoles = data.mention_roles.map(v => new Role(client, v)) | ||||
|     this.mentions = data.mentions.map( | ||||
|       v => cache.get('user', v.id) ?? new User(client, v) | ||||
|     ) | ||||
|     this.mentionRoles = data.mention_roles | ||||
|     this.mentionChannels = data.mention_channels | ||||
|     this.attachments = data.attachments | ||||
|     this.embeds = data.embeds.map(v => new Embed(client, v)) | ||||
|     this.embeds = data.embeds.map(v => new Embed(v)) | ||||
|     this.reactions = data.reactions | ||||
|     this.nonce = data.nonce | ||||
|     this.pinned = data.pinned | ||||
|     this.webhookId = data.webhook_id | ||||
|     this.webhookID = data.webhook_id | ||||
|     this.type = data.type | ||||
|     this.activity = data.activity | ||||
|     this.application = data.application | ||||
|     this.messageReference = data.message_reference | ||||
|     this.flags = data.flags | ||||
|     cache.set('message', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: MessagePayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.channelID = data.channel_id ?? this.channelID | ||||
|     this.guildID = data.guild_id ?? this.guildID | ||||
|     this.author = | ||||
|       cache.get('user', data.author.id) ?? | ||||
|       new User(this.client, data.author) ?? | ||||
|       this.author | ||||
|     this.content = data.content ?? this.content | ||||
|     this.timestamp = data.timestamp ?? this.timestamp | ||||
|     this.editedTimestamp = data.edited_timestamp ?? this.editedTimestamp | ||||
|     this.tts = data.tts ?? this.tts | ||||
|     this.mentionEveryone = data.mention_everyone ?? this.mentionEveryone | ||||
|     this.mentions = | ||||
|       data.mentions.map( | ||||
|         v => cache.get('user', v.id) ?? new User(this.client, v) | ||||
|       ) ?? this.mentions | ||||
|     this.mentionRoles = data.mention_roles ?? this.mentionRoles | ||||
|     this.mentionChannels = data.mention_channels ?? this.mentionChannels | ||||
|     this.attachments = data.attachments ?? this.attachments | ||||
|     this.embeds = data.embeds.map(v => new Embed(v)) ?? this.embeds | ||||
|     this.reactions = data.reactions ?? this.reactions | ||||
|     this.nonce = data.nonce ?? this.nonce | ||||
|     this.pinned = data.pinned ?? this.pinned | ||||
|     this.webhookID = data.webhook_id ?? this.webhookID | ||||
|     this.type = data.type ?? this.type | ||||
|     this.activity = data.activity ?? this.activity | ||||
|     this.application = data.application ?? this.application | ||||
|     this.messageReference = data.message_reference ?? this.messageReference | ||||
|     this.flags = data.flags ?? this.flags | ||||
|   } | ||||
| 
 | ||||
|   // TODO: We have to seperate fetch()
 | ||||
|   async editMessage (text?: string, option?: MessageOption): Promise<Message> { | ||||
|     if (text !== undefined && option !== undefined) { | ||||
|       throw new Error('Either text or option is necessary.') | ||||
|  | @ -89,7 +121,7 @@ export class Message extends Base { | |||
|       method: 'PATCH', | ||||
|       body: JSON.stringify({ | ||||
|         content: text, | ||||
|         embed: option?.embed, | ||||
|         embed: option?.embed.toJSON(), | ||||
|         file: option?.file, | ||||
|         tts: option?.tts, | ||||
|         allowed_mentions: option?.allowedMention | ||||
|  | @ -98,4 +130,22 @@ export class Message extends Base { | |||
| 
 | ||||
|     return new Message(this.client, await resp.json()) | ||||
|   } | ||||
| 
 | ||||
|   // TODO: We have to seperate fetch()
 | ||||
|   async delete (): Promise<void> { | ||||
|     const resp = await fetch(CHANNEL_MESSAGE(this.channelID, this.id), { | ||||
|       headers: { | ||||
|         Authorization: `Bot ${this.client.token}` | ||||
|       }, | ||||
|       method: 'DELETE' | ||||
|     }) | ||||
| 
 | ||||
|     // TODO: improve Error and Promise
 | ||||
|     return await new Promise((resolve, reject) => { | ||||
|       if (resp.status !== 204) { | ||||
|         reject(new Error()) | ||||
|       } | ||||
|       resolve() | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { Base } from './base.ts' | ||||
| import { RolePayload } from '../types/roleTypes.ts' | ||||
|  | @ -26,5 +27,17 @@ export class Role extends Base { | |||
|     this.permissions = data.permissions | ||||
|     this.managed = data.managed | ||||
|     this.mentionable = data.mentionable | ||||
|     cache.set('role', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: RolePayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.name = data.name ?? this.name | ||||
|     this.color = data.color ?? this.color | ||||
|     this.hoist = data.hoist ?? this.hoist | ||||
|     this.position = data.position ?? this.position | ||||
|     this.permissions = data.permissions ?? this.permissions | ||||
|     this.managed = data.managed ?? this.managed | ||||
|     this.mentionable = data.mentionable ?? this.mentionable | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { MessageOption, TextChannelPayload } from '../types/channelTypes.ts' | ||||
| import { CHANNEL_MESSAGE, CHANNEL_MESSAGES } from '../types/endpoint.ts' | ||||
|  | @ -12,6 +13,13 @@ export class TextChannel extends Channel { | |||
|     super(client, data) | ||||
|     this.lastMessageID = data.last_message_id | ||||
|     this.lastPinTimestamp = data.last_pin_timestamp | ||||
|     cache.set('textchannel', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: TextChannelPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.lastMessageID = data.last_message_id ?? this.lastMessageID | ||||
|     this.lastPinTimestamp = data.last_pin_timestamp ?? this.lastPinTimestamp | ||||
|   } | ||||
| 
 | ||||
|   async send (text?: string, option?: MessageOption): Promise<Message> { | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { UserPayload } from '../types/userTypes.ts' | ||||
| import { Base } from './base.ts' | ||||
|  | @ -40,5 +41,22 @@ export class User extends Base { | |||
|     this.flags = data.flags | ||||
|     this.premiumType = data.premium_type | ||||
|     this.publicFlags = data.public_flags | ||||
|     cache.set('user', this.id, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: UserPayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.username = data.username ?? this.username | ||||
|     this.discriminator = data.discriminator ?? this.discriminator | ||||
|     this.avatar = data.avatar ?? this.avatar | ||||
|     this.bot = data.bot ?? this.bot | ||||
|     this.system = data.system ?? this.system | ||||
|     this.mfaEnabled = data.mfa_enabled ?? this.mfaEnabled | ||||
|     this.locale = data.locale ?? this.locale | ||||
|     this.verified = data.verified ?? this.verified | ||||
|     this.email = data.email ?? this.email | ||||
|     this.flags = data.flags ?? this.flags | ||||
|     this.premiumType = data.premium_type ?? this.premiumType | ||||
|     this.publicFlags = data.public_flags ?? this.publicFlags | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import cache from '../models/cache.ts' | ||||
| import { Client } from '../models/client.ts' | ||||
| import { MemberPayload } from '../types/guildTypes.ts' | ||||
| import { VoiceStatePayload } from '../types/voiceTypes.ts' | ||||
|  | @ -29,5 +30,20 @@ export class VoiceState extends Base { | |||
|     this.selfStream = data.self_stream | ||||
|     this.selfVideo = data.self_video | ||||
|     this.suppress = data.suppress | ||||
|     cache.set('voiceState', `${this.guildID}:${this.userID}`, this) | ||||
|   } | ||||
| 
 | ||||
|   readFromData (data: VoiceStatePayload): void { | ||||
|     super.readFromData(data) | ||||
|     this.channelID = data.channel_id ?? this.channelID | ||||
|     this.sessionID = data.session_id ?? this.sessionID | ||||
|     this.userID = data.user_id ?? this.userID | ||||
|     this.deaf = data.deaf ?? this.deaf | ||||
|     this.mute = data.mute ?? this.mute | ||||
|     this.selfDeaf = data.self_deaf ?? this.selfDeaf | ||||
|     this.selfMute = data.self_mute ?? this.selfMute | ||||
|     this.selfStream = data.self_stream ?? this.selfStream | ||||
|     this.selfVideo = data.self_video ?? this.selfVideo | ||||
|     this.suppress = data.suppress ?? this.suppress | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -16,6 +16,9 @@ bot.on('channelUpdate', (before: Channel, after: Channel) => { | |||
|   if (before instanceof GuildTextChannel && after instanceof GuildTextChannel) { | ||||
|     console.log(before.name) | ||||
|     console.log(after.name) | ||||
|   } else { | ||||
|     console.log(before) | ||||
|     console.log(after) | ||||
|   } | ||||
| }) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| import { Embed } from '../structures/embed.ts' | ||||
| import { EmojiPayload } from './emojiTypes.ts' | ||||
| import { MemberPayload } from './guildTypes.ts' | ||||
| import { RolePayload } from './roleTypes.ts' | ||||
| import { UserPayload } from './userTypes.ts' | ||||
| 
 | ||||
| interface ChannelPayload { | ||||
|  | @ -83,8 +82,8 @@ interface MessagePayload { | |||
|   edited_timestamp?: string | ||||
|   tts: boolean | ||||
|   mention_everyone: boolean | ||||
|   mentions: MemberPayload[] | ||||
|   mention_roles: RolePayload[] | ||||
|   mentions: UserPayload[] | ||||
|   mention_roles: string[] | ||||
|   mention_channels?: ChannelMention[] | ||||
|   attachments: Attachment[] | ||||
|   embeds: EmbedPayload[] | ||||
|  | @ -281,6 +280,9 @@ export { | |||
|   Attachment, | ||||
|   Reaction, | ||||
|   MessageActivity, | ||||
|   MessageActivityTypes, | ||||
|   MessageFlags, | ||||
|   FollowedChannel, | ||||
|   MessageApplication, | ||||
|   MessageReference, | ||||
|   MessagePayload, | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ import { UserPayload } from './userTypes.ts' | |||
| export interface EmojiPayload { | ||||
|   id: string | ||||
|   name: string | ||||
|   roles?: [] | ||||
|   roles?: string[] | ||||
|   user?: UserPayload | ||||
|   require_colons?: boolean | ||||
|   managed?: boolean | ||||
|  |  | |||
|  | @ -70,7 +70,7 @@ enum GatewayEvents { | |||
|   Channel_Create = 'CHANNEL_CREATE', | ||||
|   Channel_Update = 'CHANNEL_UPDATE', | ||||
|   Channel_Delete = 'CHANNEL_DELETE', | ||||
|   Channel_Pins_Update = 'CHANNEL_PIN_UPDATE', | ||||
|   Channel_Pins_Update = 'CHANNEL_PINS_UPDATE', | ||||
|   Guild_Create = 'GUILD_CREATE', | ||||
|   Guild_Update = 'GUILD_UPDATE', | ||||
|   Guild_Delete = 'GUILD_DELETE', | ||||
|  |  | |||
|  | @ -56,7 +56,7 @@ interface GuildPayload { | |||
| interface MemberPayload { | ||||
|   user: UserPayload | ||||
|   nick?: string | ||||
|   roles: RolePayload[] | ||||
|   roles: string[] | ||||
|   joined_at: string | ||||
|   premium_since?: string | ||||
|   deaf: boolean | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue