From 1f89abfa4a0d391afde56cf591ddfada1f04b586 Mon Sep 17 00:00:00 2001 From: H01001000 Date: Fri, 2 Dec 2022 13:18:03 +0800 Subject: [PATCH] chore: close #2619 --- package.json | 9 +- packages/plugins/helpers/.swcrc | 31 ---- packages/plugins/helpers/README.md | 1 - packages/plugins/helpers/deps.ts | 1 - packages/plugins/helpers/mod.ts | 104 ----------- .../plugins/helpers/src/disconnectMember.ts | 6 - packages/plugins/helpers/tsconfig.json | 16 -- packages/plugins/utils/.swcrc | 31 ++++ packages/plugins/utils/README.md | 1 + packages/plugins/utils/index.ts | 170 ++++++++++++++++++ .../plugins/{helpers => utils}/package.json | 6 +- .../{helpers => utils}/src/channels.ts | 17 +- .../plugins/utils/src/disconnectMember.ts | 10 ++ .../src/fetchAndRetrieveMembers.ts | 15 +- .../src/getMembersPaginated.ts | 19 +- .../{helpers => utils}/src/moveMember.ts | 4 +- .../src/sendAutoCompleteChoices.ts | 7 +- .../src/sendDirectMessage.ts | 14 +- .../src/sendPrivateInteractionResponse.ts | 6 +- .../{helpers => utils}/src/sendTextMessage.ts | 4 +- .../{helpers => utils}/src/suppressEmbeds.ts | 4 +- .../plugins/{helpers => utils}/src/threads.ts | 33 +++- packages/plugins/utils/tsconfig.json | 8 + yarn.lock | 15 ++ 24 files changed, 328 insertions(+), 204 deletions(-) delete mode 100644 packages/plugins/helpers/.swcrc delete mode 100644 packages/plugins/helpers/README.md delete mode 100644 packages/plugins/helpers/deps.ts delete mode 100644 packages/plugins/helpers/mod.ts delete mode 100644 packages/plugins/helpers/src/disconnectMember.ts delete mode 100644 packages/plugins/helpers/tsconfig.json create mode 100644 packages/plugins/utils/.swcrc create mode 100644 packages/plugins/utils/README.md create mode 100644 packages/plugins/utils/index.ts rename packages/plugins/{helpers => utils}/package.json (89%) rename packages/plugins/{helpers => utils}/src/channels.ts (72%) create mode 100644 packages/plugins/utils/src/disconnectMember.ts rename packages/plugins/{helpers => utils}/src/fetchAndRetrieveMembers.ts (50%) rename packages/plugins/{helpers => utils}/src/getMembersPaginated.ts (88%) rename packages/plugins/{helpers => utils}/src/moveMember.ts (76%) rename packages/plugins/{helpers => utils}/src/sendAutoCompleteChoices.ts (76%) rename packages/plugins/{helpers => utils}/src/sendDirectMessage.ts (76%) rename packages/plugins/{helpers => utils}/src/sendPrivateInteractionResponse.ts (59%) rename packages/plugins/{helpers => utils}/src/sendTextMessage.ts (73%) rename packages/plugins/{helpers => utils}/src/suppressEmbeds.ts (79%) rename packages/plugins/{helpers => utils}/src/threads.ts (72%) create mode 100644 packages/plugins/utils/tsconfig.json diff --git a/package.json b/package.json index 8e0597396..242d670a8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "private": true, "workspaces": [ "packages/*", - "packages/plugins/cache" + "packages/plugins/cache", + "packages/plugins/utils" ], "scripts": { "build": "turbo run build", @@ -31,12 +32,10 @@ "lint-staged": { "*": "prettier --ignore-unknown --write", "*.ts": [ - "eslint --fix --config ./packages/eslint-config-discordeno/index.js --resolve-plugins-relative-to .", - "git add" + "eslint --fix --config ./packages/eslint-config-discordeno/index.js --resolve-plugins-relative-to ." ], "*.js": [ - "eslint --fix --config ./packages/eslint-config-discordeno/index.js --resolve-plugins-relative-to .", - "git add" + "eslint --fix --config ./packages/eslint-config-discordeno/index.js --resolve-plugins-relative-to ." ] }, "packageManager": "yarn@3.3.0" diff --git a/packages/plugins/helpers/.swcrc b/packages/plugins/helpers/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/plugins/helpers/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/plugins/helpers/README.md b/packages/plugins/helpers/README.md deleted file mode 100644 index 31b9125b4..000000000 --- a/packages/plugins/helpers/README.md +++ /dev/null @@ -1 +0,0 @@ -# helpers-plugin diff --git a/packages/plugins/helpers/deps.ts b/packages/plugins/helpers/deps.ts deleted file mode 100644 index cbba4b3bf..000000000 --- a/packages/plugins/helpers/deps.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../../index.js' diff --git a/packages/plugins/helpers/mod.ts b/packages/plugins/helpers/mod.ts deleted file mode 100644 index 9f96b3bde..000000000 --- a/packages/plugins/helpers/mod.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { BotWithCache } from '../cache/src/addCacheCollections.js' -import { - ApplicationCommandOptionChoice, - BigString, - Bot, - Channel, - Collection, - CreateMessage, - FinalHelpers, - InteractionResponse, - ListGuildMembers, - Member, - Message -} from './deps.js' -import { cloneChannel } from './src/channels.js' -import { disconnectMember } from './src/disconnectMember.js' -import { fetchAndRetrieveMembers } from './src/fetchAndRetrieveMembers.js' -import { getMembersPaginated } from './src/getMembersPaginated.js' -import { moveMember } from './src/moveMember.js' -import { sendAutocompleteChoices } from './src/sendAutoCompleteChoices.js' -import { sendDirectMessage } from './src/sendDirectMessage.js' -import { sendPrivateInteractionResponse } from './src/sendPrivateInteractionResponse.js' -import { sendTextMessage } from './src/sendTextMessage.js' -import { suppressEmbeds } from './src/suppressEmbeds.js' -import { archiveThread, editThread, lockThread, ModifyThread, unarchiveThread, unlockThread } from './src/threads.js' - -export type BotWithHelpersPlugin = Omit & HelperFunctionsFromHelperPlugin - -export interface HelperFunctionsFromHelperPlugin { - helpers: FinalHelpers & { - fetchAndRetrieveMembers: (guildId: BigString) => Promise> - sendDirectMessage: (userId: BigString, content: string | CreateMessage) => Promise - sendTextMessage: (channelId: BigString, content: string | CreateMessage) => Promise - sendPrivateInteractionResponse: ( - id: BigString, - token: string, - options: InteractionResponse, - ) => Promise - suppressEmbeds: (channelId: BigString, messageId: BigString) => Promise - archiveThread: (threadId: BigString) => Promise - unarchiveThread: (threadId: BigString) => Promise - lockThread: (threadId: BigString) => Promise - unlockThread: (threadId: BigString) => Promise - editThread: (threadId: BigString, options: ModifyThread, reason?: string) => Promise - cloneChannel: (channel: Channel, reason?: string) => Promise - sendAutocompleteChoices: ( - interactionId: BigString, - interactionToken: string, - choices: ApplicationCommandOptionChoice[], - ) => Promise - disconnectMember: (guildId: BigString, memberId: BigString) => Promise - getMembersPaginated: (guildId: BigString, options: ListGuildMembers) => Promise> - moveMember: (guildId: BigString, memberId: BigString, channelId: BigString) => Promise - } -} - -export function enableHelpersPlugin (rawBot: B): BotWithHelpersPlugin { - // FORCE OVERRIDE THE TYPE SO WE CAN SETUP FUNCTIONS - const bot = rawBot as unknown as BotWithHelpersPlugin - - bot.helpers.fetchAndRetrieveMembers = async (guildId: BigString) => - await fetchAndRetrieveMembers(bot as unknown as BotWithCache, guildId) - bot.helpers.sendDirectMessage = async (userId: BigString, content: string | CreateMessage) => - await sendDirectMessage(bot, userId, content) - bot.helpers.sendTextMessage = async (channelId: BigString, content: string | CreateMessage) => - await sendTextMessage(bot, channelId, content) - bot.helpers.sendPrivateInteractionResponse = async (id: BigString, token: string, options: InteractionResponse) => - await sendPrivateInteractionResponse(bot, id, token, options) - bot.helpers.suppressEmbeds = async (channelId: BigString, messageId: BigString) => - await suppressEmbeds(bot, channelId, messageId) - bot.helpers.archiveThread = async (threadId: BigString) => await archiveThread(bot, threadId) - bot.helpers.unarchiveThread = async (threadId: BigString) => await unarchiveThread(bot, threadId) - bot.helpers.lockThread = async (threadId: BigString) => await lockThread(bot, threadId) - bot.helpers.unlockThread = async (threadId: BigString) => await unlockThread(bot, threadId) - bot.helpers.editThread = async (threadId: BigString, options: ModifyThread, reason?: string) => - await editThread(bot, threadId, options, reason) - bot.helpers.cloneChannel = async (channel: Channel, reason?: string) => await cloneChannel(bot, channel, reason) - bot.helpers.sendAutocompleteChoices = async ( - interactionId: BigString, - interactionToken: string, - choices: ApplicationCommandOptionChoice[] - ) => await sendAutocompleteChoices(bot, interactionId, interactionToken, choices) - bot.helpers.disconnectMember = async (guildId: BigString, memberId: BigString) => await disconnectMember(bot, guildId, memberId) - bot.helpers.getMembersPaginated = async (guildId: BigString, options: ListGuildMembers) => - await getMembersPaginated(bot, guildId, options) - bot.helpers.moveMember = async (guildId: BigString, memberId: BigString, channelId: BigString) => - await moveMember(bot, guildId, memberId, channelId) - - return bot as BotWithHelpersPlugin -} - -// EXPORT EVERYTHING HERE SO USERS CAN OPT TO USE FUNCTIONS DIRECTLY -export * from './src/channels.js' -export * from './src/disconnectMember.js' -export * from './src/fetchAndRetrieveMembers.js' -export * from './src/getMembersPaginated.js' -export * from './src/moveMember.js' -export * from './src/sendAutoCompleteChoices.js' -export * from './src/sendDirectMessage.js' -export * from './src/sendPrivateInteractionResponse.js' -export * from './src/sendTextMessage.js' -export * from './src/suppressEmbeds.js' -export * from './src/threads.js' -export default enableHelpersPlugin diff --git a/packages/plugins/helpers/src/disconnectMember.ts b/packages/plugins/helpers/src/disconnectMember.ts deleted file mode 100644 index e4cad278a..000000000 --- a/packages/plugins/helpers/src/disconnectMember.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { BigString, Bot } from '../deps.js' - -/** Kicks a member from a voice channel */ -export async function disconnectMember (bot: Bot, guildId: BigString, memberId: BigString) { - return await bot.helpers.editMember(guildId, memberId, { channelId: null }) -} diff --git a/packages/plugins/helpers/tsconfig.json b/packages/plugins/helpers/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/plugins/helpers/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/plugins/utils/.swcrc b/packages/plugins/utils/.swcrc new file mode 100644 index 000000000..13d4f44c6 --- /dev/null +++ b/packages/plugins/utils/.swcrc @@ -0,0 +1,31 @@ +{ + "minify": true, + "jsc": { + "parser": { + "syntax": "typescript", + "decorators": true, + "dynamicImport": true + }, + "transform": { + "legacyDecorator": true, + "decoratorMetadata": true + }, + "target": "es2022", + "keepClassNames": true, + "loose": true, + "minify": { + "compress": { + "unused": true + }, + "mangle": true + } + }, + "module": { + "type": "es6", + "strict": false, + "strictMode": true, + "lazy": false, + "noInterop": false + }, + "sourceMaps": "inline" +} diff --git a/packages/plugins/utils/README.md b/packages/plugins/utils/README.md new file mode 100644 index 000000000..31c1d3391 --- /dev/null +++ b/packages/plugins/utils/README.md @@ -0,0 +1 @@ +# utils-plugin diff --git a/packages/plugins/utils/index.ts b/packages/plugins/utils/index.ts new file mode 100644 index 000000000..f3a363284 --- /dev/null +++ b/packages/plugins/utils/index.ts @@ -0,0 +1,170 @@ +import { + ApplicationCommandOptionChoice, + BigString, + Bot, + Channel, + Collection, + CreateMessage, + FinalHelpers, + InteractionResponse, + ListGuildMembers, + Member, + Message +} from '@discordeno/bot' +import { BotWithCache } from '../cache/src/addCacheCollections.js' +import { cloneChannel } from './src/channels.js' +import { disconnectMember } from './src/disconnectMember.js' +import { fetchAndRetrieveMembers } from './src/fetchAndRetrieveMembers.js' +import { getMembersPaginated } from './src/getMembersPaginated.js' +import { moveMember } from './src/moveMember.js' +import { sendAutocompleteChoices } from './src/sendAutoCompleteChoices.js' +import { sendDirectMessage } from './src/sendDirectMessage.js' +import { sendPrivateInteractionResponse } from './src/sendPrivateInteractionResponse.js' +import { sendTextMessage } from './src/sendTextMessage.js' +import { suppressEmbeds } from './src/suppressEmbeds.js' +import { + archiveThread, + editThread, + lockThread, + ModifyThread, + unarchiveThread, + unlockThread +} from './src/threads.js' + +export type BotWithUtilsPlugin = Omit & +HelperFunctionsFromHelperPlugin + +export interface HelperFunctionsFromHelperPlugin { + helpers: FinalHelpers & { + fetchAndRetrieveMembers: ( + guildId: BigString + ) => Promise> + sendDirectMessage: ( + userId: BigString, + content: string | CreateMessage + ) => Promise + sendTextMessage: ( + channelId: BigString, + content: string | CreateMessage + ) => Promise + sendPrivateInteractionResponse: ( + id: BigString, + token: string, + options: InteractionResponse + ) => Promise + suppressEmbeds: ( + channelId: BigString, + messageId: BigString + ) => Promise + archiveThread: (threadId: BigString) => Promise + unarchiveThread: (threadId: BigString) => Promise + lockThread: (threadId: BigString) => Promise + unlockThread: (threadId: BigString) => Promise + editThread: ( + threadId: BigString, + options: ModifyThread, + reason?: string + ) => Promise + cloneChannel: (channel: Channel, reason?: string) => Promise + sendAutocompleteChoices: ( + interactionId: BigString, + interactionToken: string, + choices: ApplicationCommandOptionChoice[] + ) => Promise + disconnectMember: ( + guildId: BigString, + memberId: BigString + ) => Promise + getMembersPaginated: ( + guildId: BigString, + options: ListGuildMembers + ) => Promise> + moveMember: ( + guildId: BigString, + memberId: BigString, + channelId: BigString + ) => Promise + } +} + +export function enableUtilsPlugin ( + rawBot: B +): BotWithUtilsPlugin { + // FORCE OVERRIDE THE TYPE SO WE CAN SETUP FUNCTIONS + const bot = rawBot as unknown as BotWithUtilsPlugin + + bot.helpers.fetchAndRetrieveMembers = async (guildId: BigString) => + await fetchAndRetrieveMembers(bot as unknown as BotWithCache, guildId) + bot.helpers.sendDirectMessage = async ( + userId: BigString, + content: string | CreateMessage + ) => await sendDirectMessage(bot, userId, content) + bot.helpers.sendTextMessage = async ( + channelId: BigString, + content: string | CreateMessage + ) => await sendTextMessage(bot, channelId, content) + bot.helpers.sendPrivateInteractionResponse = async ( + id: BigString, + token: string, + options: InteractionResponse + ) => await sendPrivateInteractionResponse(bot, id, token, options) + bot.helpers.suppressEmbeds = async ( + channelId: BigString, + messageId: BigString + ) => await suppressEmbeds(bot, channelId, messageId) + bot.helpers.archiveThread = async (threadId: BigString) => + await archiveThread(bot, threadId) + bot.helpers.unarchiveThread = async (threadId: BigString) => + await unarchiveThread(bot, threadId) + bot.helpers.lockThread = async (threadId: BigString) => + await lockThread(bot, threadId) + bot.helpers.unlockThread = async (threadId: BigString) => + await unlockThread(bot, threadId) + bot.helpers.editThread = async ( + threadId: BigString, + options: ModifyThread, + reason?: string + ) => await editThread(bot, threadId, options, reason) + bot.helpers.cloneChannel = async (channel: Channel, reason?: string) => + await cloneChannel(bot, channel, reason) + bot.helpers.sendAutocompleteChoices = async ( + interactionId: BigString, + interactionToken: string, + choices: ApplicationCommandOptionChoice[] + ) => + await sendAutocompleteChoices( + bot, + interactionId, + interactionToken, + choices + ) + bot.helpers.disconnectMember = async ( + guildId: BigString, + memberId: BigString + ) => await disconnectMember(bot, guildId, memberId) + bot.helpers.getMembersPaginated = async ( + guildId: BigString, + options: ListGuildMembers + ) => await getMembersPaginated(bot, guildId, options) + bot.helpers.moveMember = async ( + guildId: BigString, + memberId: BigString, + channelId: BigString + ) => await moveMember(bot, guildId, memberId, channelId) + + return bot as BotWithUtilsPlugin +} + +// EXPORT EVERYTHING HERE SO USERS CAN OPT TO USE FUNCTIONS DIRECTLY +export * from './src/channels.js' +export * from './src/disconnectMember.js' +export * from './src/fetchAndRetrieveMembers.js' +export * from './src/getMembersPaginated.js' +export * from './src/moveMember.js' +export * from './src/sendAutoCompleteChoices.js' +export * from './src/sendDirectMessage.js' +export * from './src/sendPrivateInteractionResponse.js' +export * from './src/sendTextMessage.js' +export * from './src/suppressEmbeds.js' +export * from './src/threads.js' +export default enableUtilsPlugin diff --git a/packages/plugins/helpers/package.json b/packages/plugins/utils/package.json similarity index 89% rename from packages/plugins/helpers/package.json rename to packages/plugins/utils/package.json index cb8a1d0ae..6a49a2fc7 100644 --- a/packages/plugins/helpers/package.json +++ b/packages/plugins/utils/package.json @@ -1,5 +1,5 @@ { - "name": "@discordeno/helpers-plugin", + "name": "@discordeno/utils-plugin", "version": "18.0.0-alpha.1", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -14,15 +14,15 @@ "test-types": "tsc --noEmit" }, "devDependencies": { + "@discordeno/bot": "18.0.0-alpha.1", "@swc/cli": "^0.1.57", "@swc/core": "^1.3.21", "eslint": "^8.0.1", "eslint-config-discordeno": "*", "tsconfig": "*", - "@discordeno/types": "18.0.0-alpha.1", "typescript": "^4.9.3" }, "dependencies": { "@types/node": "^18.11.9" } -} \ No newline at end of file +} diff --git a/packages/plugins/helpers/src/channels.ts b/packages/plugins/utils/src/channels.ts similarity index 72% rename from packages/plugins/helpers/src/channels.ts rename to packages/plugins/utils/src/channels.ts index 5a264344e..452411ca3 100644 --- a/packages/plugins/helpers/src/channels.ts +++ b/packages/plugins/utils/src/channels.ts @@ -1,7 +1,16 @@ -import { Bot, Channel, CreateGuildChannel, separateOverwrites } from '../deps.js' +import { + Bot, + Channel, + CreateGuildChannel, + separateOverwrites +} from '@discordeno/bot' /** Create a copy of a channel */ -export async function cloneChannel (bot: Bot, channel: Channel, reason?: string) { +export async function cloneChannel ( + bot: Bot, + channel: Channel, + reason?: string +): Promise { if (!channel.guildId) { throw new Error('Cannot clone a channel outside a guild') } @@ -15,7 +24,7 @@ export async function cloneChannel (bot: Bot, channel: Channel, reason?: string) parentId: channel.parentId, nsfw: channel.nsfw, name: channel.name!, - topic: channel.topic || undefined, + topic: channel.topic, permissionOverwrites: channel.permissionOverwrites.map((overwrite) => { const [type, id, allow, deny] = separateOverwrites(overwrite) @@ -30,5 +39,5 @@ export async function cloneChannel (bot: Bot, channel: Channel, reason?: string) } // Create the channel (also handles permissions) - return await bot.helpers.createChannel(channel.guildId!, createChannelOptions) + return await bot.helpers.createChannel(channel.guildId, createChannelOptions) } diff --git a/packages/plugins/utils/src/disconnectMember.ts b/packages/plugins/utils/src/disconnectMember.ts new file mode 100644 index 000000000..9c117e665 --- /dev/null +++ b/packages/plugins/utils/src/disconnectMember.ts @@ -0,0 +1,10 @@ +import { BigString, Bot, Member } from '@discordeno/bot' + +/** Kicks a member from a voice channel */ +export async function disconnectMember ( + bot: Bot, + guildId: BigString, + memberId: BigString +): Promise { + return await bot.helpers.editMember(guildId, memberId, { channelId: null }) +} diff --git a/packages/plugins/helpers/src/fetchAndRetrieveMembers.ts b/packages/plugins/utils/src/fetchAndRetrieveMembers.ts similarity index 50% rename from packages/plugins/helpers/src/fetchAndRetrieveMembers.ts rename to packages/plugins/utils/src/fetchAndRetrieveMembers.ts index 9d93b1e1e..a3a9f78e2 100644 --- a/packages/plugins/helpers/src/fetchAndRetrieveMembers.ts +++ b/packages/plugins/utils/src/fetchAndRetrieveMembers.ts @@ -1,15 +1,22 @@ +import { BigString, Collection, Member } from '@discordeno/bot' import { BotWithCache } from '../../cache/src/addCacheCollections.js' -import { BigString } from '../deps.js' /** Fetch members for an entire guild then return the entire guilds cached members. */ -export async function fetchAndRetrieveMembers (bot: BotWithCache, guildId: BigString) { +export async function fetchAndRetrieveMembers ( + bot: BotWithCache, + guildId: BigString +): Promise> { if (!bot.enabledPlugins?.has('CACHE')) { - throw new Error('The fetchAndRetrieveMembers function requires the CACHE plugin first.') + throw new Error( + 'The fetchAndRetrieveMembers function requires the CACHE plugin first.' + ) } const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) if (guild == null) { - throw new Error('The guild was not found in cache. Unable to fetch members for uncached guild.') + throw new Error( + 'The guild was not found in cache. Unable to fetch members for uncached guild.' + ) } await bot.helpers.fetchMembers(guildId, { limit: 0 }) diff --git a/packages/plugins/helpers/src/getMembersPaginated.ts b/packages/plugins/utils/src/getMembersPaginated.ts similarity index 88% rename from packages/plugins/helpers/src/getMembersPaginated.ts rename to packages/plugins/utils/src/getMembersPaginated.ts index 66b86a16d..aaebd9d14 100644 --- a/packages/plugins/helpers/src/getMembersPaginated.ts +++ b/packages/plugins/utils/src/getMembersPaginated.ts @@ -1,4 +1,11 @@ -import { BigString, Bot, Collection, DiscordMemberWithUser, ListGuildMembers, Member } from '../deps.js' +import { + BigString, + Bot, + Collection, + DiscordMemberWithUser, + ListGuildMembers, + Member +} from '@discordeno/bot' /** * Highly recommended to **NOT** use this function to get members instead use fetchMembers(). @@ -9,23 +16,19 @@ export async function getMembersPaginated ( bot: Bot, guildId: BigString, options: ListGuildMembers -) { +): Promise { const members = new Collection() let membersLeft = options?.limit ?? 1000 let loops = 1 - while ( - (options?.limit ?? 1000) > members.size && - membersLeft > 0 - ) { + while ((options?.limit ?? 1000) > members.size && membersLeft > 0) { bot.events.debug('Running while loop in getMembers function.') if (options?.limit && options.limit > 1000) { console.log( `Paginating get members from REST. #${loops} / ${Math.ceil( (options?.limit ?? 1) / 1000 - ) - }` + )}` ) } diff --git a/packages/plugins/helpers/src/moveMember.ts b/packages/plugins/utils/src/moveMember.ts similarity index 76% rename from packages/plugins/helpers/src/moveMember.ts rename to packages/plugins/utils/src/moveMember.ts index abe6e71fa..8753c6a51 100644 --- a/packages/plugins/helpers/src/moveMember.ts +++ b/packages/plugins/utils/src/moveMember.ts @@ -1,4 +1,4 @@ -import { BigString, Bot } from '../deps.js' +import { BigString, Bot, Member } from '@discordeno/bot' /** * Move a member from a voice channel to another. @@ -8,6 +8,6 @@ export async function moveMember ( guildId: BigString, memberId: BigString, channelId: BigString -) { +): Promise { return await bot.helpers.editMember(guildId, memberId, { channelId }) } diff --git a/packages/plugins/helpers/src/sendAutoCompleteChoices.ts b/packages/plugins/utils/src/sendAutoCompleteChoices.ts similarity index 76% rename from packages/plugins/helpers/src/sendAutoCompleteChoices.ts rename to packages/plugins/utils/src/sendAutoCompleteChoices.ts index 5a2222a8d..863cad8f4 100644 --- a/packages/plugins/helpers/src/sendAutoCompleteChoices.ts +++ b/packages/plugins/utils/src/sendAutoCompleteChoices.ts @@ -1,4 +1,9 @@ -import { ApplicationCommandOptionChoice, BigString, Bot, InteractionResponseTypes } from '../deps.js' +import { + ApplicationCommandOptionChoice, + BigString, + Bot, + InteractionResponseTypes +} from '@discordeno/bot' export async function sendAutocompleteChoices ( bot: Bot, diff --git a/packages/plugins/helpers/src/sendDirectMessage.ts b/packages/plugins/utils/src/sendDirectMessage.ts similarity index 76% rename from packages/plugins/helpers/src/sendDirectMessage.ts rename to packages/plugins/utils/src/sendDirectMessage.ts index 4f8769a3f..e48aeaa1b 100644 --- a/packages/plugins/helpers/src/sendDirectMessage.ts +++ b/packages/plugins/utils/src/sendDirectMessage.ts @@ -1,4 +1,10 @@ -import { BigString, Bot, Collection, CreateMessage } from '../deps.js' +import { + BigString, + Bot, + Collection, + CreateMessage, + Message +} from '@discordeno/bot' /** Maps the for dm channels */ export const dmChannelIds = new Collection() @@ -8,16 +14,16 @@ export async function sendDirectMessage ( bot: Bot, userId: BigString, content: string | CreateMessage -) { +): Promise { if (typeof content === 'string') content = { content } // GET CHANNEL ID FROM CACHE OR CREATE THE CHANNEL FOR THIS USER const cachedChannelId = dmChannelIds.get(userId) // IF ID IS CACHED SEND MESSAGE DIRECTLY - if (cachedChannelId) return await bot.helpers.sendMessage(cachedChannelId, content) + if (cachedChannelId) { return await bot.helpers.sendMessage(cachedChannelId, content) } // CREATE A NEW DM CHANNEL AND PLUCK ITS ID - const channel = (await bot.helpers.getDmChannel(userId)) + const channel = await bot.helpers.getDmChannel(userId) // CACHE IT FOR FUTURE REQUESTS dmChannelIds.set(userId, channel.id) diff --git a/packages/plugins/helpers/src/sendPrivateInteractionResponse.ts b/packages/plugins/utils/src/sendPrivateInteractionResponse.ts similarity index 59% rename from packages/plugins/helpers/src/sendPrivateInteractionResponse.ts rename to packages/plugins/utils/src/sendPrivateInteractionResponse.ts index dfc3b4ead..a085209a0 100644 --- a/packages/plugins/helpers/src/sendPrivateInteractionResponse.ts +++ b/packages/plugins/utils/src/sendPrivateInteractionResponse.ts @@ -1,4 +1,4 @@ -import type { BigString, Bot, InteractionResponse } from '../deps.js' +import type { BigString, Bot, InteractionResponse } from '@discordeno/bot' /** sendInteractionResponse with ephemeral reply */ export async function sendPrivateInteractionResponse ( @@ -6,7 +6,7 @@ export async function sendPrivateInteractionResponse ( id: BigString, token: string, options: InteractionResponse -) { - if ((options.data) && !options.data?.flags) options.data.flags = 64 // private: true +): Promise { + if (options.data && !options.data?.flags) options.data.flags = 64 // private: true return await bot.helpers.sendInteractionResponse(id, token, options) } diff --git a/packages/plugins/helpers/src/sendTextMessage.ts b/packages/plugins/utils/src/sendTextMessage.ts similarity index 73% rename from packages/plugins/helpers/src/sendTextMessage.ts rename to packages/plugins/utils/src/sendTextMessage.ts index b11bbf032..5e4352f92 100644 --- a/packages/plugins/helpers/src/sendTextMessage.ts +++ b/packages/plugins/utils/src/sendTextMessage.ts @@ -1,11 +1,11 @@ -import { BigString, Bot, CreateMessage } from '../deps.js' +import { BigString, Bot, CreateMessage, Message } from '@discordeno/bot' /** Sends a text message. */ export async function sendTextMessage ( bot: Bot, channelId: BigString, content: string | CreateMessage -) { +): Promise { if (typeof content === 'string') content = { content } return await bot.helpers.sendMessage(channelId, content) } diff --git a/packages/plugins/helpers/src/suppressEmbeds.ts b/packages/plugins/utils/src/suppressEmbeds.ts similarity index 79% rename from packages/plugins/helpers/src/suppressEmbeds.ts rename to packages/plugins/utils/src/suppressEmbeds.ts index 8961981d8..0522b33bc 100644 --- a/packages/plugins/helpers/src/suppressEmbeds.ts +++ b/packages/plugins/utils/src/suppressEmbeds.ts @@ -1,11 +1,11 @@ -import { BigString, Bot, DiscordMessage } from '../deps.js' +import { BigString, Bot, DiscordMessage, Message } from '@discordeno/bot' /** Suppress all the embeds in this message */ export async function suppressEmbeds ( bot: Bot, channelId: BigString, messageId: BigString -) { +): Promise { const result = await bot.rest.runMethod( bot.rest, 'PATCH', diff --git a/packages/plugins/helpers/src/threads.ts b/packages/plugins/utils/src/threads.ts similarity index 72% rename from packages/plugins/helpers/src/threads.ts rename to packages/plugins/utils/src/threads.ts index 578fea2ff..d678cb184 100644 --- a/packages/plugins/helpers/src/threads.ts +++ b/packages/plugins/utils/src/threads.ts @@ -1,27 +1,44 @@ -import { BigString, Bot, DiscordChannel } from '../deps.js' +import { BigString, Bot, Channel, DiscordChannel } from '@discordeno/bot' /** Sets a thread channel to be archived. */ -export async function archiveThread (bot: Bot, threadId: BigString) { +export async function archiveThread ( + bot: Bot, + threadId: BigString +): Promise { return await editThread(bot, threadId, { archived: true }) } /** Sets a thread channel to be unarchived. */ -export async function unarchiveThread (bot: Bot, threadId: BigString) { +export async function unarchiveThread ( + bot: Bot, + threadId: BigString +): Promise { return await editThread(bot, threadId, { archived: false }) } /** Sets a thread channel to be locked. */ -export async function lockThread (bot: Bot, threadId: BigString) { +export async function lockThread ( + bot: Bot, + threadId: BigString +): Promise { return await editThread(bot, threadId, { locked: true }) } /** Sets a thread channel to be unlocked. */ -export async function unlockThread (bot: Bot, threadId: BigString) { +export async function unlockThread ( + bot: Bot, + threadId: BigString +): Promise { return await editThread(bot, threadId, { locked: false }) } /** Update a thread's settings. Requires the `MANAGE_CHANNELS` permission for the guild. */ -export async function editThread (bot: Bot, threadId: BigString, options: ModifyThread, reason?: string) { +export async function editThread ( + bot: Bot, + threadId: BigString, + options: ModifyThread, + reason?: string +): Promise { const result = await bot.rest.runMethod( bot.rest, 'PATCH', @@ -38,7 +55,9 @@ export async function editThread (bot: Bot, threadId: BigString, options: Modify return bot.transformers.channel(bot, { channel: result, - guildId: result.guild_id ? bot.transformers.snowflake(result.guild_id) : undefined + guildId: result.guild_id + ? bot.transformers.snowflake(result.guild_id) + : undefined }) } diff --git a/packages/plugins/utils/tsconfig.json b/packages/plugins/utils/tsconfig.json new file mode 100644 index 000000000..6cc7ea9b5 --- /dev/null +++ b/packages/plugins/utils/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "tsconfig/base.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": ["./src/**/*.ts", "./src/**/*.tsx"], + "exclude": ["node_modules", "dist", "test", "tests"] +} diff --git a/yarn.lock b/yarn.lock index 0ea0f936b..fff1e6c98 100644 --- a/yarn.lock +++ b/yarn.lock @@ -110,6 +110,21 @@ __metadata: languageName: unknown linkType: soft +"@discordeno/utils-plugin@workspace:packages/plugins/utils": + version: 0.0.0-use.local + resolution: "@discordeno/utils-plugin@workspace:packages/plugins/utils" + dependencies: + "@discordeno/bot": 18.0.0-alpha.1 + "@swc/cli": ^0.1.57 + "@swc/core": ^1.3.21 + "@types/node": ^18.11.9 + eslint: ^8.0.1 + eslint-config-discordeno: "*" + tsconfig: "*" + typescript: ^4.9.3 + languageName: unknown + linkType: soft + "@discordeno/utils@18.0.0-alpha.1, @discordeno/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@discordeno/utils@workspace:packages/utils"