Merge pull request #104 from DjDeveloperr/slash
Add updateRefs to Message and MessageReactionsManager, don't double save Guild-related cache
This commit is contained in:
		
						commit
						cc7a587040
					
				
					 6 changed files with 63 additions and 43 deletions
				
			
		|  | @ -30,7 +30,7 @@ export class GuildManager extends BaseManager<GuildPayload, Guild> { | |||
|       this.client.rest | ||||
|         .get(GUILD(id)) | ||||
|         .then(async (data: any) => { | ||||
|           this.set(id, data) | ||||
|           await this.set(id, data) | ||||
| 
 | ||||
|           const guild = new Guild(this.client, data) | ||||
| 
 | ||||
|  | @ -145,6 +145,16 @@ export class GuildManager extends BaseManager<GuildPayload, Guild> { | |||
|     return result | ||||
|   } | ||||
| 
 | ||||
|   /** Sets a value to Cache */ | ||||
|   async set(key: string, value: GuildPayload): Promise<any> { | ||||
|     if ('roles' in value) value.roles = [] | ||||
|     if ('emojis' in value) value.emojis = [] | ||||
|     if ('members' in value) value.members = [] | ||||
|     if ('presences' in value) value.presences = [] | ||||
|     if ('voice_states' in value) value.voice_states = [] | ||||
|     return this.client.cache.set(this.cacheName, key, value) | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Edits a guild. Returns edited guild. | ||||
|    * @param guild Guild or guild id | ||||
|  |  | |||
|  | @ -23,6 +23,14 @@ export class MessageReactionsManager extends BaseManager< | |||
|     this.message = message | ||||
|   } | ||||
| 
 | ||||
|   async updateRefs(): Promise<void> { | ||||
|     const newVal = await this.message.channel.messages.get(this.message.id) | ||||
|     if (newVal !== undefined) { | ||||
|       this.message = newVal | ||||
|     } | ||||
|     await this.message.updateRefs() | ||||
|   } | ||||
| 
 | ||||
|   async get(id: string): Promise<MessageReaction | undefined> { | ||||
|     const raw = await this._get(id) | ||||
|     if (raw === undefined) return | ||||
|  | @ -32,6 +40,7 @@ export class MessageReactionsManager extends BaseManager< | |||
|     let emoji = await this.client.emojis.get(emojiID as string) | ||||
|     if (emoji === undefined) emoji = new Emoji(this.client, raw.emoji) | ||||
| 
 | ||||
|     await this.updateRefs() | ||||
|     const reaction = new MessageReaction(this.client, raw, this.message, emoji) | ||||
|     return reaction | ||||
|   } | ||||
|  |  | |||
|  | @ -93,18 +93,12 @@ export class MessagesManager extends BaseManager<MessagePayload, Message> { | |||
|           if (channel === undefined) | ||||
|             channel = await this.client.channels.fetch(this.channel.id) | ||||
| 
 | ||||
|           const author = new User(this.client, (data as MessagePayload).author) | ||||
|           await this.client.users.set( | ||||
|             author.id, | ||||
|             data.author.id, | ||||
|             (data as MessagePayload).author | ||||
|           ) | ||||
| 
 | ||||
|           const res = new Message( | ||||
|             this.client, | ||||
|             data as MessagePayload, | ||||
|             channel as TextChannel, | ||||
|             author | ||||
|           ) | ||||
|           const res = (await this.get(data.id)) as Message | ||||
| 
 | ||||
|           await res.mentions.fromPayload(data) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,26 +0,0 @@ | |||
| import { Guild } from '../structures/guild.ts' | ||||
| import { VoiceChannel } from '../structures/guildVoiceChannel.ts' | ||||
| import { Client } from './client.ts' | ||||
| 
 | ||||
| export interface VoiceOptions { | ||||
|   guild: Guild | ||||
|   channel: VoiceChannel | ||||
| } | ||||
| 
 | ||||
| export class VoiceClient { | ||||
|   client: Client | ||||
|   ws?: WebSocket | ||||
|   guild: Guild | ||||
|   channel: VoiceChannel | ||||
| 
 | ||||
|   constructor(client: Client, options: VoiceOptions) { | ||||
|     this.client = client | ||||
|     this.guild = options.guild | ||||
|     this.channel = options.channel | ||||
|   } | ||||
| 
 | ||||
|   async connect(): Promise<VoiceClient> { | ||||
|     // TODO(DjDeveloperr): understand docs
 | ||||
|     return this | ||||
|   } | ||||
| } | ||||
|  | @ -12,6 +12,10 @@ import { Channel } from './channel.ts' | |||
| import { Guild } from './guild.ts' | ||||
| import { VoiceState } from './voiceState.ts' | ||||
| 
 | ||||
| export interface VoiceServerData extends VoiceServerUpdateData { | ||||
|   sessionID: string | ||||
| } | ||||
| 
 | ||||
| export class VoiceChannel extends Channel { | ||||
|   bitrate: string | ||||
|   userLimit: number | ||||
|  | @ -32,13 +36,15 @@ export class VoiceChannel extends Channel { | |||
|     this.guild = guild | ||||
|     this.permissionOverwrites = data.permission_overwrites | ||||
|     this.parentID = data.parent_id | ||||
|     // TODO: Cache in Gateway Event Code
 | ||||
|     // cache.set('guildvoicechannel', this.id, this)
 | ||||
|   } | ||||
| 
 | ||||
|   async join(options?: VoiceStateOptions): Promise<VoiceServerUpdateData> { | ||||
|   /** Join the Voice Channel */ | ||||
|   async join( | ||||
|     options?: VoiceStateOptions & { onlyJoin?: boolean } | ||||
|   ): Promise<VoiceServerUpdateData> { | ||||
|     return await new Promise((resolve, reject) => { | ||||
|       let vcdata: VoiceServerUpdateData | undefined | ||||
|       let vcdata: VoiceServerData | ||||
|       let sessionID: string | ||||
|       let done = 0 | ||||
| 
 | ||||
|       const onVoiceStateAdd = (state: VoiceState): void => { | ||||
|  | @ -46,15 +52,24 @@ export class VoiceChannel extends Channel { | |||
|         if (state.channel?.id !== this.id) return | ||||
|         this.client.off('voiceStateAdd', onVoiceStateAdd) | ||||
|         done++ | ||||
|         if (done >= 2) resolve((vcdata as unknown) as VoiceServerUpdateData) | ||||
|         sessionID = state.sessionID | ||||
|         if (done >= 2) { | ||||
|           vcdata.sessionID = sessionID | ||||
|           if (options?.onlyJoin !== true) { | ||||
|           } | ||||
|           resolve(vcdata) | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       const onVoiceServerUpdate = (data: VoiceServerUpdateData): void => { | ||||
|         if (data.guild.id !== this.guild.id) return | ||||
|         vcdata = data | ||||
|         vcdata = (data as unknown) as VoiceServerData | ||||
|         this.client.off('voiceServerUpdate', onVoiceServerUpdate) | ||||
|         done++ | ||||
|         if (done >= 2) resolve(vcdata) | ||||
|         if (done >= 2) { | ||||
|           vcdata.sessionID = sessionID | ||||
|           resolve(vcdata) | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       this.client.shards | ||||
|  | @ -78,6 +93,7 @@ export class VoiceChannel extends Channel { | |||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   /** Leave the Voice Channel */ | ||||
|   leave(): void { | ||||
|     this.client.shards | ||||
|       .get(this.guild.shardID) | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ import { Member } from './member.ts' | |||
| import { Embed } from './embed.ts' | ||||
| import { CHANNEL_MESSAGE } from '../types/endpoint.ts' | ||||
| import { MessageMentions } from './messageMentions.ts' | ||||
| import { TextChannel } from './textChannel.ts' | ||||
| import { GuildTextChannel, TextChannel } from './textChannel.ts' | ||||
| import { Guild } from './guild.ts' | ||||
| import { MessageReactionsManager } from '../managers/messageReactions.ts' | ||||
| import { MessageSticker } from './messageSticker.ts' | ||||
|  | @ -115,6 +115,23 @@ export class Message extends SnowflakeBase { | |||
|         : this.stickers | ||||
|   } | ||||
| 
 | ||||
|   async updateRefs(): Promise<void> { | ||||
|     if (this.guildID !== undefined) | ||||
|       this.guild = await this.client.guilds.get(this.guildID) | ||||
|     const newVal = await this.client.channels.get<TextChannel>(this.channelID) | ||||
|     if (newVal !== undefined) this.channel = newVal | ||||
|     const newUser = await this.client.users.get(this.author.id) | ||||
|     if (newUser !== undefined) this.author = newUser | ||||
|     if (this.member !== undefined) { | ||||
|       const newMember = await this.guild?.members.get(this.member?.id) | ||||
|       if (newMember !== undefined) this.member = newMember | ||||
|     } | ||||
|     if (((this.channel as unknown) as GuildTextChannel).guild !== undefined) | ||||
|       this.guild = ((this.channel as unknown) as GuildTextChannel).guild | ||||
|     if (this.guild !== undefined && this.guildID === undefined) | ||||
|       this.guildID = this.guild.id | ||||
|   } | ||||
| 
 | ||||
|   /** Edits this message. */ | ||||
|   async edit( | ||||
|     content?: string | AllMessageOptions, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue