seyfert/packages/cache/channels.ts
Yuzu b15666f20e
chore: use single quotes (#68)
* chore: single quote
2022-07-18 18:25:23 +00:00

67 lines
2.3 KiB
TypeScript

import type { ChannelInGuild, ChannelTypes, ChannelWithMessagesInGuild, DiscordChannel, Snowflake } from './deps.ts';
import type { CachedMessage } from './messages.ts';
import type { CachedGuild } from './guilds.ts';
import type { SessionCache } from './mod.ts';
import { Collection } from './Collection.ts';
import { ChannelFactory, DMChannel, textBasedChannels } from './deps.ts';
export interface CachedGuildChannel extends Omit<ChannelWithMessagesInGuild, 'type'> {
type: ChannelTypes;
messages: Collection<CachedMessage>;
guild: CachedGuild;
guildId: Snowflake;
}
export interface CachedGuildChannel extends Omit<ChannelInGuild, 'type'> {
type: ChannelTypes;
guild: CachedGuild;
guildId: Snowflake;
}
export interface CachedDMChannel extends DMChannel {
messages: Collection<CachedMessage>;
}
export function channelBootstrapper(cache: SessionCache, channel: DiscordChannel) {
if (!channel.guild_id) {
cache.dms.set(
channel.id,
Object.assign(new DMChannel(cache.session, channel), {
messages: new Collection<CachedMessage>(cache.session),
}),
);
return;
}
cache.guilds.retrieve(channel.guild_id, (guild) => {
if (textBasedChannels.includes(channel.type)) {
guild.channels.set(
channel.id,
Object.assign(
ChannelFactory.fromGuildChannel(cache.session, channel) as ChannelWithMessagesInGuild,
{
messages: new Collection<CachedMessage>(cache.session),
guildId: channel.guild_id!,
get guild(): CachedGuild {
return cache.guilds.get(this.guildId)!;
},
},
),
);
} else {
guild.channels.set(
channel.id,
<CachedGuildChannel> Object.assign(
ChannelFactory.fromGuildChannel(cache.session, channel),
{
guildId: channel.guild_id!,
get guild(): CachedGuild {
return cache.guilds.get(this.guildId)!;
},
},
),
);
}
});
}