feat invite events
This commit is contained in:
		
							parent
							
								
									3ec783d7d4
								
							
						
					
					
						commit
						c1ec7a7353
					
				
					 6 changed files with 100 additions and 2 deletions
				
			
		
							
								
								
									
										6
									
								
								.prettierrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.prettierrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | { | ||||||
|  |     "tabWidth": 2, | ||||||
|  |     "useTabs": false, | ||||||
|  |     "semi": false, | ||||||
|  |     "singleQuote": true | ||||||
|  |   } | ||||||
|  | @ -36,6 +36,8 @@ import { Member } from "../../structures/member.ts" | ||||||
| import { Role } from "../../structures/role.ts" | import { Role } from "../../structures/role.ts" | ||||||
| import { Message } from "../../structures/message.ts" | import { Message } from "../../structures/message.ts" | ||||||
| import { Collection } from "../../utils/collection.ts" | import { Collection } from "../../utils/collection.ts" | ||||||
|  | import { inviteCreate } from './inviteCreate' | ||||||
|  | import { inviteDelete } from './inviteDelete' | ||||||
| 
 | 
 | ||||||
| export const gatewayHandlers: { | export const gatewayHandlers: { | ||||||
|   [eventCode in GatewayEvents]: GatewayEventHandler | undefined |   [eventCode in GatewayEvents]: GatewayEventHandler | undefined | ||||||
|  | @ -61,8 +63,8 @@ export const gatewayHandlers: { | ||||||
|   GUILD_ROLE_CREATE: guildRoleCreate, |   GUILD_ROLE_CREATE: guildRoleCreate, | ||||||
|   GUILD_ROLE_UPDATE: guildRoleUpdate, |   GUILD_ROLE_UPDATE: guildRoleUpdate, | ||||||
|   GUILD_ROLE_DELETE: guildRoleDelete, |   GUILD_ROLE_DELETE: guildRoleDelete, | ||||||
|   INVITE_CREATE: undefined, |   INVITE_CREATE: inviteCreate, | ||||||
|   INVITE_DELETE: undefined, |   INVITE_DELETE: inviteDelete, | ||||||
|   MESSAGE_CREATE: messageCreate, |   MESSAGE_CREATE: messageCreate, | ||||||
|   MESSAGE_UPDATE: messageUpdate, |   MESSAGE_UPDATE: messageUpdate, | ||||||
|   MESSAGE_DELETE: messageDelete, |   MESSAGE_DELETE: messageDelete, | ||||||
|  |  | ||||||
							
								
								
									
										34
									
								
								src/gateway/handlers/inviteCreate.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/gateway/handlers/inviteCreate.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | ||||||
|  | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
|  | import { Guild } from '../../structures/guild.ts' | ||||||
|  | import { InviteCreatePayload } from '../../types/gateway.ts' | ||||||
|  | import { ChannelPayload, GuildPayload, InvitePayload } from '../../../mod.ts' | ||||||
|  | 
 | ||||||
|  | export const inviteCreate: GatewayEventHandler = async ( | ||||||
|  |   gateway: Gateway, | ||||||
|  |   d: InviteCreatePayload | ||||||
|  | ) => { | ||||||
|  |   // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
 | ||||||
|  |   const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) | ||||||
|  | 
 | ||||||
|  |   // Weird case, shouldn't happen
 | ||||||
|  |   if (guild === undefined) return | ||||||
|  | 
 | ||||||
|  |   const cachedChannel = await guild.channels.get(d.channel_id) | ||||||
|  |   // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
 | ||||||
|  |   const cachedGuild: GuildPayload | undefined = | ||||||
|  |     d.guild_id === undefined | ||||||
|  |       ? undefined | ||||||
|  |       : await guild.client.guilds._get(d.guild_id) | ||||||
|  |   const dataConverted: InvitePayload = { | ||||||
|  |     code: d.code, | ||||||
|  |     guild: cachedGuild, | ||||||
|  |     channel: cachedChannel as ChannelPayload, | ||||||
|  |     inviter: d.inviter, | ||||||
|  |     target_user: d.target_user, | ||||||
|  |     target_user_type: d.target_user_type, | ||||||
|  |   } | ||||||
|  |   // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
 | ||||||
|  |   await guild.invites.set(d.code, dataConverted) | ||||||
|  |   const invite = await guild.invites.get(d.code) | ||||||
|  |   gateway.client.emit('inviteCreate', invite) | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/gateway/handlers/inviteDelete.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/gateway/handlers/inviteDelete.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
|  | import { Guild } from '../../structures/guild.ts' | ||||||
|  | import { InviteDeletePayload } from '../../types/gateway.ts' | ||||||
|  | 
 | ||||||
|  | export const inviteDelete: GatewayEventHandler = async ( | ||||||
|  |   gateway: Gateway, | ||||||
|  |   d: InviteDeletePayload | ||||||
|  | ) => { | ||||||
|  |   // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
 | ||||||
|  |   const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) | ||||||
|  | 
 | ||||||
|  |   // Weird case, shouldn't happen
 | ||||||
|  |   if (guild === undefined) return | ||||||
|  | 
 | ||||||
|  |   const cachedInvite = await guild.invites.get(d.code) | ||||||
|  | 
 | ||||||
|  |   // Should not happen but here we go
 | ||||||
|  |   if (cachedInvite === undefined) return | ||||||
|  | 
 | ||||||
|  |   gateway.client.emit('inviteDelete', cachedInvite) | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								src/managers/invites.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/managers/invites.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { Guild } from '../structures/guild.ts' | ||||||
|  | import { Invite } from '../structures/invite.ts' | ||||||
|  | import { GUILD_INVITES } from '../types/endpoint.ts' | ||||||
|  | import { InvitePayload } from '../types/invite.ts' | ||||||
|  | import { BaseManager } from './base.ts' | ||||||
|  | 
 | ||||||
|  | export class InviteManager extends BaseManager<InvitePayload, Invite> { | ||||||
|  |   guild: Guild | ||||||
|  | 
 | ||||||
|  |   constructor(client: Client, guild: Guild) { | ||||||
|  |     super(client, `invites:${guild.id}`, Invite) | ||||||
|  |     this.guild = guild | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   async fetch(id: string): Promise<Invite> { | ||||||
|  |     return await new Promise((resolve, reject) => { | ||||||
|  |       this.client.rest | ||||||
|  |         .get(GUILD_INVITES(this.guild.id)) | ||||||
|  |         .then((data) => { | ||||||
|  |           this.set(id, data as InvitePayload) | ||||||
|  |           resolve(new Invite(this.client, data as InvitePayload)) | ||||||
|  |         }) | ||||||
|  |         .catch((e) => reject(e)) | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   async fromPayload(invites: InvitePayload[]): Promise<boolean> { | ||||||
|  |     for (const invite of invites) { | ||||||
|  |       await this.set(invite.code, invite) | ||||||
|  |     } | ||||||
|  |     return true | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -78,6 +78,7 @@ export class Guild extends Base { | ||||||
|     ) |     ) | ||||||
|     this.roles = new RolesManager(this.client, this) |     this.roles = new RolesManager(this.client, this) | ||||||
|     this.emojis = new GuildEmojisManager(this.client, this.client.emojis, this) |     this.emojis = new GuildEmojisManager(this.client, this.client.emojis, this) | ||||||
|  |     this.invites = new InviteManager(this.client, this) | ||||||
| 
 | 
 | ||||||
|     if (!this.unavailable) { |     if (!this.unavailable) { | ||||||
|       this.name = data.name |       this.name = data.name | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue