harmony/src/gateway/handlers/messageCreate.ts

43 lines
1.6 KiB
TypeScript

import { Message } from '../../structures/message.ts'
import type { TextChannel } from '../../structures/textChannel.ts'
import { User } from '../../structures/user.ts'
import type { MessagePayload } from '../../types/channel.ts'
import type { Gateway, GatewayEventHandler } from '../mod.ts'
export const messageCreate: GatewayEventHandler = async (
gateway: Gateway,
d: MessagePayload
) => {
let channel = await gateway.client.channels.get<TextChannel>(d.channel_id)
// Fetch the channel if not cached
if (channel === undefined)
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
channel = (await gateway.client.channels.fetch(d.channel_id)) as TextChannel
await channel.messages.set(d.id, d)
const user = new User(gateway.client, d.author)
await gateway.client.users.set(d.author.id, d.author)
let guild
let member
if (d.guild_id !== undefined) {
guild = await gateway.client.guilds.get(d.guild_id)
}
if (guild !== undefined && d.member !== undefined) {
d.member.user = d.author
await guild.members.set(d.author.id, d.member)
member = await guild.members.get(d.author.id)
}
const message = new Message(gateway.client, d, channel, user)
if (guild !== undefined) message.guild = guild
await message.mentions.fromPayload(d)
message.member = member
if (message.member !== undefined) {
if (message.member.user === undefined) {
const user = await gateway.client.users.get(message.member.id)
if (user !== undefined) {
message.member.user = user
}
}
}
gateway.client.emit('messageCreate', message)
}