mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-03 05:26:07 +00:00
71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
import type {
|
|
ChannelInGuild,
|
|
ChannelWithMessagesInGuild,
|
|
ChannelTypes,
|
|
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)!;
|
|
}
|
|
}
|
|
),
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|