refactor(events:guildEmojiUpdate): split up into add, delete, update events
This commit is contained in:
		
							parent
							
								
									e72e702764
								
							
						
					
					
						commit
						45673d8197
					
				
					 2 changed files with 44 additions and 5 deletions
				
			
		|  | @ -1,14 +1,53 @@ | ||||||
| import cache from '../../models/cache.ts' | import { Emoji } from "../../structures/emoji.ts" | ||||||
| import { Guild } from '../../structures/guild.ts' | import { Guild } from '../../structures/guild.ts' | ||||||
|  | import { EmojiPayload } from "../../types/emoji.ts" | ||||||
| import { GuildEmojiUpdatePayload } from '../../types/gateway.ts' | import { GuildEmojiUpdatePayload } from '../../types/gateway.ts' | ||||||
| import { Gateway, GatewayEventHandler } from '../index.ts' | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
| 
 | 
 | ||||||
| export const guildEmojiUpdate: GatewayEventHandler = ( | export const guildEmojiUpdate: GatewayEventHandler = async ( | ||||||
|   gateway: Gateway, |   gateway: Gateway, | ||||||
|   d: GuildEmojiUpdatePayload |   d: GuildEmojiUpdatePayload | ||||||
| ) => { | ) => { | ||||||
|   const guild: Guild = cache.get('guild', d.guild_id) |   const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id) | ||||||
|   if (guild !== undefined) { |   if (guild !== undefined) { | ||||||
|     // const emojis = guild.emojis
 |     const emojis = await guild.emojis.collection() | ||||||
|  |     const deleted: Emoji[] = [] | ||||||
|  |     const added: Emoji[] = [] | ||||||
|  |     const updated: Array<{ before: Emoji, after: Emoji }> = [] | ||||||
|  |     const _updated: EmojiPayload[] = [] | ||||||
|  | 
 | ||||||
|  |     for (const raw of d.emojis) { | ||||||
|  |       const has = emojis.get(raw.id) | ||||||
|  |       if (has === undefined) { | ||||||
|  |         await guild.emojis.set(raw.id, raw) | ||||||
|  |         const emoji = await guild.emojis.get(raw.id) as Emoji | ||||||
|  |         added.push(emoji) | ||||||
|  |       } else _updated.push(raw) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     for (const emoji of emojis.values()) { | ||||||
|  |       const find = _updated.find(e => emoji.id === e.id) | ||||||
|  |       if (find === undefined) { | ||||||
|  |         await guild.emojis.delete(emoji.id) | ||||||
|  |         deleted.push(emoji) | ||||||
|  |       } else { | ||||||
|  |         const before = await guild.emojis.get(find.id) as Emoji | ||||||
|  |         await guild.emojis.set(find.id, find) | ||||||
|  |         const after = await guild.emojis.get(find.id) as Emoji | ||||||
|  |         updated.push({ before, after }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     for (const emoji of deleted) { | ||||||
|  |       gateway.client.emit('guildEmojiDelete', emoji) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     for (const emoji of added) { | ||||||
|  |       gateway.client.emit('guildEmojiAdd', emoji) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     for (const emoji of updated) { | ||||||
|  |       gateway.client.emit('guildEmojiUpdate', emoji.before, emoji.after) | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -186,7 +186,7 @@ export interface GuildBanRemovePayload { | ||||||
| 
 | 
 | ||||||
| export interface GuildEmojiUpdatePayload { | export interface GuildEmojiUpdatePayload { | ||||||
|   guild_id: string |   guild_id: string | ||||||
|   emojis: [] |   emojis: EmojiPayload[] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface GuildIntegrationsUpdatePayload { | export interface GuildIntegrationsUpdatePayload { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue