diff --git a/src/helpers/channels/category_children_ids.ts b/src/helpers/channels/category_children.ts similarity index 57% rename from src/helpers/channels/category_children_ids.ts rename to src/helpers/channels/category_children.ts index 447190ec4..52be1beea 100644 --- a/src/helpers/channels/category_children_ids.ts +++ b/src/helpers/channels/category_children.ts @@ -1,9 +1,9 @@ import { cacheHandlers } from "../../cache.ts"; /** Gets an array of all the channels ids that are the children of this category. */ -export function categoryChildrenIds(guildId: string, id: string) { +export function categoryChildren(id: string) { return cacheHandlers.filter( "channels", - (channel) => channel.parentId === id && channel.guildId === guildId, + (channel) => channel.parentId === id ); } diff --git a/src/helpers/channels/create_channel.ts b/src/helpers/channels/create_channel.ts index 721fe2847..51d32d474 100644 --- a/src/helpers/channels/create_channel.ts +++ b/src/helpers/channels/create_channel.ts @@ -3,14 +3,13 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; import { DiscordChannel } from "../../types/channels/channel.ts"; -import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; import { CreateGuildChannel } from "../../types/guilds/create_guild_channel.ts"; import { PermissionStrings } from "../../types/permissions/permission_strings.ts"; import { endpoints } from "../../util/constants.ts"; import { - calculateBits, requireBotGuildPermissions, } from "../../util/permissions.ts"; +import { camelKeysToSnakeCase } from "../../util/utils.ts"; /** Create a channel in your server. Bot needs MANAGE_CHANNEL permissions in the server. */ export async function createChannel( @@ -34,7 +33,7 @@ export async function createChannel( "post", endpoints.GUILD_CHANNELS(guildId), { - ...options, + ...camelKeysToSnakeCase(options), permission_overwrites: options?.permissionOverwrites?.map((perm) => ({ ...perm, diff --git a/src/helpers/mod.ts b/src/helpers/mod.ts index 2cb236947..dfde38982 100644 --- a/src/helpers/mod.ts +++ b/src/helpers/mod.ts @@ -1,4 +1,4 @@ -import { categoryChildrenIds } from "./channels/category_children_ids.ts"; +import { categoryChildren } from "./channels/category_children.ts"; import { channelOverwriteHasPermission } from "./channels/channel_overwrite_has_permission.ts"; import { createChannel } from "./channels/create_channel.ts"; import { deleteChannel } from "./channels/delete_channel.ts"; @@ -123,7 +123,7 @@ export { avatarURL, ban, banMember, - categoryChildrenIds, + categoryChildren, channelOverwriteHasPermission, createChannel, createEmoji, @@ -274,7 +274,7 @@ export let helpers = { getEmoji, getEmojis, // guilds - categoryChildrenIds, + categoryChildren, createGuild, deleteServer, editGuild, diff --git a/tests/channels/category_children.ts b/tests/channels/category_children.ts new file mode 100644 index 000000000..76300a2fb --- /dev/null +++ b/tests/channels/category_children.ts @@ -0,0 +1,55 @@ +import { defaultTestOptions, tempData } from "../ws/start_bot.ts"; +import { assertExists } from "../deps.ts"; +import { cache } from "../../src/cache.ts"; +import { createChannel, categoryChildren } from "../../src/helpers/mod.ts"; +import { DiscordChannelTypes } from "../../src/types/channels/channel_types.ts"; +import { delay } from "../../src/util/utils.ts"; + +Deno.test({ + name: "[channel] category channel ids", + async fn() { + const category = await createChannel(tempData.guildId, { + name: "Discordeno-test", + type: DiscordChannelTypes.GUILD_CATEGORY, + }); + + // Assertions + assertExists(category); + // Delay the execution by 5 seconds to allow CHANNEL_CREATE event to be processed + await delay(5000); + + if (!cache.channels.has(category.id)) { + throw new Error( + "The channel seemed to be created but it was not cached." + ); + } + + const channelsToCreate = [1, 2, 3, 4, 5]; + const channels = await Promise.all( + channelsToCreate.map((num) => + createChannel(tempData.guildId, { + name: `Discordeno-test-${num}`, + parentId: category.id, + }) + ) + ); + // Delay the execution by 5 seconds to allow CHANNEL_CREATE event to be processed + await delay(5000); + + // If every channel is not present in the cache, error out + if (!channels.every((c) => cache.channels.has(c.id))) + throw new Error( + "The channels seemed to be created but it was not cached." + ); + + const ids = await categoryChildren(category.id); + if ( + ids.size !== channelsToCreate.length || + !channels.every((c) => ids.has(c.id)) + ) + throw new Error( + "The category channel ids did not match with the category channels." + ); + }, + ...defaultTestOptions, +}); diff --git a/tests/mod.ts b/tests/mod.ts index 48e24cd7c..137842603 100644 --- a/tests/mod.ts +++ b/tests/mod.ts @@ -13,6 +13,7 @@ import "./guilds/create_guild.ts"; // Channel tests import "./channels/create_channel.ts"; +import "./channels/category_children.ts"; import "./channels/delete_channel.ts"; // Messages tests