This commit is contained in:
ITOH
2021-04-09 23:07:20 +02:00
parent b40aaf5a8f
commit 7a6b4bf2d7
41 changed files with 233 additions and 190 deletions
+47 -38
View File
@@ -1,8 +1,8 @@
// deno-lint-ignore-file require-await no-explicit-any prefer-const // deno-lint-ignore-file require-await no-explicit-any prefer-const
import { ChannelStruct } from "./structures/channel.ts"; import { DiscordenoChannel } from "./structures/channel.ts";
import { GuildStruct } from "./structures/guild.ts"; import { DiscordenoGuild } from "./structures/guild.ts";
import { MemberStruct } from "./structures/member.ts"; import { DiscordenoMember } from "./structures/member.ts";
import { MessageStruct } from "./structures/message.ts"; import { DiscordenoMessage } from "./structures/message.ts";
import { Emoji } from "./types/emojis/emoji.ts"; import { Emoji } from "./types/emojis/emoji.ts";
import { PresenceUpdate } from "./types/misc/presence_update.ts"; import { PresenceUpdate } from "./types/misc/presence_update.ts";
import { Collection } from "./util/collection.ts"; import { Collection } from "./util/collection.ts";
@@ -10,13 +10,13 @@ import { Collection } from "./util/collection.ts";
export const cache = { export const cache = {
isReady: false, isReady: false,
/** All of the guild objects the bot has access to, mapped by their Ids */ /** All of the guild objects the bot has access to, mapped by their Ids */
guilds: new Collection<string, GuildStruct>(), guilds: new Collection<string, DiscordenoGuild>(),
/** All of the channel objects the bot has access to, mapped by their Ids */ /** All of the channel objects the bot has access to, mapped by their Ids */
channels: new Collection<string, ChannelStruct>(), channels: new Collection<string, DiscordenoChannel>(),
/** All of the message objects the bot has cached since the bot acquired `READY` state, mapped by their Ids */ /** All of the message objects the bot has cached since the bot acquired `READY` state, mapped by their Ids */
messages: new Collection<string, MessageStruct>(), messages: new Collection<string, DiscordenoMessage>(),
/** All of the member objects that have been cached since the bot acquired `READY` state, mapped by their Ids */ /** All of the member objects that have been cached since the bot acquired `READY` state, mapped by their Ids */
members: new Collection<string, MemberStruct>(), members: new Collection<string, DiscordenoMember>(),
/** All of the unavailable guilds, mapped by their Ids (id, timestamp) */ /** All of the unavailable guilds, mapped by their Ids (id, timestamp) */
unavailableGuilds: new Collection<string, number>(), unavailableGuilds: new Collection<string, number>(),
/** All of the presence update objects received in PRESENCE_UPDATE gateway event, mapped by their user Id */ /** All of the presence update objects received in PRESENCE_UPDATE gateway event, mapped by their user Id */
@@ -25,8 +25,8 @@ export const cache = {
string, string,
( (
value: value:
| Collection<string, MemberStruct> | Collection<string, DiscordenoMember>
| PromiseLike<Collection<string, MemberStruct>>, | PromiseLike<Collection<string, DiscordenoMember>>,
) => void ) => void
>(), >(),
executedSlashCommands: new Collection<string, string>(), executedSlashCommands: new Collection<string, string>(),
@@ -81,23 +81,23 @@ export type TableName =
function set( function set(
table: "guilds", table: "guilds",
key: string, key: string,
value: GuildStruct, value: DiscordenoGuild,
): Promise<Collection<string, GuildStruct>>; ): Promise<Collection<string, DiscordenoGuild>>;
function set( function set(
table: "channels", table: "channels",
key: string, key: string,
value: ChannelStruct, value: DiscordenoChannel,
): Promise<Collection<string, ChannelStruct>>; ): Promise<Collection<string, DiscordenoChannel>>;
function set( function set(
table: "messages", table: "messages",
key: string, key: string,
value: MessageStruct, value: DiscordenoMessage,
): Promise<Collection<string, MessageStruct>>; ): Promise<Collection<string, DiscordenoMessage>>;
function set( function set(
table: "members", table: "members",
key: string, key: string,
value: MemberStruct, value: DiscordenoMember,
): Promise<Collection<string, MemberStruct>>; ): Promise<Collection<string, DiscordenoMember>>;
function set( function set(
table: "presences", table: "presences",
key: string, key: string,
@@ -112,13 +112,22 @@ async function set(table: TableName, key: string, value: any) {
return cache[table].set(key, value); return cache[table].set(key, value);
} }
function get(table: "guilds", key: string): Promise<GuildStruct | undefined>; function get(
table: "guilds",
key: string,
): Promise<DiscordenoGuild | undefined>;
function get( function get(
table: "channels", table: "channels",
key: string, key: string,
): Promise<ChannelStruct | undefined>; ): Promise<DiscordenoChannel | undefined>;
function get(table: "messages", key: string): Promise<MemberStruct | undefined>; function get(
function get(table: "members", key: string): Promise<MemberStruct | undefined>; table: "messages",
key: string,
): Promise<DiscordenoMember | undefined>;
function get(
table: "members",
key: string,
): Promise<DiscordenoMember | undefined>;
function get( function get(
table: "presences", table: "presences",
key: string, key: string,
@@ -134,9 +143,9 @@ async function get(table: TableName, key: string) {
function forEach( function forEach(
table: "guilds", table: "guilds",
callback: ( callback: (
value: GuildStruct, value: DiscordenoGuild,
key: string, key: string,
map: Map<string, GuildStruct>, map: Map<string, DiscordenoGuild>,
) => unknown, ) => unknown,
): void; ): void;
function forEach( function forEach(
@@ -146,25 +155,25 @@ function forEach(
function forEach( function forEach(
table: "channels", table: "channels",
callback: ( callback: (
value: ChannelStruct, value: DiscordenoChannel,
key: string, key: string,
map: Map<string, ChannelStruct>, map: Map<string, DiscordenoChannel>,
) => unknown, ) => unknown,
): void; ): void;
function forEach( function forEach(
table: "messages", table: "messages",
callback: ( callback: (
value: MessageStruct, value: DiscordenoMessage,
key: string, key: string,
map: Map<string, MessageStruct>, map: Map<string, DiscordenoMessage>,
) => unknown, ) => unknown,
): void; ): void;
function forEach( function forEach(
table: "members", table: "members",
callback: ( callback: (
value: MemberStruct, value: DiscordenoMember,
key: string, key: string,
map: Map<string, MemberStruct>, map: Map<string, DiscordenoMember>,
) => unknown, ) => unknown,
): void; ): void;
function forEach( function forEach(
@@ -176,24 +185,24 @@ function forEach(
function filter( function filter(
table: "guilds", table: "guilds",
callback: (value: GuildStruct, key: string) => boolean, callback: (value: DiscordenoGuild, key: string) => boolean,
): Promise<Collection<string, GuildStruct>>; ): Promise<Collection<string, DiscordenoGuild>>;
function filter( function filter(
table: "unavailableGuilds", table: "unavailableGuilds",
callback: (value: number, key: string) => boolean, callback: (value: number, key: string) => boolean,
): Promise<Collection<string, number>>; ): Promise<Collection<string, number>>;
function filter( function filter(
table: "channels", table: "channels",
callback: (value: ChannelStruct, key: string) => boolean, callback: (value: DiscordenoChannel, key: string) => boolean,
): Promise<Collection<string, ChannelStruct>>; ): Promise<Collection<string, DiscordenoChannel>>;
function filter( function filter(
table: "messages", table: "messages",
callback: (value: MessageStruct, key: string) => boolean, callback: (value: DiscordenoMessage, key: string) => boolean,
): Promise<Collection<string, MessageStruct>>; ): Promise<Collection<string, DiscordenoMessage>>;
function filter( function filter(
table: "members", table: "members",
callback: (value: MemberStruct, key: string) => boolean, callback: (value: DiscordenoMember, key: string) => boolean,
): Promise<Collection<string, MemberStruct>>; ): Promise<Collection<string, DiscordenoMember>>;
async function filter( async function filter(
table: TableName, table: TableName,
callback: (value: any, key: string) => boolean, callback: (value: any, key: string) => boolean,
+3 -3
View File
@@ -7,8 +7,8 @@ import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleChannelCreate(data: DiscordGatewayPayload) { export async function handleChannelCreate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordChannel; const payload = data.d as DiscordChannel;
const channelStruct = await structures.createChannelStruct(payload); const discordenoChannel = await structures.createDiscordenoChannel(payload);
await cacheHandlers.set("channels", channelStruct.id, channelStruct); await cacheHandlers.set("channels", discordenoChannel.id, discordenoChannel);
eventHandlers.channelCreate?.(channelStruct); eventHandlers.channelCreate?.(discordenoChannel);
} }
+3 -3
View File
@@ -8,10 +8,10 @@ export async function handleChannelUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordChannel; const payload = data.d as DiscordChannel;
const cachedChannel = await cacheHandlers.get("channels", payload.id); const cachedChannel = await cacheHandlers.get("channels", payload.id);
const channelStruct = await structures.createChannelStruct(payload); const discordenoChannel = await structures.createDiscordenoChannel(payload);
await cacheHandlers.set("channels", channelStruct.id, channelStruct); await cacheHandlers.set("channels", discordenoChannel.id, discordenoChannel);
if (!cachedChannel) return; if (!cachedChannel) return;
eventHandlers.channelUpdate?.(channelStruct, cachedChannel); eventHandlers.channelUpdate?.(discordenoChannel, cachedChannel);
} }
+5 -5
View File
@@ -13,11 +13,11 @@ export async function handleGuildCreate(
// When shards resume they emit GUILD_CREATE again. // When shards resume they emit GUILD_CREATE again.
if (await cacheHandlers.has("guilds", payload.id)) return; if (await cacheHandlers.has("guilds", payload.id)) return;
const guildStruct = await structures.createGuildStruct( const discordenoGuild = await structures.createDiscordenoGuild(
payload, payload,
shardId, shardId,
); );
await cacheHandlers.set("guilds", guildStruct.id, guildStruct); await cacheHandlers.set("guilds", discordenoGuild.id, discordenoGuild);
const shard = ws.shards.get(shardId); const shard = ws.shards.get(shardId);
@@ -26,9 +26,9 @@ export async function handleGuildCreate(
shard.unavailableGuildIds.delete(payload.id); shard.unavailableGuildIds.delete(payload.id);
return eventHandlers.guildAvailable?.(guildStruct); return eventHandlers.guildAvailable?.(discordenoGuild);
} }
if (!cache.isReady) return eventHandlers.guildLoaded?.(guildStruct); if (!cache.isReady) return eventHandlers.guildLoaded?.(discordenoGuild);
eventHandlers.guildCreate?.(guildStruct); eventHandlers.guildCreate?.(discordenoGuild);
} }
@@ -5,16 +5,16 @@ import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleInteractionCreate(data: DiscordGatewayPayload) { export async function handleInteractionCreate(data: DiscordGatewayPayload) {
const payload = data.d as InteractionCommandPayload; const payload = data.d as InteractionCommandPayload;
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
payload.member, payload.member,
payload.guild_id, payload.guild_id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
eventHandlers.interactionCreate?.( eventHandlers.interactionCreate?.(
{ {
...payload, ...payload,
member: memberStruct, member: discordenoMember,
}, },
); );
} }
+3 -3
View File
@@ -9,13 +9,13 @@ export async function handleGuildMembersChunk(data: DiscordGatewayPayload) {
const members = await Promise.all( const members = await Promise.all(
payload.members.map(async (member) => { payload.members.map(async (member) => {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
member, member,
payload.guild_id, payload.guild_id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
return memberStruct; return discordenoMember;
}), }),
); );
+3 -3
View File
@@ -10,11 +10,11 @@ export async function handleGuildMemberAdd(data: DiscordGatewayPayload) {
if (!guild) return; if (!guild) return;
guild.memberCount++; guild.memberCount++;
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
payload, payload,
payload.guild_id, payload.guild_id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
eventHandlers.guildMemberAdd?.(guild, memberStruct); eventHandlers.guildMemberAdd?.(guild, discordenoMember);
} }
+7 -7
View File
@@ -23,24 +23,24 @@ export async function handleGuildMemberUpdate(data: DiscordGatewayPayload) {
mute: guildMember?.mute || false, mute: guildMember?.mute || false,
roles: payload.roles, roles: payload.roles,
}; };
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
newMemberData, newMemberData,
payload.guild_id, payload.guild_id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
if (guildMember) { if (guildMember) {
if (guildMember.nick !== payload.nick) { if (guildMember.nick !== payload.nick) {
eventHandlers.nicknameUpdate?.( eventHandlers.nicknameUpdate?.(
guild, guild,
memberStruct, discordenoMember,
payload.nick!, payload.nick!,
guildMember.nick, guildMember.nick,
); );
} }
if (payload.pending === false && guildMember.pending === true) { if (payload.pending === false && guildMember.pending === true) {
eventHandlers.membershipScreeningPassed?.(guild, memberStruct); eventHandlers.membershipScreeningPassed?.(guild, discordenoMember);
} }
const roleIds = guildMember.roles || []; const roleIds = guildMember.roles || [];
@@ -51,7 +51,7 @@ export async function handleGuildMemberUpdate(data: DiscordGatewayPayload) {
`1. Running forEach loop in GUILD_MEMBER_UPDATE file.`, `1. Running forEach loop in GUILD_MEMBER_UPDATE file.`,
); );
if (!payload.roles.includes(id)) { if (!payload.roles.includes(id)) {
eventHandlers.roleLost?.(guild, memberStruct, id); eventHandlers.roleLost?.(guild, discordenoMember, id);
} }
}); });
@@ -61,10 +61,10 @@ export async function handleGuildMemberUpdate(data: DiscordGatewayPayload) {
`2. Running forEach loop in GUILD_MEMBER_UPDATE file.`, `2. Running forEach loop in GUILD_MEMBER_UPDATE file.`,
); );
if (!roleIds.includes(id)) { if (!roleIds.includes(id)) {
eventHandlers.roleGained?.(guild, memberStruct, id); eventHandlers.roleGained?.(guild, discordenoMember, id);
} }
}); });
} }
eventHandlers.guildMemberUpdate?.(guild, memberStruct, cachedMember); eventHandlers.guildMemberUpdate?.(guild, discordenoMember, cachedMember);
} }
+9 -5
View File
@@ -15,26 +15,30 @@ export async function handleMessageCreate(data: DiscordGatewayPayload) {
if (payload.member && guild) { if (payload.member && guild) {
// If in a guild cache the author as a member // If in a guild cache the author as a member
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
{ ...payload.member, user: payload.author }, { ...payload.member, user: payload.author },
guild.id, guild.id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
} }
await Promise.all(payload.mentions.map(async (mention) => { await Promise.all(payload.mentions.map(async (mention) => {
// Cache the member if its a valid member // Cache the member if its a valid member
if (mention.member && guild) { if (mention.member && guild) {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
{ ...mention.member, user: mention }, { ...mention.member, user: mention },
guild.id, guild.id,
); );
return cacheHandlers.set("members", memberStruct.id, memberStruct); return cacheHandlers.set(
"members",
discordenoMember.id,
discordenoMember,
);
} }
})); }));
const message = await structures.createMessageStruct(payload); const message = await structures.createDiscordenoMessage(payload);
// Cache the message // Cache the message
await cacheHandlers.set("messages", payload.id, message); await cacheHandlers.set("messages", payload.id, message);
@@ -33,11 +33,11 @@ export async function handleMessageReactionAdd(data: DiscordGatewayPayload) {
if (payload.member && payload.guild_id) { if (payload.member && payload.guild_id) {
const guild = await cacheHandlers.get("guilds", payload.guild_id); const guild = await cacheHandlers.get("guilds", payload.guild_id);
if (guild) { if (guild) {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
payload.member, payload.member,
guild.id, guild.id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
} }
} }
@@ -35,11 +35,11 @@ export async function handleMessageReactionRemove(
if (payload.member && payload.guild_id) { if (payload.member && payload.guild_id) {
const guild = await cacheHandlers.get("guilds", payload.guild_id); const guild = await cacheHandlers.get("guilds", payload.guild_id);
if (guild) { if (guild) {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
payload.member, payload.member,
guild.id, guild.id,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
} }
} }
+1 -1
View File
@@ -29,7 +29,7 @@ export async function handleMessageUpdate(data: DiscordGatewayPayload) {
return; return;
} }
const message = await structures.createMessageStruct(payload); const message = await structures.createDiscordenoMessage(payload);
await cacheHandlers.set("messages", payload.id, message); await cacheHandlers.set("messages", payload.id, message);
+3 -3
View File
@@ -102,15 +102,15 @@ async function loaded(shardId: number) {
); );
await Promise.allSettled( await Promise.allSettled(
members.map(async (member) => { members.map(async (member) => {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
snakeKeysToCamelCase(member), snakeKeysToCamelCase(member),
guildId, guildId,
); );
return cacheHandlers.set( return cacheHandlers.set(
"members", "members",
memberStruct.id, discordenoMember.id,
memberStruct, discordenoMember,
); );
}), }),
); );
+1 -1
View File
@@ -8,7 +8,7 @@ export async function handleGuildRoleCreate(data: DiscordGatewayPayload) {
const guild = await cacheHandlers.get("guilds", payload.guild_id); const guild = await cacheHandlers.get("guilds", payload.guild_id);
if (!guild) return; if (!guild) return;
const role = await structures.createRoleStruct(payload.role); const role = await structures.createDiscordenoRole(payload.role);
guild.roles = guild.roles.set(payload.role.id, role); guild.roles = guild.roles.set(payload.role.id, role);
await cacheHandlers.set("guilds", payload.guild_id, guild); await cacheHandlers.set("guilds", payload.guild_id, guild);
+1 -1
View File
@@ -11,7 +11,7 @@ export async function handleGuildRoleUpdate(data: DiscordGatewayPayload) {
const cachedRole = guild.roles.get(payload.role.id); const cachedRole = guild.roles.get(payload.role.id);
if (!cachedRole) return; if (!cachedRole) return;
const role = await structures.createRoleStruct(payload.role); const role = await structures.createDiscordenoRole(payload.role);
guild.roles.set(payload.role.id, role); guild.roles.set(payload.role.id, role);
await cacheHandlers.set("guilds", guild.id, guild); await cacheHandlers.set("guilds", guild.id, guild);
+1 -1
View File
@@ -12,7 +12,7 @@ export async function handleVoiceStateUpdate(data: DiscordGatewayPayload) {
if (!guild) return; if (!guild) return;
const member = payload.member const member = payload.member
? await structures.createMemberStruct(payload.member, guild.id) ? await structures.createDiscordenoMember(payload.member, guild.id)
: await cacheHandlers.get("members", payload.user_id); : await cacheHandlers.get("members", payload.user_id);
if (!member) return; if (!member) return;
+3 -3
View File
@@ -45,8 +45,8 @@ export async function createChannel(
}, },
)) as DiscordChannel; )) as DiscordChannel;
const channelStruct = await structures.createChannelStruct(result); const discordenoChannel = await structures.createDiscordenoChannel(result);
await cacheHandlers.set("channels", channelStruct.id, channelStruct); await cacheHandlers.set("channels", discordenoChannel.id, discordenoChannel);
return channelStruct; return discordenoChannel;
} }
+7 -3
View File
@@ -14,13 +14,17 @@ export async function getChannel(channelId: string, addToCache = true) {
endpoints.CHANNEL_BASE(channelId), endpoints.CHANNEL_BASE(channelId),
)) as DiscordChannel; )) as DiscordChannel;
const channelStruct = await structures.createChannelStruct( const discordenoChannel = await structures.createDiscordenoChannel(
result, result,
result.guild_id, result.guild_id,
); );
if (addToCache) { if (addToCache) {
await cacheHandlers.set("channels", channelStruct.id, channelStruct); await cacheHandlers.set(
"channels",
discordenoChannel.id,
discordenoChannel,
);
} }
return channelStruct; return discordenoChannel;
} }
+10 -3
View File
@@ -15,11 +15,18 @@ export async function getChannels(guildId: string, addToCache = true) {
) as DiscordChannel[]); ) as DiscordChannel[]);
return Promise.all(result.map(async (res) => { return Promise.all(result.map(async (res) => {
const channelStruct = await structures.createChannelStruct(res, guildId); const discordenoChannel = await structures.createDiscordenoChannel(
res,
guildId,
);
if (addToCache) { if (addToCache) {
await cacheHandlers.set("channels", channelStruct.id, channelStruct); await cacheHandlers.set(
"channels",
discordenoChannel.id,
discordenoChannel,
);
} }
return channelStruct; return discordenoChannel;
})); }));
} }
+1 -1
View File
@@ -11,6 +11,6 @@ export async function getPins(channelId: string) {
)) as DiscordMessage[]; )) as DiscordMessage[];
return Promise.all( return Promise.all(
result.map((res) => structures.createMessageStruct(res)), result.map((res) => structures.createDiscordenoMessage(res)),
); );
} }
+1 -1
View File
@@ -71,7 +71,7 @@ export async function editSlashResponse(
// If the original message was edited, this will not return a message // If the original message was edited, this will not return a message
if (!options.messageId) return result; if (!options.messageId) return result;
const message = await structures.createMessageStruct( const message = await structures.createDiscordenoMessage(
result as DiscordMessage, result as DiscordMessage,
); );
return message; return message;
+1 -1
View File
@@ -12,5 +12,5 @@ export async function createGuild(options: CreateGuild) {
options, options,
)) as DiscordGuild; )) as DiscordGuild;
return structures.createGuildStruct(guild, 0); return structures.createDiscordenoGuild(guild, 0);
} }
+1 -1
View File
@@ -28,5 +28,5 @@ export async function editGuild(guildId: string, options: ModifyGuild) {
options, options,
) as DiscordGuild; ) as DiscordGuild;
return structures.createGuildStruct(result, -1); return structures.createDiscordenoGuild(result, -1);
} }
+1 -1
View File
@@ -70,7 +70,7 @@ export async function editMember(
endpoints.GUILD_MEMBER(guildId, memberId), endpoints.GUILD_MEMBER(guildId, memberId),
options, options,
) as MemberCreatePayload; ) as MemberCreatePayload;
const member = await structures.createMemberStruct(result, guildId); const member = await structures.createDiscordenoMember(result, guildId);
return member; return member;
} }
+6 -3
View File
@@ -20,8 +20,11 @@ export async function getMember(
endpoints.GUILD_MEMBER(guildId, id), endpoints.GUILD_MEMBER(guildId, id),
)) as MemberCreatePayload; )) as MemberCreatePayload;
const memberStruct = await structures.createMemberStruct(data, guildId); const discordenoMember = await structures.createDiscordenoMember(
await cacheHandlers.set("members", memberStruct.id, memberStruct); data,
guildId,
);
await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
return memberStruct; return discordenoMember;
} }
+11 -7
View File
@@ -51,22 +51,26 @@ export async function getMembers(guildId: string, options?: GetMemberOptions) {
}${options?.after ? `&after=${options.after}` : ""}`, }${options?.after ? `&after=${options.after}` : ""}`,
)) as DiscordGuildMember[]; )) as DiscordGuildMember[];
const memberStructures = await Promise.all( const discordenoMembers = await Promise.all(
result.map(async (member) => { result.map(async (member) => {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
member, member,
guildId, guildId,
); );
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set(
"members",
discordenoMember.id,
discordenoMember,
);
return memberStruct; return discordenoMember;
}), }),
) as Member[]; ) as Member[];
if (!memberStructures.length) break; if (!discordenoMembers.length) break;
memberStructures.forEach((member) => { discordenoMembers.forEach((member) => {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running forEach loop in get_members file.`, `Running forEach loop in get_members file.`,
@@ -76,7 +80,7 @@ export async function getMembers(guildId: string, options?: GetMemberOptions) {
options = { options = {
limit: options?.limit, limit: options?.limit,
after: memberStructures[memberStructures.length - 1].id, after: discordenoMembers[discordenoMembers.length - 1].id,
}; };
membersLeft -= 1000; membersLeft -= 1000;
+3 -3
View File
@@ -15,12 +15,12 @@ export async function sendDirectMessage(
const dmChannelData = await rest.runMethod("post", endpoints.USER_DM, { const dmChannelData = await rest.runMethod("post", endpoints.USER_DM, {
recipient_id: memberId, recipient_id: memberId,
}) as DMChannelCreatePayload; }) as DMChannelCreatePayload;
const channelStruct = await structures.createChannelStruct( const discordenoChannel = await structures.createDiscordenoChannel(
dmChannelData as unknown as ChannelCreatePayload, dmChannelData as unknown as ChannelCreatePayload,
); );
// Recreate the channel and add it undert he users id // Recreate the channel and add it undert he users id
await cacheHandlers.set("channels", memberId, channelStruct); await cacheHandlers.set("channels", memberId, discordenoChannel);
dmChannel = channelStruct; dmChannel = discordenoChannel;
} }
// If it does exist try sending a message to this user // If it does exist try sending a message to this user
+1 -1
View File
@@ -33,5 +33,5 @@ export async function editMessage(
content, content,
); );
return structures.createMessageStruct(result as MessageCreateOptions); return structures.createDiscordenoMessage(result as MessageCreateOptions);
} }
+1 -1
View File
@@ -18,5 +18,5 @@ export async function getMessage(channelId: string, id: string) {
endpoints.CHANNEL_MESSAGE(channelId, id), endpoints.CHANNEL_MESSAGE(channelId, id),
)) as MessageCreateOptions; )) as MessageCreateOptions;
return structures.createMessageStruct(result); return structures.createDiscordenoMessage(result);
} }
+1 -1
View File
@@ -26,6 +26,6 @@ export async function getMessages(
)) as MessageCreateOptions[]; )) as MessageCreateOptions[];
return Promise.all( return Promise.all(
result.map((res) => structures.createMessageStruct(res)), result.map((res) => structures.createDiscordenoMessage(res)),
); );
} }
+1 -1
View File
@@ -9,5 +9,5 @@ export async function publishMessage(channelId: string, messageId: string) {
endpoints.CHANNEL_MESSAGE_CROSSPOST(channelId, messageId), endpoints.CHANNEL_MESSAGE_CROSSPOST(channelId, messageId),
)) as MessageCreateOptions; )) as MessageCreateOptions;
return structures.createMessageStruct(data); return structures.createDiscordenoMessage(data);
} }
+1 -1
View File
@@ -107,5 +107,5 @@ export async function sendMessage(
}), }),
)) as DiscordMessage; )) as DiscordMessage;
return structures.createMessageStruct(result); return structures.createDiscordenoMessage(result);
} }
+1 -1
View File
@@ -22,7 +22,7 @@ export async function createRole(
}); });
const roleData = result as RoleData; const roleData = result as RoleData;
const role = await structures.createRoleStruct(roleData); const role = await structures.createDiscordenoRole(roleData);
const guild = await cacheHandlers.get("guilds", guildId); const guild = await cacheHandlers.get("guilds", guildId);
guild?.roles.set(role.id, role); guild?.roles.set(role.id, role);
+1 -1
View File
@@ -55,6 +55,6 @@ export async function editWebhookMessage(
{ ...options, allowed_mentions: options.allowed_mentions }, { ...options, allowed_mentions: options.allowed_mentions },
) as MessageCreateOptions; ) as MessageCreateOptions;
const message = await structures.createMessageStruct(result); const message = await structures.createDiscordenoMessage(result);
return message; return message;
} }
+1 -1
View File
@@ -60,5 +60,5 @@ export async function executeWebhook(
); );
if (!options.wait) return; if (!options.wait) return;
return structures.createMessageStruct(result as MessageCreateOptions); return structures.createDiscordenoMessage(result as MessageCreateOptions);
} }
+11 -9
View File
@@ -15,9 +15,11 @@ import { PermissionStrings } from "../types/permissions/permission_strings.ts";
import { VoiceState } from "../types/voice/voice_state.ts"; import { VoiceState } from "../types/voice/voice_state.ts";
import { Collection } from "../util/collection.ts"; import { Collection } from "../util/collection.ts";
import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts"; import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts";
import { MessageStruct } from "./message.ts"; import { DiscordenoGuild } from "./guild.ts";
import { DiscordenoMember } from "./member.ts";
import { DiscordenoMessage } from "./message.ts";
const baseChannel: Partial<ChannelStruct> = { const baseChannel: Partial<DiscordenoChannel> = {
get guild() { get guild() {
return cache.guilds.get(this.guildId!); return cache.guilds.get(this.guildId!);
}, },
@@ -70,7 +72,7 @@ const baseChannel: Partial<ChannelStruct> = {
/** Create a structure object */ /** Create a structure object */
// deno-lint-ignore require-await // deno-lint-ignore require-await
export async function createChannelStruct( export async function createDiscordenoChannel(
data: DiscordChannel, data: DiscordChannel,
guildId?: string, guildId?: string,
) { ) {
@@ -84,13 +86,13 @@ export async function createChannelStruct(
Object.keys(rest).forEach((key) => { Object.keys(rest).forEach((key) => {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running forEach loop in createChannelStruct function.`, `Running forEach loop in createDiscordenoChannel function.`,
); );
// @ts-ignore index signature // @ts-ignore index signature
props[key] = createNewProp(rest[key]); props[key] = createNewProp(rest[key]);
}); });
const channel: ChannelStruct = Object.create(baseChannel, { const channel: DiscordenoChannel = Object.create(baseChannel, {
...props, ...props,
guildId: createNewProp(guildId || rawGuildId), guildId: createNewProp(guildId || rawGuildId),
lastPinTimestamp: createNewProp( lastPinTimestamp: createNewProp(
@@ -101,7 +103,7 @@ export async function createChannelStruct(
return channel; return channel;
} }
export interface ChannelStruct extends Channel { export interface DiscordenoChannel extends Channel {
// GETTERS // GETTERS
/** /**
@@ -109,13 +111,13 @@ export interface ChannelStruct extends Channel {
* *
* ⚠️ ADVANCED: If you use the custom cache, these will not work for you. Getters can not be async and custom cache requires async. * ⚠️ ADVANCED: If you use the custom cache, these will not work for you. Getters can not be async and custom cache requires async.
*/ */
guild?: GuildStruct; guild?: DiscordenoGuild;
/** /**
* Gets the messages from cache that were sent in this channel * Gets the messages from cache that were sent in this channel
* *
* ⚠️ ADVANCED: If you use the custom cache, these will not work for you. Getters can not be async and custom cache requires async. * ⚠️ ADVANCED: If you use the custom cache, these will not work for you. Getters can not be async and custom cache requires async.
*/ */
messages: Collection<string, MessageStruct>; messages: Collection<string, DiscordenoMessage>;
/** The mention of the channel */ /** The mention of the channel */
mention: string; mention: string;
/** /**
@@ -129,7 +131,7 @@ export interface ChannelStruct extends Channel {
* *
* ⚠️ ADVANCED: If you use the custom cache, these will not work for you. Getters can not be async and custom cache requires async. * ⚠️ ADVANCED: If you use the custom cache, these will not work for you. Getters can not be async and custom cache requires async.
*/ */
connectedMembers?: Collection<string, MemberStruct | undefined>; connectedMembers?: Collection<string, DiscordenoMember | undefined>;
// METHODS // METHODS
+32 -24
View File
@@ -33,14 +33,14 @@ import {
createNewProp, createNewProp,
snakeKeysToCamelCase, snakeKeysToCamelCase,
} from "../util/utils.ts"; } from "../util/utils.ts";
import { ChannelStruct } from "./channel.ts"; import { DiscordenoChannel } from "./channel.ts";
import { MemberStruct } from "./member.ts"; import { DiscordenoMember } from "./member.ts";
import { structures } from "./mod.ts"; import { structures } from "./mod.ts";
import { RoleStruct } from "./role.ts"; import { DiscordenoRole } from "./role.ts";
export const initialMemberLoadQueue = new Map<string, GuildMember[]>(); export const initialMemberLoadQueue = new Map<string, GuildMember[]>();
const baseGuild: Partial<GuildStruct> = { const baseGuild: Partial<DiscordenoGuild> = {
get members() { get members() {
return cache.members.filter((member) => member.guilds.has(this.id!)); return cache.members.filter((member) => member.guilds.has(this.id!));
}, },
@@ -115,7 +115,7 @@ const baseGuild: Partial<GuildStruct> = {
}, },
}; };
export async function createGuildStruct( export async function createDiscordenoGuild(
data: DiscordGuild, data: DiscordGuild,
shardId: number, shardId: number,
) { ) {
@@ -132,34 +132,38 @@ export async function createGuildStruct(
const roles = await Promise.all( const roles = await Promise.all(
(data.roles || []).map((role) => (data.roles || []).map((role) =>
structures.createRoleStruct({ role, guild_id: rest.id }) structures.createDiscordenoRole({ role, guild_id: rest.id })
), ),
); );
await Promise.all(channels.map(async (channel) => { await Promise.all(channels.map(async (channel) => {
const channelStruct = await structures.createChannelStruct( const discordenoChannel = await structures.createDiscordenoChannel(
channel, channel,
rest.id, rest.id,
); );
return cacheHandlers.set("channels", channelStruct.id, channelStruct); return cacheHandlers.set(
"channels",
discordenoChannel.id,
discordenoChannel,
);
})); }));
const props: Record<string, ReturnType<typeof createNewProp>> = {}; const props: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) { for (const key of Object.keys(rest)) {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running for of loop in createGuildStruct function.`, `Running for of loop in createDiscordenoGuild function.`,
); );
// @ts-ignore index signature // @ts-ignore index signature
props[key] = createNewProp(rest[key]); props[key] = createNewProp(rest[key]);
} }
const guild = Object.create(baseGuild, { const guild: DiscordenoGuild = Object.create(baseGuild, {
...props, ...props,
shardId: createNewProp(shardId), shardId: createNewProp(shardId),
roles: createNewProp( roles: createNewProp(
new Collection(roles.map((r: RoleStruct) => [r.id, r])), new Collection(roles.map((r: DiscordenoRole) => [r.id, r])),
), ),
joinedAt: createNewProp(Date.parse(joinedAt)), joinedAt: createNewProp(Date.parse(joinedAt)),
presences: createNewProp( presences: createNewProp(
@@ -184,22 +188,26 @@ export async function createGuildStruct(
else { else {
await Promise.allSettled( await Promise.allSettled(
members.map(async (member) => { members.map(async (member) => {
const memberStruct = await structures.createMemberStruct( const discordenoMember = await structures.createDiscordenoMember(
camelKeysToSnakeCase(member) as Omit<DiscordGuildMember, "user"> & { camelKeysToSnakeCase(member) as Omit<DiscordGuildMember, "user"> & {
user: DiscordUser; user: DiscordUser;
}, },
guild.id, guild.id,
); );
return cacheHandlers.set("members", memberStruct.id, memberStruct); return cacheHandlers.set(
"members",
discordenoMember.id,
discordenoMember,
);
}), }),
); );
} }
return guild as GuildStruct; return guild;
} }
export interface GuildStruct extends export interface DiscordenoGuild extends
Omit< Omit<
Guild, Guild,
| "roles" | "roles"
@@ -214,7 +222,7 @@ export interface GuildStruct extends
/** Total number of members in this guild */ /** Total number of members in this guild */
memberCount?: number; memberCount?: number;
/** The roles in the guild */ /** The roles in the guild */
roles: Collection<string, RoleStruct>; roles: Collection<string, DiscordenoRole>;
/** The presences of all the users in the guild. */ /** The presences of all the users in the guild. */
presences: Collection<string, PresenceUpdate>; presences: Collection<string, PresenceUpdate>;
/** The Voice State data for each user in a voice channel in this server. */ /** The Voice State data for each user in a voice channel in this server. */
@@ -224,19 +232,19 @@ export interface GuildStruct extends
// GETTERS // GETTERS
/** Members in this guild. */ /** Members in this guild. */
members: Collection<string, MemberStruct>; members: Collection<string, DiscordenoMember>;
/** Channels in this guild. */ /** Channels in this guild. */
channels: Collection<string, ChannelStruct>; channels: Collection<string, DiscordenoChannel>;
/** The afk channel if one is set */ /** The afk channel if one is set */
afkChannel?: ChannelStruct; afkChannel?: DiscordenoChannel;
/** The public update channel if one is set */ /** The public update channel if one is set */
publicUpdatesChannel?: ChannelStruct; publicUpdatesChannel?: DiscordenoChannel;
/** The rules channel in this guild if one is set */ /** The rules channel in this guild if one is set */
rulesChannel?: ChannelStruct; rulesChannel?: DiscordenoChannel;
/** The system channel in this guild if one is set */ /** The system channel in this guild if one is set */
systemChannel?: ChannelStruct; systemChannel?: DiscordenoChannel;
/** The bot member in this guild if cached */ /** The bot member in this guild if cached */
bot?: MemberStruct; bot?: DiscordenoMember;
/** The bot guild member in this guild if cached */ /** The bot guild member in this guild if cached */
botMember?: Omit<GuildMember, "joinedAt" | "premiumSince"> & { botMember?: Omit<GuildMember, "joinedAt" | "premiumSince"> & {
joinedAt: number; joinedAt: number;
@@ -245,7 +253,7 @@ export interface GuildStruct extends
/** The bots voice state if there is one in this guild */ /** The bots voice state if there is one in this guild */
botVoice?: VoiceState; botVoice?: VoiceState;
/** The owner member of this guild */ /** The owner member of this guild */
owner?: MemberStruct; owner?: DiscordenoMember;
/** Whether or not this guild is partnered */ /** Whether or not this guild is partnered */
partnered: boolean; partnered: boolean;
/** Whether or not this guild is verified */ /** Whether or not this guild is verified */
+9 -9
View File
@@ -19,9 +19,9 @@ import { DiscordImageSize } from "../types/misc/image_size.ts";
import { DiscordUser, User } from "../types/users/user.ts"; import { DiscordUser, User } from "../types/users/user.ts";
import { Collection } from "../util/collection.ts"; import { Collection } from "../util/collection.ts";
import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts"; import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts";
import { GuildStruct } from "./guild.ts"; import { DiscordenoGuild } from "./guild.ts";
const baseMember: Partial<MemberStruct> = { const baseMember: Partial<DiscordenoMember> = {
get avatarURL() { get avatarURL() {
return avatarURL(this.id!, this.discriminator!, this.avatar!); return avatarURL(this.id!, this.discriminator!, this.avatar!);
}, },
@@ -71,7 +71,7 @@ const baseMember: Partial<MemberStruct> = {
}, },
}; };
export async function createMemberStruct( export async function createDiscordenoMember(
// The `user` param in `DiscordGuildMember` is optional since discord does not send it in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events. But this data in there is required to build this structure so it is required in this case // The `user` param in `DiscordGuildMember` is optional since discord does not send it in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events. But this data in there is required to build this structure so it is required in this case
data: Omit<DiscordGuildMember, "user"> & { user: DiscordUser }, data: Omit<DiscordGuildMember, "user"> & { user: DiscordUser },
guildId: string, guildId: string,
@@ -90,7 +90,7 @@ export async function createMemberStruct(
for (const key of Object.keys(rest)) { for (const key of Object.keys(rest)) {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running for of loop for Object.keys(rest) in createMemberStruct function.`, `Running for of loop for Object.keys(rest) in DiscordenoMember function.`,
); );
// @ts-ignore index signature // @ts-ignore index signature
props[key] = createNewProp(rest[key]); props[key] = createNewProp(rest[key]);
@@ -99,13 +99,13 @@ export async function createMemberStruct(
for (const key of Object.keys(user)) { for (const key of Object.keys(user)) {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running for of for Object.keys(user) loop in createMemberStruct function.`, `Running for of for Object.keys(user) loop in DiscordenoMember function.`,
); );
// @ts-ignore index signature // @ts-ignore index signature
props[key] = createNewProp(user[key]); props[key] = createNewProp(user[key]);
} }
const member: MemberStruct = Object.create(baseMember, { const member: DiscordenoMember = Object.create(baseMember, {
...props, ...props,
/** The guild related data mapped by guild id */ /** The guild related data mapped by guild id */
guilds: createNewProp(new Collection<string, GuildMember>()), guilds: createNewProp(new Collection<string, GuildMember>()),
@@ -116,7 +116,7 @@ export async function createMemberStruct(
for (const [id, guild] of cached.guilds.entries()) { for (const [id, guild] of cached.guilds.entries()) {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running for of for cached.guilds.entries() loop in createMemberStruct function.`, `Running for of for cached.guilds.entries() loop in DiscordenoMember function.`,
); );
member.guilds.set(id, guild); member.guilds.set(id, guild);
} }
@@ -135,7 +135,7 @@ export async function createMemberStruct(
return member; return member;
} }
export interface MemberStruct extends GuildMember, User { export interface DiscordenoMember extends GuildMember, User {
/** The guild related data mapped by guild id */ /** The guild related data mapped by guild id */
guilds: Collection< guilds: Collection<
string, string,
@@ -160,7 +160,7 @@ export interface MemberStruct extends GuildMember, User {
options: { size?: DiscordImageSize; format?: DiscordImageFormat }, options: { size?: DiscordImageSize; format?: DiscordImageFormat },
): string; ): string;
/** Returns the guild for this guildID */ /** Returns the guild for this guildID */
guild(guildID: string): GuildStruct | undefined; guild(guildID: string): DiscordenoGuild | undefined;
/** Get the nickname or the username if no nickname */ /** Get the nickname or the username if no nickname */
name(guildID: string): string; name(guildID: string): string;
/** Get the guild member object for the specified guild */ /** Get the guild member object for the specified guild */
+15 -15
View File
@@ -15,12 +15,12 @@ import { EditMessage } from "../types/messages/edit_message.ts";
import { DiscordMessage, Message } from "../types/messages/message.ts"; import { DiscordMessage, Message } from "../types/messages/message.ts";
import { CHANNEL_MENTION_REGEX } from "../util/constants.ts"; import { CHANNEL_MENTION_REGEX } from "../util/constants.ts";
import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts"; import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts";
import { ChannelStruct } from "./channel.ts"; import { DiscordenoChannel } from "./channel.ts";
import { GuildStruct } from "./guild.ts"; import { DiscordenoGuild } from "./guild.ts";
import { MemberStruct } from "./member.ts"; import { DiscordenoMember } from "./member.ts";
import { RoleStruct } from "./role.ts"; import { DiscordenoRole } from "./role.ts";
const baseMessage: Partial<MessageStruct> = { const baseMessage: Partial<DiscordenoMessage> = {
get channel() { get channel() {
if (this.guildId) return cache.channels.get(this.channelId!); if (this.guildId) return cache.channels.get(this.channelId!);
return cache.channels.get(this.author?.id!); return cache.channels.get(this.author?.id!);
@@ -117,7 +117,7 @@ const baseMessage: Partial<MessageStruct> = {
}, },
}; };
export async function createMessageStruct(data: DiscordMessage) { export async function createDiscordenoMessage(data: DiscordMessage) {
const { const {
guildId = "", guildId = "",
channelId, channelId,
@@ -132,7 +132,7 @@ export async function createMessageStruct(data: DiscordMessage) {
for (const key of Object.keys(rest)) { for (const key of Object.keys(rest)) {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running for of loop in createMessageStruct function.`, `Running for of loop in createDiscordenoMessage function.`,
); );
// @ts-ignore index signature // @ts-ignore index signature
props[key] = createNewProp(rest[key]); props[key] = createNewProp(rest[key]);
@@ -142,7 +142,7 @@ export async function createMessageStruct(data: DiscordMessage) {
const guildIdFinal = guildId || const guildIdFinal = guildId ||
(await cacheHandlers.get("channels", channelId))?.guildId || ""; (await cacheHandlers.get("channels", channelId))?.guildId || "";
const message: MessageStruct = Object.create(baseMessage, { const message: DiscordenoMessage = Object.create(baseMessage, {
...props, ...props,
/** The message id of the original message if this message was sent as a reply. If null, the original message was deleted. */ /** The message id of the original message if this message was sent as a reply. If null, the original message was deleted. */
channelId: createNewProp(channelId), channelId: createNewProp(channelId),
@@ -169,7 +169,7 @@ export async function createMessageStruct(data: DiscordMessage) {
return message; return message;
} }
export interface MessageStruct extends Message { export interface DiscordenoMessage extends Message {
// For better user experience // For better user experience
/** Ids of users specifically mentioned in the message */ /** Ids of users specifically mentioned in the message */
mentionedUserIds: string[]; mentionedUserIds: string[];
@@ -180,11 +180,11 @@ export interface MessageStruct extends Message {
// GETTERS // GETTERS
/** The channel where this message was sent. Can be undefined if uncached. */ /** The channel where this message was sent. Can be undefined if uncached. */
channel?: ChannelStruct; channel?: DiscordenoChannel;
/** The guild of this message. Can be undefined if not in cache or in DM */ /** The guild of this message. Can be undefined if not in cache or in DM */
guild?: GuildStruct; guild?: DiscordenoGuild;
/** The member for the user who sent the message. Can be undefined if not in cache or in dm. */ /** The member for the user who sent the message. Can be undefined if not in cache or in dm. */
member?: MemberStruct; member?: DiscordenoMember;
/** The guild member details for this guild and member. Can be undefined if not in cache or in dm. */ /** The guild member details for this guild and member. Can be undefined if not in cache or in dm. */
guildMember?: Omit<GuildMember, "joinedAt" | "premiumSince"> & { guildMember?: Omit<GuildMember, "joinedAt" | "premiumSince"> & {
joinedAt: number; joinedAt: number;
@@ -193,11 +193,11 @@ export interface MessageStruct extends Message {
/** The url link to this message */ /** The url link to this message */
link: string; link: string;
/** The role objects for all the roles that were mentioned in this message */ /** The role objects for all the roles that were mentioned in this message */
mentionedRoles: (RoleStruct | undefined)[]; mentionedRoles: (DiscordenoRole | undefined)[];
/** The channel objects for all the channels that were mentioned in this message. */ /** The channel objects for all the channels that were mentioned in this message. */
mentionedChannels: (ChannelStruct | undefined)[]; mentionedChannels: (DiscordenoChannel | undefined)[];
/** The member objects for all the members that were mentioned in this message. */ /** The member objects for all the members that were mentioned in this message. */
mentionedMembers: (MemberStruct | undefined)[]; mentionedMembers: (DiscordenoMember | undefined)[];
// METHODS // METHODS
+10 -10
View File
@@ -1,17 +1,17 @@
import { createChannelStruct } from "./channel.ts"; import { createDiscordenoChannel } from "./channel.ts";
import { createGuildStruct } from "./guild.ts"; import { createDiscordenoGuild } from "./guild.ts";
import { createMemberStruct } from "./member.ts"; import { createDiscordenoMember } from "./member.ts";
import { createMessageStruct } from "./message.ts"; import { createDiscordenoMessage } from "./message.ts";
import { createRoleStruct } from "./role.ts"; import { createDiscordenoRole } from "./role.ts";
import { createTemplateStruct } from "./template.ts"; import { createTemplateStruct } from "./template.ts";
/** This is the placeholder where the structure creation functions are kept. */ /** This is the placeholder where the structure creation functions are kept. */
export let structures = { export let structures = {
createChannelStruct, createDiscordenoChannel,
createGuildStruct, createDiscordenoGuild,
createMemberStruct, createDiscordenoMember,
createMessageStruct, createDiscordenoMessage,
createRoleStruct, createDiscordenoRole,
createTemplateStruct, createTemplateStruct,
}; };
+9 -7
View File
@@ -9,8 +9,10 @@ import { Role } from "../types/permissions/role.ts";
import { Collection } from "../util/collection.ts"; import { Collection } from "../util/collection.ts";
import { highestRole } from "../util/permissions.ts"; import { highestRole } from "../util/permissions.ts";
import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts"; import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts";
import { DiscordenoGuild } from "./guild.ts";
import { DiscordenoMember } from "./member.ts";
const baseRole: Partial<RoleStruct> = { const baseRole: Partial<DiscordenoRole> = {
get guild() { get guild() {
return cache.guilds.get(this.guildId!); return cache.guilds.get(this.guildId!);
}, },
@@ -65,7 +67,7 @@ const baseRole: Partial<RoleStruct> = {
}; };
// deno-lint-ignore require-await // deno-lint-ignore require-await
export async function createRoleStruct(data: DiscordGuildRoleCreate) { export async function createDiscordenoRole(data: DiscordGuildRoleCreate) {
const { const {
tags = {}, tags = {},
...rest ...rest
@@ -77,13 +79,13 @@ export async function createRoleStruct(data: DiscordGuildRoleCreate) {
for (const key of Object.keys(rest)) { for (const key of Object.keys(rest)) {
eventHandlers.debug?.( eventHandlers.debug?.(
"loop", "loop",
`Running for of loop in createRoleStruct function.`, `Running for of loop in createDiscordenoRole function.`,
); );
// @ts-ignore index signature // @ts-ignore index signature
props[key] = createNewProp(rest[key]); props[key] = createNewProp(rest[key]);
} }
const role: RoleStruct = Object.create(baseRole, { const role: DiscordenoRole = Object.create(baseRole, {
...props, ...props,
botId: createNewProp(tags.botId), botId: createNewProp(tags.botId),
isNitroBoostRole: createNewProp("premiumSubscriber" in tags), isNitroBoostRole: createNewProp("premiumSubscriber" in tags),
@@ -93,7 +95,7 @@ export async function createRoleStruct(data: DiscordGuildRoleCreate) {
return role; return role;
} }
export interface RoleStruct extends Omit<Role, "tags"> { export interface DiscordenoRole extends Omit<Role, "tags"> {
/** The bot id that is associated with this role. */ /** The bot id that is associated with this role. */
botId?: string; botId?: string;
/** If this role is the nitro boost role. */ /** If this role is the nitro boost role. */
@@ -106,11 +108,11 @@ export interface RoleStruct extends Omit<Role, "tags"> {
// GETTERS // GETTERS
/** The guild where this role is. If undefined, the guild is not cached */ /** The guild where this role is. If undefined, the guild is not cached */
guild?: GuildStruct; guild?: DiscordenoGuild;
/** The hex color for this role. */ /** The hex color for this role. */
hexColor: string; hexColor: string;
/** The cached members that have this role */ /** The cached members that have this role */
members: Collection<string, MemberStruct>; members: Collection<string, DiscordenoMember>;
/** The @ mention of the role in a string. */ /** The @ mention of the role in a string. */
mention: string; mention: string;