Added messageCreate event, will work on Asynchronous Caching
This commit is contained in:
		
							parent
							
								
									e8347891d7
								
							
						
					
					
						commit
						be3bec017c
					
				
					 5 changed files with 29 additions and 4 deletions
				
			
		|  | @ -10,6 +10,7 @@ import { guildUpdate } from './guildUpdate.ts' | ||||||
| import { guildBanAdd } from './guildBanAdd.ts' | import { guildBanAdd } from './guildBanAdd.ts' | ||||||
| import { ready } from './ready.ts' | import { ready } from './ready.ts' | ||||||
| import { guildBanRemove } from './guildBanRemove.ts' | import { guildBanRemove } from './guildBanRemove.ts' | ||||||
|  | import { messageCreate } from "./messageCreate.ts" | ||||||
| 
 | 
 | ||||||
| export const gatewayHandlers: { | export const gatewayHandlers: { | ||||||
|   [eventCode in GatewayEvents]: GatewayEventHandler | undefined |   [eventCode in GatewayEvents]: GatewayEventHandler | undefined | ||||||
|  | @ -37,7 +38,7 @@ export const gatewayHandlers: { | ||||||
|   GUILD_ROLE_DELETE: undefined, |   GUILD_ROLE_DELETE: undefined, | ||||||
|   INVITE_CREATE: undefined, |   INVITE_CREATE: undefined, | ||||||
|   INVITE_DELETE: undefined, |   INVITE_DELETE: undefined, | ||||||
|   MESSAGE_CREATE: undefined, |   MESSAGE_CREATE: messageCreate, | ||||||
|   MESSAGE_UPDATE: undefined, |   MESSAGE_UPDATE: undefined, | ||||||
|   MESSAGE_DELETE: undefined, |   MESSAGE_DELETE: undefined, | ||||||
|   MESSAGE_DELETE_BULK: undefined, |   MESSAGE_DELETE_BULK: undefined, | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/gateway/handlers/messageCreate.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/gateway/handlers/messageCreate.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | import { Channel } from "../../structures/channel.ts" | ||||||
|  | import { Message } from "../../structures/message.ts" | ||||||
|  | import { MessagePayload } from "../../types/channelTypes.ts" | ||||||
|  | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
|  | 
 | ||||||
|  | export const messageCreate: GatewayEventHandler = async( | ||||||
|  |   gateway: Gateway, | ||||||
|  |   d: MessagePayload | ||||||
|  | ) => { | ||||||
|  |   let channel = gateway.client.channels.get(d.channel_id) | ||||||
|  |   // Fetch the channel if not cached
 | ||||||
|  |   if(!channel) channel = (await gateway.client.channels.fetch(d.channel_id) as any) as Channel | ||||||
|  |   let message = new Message(gateway.client, d, channel) | ||||||
|  |   gateway.client.emit('messageCreate', message) | ||||||
|  | } | ||||||
|  | @ -15,7 +15,7 @@ export class Channel extends Base { | ||||||
|     super(client, data) |     super(client, data) | ||||||
|     this.type = data.type |     this.type = data.type | ||||||
|     this.id = data.id |     this.id = data.id | ||||||
|     cache.set('channel', this.id, this) |     this.client.channels.set(this.id, data) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected readFromData (data: ChannelPayload): void { |   protected readFromData (data: ChannelPayload): void { | ||||||
|  |  | ||||||
|  | @ -15,12 +15,14 @@ import { Member } from './member.ts' | ||||||
| import { Embed } from './embed.ts' | import { Embed } from './embed.ts' | ||||||
| import { CHANNEL_MESSAGE } from '../types/endpoint.ts' | import { CHANNEL_MESSAGE } from '../types/endpoint.ts' | ||||||
| import cache from '../models/cache.ts' | import cache from '../models/cache.ts' | ||||||
|  | import { Channel } from "./channel.ts" | ||||||
| 
 | 
 | ||||||
| export class Message extends Base { | export class Message extends Base { | ||||||
|   // eslint-disable-next-line @typescript-eslint/prefer-readonly
 |   // eslint-disable-next-line @typescript-eslint/prefer-readonly
 | ||||||
|   private data: MessagePayload |   private data: MessagePayload | ||||||
|   id: string |   id: string | ||||||
|   channelID: string |   channelID: string | ||||||
|  |   channel: Channel | ||||||
|   guildID?: string |   guildID?: string | ||||||
|   author: User |   author: User | ||||||
|   member?: Member |   member?: Member | ||||||
|  | @ -44,7 +46,7 @@ export class Message extends Base { | ||||||
|   messageReference?: MessageReference |   messageReference?: MessageReference | ||||||
|   flags?: number |   flags?: number | ||||||
| 
 | 
 | ||||||
|   constructor (client: Client, data: MessagePayload) { |   constructor (client: Client, data: MessagePayload, channel?: Channel, noSave?: boolean) { | ||||||
|     super(client) |     super(client) | ||||||
|     this.data = data |     this.data = data | ||||||
|     this.id = data.id |     this.id = data.id | ||||||
|  | @ -73,7 +75,9 @@ export class Message extends Base { | ||||||
|     this.application = data.application |     this.application = data.application | ||||||
|     this.messageReference = data.message_reference |     this.messageReference = data.message_reference | ||||||
|     this.flags = data.flags |     this.flags = data.flags | ||||||
|     this.client.messages.set(this.id, data) |     if(channel) this.channel = channel || this.client.channels.get(this.channelID) | ||||||
|  |     else throw new Error("Message received without Channel (neither in cache)") // unlikely to happen
 | ||||||
|  |     if(!noSave) this.client.messages.set(this.id, data) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected readFromData (data: MessagePayload): void { |   protected readFromData (data: MessagePayload): void { | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ import { GuildTextChannel } from '../structures/guildTextChannel.ts' | ||||||
| import { TextChannel } from '../structures/textChannel.ts' | import { TextChannel } from '../structures/textChannel.ts' | ||||||
| import { Guild } from '../structures/guild.ts' | import { Guild } from '../structures/guild.ts' | ||||||
| import { User } from '../structures/user.ts' | import { User } from '../structures/user.ts' | ||||||
|  | import { Message } from "../structures/message.ts" | ||||||
| 
 | 
 | ||||||
| const bot = new Client() | const bot = new Client() | ||||||
| 
 | 
 | ||||||
|  | @ -61,6 +62,10 @@ bot.on('guildUpdate', (before: Guild, after: Guild) => { | ||||||
|   console.log('guildUpdate', before.name, after.name) |   console.log('guildUpdate', before.name, after.name) | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  | bot.on('messageCreate', (msg: Message) => { | ||||||
|  |   console.log(`${msg.author.tag}: ${msg.content}`) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
| bot.connect(TOKEN, [ | bot.connect(TOKEN, [ | ||||||
|   GatewayIntents.GUILD_MEMBERS, |   GatewayIntents.GUILD_MEMBERS, | ||||||
|   GatewayIntents.GUILD_PRESENCES, |   GatewayIntents.GUILD_PRESENCES, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue