refactor(structures): rename create* functions (#395)

* structures: rename structure create functions

* fix: errors occured because of structure rename

* fix(controllers): errors occured because of structure rename

* fix

* fix createServer to createGuild rename

* rename create*structure to create*Struct

* update docs

* Phew

* rename createguildrole

* fix that

* fmt?

* idk

* why

* fixxess

* Update member.ts

* Update member.ts

* ahh found it

* revert this

* Update mod.ts

Co-authored-by: ayntee <ayyantee@gmail.com>
This commit is contained in:
ITOH
2021-03-08 17:37:06 +01:00
committed by GitHub
parent 45a3246370
commit 2c3692810d
23 changed files with 111 additions and 106 deletions
+19 -19
View File
@@ -34,17 +34,17 @@ To begin customizing, create a file in the structures folder called `member.ts`.
The name of the file is not important at all.
```ts
async function createMember() {
async function createMemberStruct() {
}
```
We start by declaring a function that will be run to create the structure. Once
again the name here is not important. The function must take the same arguments
that the internal function takes. In this case the createMember function takes 2
arguments. `data: MemberCreatePayload, guildID: string`
that the internal function takes. In this case the createMemberStruct function
takes 2 arguments. `data: MemberCreatePayload, guildID: string`
```ts
async function createMember(data: MemberCreatePayload, guildID: string) {
async function createMemberStruct(data: MemberCreatePayload, guildID: string) {
}
```
@@ -53,7 +53,7 @@ want. My recommendation is to start by copying the current code from the
internal libraries structure.
```ts
async function createMember(data: MemberCreatePayload, guildID: string) {
async function createMemberStruct(data: MemberCreatePayload, guildID: string) {
const {
joined_at: joinedAt,
premium_since: premiumSince,
@@ -92,7 +92,7 @@ and `guild` properties to the member.
```ts
import { rawAvatarURL } from "../../deps.ts";
async function createMember(data: MemberCreatePayload, guildID: string) {
async function createMemberStruct(data: MemberCreatePayload, guildID: string) {
// Hidden code here to make it easier to see the changes
const member = {
@@ -116,11 +116,11 @@ async function createMember(data: MemberCreatePayload, guildID: string) {
```
Now we need to use this function and telling Discordeno to override the internal
createMember function. To do this, we will modify the internal functions. This
is where we reassign the value of the function.
createMemberStruct function. To do this, we will modify the internal functions.
This is where we reassign the value of the function.
```ts
structures.createMember = createMember;
structures.createMemberStruct = createMemberStruct;
```
Awesome. Now, we have one more step to complete which is to declare these new
@@ -144,7 +144,7 @@ declare module "../../deps.ts" {
The code should look like this right now:
```ts
async function createMember(data: MemberCreatePayload, guildID: string) {
async function createMemberStruct(data: MemberCreatePayload, guildID: string) {
const {
joined_at: joinedAt,
premium_since: premiumSince,
@@ -184,7 +184,7 @@ async function createMember(data: MemberCreatePayload, guildID: string) {
return member;
}
structures.createMember = createMember;
structures.createMemberStruct = createMemberStruct;
declare module "../../deps.ts" {
interface Member {
@@ -268,7 +268,7 @@ import {
rawAvatarURL,
} from "../../deps.ts";
async function createMember(data: MemberCreatePayload, guildID: string) {
async function createMemberStruct(data: MemberCreatePayload, guildID: string) {
const {
id,
bot,
@@ -291,7 +291,7 @@ async function createMember(data: MemberCreatePayload, guildID: string) {
};
}
structures.createMember = createMember;
structures.createMemberStruct = createMemberStruct;
declare module "../../deps.ts" {
interface Member {
@@ -304,15 +304,15 @@ declare module "../../deps.ts" {
}
```
You might be seeing an error on `structures.createMember`. This is happening
because our new member structures is modifying/removing existing properties that
the lib internally said it would have. To solve this, simply just add a
ts-ignore above it as you know better than TS that the typings are being
overwritten.
You might be seeing an error on `structures.createMemberStruct`. This is
happening because our new member structures is modifying/removing existing
properties that the lib internally said it would have. To solve this, simply
just add a ts-ignore above it as you know better than TS that the typings are
being overwritten.
```ts
// @ts-ignore
structures.createMember = createMember;
structures.createMemberStruct = createMemberStruct;
```
## Custom Cache
+2 -2
View File
@@ -11,8 +11,8 @@ export async function handleInternalChannelCreate(data: DiscordPayload) {
if (data.t !== "CHANNEL_CREATE") return;
const payload = data.d as ChannelCreatePayload;
const channelStruct = await structures.createChannel(payload);
const channelStruct = await structures.createChannelStruct(payload);
await cacheHandlers.set("channels", channelStruct.id, channelStruct);
eventHandlers.channelCreate?.(channelStruct);
@@ -58,8 +58,8 @@ export async function handleInternalChannelUpdate(data: DiscordPayload) {
const payload = data.d as ChannelCreatePayload;
const cachedChannel = await cacheHandlers.get("channels", payload.id);
const channelStruct = await structures.createChannel(payload);
const channelStruct = await structures.createChannelStruct(payload);
await cacheHandlers.set("channels", channelStruct.id, channelStruct);
if (!cachedChannel) return;
+1 -2
View File
@@ -22,11 +22,10 @@ export async function handleInternalGuildCreate(
// When shards resume they emit GUILD_CREATE again.
if (await cacheHandlers.has("guilds", payload.id)) return;
const guildStruct = await structures.createGuild(
const guildStruct = await structures.createGuildStruct(
data.d as CreateGuildPayload,
shardID,
);
await cacheHandlers.set("guilds", guildStruct.id, guildStruct);
if (await cacheHandlers.has("unavailableGuilds", payload.id)) {
+1 -1
View File
@@ -11,7 +11,7 @@ export async function handleInternalInteractionCreate(data: DiscordPayload) {
if (data.t !== "INTERACTION_CREATE") return;
const payload = data.d as InteractionCommandPayload;
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
payload.member,
payload.guild_id,
);
+3 -4
View File
@@ -19,7 +19,7 @@ export async function handleInternalGuildMemberAdd(data: DiscordPayload) {
if (!guild) return;
guild.memberCount++;
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
payload,
payload.guild_id,
);
@@ -66,7 +66,7 @@ export async function handleInternalGuildMemberUpdate(data: DiscordPayload) {
mute: guildMember?.mute || false,
roles: payload.roles,
};
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
newMemberData,
payload.guild_id,
);
@@ -109,11 +109,10 @@ export async function handleInternalGuildMembersChunk(data: DiscordPayload) {
const members = await Promise.all(
payload.members.map(async (member) => {
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
member,
payload.guild_id,
);
await cacheHandlers.set("members", memberStruct.id, memberStruct);
return memberStruct;
+4 -5
View File
@@ -21,18 +21,17 @@ export async function handleInternalMessageCreate(data: DiscordPayload) {
if (payload.member && guild) {
// If in a guild cache the author as a member
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
{ ...payload.member, user: payload.author },
guild.id,
);
await cacheHandlers.set("members", memberStruct.id, memberStruct);
}
await Promise.all(payload.mentions.map(async (mention) => {
// Cache the member if its a valid member
if (mention.member && guild) {
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
{ ...mention.member, user: mention },
guild.id,
);
@@ -41,7 +40,7 @@ export async function handleInternalMessageCreate(data: DiscordPayload) {
}
}));
const message = await structures.createMessage(payload);
const message = await structures.createMessageStruct(payload);
// Cache the message
await cacheHandlers.set("messages", payload.id, message);
@@ -106,7 +105,7 @@ export async function handleInternalMessageUpdate(data: DiscordPayload) {
return;
}
const message = await structures.createMessage(payload);
const message = await structures.createMessageStruct(payload);
await cacheHandlers.set("messages", payload.id, message);
+2 -2
View File
@@ -54,7 +54,7 @@ export async function handleInternalReady(
for (const [guildID, members] of initialMemberLoadQueue.entries()) {
await Promise.all(
members.map(async (member) => {
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
member,
guildID,
);
@@ -125,7 +125,7 @@ export async function handleInternalVoiceStateUpdate(data: DiscordPayload) {
if (!guild) return;
const member = payload.member
? await structures.createMember(payload.member, guild.id)
? await structures.createMemberStruct(payload.member, guild.id)
: await cacheHandlers.get("members", payload.user_id);
if (!member) return;
+2 -2
View File
@@ -39,7 +39,7 @@ export async function handleInternalMessageReactionAdd(data: DiscordPayload) {
if (payload.member && payload.guild_id) {
const guild = await cacheHandlers.get("guilds", payload.guild_id);
if (guild) {
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
payload.member,
guild.id,
);
@@ -95,7 +95,7 @@ export async function handleInternalMessageReactionRemove(
if (payload.member && payload.guild_id) {
const guild = await cacheHandlers.get("guilds", payload.guild_id);
if (guild) {
const memberStruct = await structures.createMember(
const memberStruct = await structures.createMemberStruct(
payload.member,
guild.id,
);
+2 -2
View File
@@ -14,7 +14,7 @@ export async function handleInternalGuildRoleCreate(data: DiscordPayload) {
const guild = await cacheHandlers.get("guilds", payload.guild_id);
if (!guild) return;
const role = await structures.createRole(payload.role);
const role = await structures.createRoleStruct(payload.role);
guild.roles = guild.roles.set(payload.role.id, role);
await cacheHandlers.set("guilds", payload.guild_id, guild);
@@ -58,7 +58,7 @@ export async function handleInternalGuildRoleUpdate(data: DiscordPayload) {
const cachedRole = guild.roles.get(payload.role.id);
if (!cachedRole) return;
const role = await structures.createRole(payload.role);
const role = await structures.createRoleStruct(payload.role);
guild.roles.set(payload.role.id, role);
await cacheHandlers.set("guilds", guild.id, guild);
+8 -4
View File
@@ -76,7 +76,7 @@ export async function getMessage(
endpoints.CHANNEL_MESSAGE(channelID, id),
) as MessageCreateOptions;
return structures.createMessage(result);
return structures.createMessageStruct(result);
}
/** Fetches between 2-100 messages. Requires VIEW_CHANNEL and READ_MESSAGE_HISTORY */
@@ -115,7 +115,9 @@ export async function getMessages(
options,
)) as MessageCreateOptions[];
return Promise.all(result.map((res) => structures.createMessage(res)));
return Promise.all(
result.map((res) => structures.createMessageStruct(res)),
);
}
/** Get pinned messages in this channel. */
@@ -124,7 +126,9 @@ export async function getPins(channelID: string) {
endpoints.CHANNEL_PINS(channelID),
)) as MessageCreateOptions[];
return Promise.all(result.map((res) => structures.createMessage(res)));
return Promise.all(
result.map((res) => structures.createMessageStruct(res)),
);
}
/**
@@ -275,7 +279,7 @@ export async function sendMessage(
},
) as MessageCreateOptions;
return structures.createMessage(result);
return structures.createMessageStruct(result as MessageCreateOptions);
}
/** Delete messages from the channel. 2-100. Requires the MANAGE_MESSAGES permission */
+21 -17
View File
@@ -44,13 +44,13 @@ import { cacheHandlers } from "../controllers/cache.ts";
import { Guild, Member, structures } from "../structures/mod.ts";
/** Create a new guild. Returns a guild object on success. Fires a Guild Create Gateway event. This endpoint can be used only by bots in less than 10 guilds. */
export async function createServer(options: CreateServerOptions) {
export async function createGuild(options: CreateServerOptions) {
const guild = await RequestManager.post(
endpoints.GUILDS,
options,
) as CreateGuildPayload;
return structures.createGuild(guild, 0);
return structures.createGuildStruct(guild, 0);
}
/** Delete a guild permanently. User must be owner. Returns 204 No Content on success. Fires a Guild Delete Gateway event.
@@ -136,8 +136,7 @@ export async function createGuildChannel(
type: options?.type || ChannelTypes.GUILD_TEXT,
})) as ChannelCreatePayload;
const channelStruct = await structures.createChannel(result);
const channelStruct = await structures.createChannelStruct(result);
await cacheHandlers.set("channels", channelStruct.id, channelStruct);
return channelStruct;
@@ -186,7 +185,7 @@ export async function getChannels(guildID: string, addToCache = true) {
) as ChannelCreatePayload[];
return Promise.all(result.map(async (res) => {
const channelStruct = await structures.createChannel(res, guildID);
const channelStruct = await structures.createChannelStruct(res, guildID);
if (addToCache) {
await cacheHandlers.set("channels", channelStruct.id, channelStruct);
}
@@ -204,7 +203,10 @@ export async function getChannel(channelID: string, addToCache = true) {
endpoints.CHANNEL_BASE(channelID),
) as ChannelCreatePayload;
const channelStruct = await structures.createChannel(result, result.guild_id);
const channelStruct = await structures.createChannelStruct(
result,
result.guild_id,
);
if (addToCache) {
await cacheHandlers.set("channels", channelStruct.id, channelStruct);
}
@@ -293,8 +295,7 @@ export async function getMember(
endpoints.GUILD_MEMBER(guildID, id),
) as MemberCreatePayload;
const memberStruct = await structures.createMember(data, guildID);
const memberStruct = await structures.createMemberStruct(data, guildID);
await cacheHandlers.set("members", memberStruct.id, memberStruct);
return memberStruct;
@@ -439,7 +440,7 @@ export async function getEmoji(
}
/** Create a new role for the guild. Requires the MANAGE_ROLES permission. */
export async function createGuildRole(
export async function createRole(
guildID: string,
options: CreateRoleOptions,
reason?: string,
@@ -459,7 +460,7 @@ export async function createGuildRole(
);
const roleData = result as RoleData;
const role = await structures.createRole(roleData);
const role = await structures.createRoleStruct(roleData);
const guild = await cacheHandlers.get("guilds", guildID);
guild?.roles.set(role.id, role);
@@ -646,7 +647,10 @@ export async function getMembers(
const memberStructures = await Promise.all(
result.map(async (member) => {
const memberStruct = await structures.createMember(member, guildID);
const memberStruct = await structures.createMemberStruct(
member,
guildID,
);
await cacheHandlers.set("members", memberStruct.id, memberStruct);
@@ -962,7 +966,7 @@ export async function getTemplate(templateCode: string) {
const result = await RequestManager.get(
endpoints.GUILD_TEMPLATE(templateCode),
) as GuildTemplate;
const template = await structures.createTemplate(result);
const template = await structures.createTemplateStruct(result);
return template;
}
@@ -1016,7 +1020,7 @@ export async function getGuildTemplates(guildID: string) {
endpoints.GUILD_TEMPLATES(guildID),
) as GuildTemplate[];
return templates.map((template) => structures.createTemplate(template));
return templates.map((template) => structures.createTemplateStruct(template));
}
/**
@@ -1034,7 +1038,7 @@ export async function deleteGuildTemplate(
`${endpoints.GUILD_TEMPLATES(guildID)}/${templateCode}`,
) as GuildTemplate;
return structures.createTemplate(deletedTemplate);
return structures.createTemplateStruct(deletedTemplate);
}
/**
@@ -1066,7 +1070,7 @@ export async function createGuildTemplate(
data,
) as GuildTemplate;
return structures.createTemplate(template);
return structures.createTemplateStruct(template);
}
/**
@@ -1081,7 +1085,7 @@ export async function syncGuildTemplate(guildID: string, templateCode: string) {
`${endpoints.GUILD_TEMPLATES(guildID)}/${templateCode}`,
) as GuildTemplate;
return structures.createTemplate(template);
return structures.createTemplateStruct(template);
}
/**
@@ -1112,5 +1116,5 @@ export async function editGuildTemplate(
data,
) as GuildTemplate;
return structures.createTemplate(template);
return structures.createTemplateStruct(template);
}
+2 -2
View File
@@ -132,7 +132,7 @@ export async function sendDirectMessage(
endpoints.USER_DM,
{ recipient_id: memberID },
) as DMChannelCreatePayload;
const channelStruct = await structures.createChannel(
const channelStruct = await structures.createChannelStruct(
dmChannelData as unknown as ChannelCreatePayload,
);
// Recreate the channel and add it undert he users id
@@ -229,7 +229,7 @@ export async function editMember(
endpoints.GUILD_MEMBER(guildID, memberID),
options,
) as MemberCreatePayload;
const member = await structures.createMember(result, guildID);
const member = await structures.createMemberStruct(result, guildID);
return member;
}
+2 -2
View File
@@ -324,7 +324,7 @@ export async function editMessage(
content,
);
return structures.createMessage(result as MessageCreateOptions);
return structures.createMessageStruct(result as MessageCreateOptions);
}
/** Crosspost a message in a News Channel to following channels. */
@@ -333,5 +333,5 @@ export async function publishMessage(channelID: string, messageID: string) {
endpoints.CHANNEL_MESSAGE_CROSSPOST(channelID, messageID),
) as MessageCreateOptions;
return structures.createMessage(data);
return structures.createMessageStruct(data);
}
+4 -7
View File
@@ -20,11 +20,11 @@ import {
ban,
categoryChildrenIDs,
createEmoji,
createGuild,
createGuildChannel,
createGuildFromTemplate,
createGuildRole,
createGuildTemplate,
createServer,
createRole,
deleteChannel,
deleteChannelOverwrite,
deleteEmoji,
@@ -33,7 +33,6 @@ import {
deleteRole,
deleteServer,
editChannelOverwrite,
editEmbed,
editEmoji,
editGuild,
editGuildTemplate,
@@ -48,7 +47,6 @@ import {
getBans,
getChannel,
getChannels,
getEmbed,
getEmoji,
getEmojis,
getGuild,
@@ -153,9 +151,9 @@ export let handlers = {
createEmoji,
createGuildChannel,
createGuildFromTemplate,
createGuildRole,
createRole,
createGuildTemplate,
createServer,
createGuild,
deleteChannel,
deleteEmoji,
deleteGuildTemplate,
@@ -176,7 +174,6 @@ export let handlers = {
getChannel,
getChannels,
getWidgetSettings,
getEmbed,
getEmoji,
getEmojis,
getGuild,
+3 -3
View File
@@ -203,7 +203,7 @@ export async function executeWebhook(
);
if (!options.wait) return;
return structures.createMessage(result as MessageCreateOptions);
return structures.createMessageStruct(result as MessageCreateOptions);
}
export async function editWebhookMessage(
@@ -257,7 +257,7 @@ export async function editWebhookMessage(
{ ...options, allowed_mentions: options.allowed_mentions },
) as MessageCreateOptions;
const message = await structures.createMessage(result);
const message = await structures.createMessageStruct(result);
return message;
}
@@ -603,7 +603,7 @@ export async function editSlashResponse(
// If the original message was edited, this will not return a message
if (!options.messageID) return result;
const message = await structures.createMessage(
const message = await structures.createMessageStruct(
result as MessageCreateOptions,
);
return message;
+1 -1
View File
@@ -77,7 +77,7 @@ const baseChannel: Partial<Channel> = {
};
// deno-lint-ignore require-await
export async function createChannel(
export async function createChannelStruct(
data: ChannelCreatePayload,
guildID?: string,
) {
+9 -3
View File
@@ -107,7 +107,10 @@ const baseGuild: Partial<Guild> = {
},
};
export async function createGuild(data: CreateGuildPayload, shardID: number) {
export async function createGuildStruct(
data: CreateGuildPayload,
shardID: number,
) {
const {
disovery_splash: discoverySplash,
default_message_notifications: defaultMessageNotifications,
@@ -143,11 +146,14 @@ export async function createGuild(data: CreateGuildPayload, shardID: number) {
} = data;
const roles = await Promise.all(
data.roles.map((role) => structures.createRole(role)),
data.roles.map((role) => structures.createRoleStruct(role)),
);
await Promise.all(channels.map(async (channel) => {
const channelStruct = await structures.createChannel(channel, rest.id);
const channelStruct = await structures.createChannelStruct(
channel,
rest.id,
);
return cacheHandlers.set("channels", channelStruct.id, channelStruct);
}));
+4 -1
View File
@@ -72,7 +72,10 @@ const baseMember: Partial<Member> = {
},
};
export async function createMember(data: MemberCreatePayload, guildID: string) {
export async function createMemberStruct(
data: MemberCreatePayload,
guildID: string,
) {
const {
joined_at: joinedAt,
premium_since: premiumSince,
+1 -1
View File
@@ -133,7 +133,7 @@ const baseMessage: Partial<Message> = {
},
};
export async function createMessage(data: MessageCreateOptions) {
export async function createMessageStruct(data: MessageCreateOptions) {
const {
guild_id: guildID = "",
channel_id: channelID,
+14 -19
View File
@@ -1,20 +1,22 @@
import { createChannel } from "./channel.ts";
import { createGuild } from "./guild.ts";
import { createMember } from "./member.ts";
import { createMessage } from "./message.ts";
import { createRole } from "./role.ts";
import { createTemplate } from "./template.ts";
import { Channel, createChannelStruct } from "./channel.ts";
import { createGuildStruct, Guild } from "./guild.ts";
import { createMemberStruct, Member } from "./member.ts";
import { createMessageStruct, Message } from "./message.ts";
import { createRoleStruct, Role } from "./role.ts";
import { createTemplateStruct, Template } from "./template.ts";
/** This is the placeholder where the structure creation functions are kept. */
export let structures = {
createChannel,
createGuild,
createMember,
createMessage,
createRole,
createTemplate,
createChannelStruct,
createGuildStruct,
createMemberStruct,
createMessageStruct,
createRoleStruct,
createTemplateStruct,
};
export type { Channel, Guild, Member, Message, Role, Template };
export type Structures = typeof structures;
/** This function is used to update/reload/customize the internal structures of Discordeno.
@@ -28,10 +30,3 @@ export function updateStructures(newStructures: Structures) {
...newStructures,
};
}
export type { Channel } from "./channel.ts";
export type { Guild } from "./guild.ts";
export type { Member } from "./member.ts";
export type { Message } from "./message.ts";
export type { Role } from "./role.ts";
export type { Template } from "./template.ts";
+1 -1
View File
@@ -67,7 +67,7 @@ const baseRole: Partial<Role> = {
};
// deno-lint-ignore require-await
export async function createRole({ tags = {}, ...rest }: RoleData) {
export async function createRoleStruct({ tags = {}, ...rest }: RoleData) {
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) {
// @ts-ignore index signature
+1 -1
View File
@@ -11,7 +11,7 @@ const baseTemplate: Partial<Template> = {
},
};
export function createTemplate(
export function createTemplateStruct(
data: GuildTemplate,
) {
const {
+4 -5
View File
@@ -6,10 +6,9 @@ import {
cache,
Channel,
channelOverwriteHasPermission,
closeWS,
createGuild,
createGuildChannel,
createGuildRole,
createServer,
createRole,
delay,
deleteChannel,
deleteMessageByID,
@@ -71,7 +70,7 @@ Deno.test({
Deno.test({
name: "[guild] create a new guild",
async fn() {
const guild = await createServer({
const guild = await createGuild({
name: "Discordeno Test",
}) as Guild;
@@ -96,7 +95,7 @@ Deno.test({
}
const name = "Discordeno Test";
const role = await createGuildRole(tempData.guildID, {
const role = await createRole(tempData.guildID, {
name,
});