Files
discordeno/events/channels.ts
2020-05-28 20:47:42 -04:00

60 lines
1.9 KiB
TypeScript

import { cache } from "../utils/cache.ts";
import { ChannelCreatePayload, ChannelTypes } from "../types/channel.ts";
import { createChannel } from "../structures/channel.ts";
import { eventHandlers } from "../module/client.ts";
export const handleInternalChannelCreate = (data: ChannelCreatePayload) => {
const channel = createChannel(data);
cache.channels.set(channel.id, channel);
if (channel.guildID) {
const guild = cache.guilds.get(channel.guildID);
guild?.channels.set(channel.id, channel);
}
eventHandlers.channelCreate?.(channel);
};
export const handleInternalChannelUpdate = (data: ChannelCreatePayload) => {
const cachedChannel = cache.channels.get(data.id);
const channel = createChannel(data);
cache.channels.set(channel.id, channel);
if (!cachedChannel) return;
if (channel.guildID) {
const guild = cache.guilds.get(channel.guildID);
guild?.channels.set(channel.id, channel);
}
eventHandlers.channelUpdate?.(channel, cachedChannel);
};
export const handleInternalChannelDelete = (data: ChannelCreatePayload) => {
const cachedChannel = cache.channels.get(data.id);
if (!cachedChannel) return;
if (cachedChannel.type === ChannelTypes.GUILD_VOICE && data.guild_id) {
const guild = cache.guilds.get(data.guild_id);
if (guild) {
guild.voiceStates.forEach((vs, key) => {
if (vs.channelID !== data.id) return;
// Since this channel was deleted all voice states for this channel should be deleted
guild.voiceStates.delete(key);
const member = guild.members.get(vs.userID);
if (!member) return;
eventHandlers.voiceChannelLeave?.(member, vs.channelID);
});
}
guild?.channels.delete(data.id);
}
cache.channels.delete(data.id);
cache.messages.forEach((message) => {
if (message.channelID === data.id) cache.messages.delete(message.id);
});
eventHandlers.channelDelete?.(cachedChannel);
};