From 3c36d8be748b178b99680d64afda375ff78b489f Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:58:18 +0200 Subject: [PATCH 01/89] add(types): SearchGuildMembers --- src/types/members/search_guild_members.ts | 9 +++++++++ src/types/mod.ts | 1 + 2 files changed, 10 insertions(+) create mode 100644 src/types/members/search_guild_members.ts diff --git a/src/types/members/search_guild_members.ts b/src/types/members/search_guild_members.ts new file mode 100644 index 000000000..6a984618d --- /dev/null +++ b/src/types/members/search_guild_members.ts @@ -0,0 +1,9 @@ +export interface SearchGuildMembers { + /** Query string to match username(s) and nickname(s) against */ + query: string; + /** Max number of members to return (1-1000). Default: 1 */ + limit?: number; +} + +/** https://discord.com/developers/docs/resources/guild#search-guild-members-query-string-params */ +export type DiscordSearchGuildMembers = SearchGuildMembers; diff --git a/src/types/mod.ts b/src/types/mod.ts index 6fcc0228b..b0b4313b9 100644 --- a/src/types/mod.ts +++ b/src/types/mod.ts @@ -129,6 +129,7 @@ export * from "./members/guild_members_chunk.ts"; export * from "./members/guild_member_add.ts"; export * from "./members/guild_member_remove.ts"; export * from "./members/guild_member_update.ts"; +export * from "./members/search_guild_members.ts"; export * from "./messages/allowed_mentions.ts"; export * from "./messages/allowed_mentions_types.ts"; export * from "./messages/attachment.ts"; From ac65134db9404dd139edabbd73818e6d514a79ac Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:58:27 +0200 Subject: [PATCH 02/89] add(constants): GUILD_MEMBERS_SEARCH --- src/util/constants.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util/constants.ts b/src/util/constants.ts index bff7d1483..d16003e84 100644 --- a/src/util/constants.ts +++ b/src/util/constants.ts @@ -106,6 +106,8 @@ export const endpoints = { GUILD_MEMBERS: (guildId: string) => `${GUILDS_BASE(guildId)}/members`, GUILD_MEMBER_ROLE: (guildId: string, memberId: string, roleId: string) => `${GUILDS_BASE(guildId)}/members/${memberId}/roles/${roleId}`, + GUILD_MEMBERS_SEARCH: (guildId: string) => + `${GUILDS_BASE(guildId)}/members/search`, GUILD_PRUNE: (guildId: string) => `${GUILDS_BASE(guildId)}/prune`, GUILD_REGIONS: (guildId: string) => `${GUILDS_BASE(guildId)}/regions`, GUILD_ROLE: (guildId: string, roleId: string) => From 42b5f54c16c8f7eb4a80cb1b5715d15cfaa9b65a Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:58:40 +0200 Subject: [PATCH 03/89] add(errors): Member search errors --- src/types/misc/errors.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/types/misc/errors.ts b/src/types/misc/errors.ts index cf8354c1d..f8e441b72 100644 --- a/src/types/misc/errors.ts +++ b/src/types/misc/errors.ts @@ -14,6 +14,8 @@ export enum Errors { GUILD_NOT_FOUND = "GUILD_NOT_FOUND", MEMBER_NOT_FOUND = "MEMBER_NOT_FOUND", MEMBER_NOT_IN_VOICE_CHANNEL = "MEMBER_NOT_IN_VOICE_CHANNEL", + MEMBER_SEARCH_LIMIT_TOO_HIGH = "MEMBER_SEARCH_LIMIT_TOO_HIGH", + MEMBER_SEARCH_LIMIT_TOO_LOW = "MEMBER_SEARCH_LIMIT_TOO_LOW", PRUNE_MAX_DAYS = "PRUNE_MAX_DAYS", ROLE_NOT_FOUND = "ROLE_NOT_FOUND", // Message Delete Errors From 31bb84fe231996f12271d1bc92b9034dfe02ae6d Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:59:01 +0200 Subject: [PATCH 04/89] add(helpers/members): searchMembers function --- src/helpers/members/search_members.ts | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/helpers/members/search_members.ts diff --git a/src/helpers/members/search_members.ts b/src/helpers/members/search_members.ts new file mode 100644 index 000000000..f9fb1b76b --- /dev/null +++ b/src/helpers/members/search_members.ts @@ -0,0 +1,51 @@ +import { cacheHandlers } from "../../cache.ts"; +import { rest } from "../../rest/rest.ts"; +import { DiscordenoMember } from "../../structures/member.ts"; +import { structures } from "../../structures/mod.ts"; +import { DiscordGuildMemberWithUser } from "../../types/guilds/guild_member.ts"; +import { SearchGuildMembers } from "../../types/members/search_guild_members.ts"; +import { Errors } from "../../types/misc/errors.ts"; +import { Collection } from "../../util/collection.ts"; +import { endpoints } from "../../util/constants.ts"; + +/** + * ⚠️ BEGINNER DEVS!! YOU SHOULD ALMOST NEVER NEED THIS AND YOU CAN GET FROM cache.members.filter() + * @param query Query string to match username(s) and nickname(s) against + */ +export async function searchMembers( + guildId: string, + query: string, + options?: Omit & { cache?: boolean }, +) { + if (options?.limit) { + if (options.limit < 1) throw new Error(Errors.MEMBER_SEARCH_LIMIT_TOO_LOW); + if (options.limit > 1000) { + throw new Error(Errors.MEMBER_SEARCH_LIMIT_TOO_HIGH); + } + } + + const result = await rest.runMethod( + "get", + endpoints.GUILD_MEMBERS_SEARCH(guildId), + { + ...options, + query, + }, + ); + + const members = await Promise.all(result.map(async (member) => { + const discordenoMember = await structures.createDiscordenoMember( + member, + guildId, + ); + if (options?.cache) { + await cacheHandlers.set("members", discordenoMember.id, discordenoMember); + } + + return discordenoMember; + })); + + return new Collection( + members.map((member) => [member.id, member]), + ); +} From 9f4cd812f6c148a37e3564d30d70b9ae6e5c83a1 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 17 Apr 2021 15:33:29 +0200 Subject: [PATCH 05/89] add test --- tests/members/search_members.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/members/search_members.ts diff --git a/tests/members/search_members.ts b/tests/members/search_members.ts new file mode 100644 index 000000000..789b8e288 --- /dev/null +++ b/tests/members/search_members.ts @@ -0,0 +1,29 @@ +import { defaultTestOptions, tempData } from "../ws/start_bot.ts"; +import { assertEquals, assertExists } from "../deps.ts"; +import { searchMembers } from "../../src/helpers/members/search_members.ts"; +import { botId, cache } from "../../mod.ts"; + +async function ifItFailsBlameWolf() { + const botMember = cache.members.get(botId); + + // Assertions + assertExists(botMember); + + const foundMembers = await searchMembers( + tempData.guildId, + botMember!.username.substring(0, 4), + { + limit: 1, + }, + ); + + assertEquals(foundMembers.size, 1); +} + +Deno.test({ + name: "[members] search guild members", + async fn() { + await ifItFailsBlameWolf(); + }, + ...defaultTestOptions, +}); From 31245dd6375e608e0ae9c244e781a7342b2377dc Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 17 Apr 2021 15:33:44 +0200 Subject: [PATCH 06/89] Update mod.ts --- tests/mod.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/mod.ts b/tests/mod.ts index 4dcd6f57e..76fd9bced 100644 --- a/tests/mod.ts +++ b/tests/mod.ts @@ -66,6 +66,9 @@ import "./roles/delete_role.ts"; import "./roles/edit_role.ts"; import "./roles/remove_role.ts"; +// Members tests +import "./members/search_members.ts"; + // Final cleanup import "./guilds/delete_server.ts"; import "./ws/ws_close.ts"; From 135ba5ef3ccc5f33ab4f5b511b1bd9bc0da32b6e Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 18:44:01 +0200 Subject: [PATCH 07/89] Update json_error_codes.ts --- src/types/codes/json_error_codes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/types/codes/json_error_codes.ts b/src/types/codes/json_error_codes.ts index e6fc18825..dc6ed3cda 100644 --- a/src/types/codes/json_error_codes.ts +++ b/src/types/codes/json_error_codes.ts @@ -25,6 +25,7 @@ export enum DiscordJsonErrorCodes { UnknownBranch, UnknownRedistributable = 10036, UnknownGuildTemplate = 10057, + UnknownDiscoveryCategory = 10059, UnknownInteraction = 10062, UnknownApplicationCommand = 10063, BotsCannotUseThisEndpoint = 20001, @@ -40,6 +41,7 @@ export enum DiscordJsonErrorCodes { MaximumNumberOfGuildChannelsReached = 30013, MaximumNumberOfAttachmentsInAMessageReached = 30015, MaximumNumberOfInvitesReached, + MaximumNumberOfGuildDiscoverySubcategoriesHasBeenReached = 30030, GuildAlreadyHasTemplate = 30031, UnauthorizedProvideAValidTokenAndTryAgain = 40001, YouNeedToVerifyYourAccountInOrderToPerformThisAction, From 2aafb75e969cd2ad7fe075bf524d8a36b77f2a2b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:09 +0200 Subject: [PATCH 08/89] Create add_guild_discovery_subcategory.ts --- .../discovery/add_guild_discovery_subcategory.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/types/discovery/add_guild_discovery_subcategory.ts diff --git a/src/types/discovery/add_guild_discovery_subcategory.ts b/src/types/discovery/add_guild_discovery_subcategory.ts new file mode 100644 index 000000000..af38cb9fc --- /dev/null +++ b/src/types/discovery/add_guild_discovery_subcategory.ts @@ -0,0 +1,12 @@ +import { SnakeCasedPropertiesDeep } from "../util.ts"; + +export interface AddGuildDiscoverySubcategory { + /** The guild Id of the subcategory was added to */ + guildId: string; + /** The Id of the subcategory added */ + categoryId: number; +} + +export type DiscordAddGuildDiscoverySubcategory = SnakeCasedPropertiesDeep< + AddGuildDiscoverySubcategory +>; From 1d2ae0cfa6395278c05ab5e387f7cb9415664c5c Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:11 +0200 Subject: [PATCH 09/89] Create discovery_category.ts --- src/types/discovery/discovery_category.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/types/discovery/discovery_category.ts diff --git a/src/types/discovery/discovery_category.ts b/src/types/discovery/discovery_category.ts new file mode 100644 index 000000000..64701227b --- /dev/null +++ b/src/types/discovery/discovery_category.ts @@ -0,0 +1,16 @@ +import { SnakeCasedPropertiesDeep } from "../util.ts"; +import { DiscoveryName } from "./discovery_name.ts"; + +export interface DiscoveryCategory { + /** Numeric id of the category */ + id: number; + /** The name of this category, in mutliple languages */ + name: DiscoveryName; + /** Whether this category can be set as a guild's primary category */ + isPrimary: boolean; +} + +//TODO: add docs link +export type DiscordDiscoveryCategory = SnakeCasedPropertiesDeep< + DiscoveryCategory +>; From 301c66799922393bd46c281adde40eabf97dadfd Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:13 +0200 Subject: [PATCH 10/89] Create discovery_metadata.ts --- src/types/discovery/discovery_metadata.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/types/discovery/discovery_metadata.ts diff --git a/src/types/discovery/discovery_metadata.ts b/src/types/discovery/discovery_metadata.ts new file mode 100644 index 000000000..117bf3869 --- /dev/null +++ b/src/types/discovery/discovery_metadata.ts @@ -0,0 +1,23 @@ +import { SnakeCasedPropertiesDeep } from "../util.ts"; + +export interface DiscoveryMetadata { + /** The guild Id */ + guildId: string; + /** The id of the primary discovery category set for this guild */ + primaryCategoryId: number; + /** Up to 10 discovery search keywords set for this guild */ + keywords: string[] | null; + /** Whether guild info is shown when custom emojis from this guild are clicked */ + emojiDiscoverabilityEnabled: boolean; + /** When the server's partner applicationo was accepted or denied, for applications via Server Settings */ + partnerActionedTimestamp: string | null; + /** When the server applied for partnership, if it has a pending application */ + partnerApplicationTimestamp: string | null; + /** Ids of up to 5 discovery subcategories set for this guild */ + categoryIds: number[]; +} + +// TODO: add docs link +export type DiscordDiscoveryMetadata = SnakeCasedPropertiesDeep< + DiscoveryMetadata +>; From 07855f2416facc10be6147bf870b6954cf9fadf0 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:15 +0200 Subject: [PATCH 11/89] Create discovery_name.ts --- src/types/discovery/discovery_name.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/types/discovery/discovery_name.ts diff --git a/src/types/discovery/discovery_name.ts b/src/types/discovery/discovery_name.ts new file mode 100644 index 000000000..d2e9479d6 --- /dev/null +++ b/src/types/discovery/discovery_name.ts @@ -0,0 +1,8 @@ +export interface DiscoveryName { + /** The name in English */ + default: string; + /** The name in other languages */ + localizations?: Record; +} + +export type DiscordDiscoveryName = DiscoveryName; From a9889554d8081ac053a1532124b0965ad2c728ef Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:17 +0200 Subject: [PATCH 12/89] Create modify_guild_discovery_metadata.ts --- .../discovery/modify_guild_discovery_metadata.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/types/discovery/modify_guild_discovery_metadata.ts diff --git a/src/types/discovery/modify_guild_discovery_metadata.ts b/src/types/discovery/modify_guild_discovery_metadata.ts new file mode 100644 index 000000000..1a91138a1 --- /dev/null +++ b/src/types/discovery/modify_guild_discovery_metadata.ts @@ -0,0 +1,14 @@ +import { SnakeCasedPropertiesDeep } from "../util.ts"; + +export interface ModifyGuildDiscoveryMetadata { + /** The id of the primary discovery category. Default: 0 */ + primaryCategoryId?: number | null; + /** Up to 10 discovery search kekywords. Default: null */ + keywords?: string[] | null; + /** Whether guild info is shown when custom emojis are clicked. Default: true */ + emojiDiscoverabilityEnabled?: boolean | null; +} + +export type DiscordModifyGuildDiscoveryMetadata = SnakeCasedPropertiesDeep< + ModifyGuildDiscoveryMetadata +>; From cf2d63746f0dbcc2ecfb0ad9e923e0c5c5fa7ac9 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:20 +0200 Subject: [PATCH 13/89] Create validate_discovery_search_term.ts --- src/types/discovery/validate_discovery_search_term.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/types/discovery/validate_discovery_search_term.ts diff --git a/src/types/discovery/validate_discovery_search_term.ts b/src/types/discovery/validate_discovery_search_term.ts new file mode 100644 index 000000000..184b533d8 --- /dev/null +++ b/src/types/discovery/validate_discovery_search_term.ts @@ -0,0 +1,6 @@ +export interface ValidateDiscoverySearchTerm { + /** Whether the provided term is valid */ + valid: boolean; +} + +export type DiscordValidateDiscoverySearchTerm = ValidateDiscoverySearchTerm; From 5f2f26f9cc90dbba559d688acb8e6fb1adb4ca7b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:31:22 +0200 Subject: [PATCH 14/89] Create validate_discovery_search_term_params.ts --- .../discovery/validate_discovery_search_term_params.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/types/discovery/validate_discovery_search_term_params.ts diff --git a/src/types/discovery/validate_discovery_search_term_params.ts b/src/types/discovery/validate_discovery_search_term_params.ts new file mode 100644 index 000000000..18d3e409b --- /dev/null +++ b/src/types/discovery/validate_discovery_search_term_params.ts @@ -0,0 +1,8 @@ +export interface ValidateDiscoverySearchTermParams { + /** The search term to check */ + term: string; +} + +// TODO: add docs link +export type DiscordValidateDiscoverySearchTermParams = + ValidateDiscoverySearchTermParams; From 47df256c57064e49c040c7bdae54eba1f7db24ad Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:40:57 +0200 Subject: [PATCH 15/89] Create get_discovery_categories.ts --- .../discovery/get_discovery_categories.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/helpers/discovery/get_discovery_categories.ts diff --git a/src/helpers/discovery/get_discovery_categories.ts b/src/helpers/discovery/get_discovery_categories.ts new file mode 100644 index 000000000..fab403a14 --- /dev/null +++ b/src/helpers/discovery/get_discovery_categories.ts @@ -0,0 +1,25 @@ +import { rest } from "../../rest/rest.ts"; +import { + DiscordDiscoveryCategory, + DiscoveryCategory, +} from "../../types/discovery/discovery_category.ts"; +import { Collection } from "../../util/collection.ts"; +import { endpoints } from "../../util/constants.ts"; +import { snakeKeysToCamelCase } from "../../util/utils.ts"; + +/** Returns an array of discovery category objects that can be used when editing guilds */ +export async function getDiscoveryCategories() { + const result = await rest.runMethod( + "get", + endpoints.DISCOVERY_CATEGORIES, + ); + + return new Collection( + result.map( + (category) => [ + category.id, + snakeKeysToCamelCase(category), + ] + ), + ); +} From b40533b6a6bcd3c7ef39a71407c7d57554462719 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 20:45:45 +0200 Subject: [PATCH 16/89] Create valid_discovery_term.ts --- src/helpers/discovery/valid_discovery_term.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/helpers/discovery/valid_discovery_term.ts diff --git a/src/helpers/discovery/valid_discovery_term.ts b/src/helpers/discovery/valid_discovery_term.ts new file mode 100644 index 000000000..824af8528 --- /dev/null +++ b/src/helpers/discovery/valid_discovery_term.ts @@ -0,0 +1,13 @@ +import { rest } from "../../rest/rest.ts"; +import { DiscordValidateDiscoverySearchTerm } from "../../types/discovery/validate_discovery_search_term.ts"; +import { endpoints } from "../../util/constants.ts"; + +export async function validDiscoveryTerm(term: string) { + const result = await rest.runMethod( + "get", + endpoints.DISCOVERY_VALID_TERM, + { term }, + ); + + return result.valid; +} From eb230ea26f6bf56d09e54b2bd21de96d674ae492 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sun, 18 Apr 2021 21:25:44 +0200 Subject: [PATCH 17/89] Create edit_discovery.ts --- src/helpers/discovery/edit_discovery.ts | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/helpers/discovery/edit_discovery.ts diff --git a/src/helpers/discovery/edit_discovery.ts b/src/helpers/discovery/edit_discovery.ts new file mode 100644 index 000000000..8c8c16d1b --- /dev/null +++ b/src/helpers/discovery/edit_discovery.ts @@ -0,0 +1,28 @@ +import { rest } from "../../rest/rest.ts"; +import { + DiscordDiscoveryMetadata, + DiscoveryMetadata, +} from "../../types/discovery/discovery_metadata.ts"; +import { ModifyGuildDiscoveryMetadata } from "../../types/discovery/modify_guild_discovery_metadata.ts"; +import { endpoints } from "../../util/constants.ts"; +import { requireBotGuildPermissions } from "../../util/permissions.ts"; +import { + camelKeysToSnakeCase, + snakeKeysToCamelCase, +} from "../../util/utils.ts"; + +/** Modify the discovery metadata for the guild. Requires the MANAGE_GUILD permission. Returns the updated discovery metadata object on success. */ +export async function editDiscovery( + guildId: string, + data: ModifyGuildDiscoveryMetadata, +) { + await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); + + const result = await rest.runMethod( + "patch", + endpoints.DISCOVERY_MODIFY(guildId), + camelKeysToSnakeCase(data), + ); + + return snakeKeysToCamelCase(result); +} From 819712677b0c81874950d25fd8e4ade1ac841a49 Mon Sep 17 00:00:00 2001 From: itohatweb Date: Sun, 18 Apr 2021 19:31:33 +0000 Subject: [PATCH 18/89] Commit from GitHub Actions (Lint) --- src/helpers/discovery/get_discovery_categories.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/discovery/get_discovery_categories.ts b/src/helpers/discovery/get_discovery_categories.ts index fab403a14..4c390a616 100644 --- a/src/helpers/discovery/get_discovery_categories.ts +++ b/src/helpers/discovery/get_discovery_categories.ts @@ -19,7 +19,7 @@ export async function getDiscoveryCategories() { (category) => [ category.id, snakeKeysToCamelCase(category), - ] + ], ), ); } From 59dbc8ed068e13ab4786b53be769f26f91f6e1e2 Mon Sep 17 00:00:00 2001 From: ayntee Date: Mon, 19 Apr 2021 11:51:05 +0400 Subject: [PATCH 19/89] Use nacl for signature verification and remove server.ts (included in template) --- src/interactions/README.md | 9 --- src/interactions/deps.ts | 3 +- src/interactions/mod.ts | 2 +- src/interactions/server.ts | 130 ------------------------------------- 4 files changed, 2 insertions(+), 142 deletions(-) delete mode 100644 src/interactions/README.md delete mode 100644 src/interactions/server.ts diff --git a/src/interactions/README.md b/src/interactions/README.md deleted file mode 100644 index 5f8cb5b36..000000000 --- a/src/interactions/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Discordeno Interactions - -`interactions` is a standalone submodule that supports the webhooks through HTTP -server to add support for Discord's interactions feature. This is a barebones -interface that will create and handle requests from Discord API. - -- Complete and extremely fast security and verification checks -- First-class TypeScript Support -- Minimalistic diff --git a/src/interactions/deps.ts b/src/interactions/deps.ts index e4d49c4c8..9c4f4dbfd 100644 --- a/src/interactions/deps.ts +++ b/src/interactions/deps.ts @@ -1,2 +1 @@ -export { serve } from "https://deno.land/std@0.90.0/http/server.ts"; -export { verify } from "https://unpkg.com/@evan/wasm@0.0.50/target/ed25519/deno.js"; +export { sign } from "https://unpkg.com/@evan/wasm@0.0.50/target/nacl/deno.js"; diff --git a/src/interactions/mod.ts b/src/interactions/mod.ts index 868f42d4c..0d89dc128 100644 --- a/src/interactions/mod.ts +++ b/src/interactions/mod.ts @@ -1 +1 @@ -export * from "./server.ts"; +export * from "./verify_signature.ts"; diff --git a/src/interactions/server.ts b/src/interactions/server.ts deleted file mode 100644 index be52423b8..000000000 --- a/src/interactions/server.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { - DiscordInteractionResponseTypes, - DiscordInteractionTypes, -} from "../types/mod.ts"; -import { serve, verify } from "./deps.ts"; - -/** This variable is a holder for the public key and other configuration */ -const serverOptions = { - publicKey: "", - port: 80, -}; - -/** Theses are the handlers that you can plug into and customize to your needs. */ -export const handlers = { - handlePayload, - handleApplicationCommand, -}; - -/** Starts the slash command server */ -export async function startServer( - { port, publicKey, handleApplicationCommand }: StartServerConfig, -) { - serverOptions.publicKey = publicKey; - serverOptions.port = port; - if (handleApplicationCommand) { - handlers.handleApplicationCommand = handleApplicationCommand; - } - - const server = serve({ port: serverOptions.port }); - - for await (const req of server) { - // TODO: this is going to be removed - // deno-lint-ignore no-deprecated-deno-api - const buffer = await Deno.readAll(req.body); - const signature = req.headers.get("X-Signature-Ed25519"); - const timestamp = req.headers.get("X-Signature-Timestamp"); - - if (!signature || !timestamp) { - req.respond({ status: 400, body: "Bad request" }); - continue; - } - - const isVerified = verifySecurity(buffer, signature!, timestamp!); - if (!isVerified) { - req.respond({ status: 401, body: "Invalid request signature" }); - continue; - } - - try { - const data = JSON.parse(new TextDecoder().decode(buffer)); - const response = await handlers.handlePayload(data); - req.respond( - { status: response.status || 200, body: JSON.stringify(response.body) }, - ); - } catch (error) { - console.error(error); - } - } -} - -function handlePayload(payload: Interaction) { - switch (payload.type) { - case DiscordInteractionTypes.Ping: - return { - status: 200, - body: { type: DiscordInteractionResponseTypes.Pong }, - }; - default: // APPLICATION_COMMAND - return handlers.handleApplicationCommand(payload); - } -} - -/** The function that handles your commands. This command can be overriden by you and you can receive the payload and handle accordingly and respond back. The status if not provided will default to 200. */ -// deno-lint-ignore require-await -async function handleApplicationCommand( - payload: Interaction, -): Promise<{ status?: number; body: InteractionResponse }> { - // Handle the command - if (payload.data?.name === "ping") { - return { - status: 200, - body: { - type: DiscordInteractionResponseTypes.ChannelMessageWithSource, - data: { content: "Pong from Discordeno!" }, - }, - }; - } - - return { - status: 200, - body: { - type: DiscordInteractionResponseTypes.ChannelMessageWithSource, - data: { - content: - "Whoopsies! Seems the handling for this command is missing. Please contact my developers!", - }, - }, - }; -} - -/** Internal function to verify security. Discord will send bad and good data and this function is important to verify it. If it is not verified properly, Discord will kill your bot. */ -export function verifySecurity( - buffer: Uint8Array, - signature: string, - time: string, -) { - const sig = new Uint8Array(64); - const timestamp = new TextEncoder().encode(time); - - let offset = 0; - const message = new Uint8Array(buffer.length + timestamp.length); - while (offset < 2 * 64) { - sig[offset / 2] = parseInt(signature!.substring(offset, offset += 2), 16); - } - - const slashKey = new Uint8Array(32); - let keyoffset = 0; - - while (keyoffset < 2 * 32) { - slashKey[keyoffset / 2] = parseInt( - serverOptions.publicKey.substring(keyoffset, keyoffset += 2), - 16, - ); - } - - message.set(timestamp); - message.set(buffer, timestamp.length); - - return verify(slashKey, sig, message); -} From 5d9b5d352a4221392e45c832a0b662830d61cdec Mon Sep 17 00:00:00 2001 From: ayntee Date: Mon, 19 Apr 2021 11:52:38 +0400 Subject: [PATCH 20/89] Add verifySignature() function --- src/interactions/verify_signature.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/interactions/verify_signature.ts diff --git a/src/interactions/verify_signature.ts b/src/interactions/verify_signature.ts new file mode 100644 index 000000000..6d73ccf17 --- /dev/null +++ b/src/interactions/verify_signature.ts @@ -0,0 +1,25 @@ +import { sign } from "./deps.ts"; + +export function verifySignature( + { publicKey, signature, timestamp, body }: VerifySignatureOptions, +): { isValid: boolean; body: string } { + const isValid = sign.verify( + new TextEncoder().encode(timestamp + body), + hexToUint8Array(signature), + hexToUint8Array(publicKey), + ); + + return { isValid, body }; +} + +/** Converts a hexadecimal string to Uint8Array. */ +function hexToUint8Array(hex: string) { + return new Uint8Array(hex.match(/.{1,2}/g)!.map((val) => parseInt(val, 16))); +} + +export interface VerifySignatureOptions { + publicKey: string; + signature: string; + timestamp: string; + body: string; +} From 739d2fd8c2f976a6220f4c3f95f7790b3257522b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Mon, 19 Apr 2021 10:36:40 +0200 Subject: [PATCH 21/89] fix --- src/types/interactions/application_command.ts | 2 ++ .../application_command_permission_types.ts | 4 ++++ .../application_command_permissions.ts | 14 ++++++++++++++ .../guild_application_command_permissions.ts | 17 +++++++++++++++++ src/types/interactions/interaction.ts | 12 +++++++----- 5 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 src/types/interactions/application_command_permission_types.ts create mode 100644 src/types/interactions/application_command_permissions.ts create mode 100644 src/types/interactions/guild_application_command_permissions.ts diff --git a/src/types/interactions/application_command.ts b/src/types/interactions/application_command.ts index 9a3df0bc3..24cae6c8d 100644 --- a/src/types/interactions/application_command.ts +++ b/src/types/interactions/application_command.ts @@ -12,6 +12,8 @@ export interface ApplicationCommand { description: string; /** The parameters for the command */ options?: ApplicationCommandOption[]; + /** Whether the command is enbaled by default when the app is added to a guild */ + defaultPermission?: boolean; } /** https://discord.com/developers/docs/interactions/slash-commands#applicationcommand */ diff --git a/src/types/interactions/application_command_permission_types.ts b/src/types/interactions/application_command_permission_types.ts new file mode 100644 index 000000000..db383458c --- /dev/null +++ b/src/types/interactions/application_command_permission_types.ts @@ -0,0 +1,4 @@ +export enum DiscordApplicationCommandPermissionTypes { + Role = 1, + User, +} diff --git a/src/types/interactions/application_command_permissions.ts b/src/types/interactions/application_command_permissions.ts new file mode 100644 index 000000000..48453dfeb --- /dev/null +++ b/src/types/interactions/application_command_permissions.ts @@ -0,0 +1,14 @@ +import { DiscordApplicationCommandPermissionTypes } from "./application_command_permission_types.ts"; + +export interface ApplicationCommandPermissions { + /** The id of the role or user */ + id: string; + /** Role or User */ + type: DiscordApplicationCommandPermissionTypes; + /** `true` to allow, `false`, to disallow */ + permission: boolean; +} + +/** https://discord.com/developers/docs/interactions/slash-commands#applicationcommandpermissions */ +export type DiscordApplicationCommandPermissions = + ApplicationCommandPermissions; diff --git a/src/types/interactions/guild_application_command_permissions.ts b/src/types/interactions/guild_application_command_permissions.ts new file mode 100644 index 000000000..6845e90d7 --- /dev/null +++ b/src/types/interactions/guild_application_command_permissions.ts @@ -0,0 +1,17 @@ +import { SnakeCasedPropertiesDeep } from "../util.ts"; +import { ApplicationCommandPermissions } from "./application_command_permissions.ts"; + +export interface GuildApplicationCommandPermissions { + /** The id of the command */ + id: string; + /** The id of the application to command belongs to */ + applicationId: string; + /** The id of the guild */ + guildId: string; + /** The permissions for the command in the guild */ + permissions: ApplicationCommandPermissions[]; +} + +/** https://discord.com/developers/docs/interactions/slash-commands#guildapplicationcommandpermissions */ +export type DiscordGuildApplicationCommandPermissions = + SnakeCasedPropertiesDeep; diff --git a/src/types/interactions/interaction.ts b/src/types/interactions/interaction.ts index b8aed2254..a2b8b66f7 100644 --- a/src/types/interactions/interaction.ts +++ b/src/types/interactions/interaction.ts @@ -1,22 +1,24 @@ -import { GuildMember } from "../guilds/guild_member.ts"; +import { GuildMemberWithUser } from "../guilds/guild_member.ts"; import { User } from "../users/user.ts"; import { SnakeCasedPropertiesDeep } from "../util.ts"; -import { InteractionApplicationCommandCallbackData } from "./application_command_callback_data.ts"; +import { ApplicationCommandInteractionData } from "./application_command_interaction_data.ts"; import { DiscordInteractionTypes } from "./interaction_types.ts"; export interface Interaction { - /** id of the interaction */ + /** Id of the interaction */ id: string; + /** Id of the application this interaction is for */ + applicationId: string; /** The type of interaction */ type: DiscordInteractionTypes; /** The command data payload */ - data?: InteractionApplicationCommandCallbackData; + data?: ApplicationCommandInteractionData; /** The guild it was sent from */ guildId?: string; /** The channel it was sent from */ channelId?: string; /** Guild member data for the invoking user, including permissions */ - member?: GuildMember; + member?: GuildMemberWithUser; /** User object for the invoking user, if invoked in a DM */ user?: User; /** A continuation token for responding to the interaction */ From fcb1ed8034f6fc55b43489719b35cfdd6547fcf5 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:01:37 +0200 Subject: [PATCH 22/89] Create add_discovery_subcategory.ts --- .../discovery/add_discovery_subcategory.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/helpers/discovery/add_discovery_subcategory.ts diff --git a/src/helpers/discovery/add_discovery_subcategory.ts b/src/helpers/discovery/add_discovery_subcategory.ts new file mode 100644 index 000000000..f57296503 --- /dev/null +++ b/src/helpers/discovery/add_discovery_subcategory.ts @@ -0,0 +1,23 @@ +import { rest } from "../../rest/rest.ts"; +import { + AddGuildDiscoverySubcategory, + DiscordAddGuildDiscoverySubcategory, +} from "../../types/discovery/add_guild_discovery_subcategory.ts"; +import { endpoints } from "../../util/constants.ts"; +import { requireBotGuildPermissions } from "../../util/permissions.ts"; +import { snakeKeysToCamelCase } from "../../util/utils.ts"; + +/** Add a discovery subcategory to the guild. Requires the `MANAGE_GUILD` permission. */ +export async function addDiscoverySubcategory( + guildId: string, + categoryId: number, +) { + await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); + + const result = await rest.runMethod( + "post", + endpoints.DISCOVERY_SUBCATEGORY(guildId, categoryId), + ); + + return snakeKeysToCamelCase(result); +} From a4f422a19a395e3589030ff7f70a189d96786fb5 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:01:42 +0200 Subject: [PATCH 23/89] Create remove_discovery_subcategory.ts --- .../discovery/remove_discovery_subcategory.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/helpers/discovery/remove_discovery_subcategory.ts diff --git a/src/helpers/discovery/remove_discovery_subcategory.ts b/src/helpers/discovery/remove_discovery_subcategory.ts new file mode 100644 index 000000000..35c508343 --- /dev/null +++ b/src/helpers/discovery/remove_discovery_subcategory.ts @@ -0,0 +1,16 @@ +import { rest } from "../../rest/rest.ts"; +import { endpoints } from "../../util/constants.ts"; +import { requireBotGuildPermissions } from "../../util/permissions.ts"; + +/** Removes a discovery subcategory from the guild. Requires the MANAGE_GUILD permission. Returns a 204 No Content on success. */ +export async function deleteDiscoverySubcategory( + guildId: string, + categoryId: number, +) { + await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); + + return await rest.runMethod( + "delete", + endpoints.DISCOVERY_SUBCATEGORY(guildId, categoryId), + ); +} From 455c0ad96df0392e9deab89ac132fcd3805acd51 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:01:44 +0200 Subject: [PATCH 24/89] Update constants.ts --- src/util/constants.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util/constants.ts b/src/util/constants.ts index 4c1e47ab4..e241097b0 100644 --- a/src/util/constants.ts +++ b/src/util/constants.ts @@ -181,7 +181,15 @@ export const endpoints = { USER_CONNECTIONS: `${baseEndpoints.BASE_URL}/users/@me/connections`, USER_NICK: (guildId: string) => `${GUILDS_BASE(guildId)}/members/@me/nick`, - // oAuth2 + // Discovery Endpoints + DISCOVERY_CATEGORIES: `${baseEndpoints.BASE_URL}/discovery/categories`, + DISCOVERY_VALID_TERM: `${baseEndpoints.BASE_URL}/discovery/valid-term`, + DISCOVERY_MODIFY: (guildId: string) => + `${GUILDS_BASE(guildId)}/discovery-metadata`, + DISCOVERY_SUBCATEGORY: (guildId: string, categoryId: number) => + `${GUILDS_BASE(guildId)}/discovery-categories/${categoryId}`, + + // OAuth2 OAUTH2_APPLICATION: `${baseEndpoints.BASE_URL}/oauth2/applications/@me`, }; From 6a29304f20ee74349a53abf8d8c09351525e56e2 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:21:18 +0200 Subject: [PATCH 25/89] Update remove_discovery_subcategory.ts --- src/helpers/discovery/remove_discovery_subcategory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/discovery/remove_discovery_subcategory.ts b/src/helpers/discovery/remove_discovery_subcategory.ts index 35c508343..610254319 100644 --- a/src/helpers/discovery/remove_discovery_subcategory.ts +++ b/src/helpers/discovery/remove_discovery_subcategory.ts @@ -3,7 +3,7 @@ import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; /** Removes a discovery subcategory from the guild. Requires the MANAGE_GUILD permission. Returns a 204 No Content on success. */ -export async function deleteDiscoverySubcategory( +export async function removeDiscoverySubcategory( guildId: string, categoryId: number, ) { From e0ca050e13ce9349bd36bc9d96b03d8af08fdefa Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:21:20 +0200 Subject: [PATCH 26/89] Update mod.ts --- src/helpers/mod.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/helpers/mod.ts b/src/helpers/mod.ts index 49486d140..22799a964 100644 --- a/src/helpers/mod.ts +++ b/src/helpers/mod.ts @@ -115,8 +115,14 @@ import { executeWebhook } from "./webhooks/execute_webhook.ts"; import { getWebhook } from "./webhooks/get_webhook.ts"; import { getWebhooks } from "./webhooks/get_webhooks.ts"; import { getWebhookWithToken } from "./webhooks/get_webhook_with_token.ts"; +import { addDiscoverySubcategory } from "./discovery/add_discovery_subcategory.ts"; +import { editDiscovery } from "./discovery/edit_discovery.ts"; +import { getDiscoveryCategories } from "./discovery/get_discovery_categories.ts"; +import { removeDiscoverySubcategory } from "./discovery/remove_discovery_subcategory.ts"; +import { validDiscoveryTerm } from "./discovery/valid_discovery_term.ts"; export { + addDiscoverySubcategory, addReaction, addReactions, addRole, @@ -155,6 +161,7 @@ export { editBotStatus, editChannel, editChannelOverwrite, + editDiscovery, editEmoji, editGuild, editGuildTemplate, @@ -179,6 +186,7 @@ export { getChannelInvites, getChannels, getChannelWebhooks, + getDiscoveryCategories, getEmoji, getEmojis, getGatewayBot, @@ -223,6 +231,7 @@ export { pruneMembers, publishMessage, removeAllReactions, + removeDiscoverySubcategory, removeReaction, removeReactionEmoji, removeRole, @@ -239,6 +248,7 @@ export { unpinMessage, upsertSlashCommand, upsertSlashCommands, + validDiscoveryTerm, }; export let helpers = { @@ -298,6 +308,12 @@ export let helpers = { guildIconURL, guildSplashURL, leaveGuild, + // discovery + addDiscoverySubcategory, + editDiscovery, + getDiscoveryCategories, + removeDiscoverySubcategory, + validDiscoveryTerm, // integrations deleteIntegration, getIntegrations, From 92ab2885fa3cb4608eb35aa6d90e2ed146499a0e Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:26:58 +0200 Subject: [PATCH 27/89] add tests --- tests/discoveries/get_discovery_categories.ts | 16 ++++++++++++++++ tests/discoveries/valid_discovery_term.ts | 16 ++++++++++++++++ tests/mod.ts | 3 +++ 3 files changed, 35 insertions(+) create mode 100644 tests/discoveries/get_discovery_categories.ts create mode 100644 tests/discoveries/valid_discovery_term.ts diff --git a/tests/discoveries/get_discovery_categories.ts b/tests/discoveries/get_discovery_categories.ts new file mode 100644 index 000000000..d45e3675d --- /dev/null +++ b/tests/discoveries/get_discovery_categories.ts @@ -0,0 +1,16 @@ +import { defaultTestOptions } from "../ws/start_bot.ts"; +import { assertEquals } from "../deps.ts"; +import { getDiscoveryCategories } from "../../src/helpers/discovery/get_discovery_categories.ts"; + +Deno.test({ + name: "[discovery] get categories", + async fn() { + const categories = await getDiscoveryCategories(); + + assertEquals( + categories.size > 0, + true, + ); + }, + ...defaultTestOptions, +}); diff --git a/tests/discoveries/valid_discovery_term.ts b/tests/discoveries/valid_discovery_term.ts new file mode 100644 index 000000000..cee8e3da2 --- /dev/null +++ b/tests/discoveries/valid_discovery_term.ts @@ -0,0 +1,16 @@ +import { defaultTestOptions } from "../ws/start_bot.ts"; +import { assertEquals } from "../deps.ts"; +import { validDiscoveryTerm } from "../../src/helpers/discovery/valid_discovery_term.ts"; + +Deno.test({ + name: "[discovery] get categories", + async fn() { + const valid = await validDiscoveryTerm("Bots"); + + assertEquals( + valid, + true, + ); + }, + ...defaultTestOptions, +}); diff --git a/tests/mod.ts b/tests/mod.ts index 76fd9bced..84863516e 100644 --- a/tests/mod.ts +++ b/tests/mod.ts @@ -69,6 +69,9 @@ import "./roles/remove_role.ts"; // Members tests import "./members/search_members.ts"; +// Discoveries tests +import "./discoveries/get_discovery_categories.ts"; + // Final cleanup import "./guilds/delete_server.ts"; import "./ws/ws_close.ts"; From f684e4f1800257ba0aa3881919e7062f2300ffd8 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 18:00:53 +0200 Subject: [PATCH 28/89] add missing import --- tests/mod.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/mod.ts b/tests/mod.ts index 84863516e..e1240004b 100644 --- a/tests/mod.ts +++ b/tests/mod.ts @@ -71,6 +71,7 @@ import "./members/search_members.ts"; // Discoveries tests import "./discoveries/get_discovery_categories.ts"; +import "./discoveries/valid_discovery_term.ts"; // Final cleanup import "./guilds/delete_server.ts"; From de347014c72790002c5fd7b78452a56922a459ad Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Tue, 20 Apr 2021 18:44:15 +0200 Subject: [PATCH 29/89] guild cannot be discoverable --- src/types/guilds/guild_features.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/types/guilds/guild_features.ts b/src/types/guilds/guild_features.ts index 8df6b1e78..3ba9fa4cc 100644 --- a/src/types/guilds/guild_features.ts +++ b/src/types/guilds/guild_features.ts @@ -17,7 +17,8 @@ export enum DiscordGuildFeatures { /** Guild has access to create news channels */ NEWS = "NEWS", /** Guild is able to be discovered in the directory */ - DISCOVERABLE = "DISCOVERABLE", + DISCOVERABLE = "DISCOVERABLE", /** guild cannot be discoverable */ + DISCOVERABLE_DISABLED = "DISCOVERABLE_DISABLED", /** Guild is able to be featured in the directory */ FEATURABLE = "FEATURABLE", /** Guild has access to set an animated guild icon */ From f2ae9db4a467833a587ed3388347bfd24a6f9dee Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Thu, 22 Apr 2021 21:34:28 +0200 Subject: [PATCH 30/89] add application command permissions endpoint --- src/util/constants.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util/constants.ts b/src/util/constants.ts index e241097b0..2d188c57e 100644 --- a/src/util/constants.ts +++ b/src/util/constants.ts @@ -148,6 +148,8 @@ export const endpoints = { `${baseEndpoints.BASE_URL}/applications/${applicationId}/commands`, COMMANDS_GUILD: (applicationId: string, guildId: string) => `${baseEndpoints.BASE_URL}/applications/${applicationId}/guilds/${guildId}/commands`, + COMMANDS_PERMISSIONS: (applicationId: string, guildId: string) => + `${endpoints.COMMANDS_GUILD(applicationId, guildId)}/permissions`, COMMANDS_ID: (applicationId: string, commandId: string) => `${baseEndpoints.BASE_URL}/applications/${applicationId}/commands/${commandId}`, COMMANDS_GUILD_ID: ( From 9fa6afa0574431bb69d69aa510db601217fa2ae3 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Thu, 22 Apr 2021 21:34:30 +0200 Subject: [PATCH 31/89] Create get_slash_command_permissions.ts --- .../commands/get_slash_command_permissions.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/helpers/commands/get_slash_command_permissions.ts diff --git a/src/helpers/commands/get_slash_command_permissions.ts b/src/helpers/commands/get_slash_command_permissions.ts new file mode 100644 index 000000000..4d69204bf --- /dev/null +++ b/src/helpers/commands/get_slash_command_permissions.ts @@ -0,0 +1,12 @@ +import { applicationId } from "../../bot.ts"; +import { rest } from "../../rest/rest.ts"; +import { GuildApplicationCommandPermissions } from "../../types/interactions/guild_application_command_permissions.ts"; +import { endpoints } from "../../util/constants.ts"; + +/** Fetches command permissions for all commands for your application in a guild. Returns an array of GuildApplicationCommandPermissions objects. */ +export async function getSlashCommandPermissions(guildId: string) { + return await rest.runMethod( + "get", + endpoints.COMMANDS_PERMISSIONS(applicationId, guildId), + ); +} From 6d445cde22c6cc88a6a39f758e5e03c7bdc2f9ba Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Thu, 22 Apr 2021 21:43:28 +0200 Subject: [PATCH 32/89] add automatic toCamel --- src/rest/run_method.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rest/run_method.ts b/src/rest/run_method.ts index c5007d49e..f4cf90ccc 100644 --- a/src/rest/run_method.ts +++ b/src/rest/run_method.ts @@ -1,4 +1,5 @@ import { API_VERSION, BASE_URL, IMAGE_BASE_URL } from "../util/constants.ts"; +import { snakeKeysToCamelCase } from "../util/utils.ts"; import { rest } from "./rest.ts"; // deno-lint-ignore no-explicit-any @@ -47,7 +48,7 @@ export async function runMethod( method, reject, respond: (data: { status: number; body?: string }) => - resolve(JSON.parse(data.body || "{}")), + resolve(snakeKeysToCamelCase(JSON.parse(data.body || "{}"))), }, { bucketId, From a665c2d53065918a82bb8129e5a57f43c36ddb50 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:12:27 +0200 Subject: [PATCH 33/89] Update create_channel.ts --- src/helpers/channels/create_channel.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/channels/create_channel.ts b/src/helpers/channels/create_channel.ts index da902252f..9d675ed60 100644 --- a/src/helpers/channels/create_channel.ts +++ b/src/helpers/channels/create_channel.ts @@ -2,7 +2,7 @@ import { eventHandlers } from "../../bot.ts"; 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 { Channel } from "../../types/channels/channel.ts"; import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; import { CreateGuildChannel, @@ -38,7 +38,7 @@ export async function createChannel( // BITRATES ARE IN THOUSANDS SO IF USER PROVIDES 32 WE CONVERT TO 32000 if (options?.bitrate && options.bitrate < 1000) options.bitrate *= 1000; - const result = (await rest.runMethod( + const result = await rest.runMethod( "post", endpoints.GUILD_CHANNELS(guildId), { @@ -51,7 +51,7 @@ export async function createChannel( type: options?.type || DiscordChannelTypes.GUILD_TEXT, reason, }, - )) as DiscordChannel; + ); const discordenoChannel = await structures.createDiscordenoChannel(result); await cacheHandlers.set("channels", discordenoChannel.id, discordenoChannel); From 27c569050efb782d9a500092bcc8a6e56ecda72a Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:12:30 +0200 Subject: [PATCH 34/89] Update delete_channel_overwrite.ts --- src/helpers/channels/delete_channel_overwrite.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/helpers/channels/delete_channel_overwrite.ts b/src/helpers/channels/delete_channel_overwrite.ts index da9f04a4f..ea92593cb 100644 --- a/src/helpers/channels/delete_channel_overwrite.ts +++ b/src/helpers/channels/delete_channel_overwrite.ts @@ -10,10 +10,8 @@ export async function deleteChannelOverwrite( ): Promise { await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_OVERWRITE(channelId, overwriteId), ); - - return result; } From 832905a0e9b41a96f653d93ae40fa214a03cb467 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:12:33 +0200 Subject: [PATCH 35/89] Update delete_channel.ts --- src/helpers/channels/delete_channel.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/helpers/channels/delete_channel.ts b/src/helpers/channels/delete_channel.ts index cd384bbfa..d934c8944 100644 --- a/src/helpers/channels/delete_channel.ts +++ b/src/helpers/channels/delete_channel.ts @@ -23,11 +23,9 @@ export async function deleteChannel( throw new Error(Errors.UPDATES_CHANNEL_CANNOT_BE_DELETED); } - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_BASE(channelId), { reason }, ); - - return result; } From 0d7590349bc4b38968eeabc399bde15369da2d09 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:12:35 +0200 Subject: [PATCH 36/89] Update edit_channel_overwrite.ts --- src/helpers/channels/edit_channel_overwrite.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/helpers/channels/edit_channel_overwrite.ts b/src/helpers/channels/edit_channel_overwrite.ts index e6caad9b0..17f271528 100644 --- a/src/helpers/channels/edit_channel_overwrite.ts +++ b/src/helpers/channels/edit_channel_overwrite.ts @@ -15,7 +15,7 @@ export async function editChannelOverwrite( ): Promise { await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = await rest.runMethod( + return await rest.runMethod( "put", endpoints.CHANNEL_OVERWRITE(channelId, overwriteId), { @@ -24,6 +24,4 @@ export async function editChannelOverwrite( type: options.type, }, ); - - return result; } From 7f8e67f5c63e6e4a6f600885ab462c03cc9dc7ab Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:30 +0200 Subject: [PATCH 37/89] Update edit_channel.ts --- src/helpers/channels/edit_channel.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/helpers/channels/edit_channel.ts b/src/helpers/channels/edit_channel.ts index d6e06fda2..dfb064c7d 100644 --- a/src/helpers/channels/edit_channel.ts +++ b/src/helpers/channels/edit_channel.ts @@ -1,6 +1,7 @@ import { eventHandlers } from "../../bot.ts"; import { rest } from "../../rest/rest.ts"; import { ModifyChannel } from "../../types/channels/modify_channel.ts"; +import { Channel } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { calculateBits, @@ -58,7 +59,7 @@ export async function editChannel( }), }; - const result = await rest.runMethod( + return await rest.runMethod( "patch", endpoints.CHANNEL_BASE(channelId), { @@ -66,8 +67,6 @@ export async function editChannel( reason, }, ); - - return result; } interface EditChannelRequest { From 82b896d177af21cae61de5f63633ac16b518d930 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:32 +0200 Subject: [PATCH 38/89] Update follow_channel.ts --- src/helpers/channels/follow_channel.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/helpers/channels/follow_channel.ts b/src/helpers/channels/follow_channel.ts index b8c9e7e27..550bf9d0f 100644 --- a/src/helpers/channels/follow_channel.ts +++ b/src/helpers/channels/follow_channel.ts @@ -1,5 +1,5 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordFollowedChannel } from "../../types/channels/followed_channel.ts"; +import { FollowedChannel } from "../../types/channels/followed_channel.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; @@ -10,10 +10,13 @@ export async function followChannel( ) { await requireBotChannelPermissions(targetChannelId, ["MANAGE_WEBHOOKS"]); - const data = - (await rest.runMethod("post", endpoints.CHANNEL_FOLLOW(sourceChannelId), { + const data = await rest.runMethod( + "post", + endpoints.CHANNEL_FOLLOW(sourceChannelId), + { webhook_channel_id: targetChannelId, - })) as DiscordFollowedChannel; + }, + ); - return data.webhook_id; + return data.webhookId; } From f733a36051ecdcca8074d223d0c5a07fc2fbca3b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:33 +0200 Subject: [PATCH 39/89] Update get_channel.ts --- src/helpers/channels/get_channel.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/helpers/channels/get_channel.ts b/src/helpers/channels/get_channel.ts index e0023133a..9c27334aa 100644 --- a/src/helpers/channels/get_channel.ts +++ b/src/helpers/channels/get_channel.ts @@ -1,7 +1,7 @@ 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 { Channel } from "../../types/channels/channel.ts"; import { endpoints } from "../../util/constants.ts"; /** Fetches a single channel object from the api. @@ -9,14 +9,14 @@ import { endpoints } from "../../util/constants.ts"; * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.** */ export async function getChannel(channelId: string, addToCache = true) { - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.CHANNEL_BASE(channelId), - )) as DiscordChannel; + ); const discordenoChannel = await structures.createDiscordenoChannel( result, - result.guild_id, + result.guildId, ); if (addToCache) { await cacheHandlers.set( From ecc04182719033eebe8cad960165f5a12e540e84 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:35 +0200 Subject: [PATCH 40/89] Update get_channel_webhooks.ts --- src/helpers/channels/get_channel_webhooks.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/helpers/channels/get_channel_webhooks.ts b/src/helpers/channels/get_channel_webhooks.ts index bdea2baf5..69fcc7825 100644 --- a/src/helpers/channels/get_channel_webhooks.ts +++ b/src/helpers/channels/get_channel_webhooks.ts @@ -1,23 +1,19 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordWebhook, Webhook } from "../../types/webhooks/webhook.ts"; +import { Webhook } from "../../types/webhooks/webhook.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Gets the webhooks for this channel. Requires MANAGE_WEBHOOKS */ export async function getChannelWebhooks(channelId: string) { await requireBotChannelPermissions(channelId, ["MANAGE_WEBHOOKS"]); - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.CHANNEL_WEBHOOKS(channelId), - )) as DiscordWebhook[]; + ); return new Collection( - result.map((webhook) => [ - webhook.id, - snakeKeysToCamelCase(webhook), - ]), + result.map((webhook) => [webhook.id, webhook]), ); } From 7f847621769b3f35b1329dc36b2d1a8d1bda0b53 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:37 +0200 Subject: [PATCH 41/89] Update get_channels.ts --- src/helpers/channels/get_channels.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/channels/get_channels.ts b/src/helpers/channels/get_channels.ts index df7543b7e..c0271fb41 100644 --- a/src/helpers/channels/get_channels.ts +++ b/src/helpers/channels/get_channels.ts @@ -1,7 +1,7 @@ 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 { Channel } from "../../types/channels/channel.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; @@ -10,10 +10,10 @@ import { endpoints } from "../../util/constants.ts"; * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.** */ export async function getChannels(guildId: string, addToCache = true) { - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.GUILD_CHANNELS(guildId), - )) as DiscordChannel[]; + ); return new Collection( ( From 3812025506df85dfdd67c5e6522598adda17374b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:39 +0200 Subject: [PATCH 42/89] Update get_pins.ts --- src/helpers/channels/get_pins.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/channels/get_pins.ts b/src/helpers/channels/get_pins.ts index c09237216..18b878b03 100644 --- a/src/helpers/channels/get_pins.ts +++ b/src/helpers/channels/get_pins.ts @@ -1,14 +1,14 @@ import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordMessage } from "../../types/messages/message.ts"; +import { Message } from "../../types/messages/message.ts"; import { endpoints } from "../../util/constants.ts"; /** Get pinned messages in this channel. */ export async function getPins(channelId: string) { - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.CHANNEL_PINS(channelId), - )) as DiscordMessage[]; + ); return Promise.all( result.map((res) => structures.createDiscordenoMessage(res)), From 281416de3606a07db1b47fd15dc752e00cb1792a Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:41 +0200 Subject: [PATCH 43/89] Update start_typing.ts --- src/helpers/channels/start_typing.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/helpers/channels/start_typing.ts b/src/helpers/channels/start_typing.ts index c5cf0144b..013ad46e2 100644 --- a/src/helpers/channels/start_typing.ts +++ b/src/helpers/channels/start_typing.ts @@ -10,7 +10,7 @@ import { botHasChannelPermissions } from "../../util/permissions.ts"; * However, if a bot is responding to a command and expects the computation to take a few seconds, * this endpoint may be called to let the user know that the bot is processing their message. */ -export async function startTyping(channelId: string): Promise { +export async function startTyping(channelId: string) { const channel = await cacheHandlers.get("channels", channelId); // If the channel is cached, we can do extra checks/safety if (channel) { @@ -35,10 +35,8 @@ export async function startTyping(channelId: string): Promise { } } - const result = await rest.runMethod( + return await rest.runMethod( "post", endpoints.CHANNEL_TYPING(channelId), ); - - return result; } From e9a46f03ccc057b56993b1aabde38f9c737a8822 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:43 +0200 Subject: [PATCH 44/89] Update swap_channels.ts --- src/helpers/channels/swap_channels.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/helpers/channels/swap_channels.ts b/src/helpers/channels/swap_channels.ts index 9c6801c36..c55b903d3 100644 --- a/src/helpers/channels/swap_channels.ts +++ b/src/helpers/channels/swap_channels.ts @@ -6,16 +6,14 @@ import { endpoints } from "../../util/constants.ts"; export async function swapChannels( guildId: string, channelPositions: ModifyGuildChannelPositions[], -): Promise { +) { if (channelPositions.length < 2) { throw "You must provide at least two channels to be swapped."; } - const result = await rest.runMethod( + return await rest.runMethod( "patch", endpoints.GUILD_CHANNELS(guildId), channelPositions, ); - - return result; } From 36dc14523b34620b150acdd0f790db49d03b1b81 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:45 +0200 Subject: [PATCH 45/89] Update create_slash_command.ts --- src/helpers/commands/create_slash_command.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/helpers/commands/create_slash_command.ts b/src/helpers/commands/create_slash_command.ts index 8baa84490..2da719f56 100644 --- a/src/helpers/commands/create_slash_command.ts +++ b/src/helpers/commands/create_slash_command.ts @@ -1,6 +1,7 @@ import { applicationId } from "../../bot.ts"; import { rest } from "../../rest/rest.ts"; import { CreateGlobalApplicationCommand } from "../../types/interactions/create_global_application_command.ts"; +import { ApplicationCommand } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { camelKeysToSnakeCase, @@ -24,13 +25,11 @@ export async function createSlashCommand( ) { validateSlashCommands([options], true); - const result = await rest.runMethod( + return await rest.runMethod( "post", guildId ? endpoints.COMMANDS_GUILD(applicationId, guildId) : endpoints.COMMANDS(applicationId), camelKeysToSnakeCase(options), ); - - return result; } From f1b5d2770046abad01e8f40406945c9d41ac86bf Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:47 +0200 Subject: [PATCH 46/89] Update delete_slash_command.ts --- src/helpers/commands/delete_slash_command.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/helpers/commands/delete_slash_command.ts b/src/helpers/commands/delete_slash_command.ts index 0b9580e15..9f4c889d7 100644 --- a/src/helpers/commands/delete_slash_command.ts +++ b/src/helpers/commands/delete_slash_command.ts @@ -6,13 +6,11 @@ import { endpoints } from "../../util/constants.ts"; export async function deleteSlashCommand( id: string, guildId?: string, -): Promise { - const result = await rest.runMethod( +) { + return await rest.runMethod( "delete", guildId ? endpoints.COMMANDS_GUILD_ID(applicationId, guildId, id) : endpoints.COMMANDS_ID(applicationId, id), ); - - return result; } From 2d1177290ada6d57cf032b898a44f02db9710a62 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:49 +0200 Subject: [PATCH 47/89] Update delete_slash_response.ts --- src/helpers/commands/delete_slash_response.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/helpers/commands/delete_slash_response.ts b/src/helpers/commands/delete_slash_response.ts index 14523c3a5..c0972f1cf 100644 --- a/src/helpers/commands/delete_slash_response.ts +++ b/src/helpers/commands/delete_slash_response.ts @@ -6,8 +6,8 @@ import { endpoints } from "../../util/constants.ts"; export async function deleteSlashResponse( token: string, messageId?: string, -): Promise { - const result = await rest.runMethod( +) { + return await rest.runMethod( "delete", messageId ? endpoints.INTERACTION_ID_TOKEN_MESSAGE_ID( @@ -17,6 +17,4 @@ export async function deleteSlashResponse( ) : endpoints.INTERACTION_ORIGINAL_ID_TOKEN(applicationId, token), ); - - return result; } From 9831ccf76e259e79f52a8bd3e385cd6cb3cb65ce Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:51 +0200 Subject: [PATCH 48/89] Update edit_slash_response.ts --- src/helpers/commands/edit_slash_response.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/commands/edit_slash_response.ts b/src/helpers/commands/edit_slash_response.ts index 099b61b30..e046c8e9f 100644 --- a/src/helpers/commands/edit_slash_response.ts +++ b/src/helpers/commands/edit_slash_response.ts @@ -69,7 +69,7 @@ export async function editSlashResponse( ); // If the original message was edited, this will not return a message - if (!options.messageId) return result; + if (!options.messageId) return result as undefined; const message = await structures.createDiscordenoMessage( result as DiscordMessage, From f27d58681150cabcd9416186d5c2499c9b3ab427 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:52 +0200 Subject: [PATCH 49/89] Update get_slash_command.ts --- src/helpers/commands/get_slash_command.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/helpers/commands/get_slash_command.ts b/src/helpers/commands/get_slash_command.ts index 72c61b3f6..d207c577b 100644 --- a/src/helpers/commands/get_slash_command.ts +++ b/src/helpers/commands/get_slash_command.ts @@ -5,12 +5,10 @@ import { endpoints } from "../../util/constants.ts"; /** Fetchs the global command for the given Id. If a guildId is provided, the guild command will be fetched. */ export async function getSlashCommand(commandId: string, guildId?: string) { - const result = await rest.runMethod( + return await rest.runMethod( "get", guildId ? endpoints.COMMANDS_GUILD_ID(applicationId, guildId, commandId) : endpoints.COMMANDS_ID(applicationId, commandId), ); - - return result as ApplicationCommand; } From 653e608d0ef03ba26d688e84229d821eb6313c37 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:27:56 +0200 Subject: [PATCH 50/89] Update get_slash_commands.ts --- src/helpers/commands/get_slash_commands.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/commands/get_slash_commands.ts b/src/helpers/commands/get_slash_commands.ts index 3337baf49..4b4de42d1 100644 --- a/src/helpers/commands/get_slash_commands.ts +++ b/src/helpers/commands/get_slash_commands.ts @@ -6,12 +6,12 @@ import { endpoints } from "../../util/constants.ts"; /** Fetch all of the global commands for your application. */ export async function getSlashCommands(guildId?: string) { - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", guildId ? endpoints.COMMANDS_GUILD(applicationId, guildId) : endpoints.COMMANDS(applicationId), - )) as ApplicationCommand[]; + ); return new Collection(result.map((command) => [command.name, command])); } From 7ee20b0b3e33ca4ee9e9620f8c1632a668f9476b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:31:37 +0200 Subject: [PATCH 51/89] Update upsert_slash_command.ts --- src/helpers/commands/upsert_slash_command.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/helpers/commands/upsert_slash_command.ts b/src/helpers/commands/upsert_slash_command.ts index 66c064780..2fb71ae7c 100644 --- a/src/helpers/commands/upsert_slash_command.ts +++ b/src/helpers/commands/upsert_slash_command.ts @@ -1,6 +1,7 @@ import { applicationId } from "../../bot.ts"; import { rest } from "../../rest/rest.ts"; import { EditGlobalApplicationCommand } from "../../types/interactions/edit_global_application_command.ts"; +import { ApplicationCommand } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { validateSlashCommands } from "../../util/utils.ts"; @@ -14,13 +15,11 @@ export async function upsertSlashCommand( ) { validateSlashCommands([options]); - const result = await rest.runMethod( + return await rest.runMethod( "patch", guildId ? endpoints.COMMANDS_GUILD_ID(applicationId, guildId, commandId) : endpoints.COMMANDS_ID(applicationId, commandId), options, ); - - return result; } From 5451c1ad952da967c95050644066427bf6a743de Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:31:38 +0200 Subject: [PATCH 52/89] Update upsert_slash_commands.ts --- src/helpers/commands/upsert_slash_commands.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/helpers/commands/upsert_slash_commands.ts b/src/helpers/commands/upsert_slash_commands.ts index ce0bdeee2..bf2b78343 100644 --- a/src/helpers/commands/upsert_slash_commands.ts +++ b/src/helpers/commands/upsert_slash_commands.ts @@ -1,6 +1,7 @@ import { applicationId } from "../../bot.ts"; import { rest } from "../../rest/rest.ts"; import { EditGlobalApplicationCommand } from "../../types/interactions/edit_global_application_command.ts"; +import { ApplicationCommand } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { validateSlashCommands } from "../../util/utils.ts"; @@ -15,13 +16,11 @@ export async function upsertSlashCommands( ) { validateSlashCommands(options); - const result = await rest.runMethod( + return await rest.runMethod( "put", guildId ? endpoints.COMMANDS_GUILD(applicationId, guildId) : endpoints.COMMANDS(applicationId), options, ); - - return result; } From 7a774540eb57a57377a9ce2a6078702a01849e7a Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:31:40 +0200 Subject: [PATCH 53/89] Update add_discovery_subcategory.ts --- src/helpers/discovery/add_discovery_subcategory.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/helpers/discovery/add_discovery_subcategory.ts b/src/helpers/discovery/add_discovery_subcategory.ts index f57296503..93a124c91 100644 --- a/src/helpers/discovery/add_discovery_subcategory.ts +++ b/src/helpers/discovery/add_discovery_subcategory.ts @@ -1,11 +1,9 @@ import { rest } from "../../rest/rest.ts"; import { AddGuildDiscoverySubcategory, - DiscordAddGuildDiscoverySubcategory, } from "../../types/discovery/add_guild_discovery_subcategory.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Add a discovery subcategory to the guild. Requires the `MANAGE_GUILD` permission. */ export async function addDiscoverySubcategory( @@ -14,10 +12,8 @@ export async function addDiscoverySubcategory( ) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = await rest.runMethod( + return await rest.runMethod( "post", endpoints.DISCOVERY_SUBCATEGORY(guildId, categoryId), ); - - return snakeKeysToCamelCase(result); } From a35415784247a6c343543a7454349cc9c19e6318 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:31:43 +0200 Subject: [PATCH 54/89] Update edit_discovery.ts --- src/helpers/discovery/edit_discovery.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/helpers/discovery/edit_discovery.ts b/src/helpers/discovery/edit_discovery.ts index 8c8c16d1b..9976e04cd 100644 --- a/src/helpers/discovery/edit_discovery.ts +++ b/src/helpers/discovery/edit_discovery.ts @@ -1,15 +1,9 @@ import { rest } from "../../rest/rest.ts"; -import { - DiscordDiscoveryMetadata, - DiscoveryMetadata, -} from "../../types/discovery/discovery_metadata.ts"; +import { DiscoveryMetadata } from "../../types/discovery/discovery_metadata.ts"; import { ModifyGuildDiscoveryMetadata } from "../../types/discovery/modify_guild_discovery_metadata.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { - camelKeysToSnakeCase, - snakeKeysToCamelCase, -} from "../../util/utils.ts"; +import { camelKeysToSnakeCase } from "../../util/utils.ts"; /** Modify the discovery metadata for the guild. Requires the MANAGE_GUILD permission. Returns the updated discovery metadata object on success. */ export async function editDiscovery( @@ -18,11 +12,9 @@ export async function editDiscovery( ) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = await rest.runMethod( + return await rest.runMethod( "patch", endpoints.DISCOVERY_MODIFY(guildId), camelKeysToSnakeCase(data), ); - - return snakeKeysToCamelCase(result); } From cc2af6f90057a33ea1e59f2ff15e92079beae033 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:31:47 +0200 Subject: [PATCH 55/89] Update get_discovery_categories.ts --- src/helpers/discovery/get_discovery_categories.ts | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/helpers/discovery/get_discovery_categories.ts b/src/helpers/discovery/get_discovery_categories.ts index 4c390a616..8ec9858f5 100644 --- a/src/helpers/discovery/get_discovery_categories.ts +++ b/src/helpers/discovery/get_discovery_categories.ts @@ -1,25 +1,18 @@ import { rest } from "../../rest/rest.ts"; -import { - DiscordDiscoveryCategory, - DiscoveryCategory, -} from "../../types/discovery/discovery_category.ts"; +import { DiscoveryCategory } from "../../types/discovery/discovery_category.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns an array of discovery category objects that can be used when editing guilds */ export async function getDiscoveryCategories() { - const result = await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.DISCOVERY_CATEGORIES, ); return new Collection( result.map( - (category) => [ - category.id, - snakeKeysToCamelCase(category), - ], + (category) => [category.id, category], ), ); } From 160a9573239ae877cccf0912c0220fe9797924eb Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:31:48 +0200 Subject: [PATCH 56/89] Update create_emoji.ts --- src/helpers/emojis/create_emoji.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/helpers/emojis/create_emoji.ts b/src/helpers/emojis/create_emoji.ts index 5e4554ab8..2b55f7ec4 100644 --- a/src/helpers/emojis/create_emoji.ts +++ b/src/helpers/emojis/create_emoji.ts @@ -3,7 +3,7 @@ import { CreateGuildEmoji } from "../../types/emojis/create_guild_emoji.ts"; import { Emoji } from "../../types/emojis/emoji.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase, urlToBase64 } from "../../util/utils.ts"; +import { urlToBase64 } from "../../util/utils.ts"; /** Create an emoji in the server. Emojis and animated emojis have a maximum file size of 256kb. Attempting to upload an emoji larger than this limit will fail and return 400 Bad Request and an error message, but not a JSON status code. If a URL is provided to the image parameter, Discordeno will automatically convert it to a base64 string internally. */ export async function createEmoji( @@ -18,11 +18,9 @@ export async function createEmoji( image = await urlToBase64(image); } - const result = await rest.runMethod("post", endpoints.GUILD_EMOJIS(guildId), { + return await rest.runMethod("post", endpoints.GUILD_EMOJIS(guildId), { ...options, name, image, }); - - return snakeKeysToCamelCase(result); } From 8ab3b7906112d51f7f4ae75b57a06793cc7121fa Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:19 +0200 Subject: [PATCH 57/89] Update send_interaction_response.ts --- src/helpers/commands/send_interaction_response.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/helpers/commands/send_interaction_response.ts b/src/helpers/commands/send_interaction_response.ts index 775036da8..3bb2132cb 100644 --- a/src/helpers/commands/send_interaction_response.ts +++ b/src/helpers/commands/send_interaction_response.ts @@ -17,9 +17,13 @@ export async function sendInteractionResponse( ) { // If its already been executed, we need to send a followup response if (cache.executedSlashCommands.has(token)) { - return rest.runMethod("post", endpoints.WEBHOOK(applicationId, token), { - ...options, - }); + return await rest.runMethod( + "post", + endpoints.WEBHOOK(applicationId, token), + { + ...options, + }, + ); } // Expire in 15 minutes @@ -45,11 +49,9 @@ export async function sendInteractionResponse( options.data = { ...options.data, allowedMentions: { parse: [] } }; } - const result = await rest.runMethod( + return await rest.runMethod( "post", endpoints.INTERACTION_ID_TOKEN(id, token), options, ); - - return result; } From 87c097fc2a3ca1bc6d469e16ebfe91d024d9b25b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:22 +0200 Subject: [PATCH 58/89] Update delete_emoji.ts --- src/helpers/emojis/delete_emoji.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/helpers/emojis/delete_emoji.ts b/src/helpers/emojis/delete_emoji.ts index 97783b41c..40b43eaa3 100644 --- a/src/helpers/emojis/delete_emoji.ts +++ b/src/helpers/emojis/delete_emoji.ts @@ -7,14 +7,12 @@ export async function deleteEmoji( guildId: string, id: string, reason?: string, -): Promise { +) { await requireBotGuildPermissions(guildId, ["MANAGE_EMOJIS"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.GUILD_EMOJI(guildId, id), { reason }, ); - - return result; } From 9b0a1d06ce105627a2396fd836f4040cc6ce3372 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:25 +0200 Subject: [PATCH 59/89] Update edit_emoji.ts --- src/helpers/emojis/edit_emoji.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/helpers/emojis/edit_emoji.ts b/src/helpers/emojis/edit_emoji.ts index 803dc8ea5..28ee8e15a 100644 --- a/src/helpers/emojis/edit_emoji.ts +++ b/src/helpers/emojis/edit_emoji.ts @@ -1,5 +1,6 @@ import { rest } from "../../rest/rest.ts"; import { ModifyGuildEmoji } from "../../types/emojis/modify_guild_emoji.ts"; +import { Emoji } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; @@ -11,7 +12,7 @@ export async function editEmoji( ) { await requireBotGuildPermissions(guildId, ["MANAGE_EMOJIS"]); - const result = await rest.runMethod( + return await rest.runMethod( "patch", endpoints.GUILD_EMOJI(guildId, id), { @@ -19,6 +20,4 @@ export async function editEmoji( roles: options.roles, }, ); - - return result; } From cab507c71baeff7c60d23967825234b51c652ffb Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:27 +0200 Subject: [PATCH 60/89] Update get_emoji.ts --- src/helpers/emojis/get_emoji.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/emojis/get_emoji.ts b/src/helpers/emojis/get_emoji.ts index c99baa1d0..09f2a3cdd 100644 --- a/src/helpers/emojis/get_emoji.ts +++ b/src/helpers/emojis/get_emoji.ts @@ -14,16 +14,16 @@ export async function getEmoji( emojiId: string, addToCache = true, ) { - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.GUILD_EMOJI(guildId, emojiId), - )) as Emoji; + ); if (addToCache) { const guild = await cacheHandlers.get("guilds", guildId); if (!guild) throw new Error(Errors.GUILD_NOT_FOUND); guild.emojis.set(emojiId, result); - cacheHandlers.set( + await cacheHandlers.set( "guilds", guildId, guild, From cd14328c19d74b9701415fc1ca57bf1b89d16efc Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:29 +0200 Subject: [PATCH 61/89] Update get_emojis.ts --- src/helpers/emojis/get_emojis.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/helpers/emojis/get_emojis.ts b/src/helpers/emojis/get_emojis.ts index 140244d0c..da1d8cfa1 100644 --- a/src/helpers/emojis/get_emojis.ts +++ b/src/helpers/emojis/get_emojis.ts @@ -12,8 +12,10 @@ import { endpoints } from "../../util/constants.ts"; * ⚠️ **If you need this, you are probably doing something wrong. Always use cache.guilds.get()?.emojis */ export async function getEmojis(guildId: string, addToCache = true) { - const result = - (await rest.runMethod("get", endpoints.GUILD_EMOJIS(guildId))) as Emoji[]; + const result = await rest.runMethod( + "get", + endpoints.GUILD_EMOJIS(guildId), + ); if (addToCache) { const guild = await cacheHandlers.get("guilds", guildId); @@ -27,7 +29,7 @@ export async function getEmojis(guildId: string, addToCache = true) { guild.emojis.set(emoji.id!, emoji); }); - cacheHandlers.set("guilds", guildId, guild); + await cacheHandlers.set("guilds", guildId, guild); } return new Collection(result.map((e) => [e.id!, e])); From ad22bd32701d499da9d01fceb3ea8a214667f563 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:38 +0200 Subject: [PATCH 62/89] Update create_guild.ts --- src/helpers/guilds/create_guild.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/guilds/create_guild.ts b/src/helpers/guilds/create_guild.ts index f4a5678cd..40c28f3fa 100644 --- a/src/helpers/guilds/create_guild.ts +++ b/src/helpers/guilds/create_guild.ts @@ -3,17 +3,17 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; import { CreateGuild } from "../../types/guilds/create_guild.ts"; -import { DiscordGuild } from "../../types/guilds/guild.ts"; +import { Guild } from "../../types/guilds/guild.ts"; import { endpoints } from "../../util/constants.ts"; import { getMember } from "../members/get_member.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 createGuild(options: CreateGuild) { - const result = (await rest.runMethod( + const result = await rest.runMethod( "post", endpoints.GUILDS, options, - )) as DiscordGuild; + ); const guild = await structures.createDiscordenoGuild(result, 0); // MANUALLY CACHE THE GUILD From c0251e4b41e83702c28954f5cfe3445040f9b42e Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:40 +0200 Subject: [PATCH 63/89] Update delete_server.ts --- src/helpers/guilds/delete_server.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/helpers/guilds/delete_server.ts b/src/helpers/guilds/delete_server.ts index 43a1085eb..8dcf42eaf 100644 --- a/src/helpers/guilds/delete_server.ts +++ b/src/helpers/guilds/delete_server.ts @@ -3,8 +3,9 @@ import { endpoints } from "../../util/constants.ts"; /** Delete a guild permanently. User must be owner. Returns 204 No Content on success. Fires a Guild Delete Gateway event. */ -export async function deleteServer(guildId: string): Promise { - const result = await rest.runMethod("delete", endpoints.GUILDS_BASE(guildId)); - - return result; +export async function deleteServer(guildId: string) { + return await rest.runMethod( + "delete", + endpoints.GUILDS_BASE(guildId), + ); } From 033512951e5d65ab851795f3580b5addce8403d5 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:42 +0200 Subject: [PATCH 64/89] Update edit_guild.ts --- src/helpers/guilds/edit_guild.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/helpers/guilds/edit_guild.ts b/src/helpers/guilds/edit_guild.ts index 77e9367ce..20df19c47 100644 --- a/src/helpers/guilds/edit_guild.ts +++ b/src/helpers/guilds/edit_guild.ts @@ -1,6 +1,6 @@ import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordGuild } from "../../types/guilds/guild.ts"; +import { Guild } from "../../types/guilds/guild.ts"; import { ModifyGuild } from "../../types/guilds/modify_guild.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; @@ -22,11 +22,12 @@ export async function editGuild(guildId: string, options: ModifyGuild) { options.splash = await urlToBase64(options.splash); } - const result = await rest.runMethod( + const result = await rest.runMethod( "patch", endpoints.GUILDS_BASE(guildId), options, - ) as DiscordGuild; + ); + // TODO: use ws.botGatewayData to calculate the shard ID return structures.createDiscordenoGuild(result, -1); } From a1d0986edf1265b52b46ace59b5ee662dc8c1783 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:37:45 +0200 Subject: [PATCH 65/89] Update edit_welcome_screen.ts --- src/helpers/guilds/edit_welcome_screen.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/helpers/guilds/edit_welcome_screen.ts b/src/helpers/guilds/edit_welcome_screen.ts index 5ad2a95b6..ae2dae039 100644 --- a/src/helpers/guilds/edit_welcome_screen.ts +++ b/src/helpers/guilds/edit_welcome_screen.ts @@ -2,20 +2,15 @@ import { rest } from "../../rest/rest.ts"; import { ModifyGuildWelcomeScreen } from "../../types/guilds/modify_guild_welcome_screen.ts"; import { WelcomeScreen } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; -import { - camelKeysToSnakeCase, - snakeKeysToCamelCase, -} from "../../util/utils.ts"; +import { camelKeysToSnakeCase } from "../../util/utils.ts"; export async function editWelcomeScreen( guildId: string, options: ModifyGuildWelcomeScreen, ) { - const result = await rest.runMethod( + return await rest.runMethod( "patch", endpoints.GUILD_WELCOME_SCREEN(guildId), camelKeysToSnakeCase(options), ); - - return snakeKeysToCamelCase(result); } From 933a5c70ebb2736a2b2872fa34e9ab9611a37b91 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:38:06 +0200 Subject: [PATCH 66/89] guilds --- src/helpers/guilds/edit_widget.ts | 5 +-- src/helpers/guilds/get_audit_logs.ts | 9 ++--- .../guilds/get_available_voice_regions.ts | 4 +-- src/helpers/guilds/get_ban.ts | 5 +-- src/helpers/guilds/get_bans.ts | 9 +++-- src/helpers/guilds/get_guild.ts | 33 +++++++++++++++---- src/helpers/guilds/get_guild_preview.ts | 8 ++--- src/helpers/guilds/get_vainty_url.ts | 13 +++----- src/helpers/guilds/get_welcome_screen.ts | 5 +-- src/helpers/guilds/get_widget.ts | 3 +- src/helpers/guilds/get_widget_settings.ts | 7 ++-- src/helpers/guilds/leave_guild.ts | 9 ++--- 12 files changed, 57 insertions(+), 53 deletions(-) diff --git a/src/helpers/guilds/edit_widget.ts b/src/helpers/guilds/edit_widget.ts index 8d0e0cf93..9259cf32d 100644 --- a/src/helpers/guilds/edit_widget.ts +++ b/src/helpers/guilds/edit_widget.ts @@ -2,7 +2,6 @@ import { rest } from "../../rest/rest.ts"; import { GuildWidget } from "../../types/guilds/guild_widget.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Modify a guild widget object for the guild. Requires the MANAGE_GUILD permission. */ export async function editWidget( @@ -12,7 +11,7 @@ export async function editWidget( ) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = await rest.runMethod( + return await rest.runMethod( "patch", endpoints.GUILD_WIDGET(guildId), { @@ -20,6 +19,4 @@ export async function editWidget( channel_id: channelId, }, ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/guilds/get_audit_logs.ts b/src/helpers/guilds/get_audit_logs.ts index 795e4bd7c..95b5b3aae 100644 --- a/src/helpers/guilds/get_audit_logs.ts +++ b/src/helpers/guilds/get_audit_logs.ts @@ -3,10 +3,7 @@ import { AuditLog } from "../../types/audit_log/audit_log.ts"; import { GetGuildAuditLog } from "../../types/audit_log/get_guild_audit_log.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { - camelKeysToSnakeCase, - snakeKeysToCamelCase, -} from "../../util/utils.ts"; +import { camelKeysToSnakeCase } from "../../util/utils.ts"; /** Returns the audit logs for the guild. Requires VIEW AUDIT LOGS permission */ export async function getAuditLogs( @@ -15,7 +12,7 @@ export async function getAuditLogs( ) { await requireBotGuildPermissions(guildId, ["VIEW_AUDIT_LOG"]); - const result = await rest.runMethod( + return await rest.runMethod( "get", endpoints.GUILD_AUDIT_LOGS(guildId), camelKeysToSnakeCase({ @@ -25,6 +22,4 @@ export async function getAuditLogs( : 50, }), ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/guilds/get_available_voice_regions.ts b/src/helpers/guilds/get_available_voice_regions.ts index 944973477..5570e4916 100644 --- a/src/helpers/guilds/get_available_voice_regions.ts +++ b/src/helpers/guilds/get_available_voice_regions.ts @@ -4,7 +4,5 @@ import { endpoints } from "../../util/constants.ts"; /** Returns an array of voice regions that can be used when creating servers. */ export async function getAvailableVoiceRegions() { - const result = await rest.runMethod("get", endpoints.VOICE_REGIONS); - - return result as VoiceRegion; + return await rest.runMethod("get", endpoints.VOICE_REGIONS); } diff --git a/src/helpers/guilds/get_ban.ts b/src/helpers/guilds/get_ban.ts index 7abe6d3b0..3fddcd1a8 100644 --- a/src/helpers/guilds/get_ban.ts +++ b/src/helpers/guilds/get_ban.ts @@ -2,16 +2,13 @@ import { rest } from "../../rest/rest.ts"; import { Ban } from "../../types/guilds/ban.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns a ban object for the given user or a 404 not found if the ban cannot be found. Requires the BAN_MEMBERS permission. */ export async function getBan(guildId: string, memberId: string) { await requireBotGuildPermissions(guildId, ["BAN_MEMBERS"]); - const result = await rest.runMethod( + return await rest.runMethod( "get", endpoints.GUILD_BAN(guildId, memberId), ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/guilds/get_bans.ts b/src/helpers/guilds/get_bans.ts index 1fdef4fcd..c9497f8b4 100644 --- a/src/helpers/guilds/get_bans.ts +++ b/src/helpers/guilds/get_bans.ts @@ -1,20 +1,19 @@ import { rest } from "../../rest/rest.ts"; -import { Ban, DiscordBan } from "../../types/guilds/ban.ts"; +import { Ban } from "../../types/guilds/ban.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns a list of ban objects for the users banned from this guild. Requires the BAN_MEMBERS permission. */ export async function getBans(guildId: string) { await requireBotGuildPermissions(guildId, ["BAN_MEMBERS"]); - const results = (await rest.runMethod( + const results = await rest.runMethod( "get", endpoints.GUILD_BANS(guildId), - )) as DiscordBan[]; + ); return new Collection( - results.map((res) => [res.user.id, snakeKeysToCamelCase(res)]), + results.map((res) => [res.user.id, res]), ); } diff --git a/src/helpers/guilds/get_guild.ts b/src/helpers/guilds/get_guild.ts index 5652b979b..82b6e5c54 100644 --- a/src/helpers/guilds/get_guild.ts +++ b/src/helpers/guilds/get_guild.ts @@ -1,7 +1,9 @@ +import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; +import { structures } from "../../structures/mod.ts"; import { Guild } from "../../types/guilds/guild.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; +import { ws } from "../../ws/ws.ts"; /** * ⚠️ **If you need this, you are probably doing something wrong. Always use cache.guilds.get() @@ -10,10 +12,29 @@ import { snakeKeysToCamelCase } from "../../util/utils.ts"; * This function fetches a guild's data. This is not the same data as a GUILD_CREATE. * So it does not cache the guild, you must do it manually. * */ -export async function getGuild(guildId: string, counts = true) { - const result = await rest.runMethod("get", endpoints.GUILDS_BASE(guildId), { - with_counts: counts, - }); +export async function getGuild( + guildId: string, + options: { counts?: boolean; addToCache?: boolean } = { + counts: true, + addToCache: true, + }, +) { + const result = await rest.runMethod( + "get", + endpoints.GUILDS_BASE(guildId), + { + with_counts: options.counts, + }, + ); - return snakeKeysToCamelCase(result); + const structure = await structures.createDiscordenoGuild( + result, + (BigInt(guildId) >> 22n) % BigInt(ws.botGatewayData.shards), + ); + + if (options.addToCache) { + await cacheHandlers.set("guilds", guildId, structure); + } + + return structure; } diff --git a/src/helpers/guilds/get_guild_preview.ts b/src/helpers/guilds/get_guild_preview.ts index 274f20a28..40873cf0f 100644 --- a/src/helpers/guilds/get_guild_preview.ts +++ b/src/helpers/guilds/get_guild_preview.ts @@ -1,11 +1,11 @@ import { rest } from "../../rest/rest.ts"; import { GuildPreview } from "../../types/guilds/guild_preview.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns the guild preview object for the given id. If the bot is not in the guild, then the guild must be Discoverable. */ export async function getGuildPreview(guildId: string) { - const result = await rest.runMethod("get", endpoints.GUILD_PREVIEW(guildId)); - - return snakeKeysToCamelCase(result); + return await rest.runMethod( + "get", + endpoints.GUILD_PREVIEW(guildId), + ); } diff --git a/src/helpers/guilds/get_vainty_url.ts b/src/helpers/guilds/get_vainty_url.ts index 999c34884..0dee86af7 100644 --- a/src/helpers/guilds/get_vainty_url.ts +++ b/src/helpers/guilds/get_vainty_url.ts @@ -1,18 +1,15 @@ import { rest } from "../../rest/rest.ts"; import { InviteMetadata } from "../../types/invites/invite_metadata.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns the code and uses of the vanity url for this server if it is enabled else `code` will be null. Requires the `MANAGE_GUILD` permission. */ export async function getVanityURL(guildId: string) { - const result = await rest.runMethod( - "get", - endpoints.GUILD_VANITY_URL(guildId), - ); - - return snakeKeysToCamelCase< + return await rest.runMethod< (Partial & Pick) | { code: null; } - >(result); + >( + "get", + endpoints.GUILD_VANITY_URL(guildId), + ); } diff --git a/src/helpers/guilds/get_welcome_screen.ts b/src/helpers/guilds/get_welcome_screen.ts index 4163c4f71..36950e3eb 100644 --- a/src/helpers/guilds/get_welcome_screen.ts +++ b/src/helpers/guilds/get_welcome_screen.ts @@ -1,13 +1,10 @@ import { rest } from "../../rest/rest.ts"; import { WelcomeScreen } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; export async function getWelcomeScreen(guildId: string) { - const result = await rest.runMethod( + return await rest.runMethod( "get", endpoints.GUILD_WELCOME_SCREEN(guildId), ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/guilds/get_widget.ts b/src/helpers/guilds/get_widget.ts index f44197d37..c685b8088 100644 --- a/src/helpers/guilds/get_widget.ts +++ b/src/helpers/guilds/get_widget.ts @@ -11,5 +11,6 @@ export async function getWidget(guildId: string, options?: { force: boolean }) { if (!guild?.widgetEnabled) throw new Error(Errors.GUILD_WIDGET_NOT_ENABLED); } - return rest.runMethod("get", `${endpoints.GUILD_WIDGET(guildId)}.json`); + // TODO: add return type + return await rest.runMethod("get", `${endpoints.GUILD_WIDGET(guildId)}.json`); } diff --git a/src/helpers/guilds/get_widget_settings.ts b/src/helpers/guilds/get_widget_settings.ts index 8d28e8c9c..960fb83ec 100644 --- a/src/helpers/guilds/get_widget_settings.ts +++ b/src/helpers/guilds/get_widget_settings.ts @@ -7,7 +7,8 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts"; export async function getWidgetSettings(guildId: string) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = await rest.runMethod("get", endpoints.GUILD_WIDGET(guildId)); - - return result as GuildWidget; + return await rest.runMethod( + "get", + endpoints.GUILD_WIDGET(guildId), + ); } diff --git a/src/helpers/guilds/leave_guild.ts b/src/helpers/guilds/leave_guild.ts index 805b56885..9552ffe1a 100644 --- a/src/helpers/guilds/leave_guild.ts +++ b/src/helpers/guilds/leave_guild.ts @@ -2,8 +2,9 @@ import { rest } from "../../rest/rest.ts"; import { endpoints } from "../../util/constants.ts"; /** Leave a guild */ -export async function leaveGuild(guildId: string): Promise { - const result = await rest.runMethod("delete", endpoints.GUILD_LEAVE(guildId)); - - return result; +export async function leaveGuild(guildId: string) { + return await rest.runMethod( + "delete", + endpoints.GUILD_LEAVE(guildId), + ); } From 0c02b94143b3c5873ede08f04d97cb0eee51e8e6 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:38:16 +0200 Subject: [PATCH 67/89] integrations --- src/helpers/guilds/get_voice_regions.ts | 14 ++++---------- src/helpers/integrations/delete_integration.ts | 4 +--- src/helpers/integrations/get_integrations.ts | 5 ++--- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/helpers/guilds/get_voice_regions.ts b/src/helpers/guilds/get_voice_regions.ts index 166c7fa2a..6ed926e52 100644 --- a/src/helpers/guilds/get_voice_regions.ts +++ b/src/helpers/guilds/get_voice_regions.ts @@ -1,22 +1,16 @@ import { rest } from "../../rest/rest.ts"; -import { - DiscordVoiceRegion, - VoiceRegion, -} from "../../types/voice/voice_region.ts"; +import { VoiceRegion } from "../../types/voice/voice_region.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns a list of voice region objects for the guild. Unlike the similar /voice route, this returns VIP servers when the guild is VIP-enabled. */ export async function getVoiceRegions(guildId: string) { - const result = await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.GUILD_REGIONS(guildId), - ) as DiscordVoiceRegion[]; - - const convertedRegions = snakeKeysToCamelCase(result); + ); return new Collection( - convertedRegions.map((region) => [region.id, region]), + result.map((region) => [region.id, region]), ); } diff --git a/src/helpers/integrations/delete_integration.ts b/src/helpers/integrations/delete_integration.ts index 375672b9e..cd92ab5e1 100644 --- a/src/helpers/integrations/delete_integration.ts +++ b/src/helpers/integrations/delete_integration.ts @@ -6,10 +6,8 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts"; export async function deleteIntegration(guildId: string, id: string) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.GUILD_INTEGRATION(guildId, id), ); - - return result; } diff --git a/src/helpers/integrations/get_integrations.ts b/src/helpers/integrations/get_integrations.ts index 888dd8f96..f8c54d80d 100644 --- a/src/helpers/integrations/get_integrations.ts +++ b/src/helpers/integrations/get_integrations.ts @@ -1,4 +1,5 @@ import { rest } from "../../rest/rest.ts"; +import { Integration } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; @@ -6,10 +7,8 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts"; export async function getIntegrations(guildId: string) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = await rest.runMethod( + return await rest.runMethod( "get", endpoints.GUILD_INTEGRATIONS(guildId), ); - - return result; } From 0feb6822d041ee51d293a503b59f185fdfa7c17f Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:38:24 +0200 Subject: [PATCH 68/89] invites --- src/helpers/invites/create_invite.ts | 5 ++--- src/helpers/invites/delete_invite.ts | 7 ++----- src/helpers/invites/get_channel_invites.ts | 9 ++++----- src/helpers/invites/get_invite.ts | 7 ++----- src/helpers/invites/get_invites.ts | 9 ++++----- 5 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/helpers/invites/create_invite.ts b/src/helpers/invites/create_invite.ts index 09e13633d..0c7af679f 100644 --- a/src/helpers/invites/create_invite.ts +++ b/src/helpers/invites/create_invite.ts @@ -1,5 +1,6 @@ import { rest } from "../../rest/rest.ts"; import { CreateChannelInvite } from "../../types/invites/create_channel_invite.ts"; +import { Invite } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; @@ -12,11 +13,9 @@ export async function createInvite( // TODO: add proper options validation - const result = await rest.runMethod( + return await rest.runMethod( "post", endpoints.CHANNEL_INVITES(channelId), options, ); - - return result; } diff --git a/src/helpers/invites/delete_invite.ts b/src/helpers/invites/delete_invite.ts index a0e9cead8..0891c89ed 100644 --- a/src/helpers/invites/delete_invite.ts +++ b/src/helpers/invites/delete_invite.ts @@ -1,13 +1,12 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; -import { DiscordInvite, Invite } from "../../types/invites/invite.ts"; +import { Invite } from "../../types/invites/invite.ts"; import { Errors } from "../../types/misc/errors.ts"; import { endpoints } from "../../util/constants.ts"; import { botHasChannelPermissions, requireBotGuildPermissions, } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Deletes an invite for the given code. Requires `MANAGE_CHANNELS` or `MANAGE_GUILD` permission */ export async function deleteInvite(channelId: string, inviteCode: string) { @@ -23,10 +22,8 @@ export async function deleteInvite(channelId: string, inviteCode: string) { await requireBotGuildPermissions(channel!.guildId, ["MANAGE_GUILD"]); } - const result: DiscordInvite = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.INVITE(inviteCode), ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/invites/get_channel_invites.ts b/src/helpers/invites/get_channel_invites.ts index f1a489693..4c9ce95c6 100644 --- a/src/helpers/invites/get_channel_invites.ts +++ b/src/helpers/invites/get_channel_invites.ts @@ -1,20 +1,19 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordInvite, Invite } from "../../types/invites/invite.ts"; +import { Invite } from "../../types/invites/invite.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Gets the invites for this channel. Requires MANAGE_CHANNEL */ export async function getChannelInvites(channelId: string) { await requireBotChannelPermissions(channelId, ["MANAGE_CHANNELS"]); - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.CHANNEL_INVITES(channelId), - )) as DiscordInvite[]; + ); return new Collection( - result.map((invite) => [invite.code, snakeKeysToCamelCase(invite)]), + result.map((invite) => [invite.code, invite]), ); } diff --git a/src/helpers/invites/get_invite.ts b/src/helpers/invites/get_invite.ts index 43f2cb35e..de91249fe 100644 --- a/src/helpers/invites/get_invite.ts +++ b/src/helpers/invites/get_invite.ts @@ -1,14 +1,11 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordInvite, Invite } from "../../types/invites/invite.ts"; +import { Invite } from "../../types/invites/invite.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns an invite for the given code or throws an error if the invite doesn't exists. */ export async function getInvite(inviteCode: string) { - const result: DiscordInvite = await rest.runMethod( + return await rest.runMethod( "get", endpoints.INVITE(inviteCode), ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/invites/get_invites.ts b/src/helpers/invites/get_invites.ts index 778a243d6..c4a72e7d6 100644 --- a/src/helpers/invites/get_invites.ts +++ b/src/helpers/invites/get_invites.ts @@ -1,20 +1,19 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordInvite, Invite } from "../../types/invites/invite.ts"; +import { Invite } from "../../types/invites/invite.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Get all the invites for this guild. Requires MANAGE_GUILD permission */ export async function getInvites(guildId: string) { await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.GUILD_INVITES(guildId), - )) as DiscordInvite[]; + ); return new Collection( - result.map((invite) => [invite.code, snakeKeysToCamelCase(invite)]), + result.map((invite) => [invite.code, invite]), ); } From 03db98cd48cc63dfe9e0fb53dc7c157b3742129b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:38:38 +0200 Subject: [PATCH 69/89] members --- src/helpers/members/ban_member.ts | 6 ++---- src/helpers/members/edit_bot_nickname.ts | 10 +++++++--- src/helpers/members/edit_bot_profile.ts | 6 +++--- src/helpers/members/edit_member.ts | 14 ++++++-------- src/helpers/members/get_member.ts | 4 ++-- src/helpers/members/get_members.ts | 11 ++++------- src/helpers/members/kick_member.ts | 4 +--- src/helpers/members/prune_members.ts | 4 ++-- src/helpers/members/search_members.ts | 4 ++-- src/helpers/members/send_direct_message.ts | 16 ++++++++++------ src/helpers/members/unban_member.ts | 4 +--- 11 files changed, 40 insertions(+), 43 deletions(-) diff --git a/src/helpers/members/ban_member.ts b/src/helpers/members/ban_member.ts index cb01fa8c9..c1257cf08 100644 --- a/src/helpers/members/ban_member.ts +++ b/src/helpers/members/ban_member.ts @@ -1,5 +1,5 @@ -import { CreateGuildBan } from "../../types/guilds/create_guild_ban.ts"; import { rest } from "../../rest/rest.ts"; +import { CreateGuildBan } from "../../types/guilds/create_guild_ban.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; import { camelKeysToSnakeCase } from "../../util/utils.ts"; @@ -12,13 +12,11 @@ export async function ban( ) { await requireBotGuildPermissions(guildId, ["BAN_MEMBERS"]); - const result = await rest.runMethod( + return await rest.runMethod( "put", endpoints.GUILD_BAN(guildId, id), camelKeysToSnakeCase(options), ); - - return result; } // aliases diff --git a/src/helpers/members/edit_bot_nickname.ts b/src/helpers/members/edit_bot_nickname.ts index 5b182cfcd..f9b41bb3c 100644 --- a/src/helpers/members/edit_bot_nickname.ts +++ b/src/helpers/members/edit_bot_nickname.ts @@ -9,9 +9,13 @@ export async function editBotNickname( ) { await requireBotGuildPermissions(guildId, ["CHANGE_NICKNAME"]); - const response = await rest.runMethod("patch", endpoints.USER_NICK(guildId), { - nick: nickname, - }) as { nick: string }; + const response = await rest.runMethod<{ nick: string }>( + "patch", + endpoints.USER_NICK(guildId), + { + nick: nickname, + }, + ); return response.nick; } diff --git a/src/helpers/members/edit_bot_profile.ts b/src/helpers/members/edit_bot_profile.ts index 062d0433f..2e4fd6c7c 100644 --- a/src/helpers/members/edit_bot_profile.ts +++ b/src/helpers/members/edit_bot_profile.ts @@ -1,5 +1,6 @@ import { rest } from "../../rest/rest.ts"; import { Errors } from "../../types/misc/errors.ts"; +import { User } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { urlToBase64 } from "../../util/utils.ts"; @@ -26,10 +27,9 @@ export async function editBotProfile(username?: string, botAvatarURL?: string) { } const avatar = botAvatarURL ? await urlToBase64(botAvatarURL) : undefined; - const result = await rest.runMethod("patch", endpoints.USER_BOT, { + + return await rest.runMethod("patch", endpoints.USER_BOT, { username: username?.trim(), avatar, }); - - return result; } diff --git a/src/helpers/members/edit_member.ts b/src/helpers/members/edit_member.ts index 562bc47ed..915e17cb3 100644 --- a/src/helpers/members/edit_member.ts +++ b/src/helpers/members/edit_member.ts @@ -1,7 +1,7 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordGuildMember } from "../../types/guilds/guild_member.ts"; +import { GuildMember } from "../../types/guilds/guild_member.ts"; import { Errors } from "../../types/misc/errors.ts"; import { ModifyGuildMember } from "../../types/mod.ts"; import { PermissionStrings } from "../../types/permissions/permission_strings.ts"; @@ -10,10 +10,7 @@ import { requireBotChannelPermissions, requireBotGuildPermissions, } from "../../util/permissions.ts"; -import { - camelKeysToSnakeCase, - snakeKeysToCamelCase, -} from "../../util/utils.ts"; +import { camelKeysToSnakeCase } from "../../util/utils.ts"; /** Edit the member */ export async function editMember( @@ -72,13 +69,14 @@ export async function editMember( await requireBotGuildPermissions(guildId, [...requiredPerms]); - const result = await rest.runMethod( + const result = await rest.runMethod( "patch", endpoints.GUILD_MEMBER(guildId, memberId), camelKeysToSnakeCase(options), - ) as DiscordGuildMember; + ); + const member = await structures.createDiscordenoMember( - snakeKeysToCamelCase(result), + result, guildId, ); diff --git a/src/helpers/members/get_member.ts b/src/helpers/members/get_member.ts index c59716433..8605fbe4c 100644 --- a/src/helpers/members/get_member.ts +++ b/src/helpers/members/get_member.ts @@ -1,7 +1,7 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordGuildMemberWithUser } from "../../types/guilds/guild_member.ts"; +import { GuildMemberWithUser } from "../../types/guilds/guild_member.ts"; import { endpoints } from "../../util/constants.ts"; /** Returns a guild member object for the specified user. @@ -16,7 +16,7 @@ export async function getMember( const guild = await cacheHandlers.get("guilds", guildId); if (!guild && !options?.force) return; - const data: DiscordGuildMemberWithUser = (await rest.runMethod( + const data = (await rest.runMethod( "get", endpoints.GUILD_MEMBER(guildId, id), )); diff --git a/src/helpers/members/get_members.ts b/src/helpers/members/get_members.ts index 396eb844f..adb3fc607 100644 --- a/src/helpers/members/get_members.ts +++ b/src/helpers/members/get_members.ts @@ -4,10 +4,7 @@ import { rest } from "../../rest/rest.ts"; import { DiscordenoMember } from "../../structures/member.ts"; import { structures } from "../../structures/mod.ts"; import { DiscordGatewayIntents } from "../../types/gateway/gateway_intents.ts"; -import { - DiscordGuildMember, - DiscordGuildMemberWithUser, -} from "../../types/guilds/guild_member.ts"; +import { GuildMember } from "../../types/guilds/guild_member.ts"; import { ListGuildMembers } from "../../types/guilds/list_guild_members.ts"; import { Errors } from "../../types/misc/errors.ts"; import { Collection } from "../../util/collection.ts"; @@ -49,7 +46,7 @@ export async function getMembers(guildId: string, options?: ListGuildMembers) { ); } - const result: DiscordGuildMember[] = (await rest.runMethod( + const result = (await rest.runMethod( "get", `${endpoints.GUILD_MEMBERS(guildId)}?limit=${ membersLeft > 1000 ? 1000 : membersLeft @@ -59,7 +56,7 @@ export async function getMembers(guildId: string, options?: ListGuildMembers) { const discordenoMembers = await Promise.all( result.map(async (member) => { const discordenoMember = await structures.createDiscordenoMember( - member as DiscordGuildMemberWithUser, + member, guildId, ); @@ -71,7 +68,7 @@ export async function getMembers(guildId: string, options?: ListGuildMembers) { return discordenoMember; }), - ) as DiscordenoMember[]; + ); if (!discordenoMembers.length) break; diff --git a/src/helpers/members/kick_member.ts b/src/helpers/members/kick_member.ts index 3adee00f6..8dbefc72e 100644 --- a/src/helpers/members/kick_member.ts +++ b/src/helpers/members/kick_member.ts @@ -20,13 +20,11 @@ export async function kick(guildId: string, memberId: string, reason?: string) { await requireBotGuildPermissions(guildId, ["KICK_MEMBERS"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.GUILD_MEMBER(guildId, memberId), { reason }, ); - - return result; } // aliases diff --git a/src/helpers/members/prune_members.ts b/src/helpers/members/prune_members.ts index 3527136d5..ae8fc190c 100644 --- a/src/helpers/members/prune_members.ts +++ b/src/helpers/members/prune_members.ts @@ -19,11 +19,11 @@ export async function pruneMembers( await requireBotGuildPermissions(guildId, ["KICK_MEMBERS"]); - const result = await rest.runMethod( + const result = await rest.runMethod<{ pruned: number }>( "post", endpoints.GUILD_PRUNE(guildId), camelKeysToSnakeCase(options), ); - return result; + return result.pruned; } diff --git a/src/helpers/members/search_members.ts b/src/helpers/members/search_members.ts index f9fb1b76b..12202aba2 100644 --- a/src/helpers/members/search_members.ts +++ b/src/helpers/members/search_members.ts @@ -2,7 +2,7 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { DiscordenoMember } from "../../structures/member.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordGuildMemberWithUser } from "../../types/guilds/guild_member.ts"; +import { GuildMemberWithUser } from "../../types/guilds/guild_member.ts"; import { SearchGuildMembers } from "../../types/members/search_guild_members.ts"; import { Errors } from "../../types/misc/errors.ts"; import { Collection } from "../../util/collection.ts"; @@ -24,7 +24,7 @@ export async function searchMembers( } } - const result = await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.GUILD_MEMBERS_SEARCH(guildId), { diff --git a/src/helpers/members/send_direct_message.ts b/src/helpers/members/send_direct_message.ts index 841e81856..ce01eaeda 100644 --- a/src/helpers/members/send_direct_message.ts +++ b/src/helpers/members/send_direct_message.ts @@ -1,7 +1,7 @@ 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 { Channel } from "../../types/channels/channel.ts"; import { CreateMessage } from "../../types/messages/create_message.ts"; import { endpoints } from "../../util/constants.ts"; import { sendMessage } from "../messages/send_message.ts"; @@ -14,11 +14,15 @@ export async function sendDirectMessage( let dmChannel = await cacheHandlers.get("channels", memberId); if (!dmChannel) { // If not available in cache create a new one. - const dmChannelData = await rest.runMethod("post", endpoints.USER_DM, { - recipient_id: memberId, - }); + const dmChannelData = await rest.runMethod( + "post", + endpoints.USER_DM, + { + recipient_id: memberId, + }, + ); const discordenoChannel = await structures.createDiscordenoChannel( - dmChannelData as DiscordChannel, + dmChannelData, ); // Recreate the channel and add it undert he users id await cacheHandlers.set("channels", memberId, discordenoChannel); @@ -26,5 +30,5 @@ export async function sendDirectMessage( } // If it does exist try sending a message to this user - return sendMessage(dmChannel.id, content); + return await sendMessage(dmChannel.id, content); } diff --git a/src/helpers/members/unban_member.ts b/src/helpers/members/unban_member.ts index db79fe2fd..a6c429fb8 100644 --- a/src/helpers/members/unban_member.ts +++ b/src/helpers/members/unban_member.ts @@ -6,12 +6,10 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts"; export async function unban(guildId: string, id: string) { await requireBotGuildPermissions(guildId, ["BAN_MEMBERS"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.GUILD_BAN(guildId, id), ); - - return result; } // aliases From 6eec266c60b47d0afced67d75252dac7301ab12b Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:38:53 +0200 Subject: [PATCH 70/89] messages --- src/helpers/messages/add_reaction.ts | 4 +--- src/helpers/messages/delete_message.ts | 4 +--- src/helpers/messages/edit_message.ts | 6 +++--- src/helpers/messages/get_message.ts | 8 ++++---- src/helpers/messages/get_messages.ts | 8 ++++---- src/helpers/messages/get_reactions.ts | 8 ++++---- src/helpers/messages/pin_message.ts | 4 +--- src/helpers/messages/publish_message.ts | 8 ++++---- src/helpers/messages/remove_all_reactions.ts | 4 +--- src/helpers/messages/remove_reaction.ts | 4 +--- src/helpers/messages/remove_reaction_emoji.ts | 4 +--- src/helpers/messages/remove_user_reaction.ts | 4 +--- src/helpers/messages/send_message.ts | 6 +++--- src/helpers/messages/unpin_message.ts | 4 +--- 14 files changed, 30 insertions(+), 46 deletions(-) diff --git a/src/helpers/messages/add_reaction.ts b/src/helpers/messages/add_reaction.ts index 1a5861abb..6c2fe402b 100644 --- a/src/helpers/messages/add_reaction.ts +++ b/src/helpers/messages/add_reaction.ts @@ -19,10 +19,8 @@ export async function addReaction( reaction = reaction.substring(3, reaction.length - 1); } - const result = await rest.runMethod( + return await rest.runMethod( "put", endpoints.CHANNEL_MESSAGE_REACTION_ME(channelId, messageId, reaction), ); - - return result; } diff --git a/src/helpers/messages/delete_message.ts b/src/helpers/messages/delete_message.ts index c053a1787..9b84ae248 100644 --- a/src/helpers/messages/delete_message.ts +++ b/src/helpers/messages/delete_message.ts @@ -20,11 +20,9 @@ export async function deleteMessage( if (delayMilliseconds) await delay(delayMilliseconds); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_MESSAGE(channelId, messageId), { reason }, ); - - return result; } diff --git a/src/helpers/messages/edit_message.ts b/src/helpers/messages/edit_message.ts index 220f605b8..860aa7616 100644 --- a/src/helpers/messages/edit_message.ts +++ b/src/helpers/messages/edit_message.ts @@ -3,7 +3,7 @@ import { rest } from "../../rest/rest.ts"; import { DiscordenoMessage } from "../../structures/message.ts"; import { structures } from "../../structures/mod.ts"; import { EditMessage } from "../../types/messages/edit_message.ts"; -import { DiscordMessage } from "../../types/messages/message.ts"; +import { Message } from "../../types/messages/message.ts"; import { Errors } from "../../types/misc/errors.ts"; import { PermissionStrings } from "../../types/permissions/permission_strings.ts"; import { endpoints } from "../../util/constants.ts"; @@ -28,11 +28,11 @@ export async function editMessage( throw new Error(Errors.MESSAGE_MAX_LENGTH); } - const result: DiscordMessage = await rest.runMethod( + const result = await rest.runMethod( "patch", endpoints.CHANNEL_MESSAGE(message.channelId, message.id), content, ); - return structures.createDiscordenoMessage(result); + return await structures.createDiscordenoMessage(result); } diff --git a/src/helpers/messages/get_message.ts b/src/helpers/messages/get_message.ts index 9c6c11a57..fc3f00cf6 100644 --- a/src/helpers/messages/get_message.ts +++ b/src/helpers/messages/get_message.ts @@ -1,7 +1,7 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordMessage } from "../../types/messages/message.ts"; +import { Message } from "../../types/messages/message.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; @@ -14,10 +14,10 @@ export async function getMessage(channelId: string, id: string) { ]); } - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.CHANNEL_MESSAGE(channelId, id), - )) as DiscordMessage; + ); - return structures.createDiscordenoMessage(result); + return await structures.createDiscordenoMessage(result); } diff --git a/src/helpers/messages/get_messages.ts b/src/helpers/messages/get_messages.ts index 959504e9a..1429b495b 100644 --- a/src/helpers/messages/get_messages.ts +++ b/src/helpers/messages/get_messages.ts @@ -6,7 +6,7 @@ import { GetMessagesBefore, GetMessagesLimit, } from "../../types/messages/get_messages.ts"; -import { DiscordMessage } from "../../types/messages/message.ts"; +import { Message } from "../../types/messages/message.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; @@ -26,13 +26,13 @@ export async function getMessages( if (options?.limit && options.limit > 100) return; - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.CHANNEL_MESSAGES(channelId), options, - )) as DiscordMessage[]; + ); - return Promise.all( + return await Promise.all( result.map((res) => structures.createDiscordenoMessage(res)), ); } diff --git a/src/helpers/messages/get_reactions.ts b/src/helpers/messages/get_reactions.ts index 0506f5b48..bf10d2d6d 100644 --- a/src/helpers/messages/get_reactions.ts +++ b/src/helpers/messages/get_reactions.ts @@ -1,8 +1,8 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordUser } from "../../types/users/user.ts"; +import { GetReactions } from "../../types/messages/message_get_reactions.ts"; +import { User } from "../../types/users/user.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; -import { GetReactions } from "../../types/messages/message_get_reactions.ts"; /** Get a list of users that reacted with this emoji. */ export async function getReactions( @@ -11,11 +11,11 @@ export async function getReactions( reaction: string, options?: GetReactions, ) { - const users = (await rest.runMethod( + const users = await rest.runMethod( "get", endpoints.CHANNEL_MESSAGE_REACTION(channelId, messageId, reaction), options, - )) as DiscordUser[]; + ); return new Collection(users.map((user) => [user.id, user])); } diff --git a/src/helpers/messages/pin_message.ts b/src/helpers/messages/pin_message.ts index 3e3001142..f96cac8f0 100644 --- a/src/helpers/messages/pin_message.ts +++ b/src/helpers/messages/pin_message.ts @@ -6,12 +6,10 @@ import { requireBotChannelPermissions } from "../../util/permissions.ts"; export async function pin(channelId: string, messageId: string) { await requireBotChannelPermissions(channelId, ["MANAGE_MESSAGES"]); - const result = await rest.runMethod( + return await rest.runMethod( "put", endpoints.CHANNEL_PIN(channelId, messageId), ); - - return result; } // aliases diff --git a/src/helpers/messages/publish_message.ts b/src/helpers/messages/publish_message.ts index 277f06a22..7d9d2ca17 100644 --- a/src/helpers/messages/publish_message.ts +++ b/src/helpers/messages/publish_message.ts @@ -1,14 +1,14 @@ import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; -import { DiscordMessage } from "../../types/messages/message.ts"; +import { Message } from "../../types/messages/message.ts"; import { endpoints } from "../../util/constants.ts"; /** Crosspost a message in a News Channel to following channels. */ export async function publishMessage(channelId: string, messageId: string) { - const data = (await rest.runMethod( + const data = await rest.runMethod( "post", endpoints.CHANNEL_MESSAGE_CROSSPOST(channelId, messageId), - )) as DiscordMessage; + ); - return structures.createDiscordenoMessage(data); + return await structures.createDiscordenoMessage(data); } diff --git a/src/helpers/messages/remove_all_reactions.ts b/src/helpers/messages/remove_all_reactions.ts index c228ddfde..a97b81d9e 100644 --- a/src/helpers/messages/remove_all_reactions.ts +++ b/src/helpers/messages/remove_all_reactions.ts @@ -6,10 +6,8 @@ import { requireBotChannelPermissions } from "../../util/permissions.ts"; export async function removeAllReactions(channelId: string, messageId: string) { await requireBotChannelPermissions(channelId, ["MANAGE_MESSAGES"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_MESSAGE_REACTIONS(channelId, messageId), ); - - return result; } diff --git a/src/helpers/messages/remove_reaction.ts b/src/helpers/messages/remove_reaction.ts index 087cf6659..b8bd2f707 100644 --- a/src/helpers/messages/remove_reaction.ts +++ b/src/helpers/messages/remove_reaction.ts @@ -13,10 +13,8 @@ export async function removeReaction( reaction = reaction.substring(3, reaction.length - 1); } - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_MESSAGE_REACTION_ME(channelId, messageId, reaction), ); - - return result; } diff --git a/src/helpers/messages/remove_reaction_emoji.ts b/src/helpers/messages/remove_reaction_emoji.ts index 0ed789a82..85a68a0be 100644 --- a/src/helpers/messages/remove_reaction_emoji.ts +++ b/src/helpers/messages/remove_reaction_emoji.ts @@ -16,10 +16,8 @@ export async function removeReactionEmoji( reaction = reaction.substring(3, reaction.length - 1); } - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_MESSAGE_REACTION(channelId, messageId, reaction), ); - - return result; } diff --git a/src/helpers/messages/remove_user_reaction.ts b/src/helpers/messages/remove_user_reaction.ts index 4ae4ffb2b..7f5b67dfd 100644 --- a/src/helpers/messages/remove_user_reaction.ts +++ b/src/helpers/messages/remove_user_reaction.ts @@ -17,7 +17,7 @@ export async function removeUserReaction( reaction = reaction.substring(3, reaction.length - 1); } - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_MESSAGE_REACTION_USER( channelId, @@ -26,6 +26,4 @@ export async function removeUserReaction( userId, ), ); - - return result; } diff --git a/src/helpers/messages/send_message.ts b/src/helpers/messages/send_message.ts index 802e876c4..73d00246f 100644 --- a/src/helpers/messages/send_message.ts +++ b/src/helpers/messages/send_message.ts @@ -4,7 +4,7 @@ import { structures } from "../../structures/mod.ts"; import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; import { DiscordAllowedMentionsTypes } from "../../types/messages/allowed_mentions_types.ts"; import { CreateMessage } from "../../types/messages/create_message.ts"; -import { DiscordMessage } from "../../types/messages/message.ts"; +import { DiscordMessage, Message } from "../../types/messages/message.ts"; import { Errors } from "../../types/misc/errors.ts"; import { PermissionStrings } from "../../types/permissions/permission_strings.ts"; import { endpoints } from "../../util/constants.ts"; @@ -93,7 +93,7 @@ export async function sendMessage( } } - const result = (await rest.runMethod( + const result = await rest.runMethod( "post", endpoints.CHANNEL_MESSAGES(channelId), camelKeysToSnakeCase({ @@ -107,7 +107,7 @@ export async function sendMessage( } : {}), }), - )) as DiscordMessage; + ); return structures.createDiscordenoMessage(result); } diff --git a/src/helpers/messages/unpin_message.ts b/src/helpers/messages/unpin_message.ts index c2a5630bf..1af948620 100644 --- a/src/helpers/messages/unpin_message.ts +++ b/src/helpers/messages/unpin_message.ts @@ -9,12 +9,10 @@ export async function unpin( ): Promise { await requireBotChannelPermissions(channelId, ["MANAGE_MESSAGES"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.CHANNEL_PIN(channelId, messageId), ); - - return result; } // aliases From d7015df65fb05a6f2b9167a40e5044159d7177b3 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:39:40 +0200 Subject: [PATCH 71/89] misc --- src/helpers/misc/get_gateway_bot.ts | 10 ++-------- src/helpers/misc/get_user.ts | 6 +----- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/helpers/misc/get_gateway_bot.ts b/src/helpers/misc/get_gateway_bot.ts index 10aa515c2..d765780be 100644 --- a/src/helpers/misc/get_gateway_bot.ts +++ b/src/helpers/misc/get_gateway_bot.ts @@ -1,14 +1,8 @@ import { rest } from "../../rest/rest.ts"; -import { - DiscordGetGatewayBot, - GetGatewayBot, -} from "../../types/gateway/get_gateway_bot.ts"; +import { GetGatewayBot } from "../../types/gateway/get_gateway_bot.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Get the bots Gateway metadata that can help during the operation of large or sharded bots. */ export async function getGatewayBot() { - const result = await rest.runMethod("get", endpoints.GATEWAY_BOT); - - return snakeKeysToCamelCase(result as DiscordGetGatewayBot) as GetGatewayBot; + return await rest.runMethod("get", endpoints.GATEWAY_BOT); } diff --git a/src/helpers/misc/get_user.ts b/src/helpers/misc/get_user.ts index 254779a7f..9913acddc 100644 --- a/src/helpers/misc/get_user.ts +++ b/src/helpers/misc/get_user.ts @@ -1,12 +1,8 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordUser } from "../../types/users/user.ts"; import { User } from "../../types/users/user.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** This function will return the raw user payload in the rare cases you need to fetch a user directly from the API. */ export async function getUser(userId: string) { - const result: User = await rest.runMethod("get", endpoints.USER(userId)); - - return snakeKeysToCamelCase(result); + return await rest.runMethod("get", endpoints.USER(userId)); } From 5793351fefb81b5c6bed3c08143374581c661521 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:39:49 +0200 Subject: [PATCH 72/89] roles --- src/helpers/roles/add_role.ts | 4 +--- src/helpers/roles/create_role.ts | 5 +++-- src/helpers/roles/delete_role.ts | 4 +--- src/helpers/roles/edit_role.ts | 7 ++++--- src/helpers/roles/get_roles.ts | 11 ++++++----- src/helpers/roles/remove_role.ts | 4 +--- 6 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/helpers/roles/add_role.ts b/src/helpers/roles/add_role.ts index 6213823c3..6bf738ede 100644 --- a/src/helpers/roles/add_role.ts +++ b/src/helpers/roles/add_role.ts @@ -25,11 +25,9 @@ export async function addRole( await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = await rest.runMethod( + return await rest.runMethod( "put", endpoints.GUILD_MEMBER_ROLE(guildId, memberId, roleId), { reason }, ); - - return result; } diff --git a/src/helpers/roles/create_role.ts b/src/helpers/roles/create_role.ts index b8cdf1079..0c107ccd7 100644 --- a/src/helpers/roles/create_role.ts +++ b/src/helpers/roles/create_role.ts @@ -2,7 +2,7 @@ import { cacheHandlers } from "../../cache.ts"; import { rest } from "../../rest/rest.ts"; import { structures } from "../../structures/mod.ts"; import { CreateGuildRole } from "../../types/guilds/create_guild_role.ts"; -import { DiscordRole } from "../../types/permissions/role.ts"; +import { Role } from "../../types/permissions/role.ts"; import { endpoints } from "../../util/constants.ts"; import { calculateBits, @@ -17,7 +17,7 @@ export async function createRole( ) { await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result: DiscordRole = await rest.runMethod( + const result = await rest.runMethod( "post", endpoints.GUILD_ROLES(guildId), { @@ -34,5 +34,6 @@ export async function createRole( const guild = await cacheHandlers.get("guilds", guildId); guild?.roles.set(role.id, role); + // TODO: ADD TO CACHE? return role; } diff --git a/src/helpers/roles/delete_role.ts b/src/helpers/roles/delete_role.ts index dd8c9300b..f9d134545 100644 --- a/src/helpers/roles/delete_role.ts +++ b/src/helpers/roles/delete_role.ts @@ -6,10 +6,8 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts"; export async function deleteRole(guildId: string, id: string) { await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.GUILD_ROLE(guildId, id), ); - - return result; } diff --git a/src/helpers/roles/edit_role.ts b/src/helpers/roles/edit_role.ts index 351b6314a..61373b852 100644 --- a/src/helpers/roles/edit_role.ts +++ b/src/helpers/roles/edit_role.ts @@ -1,5 +1,6 @@ import { rest } from "../../rest/rest.ts"; -import { CreateGuildRole } from "../../types/mod.ts"; +import { structures } from "../../structures/mod.ts"; +import { CreateGuildRole, Role } from "../../types/mod.ts"; import { endpoints } from "../../util/constants.ts"; import { calculateBits, @@ -14,7 +15,7 @@ export async function editRole( ) { await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = await rest.runMethod( + const result = await rest.runMethod( "patch", endpoints.GUILD_ROLE(guildId, id), { @@ -25,5 +26,5 @@ export async function editRole( }, ); - return result; + return await structures.createDiscordenoRole(result); } diff --git a/src/helpers/roles/get_roles.ts b/src/helpers/roles/get_roles.ts index 29b08998b..ace6fe351 100644 --- a/src/helpers/roles/get_roles.ts +++ b/src/helpers/roles/get_roles.ts @@ -1,9 +1,8 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordRole, Role } from "../../types/permissions/role.ts"; +import { Role } from "../../types/permissions/role.ts"; import { Collection } from "../../util/collection.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** Returns a list of role objects for the guild. * @@ -12,12 +11,14 @@ import { snakeKeysToCamelCase } from "../../util/utils.ts"; export async function getRoles(guildId: string) { await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = (await rest.runMethod( + const result = await rest.runMethod( "get", endpoints.GUILD_ROLES(guildId), - )) as DiscordRole[]; + ); + + // TODO: addToCache return new Collection( - result.map((role) => [role.id, snakeKeysToCamelCase(role)]), + result.map((role) => [role.id, role]), ); } diff --git a/src/helpers/roles/remove_role.ts b/src/helpers/roles/remove_role.ts index 786b0136e..5a98501ef 100644 --- a/src/helpers/roles/remove_role.ts +++ b/src/helpers/roles/remove_role.ts @@ -27,11 +27,9 @@ export async function removeRole( await requireBotGuildPermissions(guildId, ["MANAGE_ROLES"]); - const result = await rest.runMethod( + return await rest.runMethod( "delete", endpoints.GUILD_MEMBER_ROLE(guildId, memberId, roleId), { reason }, ); - - return result; } From 973ec219cc9cae8efadbc7230d935a1022abbffd Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:42:11 +0200 Subject: [PATCH 73/89] templates --- src/helpers/templates/create_guild_from_template.ts | 8 ++++---- src/helpers/templates/create_guild_template.ts | 7 ++----- src/helpers/templates/delete_guild_template.ts | 7 ++----- src/helpers/templates/edit_guild_template.ts | 7 ++----- src/helpers/templates/get_guild_templates.ts | 9 ++++----- src/helpers/templates/get_template.ts | 7 ++----- src/helpers/templates/sync_guild_template.ts | 7 ++----- 7 files changed, 18 insertions(+), 34 deletions(-) diff --git a/src/helpers/templates/create_guild_from_template.ts b/src/helpers/templates/create_guild_from_template.ts index 92399604c..770f71299 100644 --- a/src/helpers/templates/create_guild_from_template.ts +++ b/src/helpers/templates/create_guild_from_template.ts @@ -3,7 +3,7 @@ import { rest } from "../../rest/rest.ts"; import { Guild } from "../../types/guilds/guild.ts"; import { CreateGuildFromTemplate } from "../../types/templates/create_guild_from_template.ts"; import { endpoints } from "../../util/constants.ts"; -import { snakeKeysToCamelCase, urlToBase64 } from "../../util/utils.ts"; +import { urlToBase64 } from "../../util/utils.ts"; /** * Create a new guild based on a template @@ -23,11 +23,11 @@ export async function createGuildFromTemplate( data.icon = await urlToBase64(data.icon); } - const result = await rest.runMethod( + // TODO: discordeno guild? + + return await rest.runMethod( "post", endpoints.GUILD_TEMPLATE(templateCode), data, ); - - return snakeKeysToCamelCase(result); } diff --git a/src/helpers/templates/create_guild_template.ts b/src/helpers/templates/create_guild_template.ts index 6bc726bbe..a66d8f069 100644 --- a/src/helpers/templates/create_guild_template.ts +++ b/src/helpers/templates/create_guild_template.ts @@ -1,8 +1,7 @@ import { rest } from "../../rest/rest.ts"; -import { DiscordTemplate, Template } from "../../types/templates/template.ts"; +import { Template } from "../../types/templates/template.ts"; import { endpoints } from "../../util/constants.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts"; -import { snakeKeysToCamelCase } from "../../util/utils.ts"; /** * Creates a template for the guild. @@ -24,11 +23,9 @@ export async function createGuildTemplate( throw new Error("The description can only be in between 0-120 characters."); } - const template = await rest.runMethod( + return await rest.runMethod