feat(events:member): add guildMemberAdd, guildMemberRemove, guildMemberUpdate
This commit is contained in:
		
							parent
							
								
									943b946e5b
								
							
						
					
					
						commit
						44303dacb1
					
				
					 7 changed files with 75 additions and 6 deletions
				
			
		|  | @ -11,7 +11,7 @@ export const guildBanAdd: GatewayEventHandler = async ( | ||||||
|   const user: User = await gateway.client.users.get(d.user.id) ?? new User(gateway.client, d.user) |   const user: User = await gateway.client.users.get(d.user.id) ?? new User(gateway.client, d.user) | ||||||
| 
 | 
 | ||||||
|   if (guild !== undefined) { |   if (guild !== undefined) { | ||||||
|     await guild.members.delete(user.id) |     // We don't have to delete member, already done with guildMemberRemove event
 | ||||||
|     gateway.client.emit('guildBanAdd', guild, user) |     gateway.client.emit('guildBanAdd', guild, user) | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/gateway/handlers/guildMemberAdd.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/gateway/handlers/guildMemberAdd.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
|  | import { Guild } from '../../structures/guild.ts' | ||||||
|  | 
 | ||||||
|  | export const guildMemberAdd: GatewayEventHandler = async ( | ||||||
|  |   gateway: Gateway, | ||||||
|  |   d: any | ||||||
|  | ) => { | ||||||
|  |   const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id) | ||||||
|  |   // Weird case, shouldn't happen
 | ||||||
|  |   if (guild === undefined) return | ||||||
|  | 
 | ||||||
|  |   await guild.members.set(d.id, d) | ||||||
|  |   const member = await guild.members.get(d.id) | ||||||
|  |   gateway.client.emit('guildMemberAdd', member) | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/gateway/handlers/guildMemberRemove.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/gateway/handlers/guildMemberRemove.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
|  | import { Guild } from '../../structures/guild.ts' | ||||||
|  | import { User } from "../../structures/user.ts" | ||||||
|  | 
 | ||||||
|  | export const guildMemberRemove: GatewayEventHandler = async ( | ||||||
|  |   gateway: Gateway, | ||||||
|  |   d: any | ||||||
|  | ) => { | ||||||
|  |   const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id) | ||||||
|  |   // Weird case, shouldn't happen
 | ||||||
|  |   if (guild === undefined) return | ||||||
|  | 
 | ||||||
|  |   const member = await guild.members.get(d.id) | ||||||
|  |   await guild.members.delete(d.id) | ||||||
|  | 
 | ||||||
|  |   if (member !== undefined) gateway.client.emit('guildMemberRemove', member) | ||||||
|  |   else { | ||||||
|  |     const user = new User(gateway.client, d.user) | ||||||
|  |     gateway.client.emit('guildMemberRemoveUncached', user) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								src/gateway/handlers/guildMemberUpdate.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/gateway/handlers/guildMemberUpdate.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
|  | import { Guild } from '../../structures/guild.ts' | ||||||
|  | 
 | ||||||
|  | export const guildMemberUpdate: GatewayEventHandler = async ( | ||||||
|  |   gateway: Gateway, | ||||||
|  |   d: any | ||||||
|  | ) => { | ||||||
|  |   const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id) | ||||||
|  |   // Weird case, shouldn't happen
 | ||||||
|  |   if (guild === undefined) return | ||||||
|  | 
 | ||||||
|  |   const member = await guild.members.get(d.id) | ||||||
|  |   await guild.members.set(d.id, d) | ||||||
|  |   const newMember = await guild.members.get(d.id) | ||||||
|  | 
 | ||||||
|  |   if (member !== undefined) gateway.client.emit('guildMemberRemove', member, newMember) | ||||||
|  |   else { | ||||||
|  |       gateway.client.emit('guildMemberUpdateUncached', newMember) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -15,6 +15,10 @@ import { resume } from './resume.ts' | ||||||
| import { reconnect } from './reconnect.ts' | import { reconnect } from './reconnect.ts' | ||||||
| import { messageDelete } from "./messageDelete.ts" | import { messageDelete } from "./messageDelete.ts" | ||||||
| import { messageUpdate } from "./messageUpdate.ts" | import { messageUpdate } from "./messageUpdate.ts" | ||||||
|  | import { guildEmojiUpdate } from "./guildEmojiUpdate.ts" | ||||||
|  | import { guildMemberAdd } from "./guildMemberAdd.ts" | ||||||
|  | import { guildMemberRemove } from "./guildMemberRemove.ts" | ||||||
|  | import { guildMemberUpdate } from "./guildMemberUpdate.ts" | ||||||
| 
 | 
 | ||||||
| export const gatewayHandlers: { | export const gatewayHandlers: { | ||||||
|   [eventCode in GatewayEvents]: GatewayEventHandler | undefined |   [eventCode in GatewayEvents]: GatewayEventHandler | undefined | ||||||
|  | @ -31,11 +35,11 @@ export const gatewayHandlers: { | ||||||
|   GUILD_UPDATE: guildUpdate, |   GUILD_UPDATE: guildUpdate, | ||||||
|   GUILD_BAN_ADD: guildBanAdd, |   GUILD_BAN_ADD: guildBanAdd, | ||||||
|   GUILD_BAN_REMOVE: guildBanRemove, |   GUILD_BAN_REMOVE: guildBanRemove, | ||||||
|   GUILD_EMOJIS_UPDATE: undefined, |   GUILD_EMOJIS_UPDATE: guildEmojiUpdate, | ||||||
|   GUILD_INTEGRATIONS_UPDATE: undefined, |   GUILD_INTEGRATIONS_UPDATE: undefined, | ||||||
|   GUILD_MEMBER_ADD: undefined, |   GUILD_MEMBER_ADD: guildMemberAdd, | ||||||
|   GUILD_MEMBER_REMOVE: undefined, |   GUILD_MEMBER_REMOVE: guildMemberRemove, | ||||||
|   GUILD_MEMBER_UPDATE: undefined, |   GUILD_MEMBER_UPDATE: guildMemberUpdate, | ||||||
|   GUILD_MEMBERS_CHUNK: undefined, |   GUILD_MEMBERS_CHUNK: undefined, | ||||||
|   GUILD_ROLE_CREATE: undefined, |   GUILD_ROLE_CREATE: undefined, | ||||||
|   GUILD_ROLE_UPDATE: undefined, |   GUILD_ROLE_UPDATE: undefined, | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ export const messageUpdate: GatewayEventHandler = async ( | ||||||
|     channel = (await gateway.client.channels.fetch(d.channel_id)) as TextChannel |     channel = (await gateway.client.channels.fetch(d.channel_id)) as TextChannel | ||||||
| 
 | 
 | ||||||
|   const message = await channel.messages.get(d.id) |   const message = await channel.messages.get(d.id) | ||||||
|   const author = new User(gateway.client, d.author) |   const author = message?.author !== undefined ? message.author : new User(gateway.client, d) | ||||||
|   const newMsg = new Message(gateway.client, d, channel, author) |   const newMsg = new Message(gateway.client, d, channel, author) | ||||||
|   if (message === undefined) { |   if (message === undefined) { | ||||||
|     await channel.messages.set(d.id, d) |     await channel.messages.set(d.id, d) | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ import { Command, CommandClient, Intents } from '../../mod.ts' | ||||||
| import { GuildChannel } from "../managers/guildChannels.ts" | import { GuildChannel } from "../managers/guildChannels.ts" | ||||||
| import { CommandContext } from "../models/command.ts" | import { CommandContext } from "../models/command.ts" | ||||||
| import { Extension } from "../models/extensions.ts" | import { Extension } from "../models/extensions.ts" | ||||||
|  | import { Member } from "../structures/member.ts" | ||||||
| import { Message } from "../structures/message.ts" | import { Message } from "../structures/message.ts" | ||||||
| import { MessageDeletePayload } from "../types/gateway.ts" | import { MessageDeletePayload } from "../types/gateway.ts" | ||||||
| import { TOKEN } from './config.ts' | import { TOKEN } from './config.ts' | ||||||
|  | @ -36,6 +37,14 @@ client.on('messageUpdateUncached', (msg: Message) => { | ||||||
|   console.log(`Message: ${msg.author.tag}: ${msg.content}`) |   console.log(`Message: ${msg.author.tag}: ${msg.content}`) | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  | client.on('guildMemberAdd', (member: Member) => { | ||||||
|  |   console.log(`Member Join: ${member.user.tag}`) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | client.on('guildMemberRemove', (member: Member) => { | ||||||
|  |   console.log(`Member Leave: ${member.user.tag}`) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
| // client.on('messageCreate', msg => console.log(`${msg.author.tag}: ${msg.content}`))
 | // client.on('messageCreate', msg => console.log(`${msg.author.tag}: ${msg.content}`))
 | ||||||
| 
 | 
 | ||||||
| client.on("commandError", console.error) | client.on("commandError", console.error) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue