From 1e7e9acfc4d996b00e179ed9182ac1568bd29365 Mon Sep 17 00:00:00 2001 From: samarmeena Date: Sat, 15 Jun 2024 13:46:07 +0530 Subject: [PATCH] refactor: improvements --- .eslintrc | 25 ++++++++++++++++------ package-lock.json | 42 ++++++++++++++++++------------------- package.json | 4 ++-- src/commands/doc.cmd.ts | 10 ++++++--- src/commands/mdn.cmd.ts | 10 ++++++--- src/commands/package.cmd.ts | 10 ++++++--- src/main.ts | 12 +++-------- src/util/search-doc.ts | 10 ++++----- src/util/search-mdn.ts | 4 ++-- 9 files changed, 73 insertions(+), 54 deletions(-) diff --git a/.eslintrc b/.eslintrc index 9010375..13dbadf 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,25 +1,38 @@ { "extends": [ "eslint:recommended", - "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/strict-type-checked", "plugin:@typescript-eslint/stylistic-type-checked", - "plugin:prettier/recommended" + "plugin:prettier/recommended", ], "ignorePatterns": ["**/*.js"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", "project": true, - "sourceType": "module" + "sourceType": "module", }, "plugins": [ "@typescript-eslint", "import", "simple-import-sort", - "typescript-sort-keys" + "typescript-sort-keys", ], "root": true, "rules": { + // typescript-eslint + "@typescript-eslint/consistent-return": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-redundant-type-constituents": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", // import "import/first": "error", "import/newline-after-import": "error", @@ -29,6 +42,6 @@ "simple-import-sort/imports": "error", // typescript-sort-keys "typescript-sort-keys/interface": "error", - "typescript-sort-keys/string-enum": "error" - } + "typescript-sort-keys/string-enum": "error", + }, } diff --git a/package-lock.json b/package-lock.json index e7e2992..4ae1f2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,10 +10,10 @@ "license": "Apache-2.0", "dependencies": { "@discordx/importer": "^1.3.0", - "@discordx/plugin-lava-player": "^2.1.0", + "@discordx/plugin-lava-player": "^2.2.0", "axios": "^1.7.2", "discord.js": "^14.15.3", - "discordx": "^11.9.4", + "discordx": "^11.10.0", "dotenv": "^16.4.5", "lodash": "^4.17.21" }, @@ -204,9 +204,9 @@ } }, "node_modules/@discordx/lava-player": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@discordx/lava-player/-/lava-player-2.0.3.tgz", - "integrity": "sha512-0DzGiuz4uMj5fU2aKF23TVNv/iUMgV85cV2GY8Xca0inrxbxo5lonlDCV+65rcLxJAI5fQj8Pi6AihNLJPXajQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@discordx/lava-player/-/lava-player-2.0.6.tgz", + "integrity": "sha512-vZ3w8u2mVtXz0UciREYDbUTfdM0qoFIAokj0CK8Q34BLPZxFkkEM2rU2mQGkvf6knVGr0SrXMFH9AJA1zpDvfQ==", "dependencies": { "@types/backoff": "^2.5.5", "backoff": "^2.5.0", @@ -219,9 +219,9 @@ } }, "node_modules/@discordx/lava-queue": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@discordx/lava-queue/-/lava-queue-3.1.0.tgz", - "integrity": "sha512-YLIz9dxk6YEv/TvgcmGae6p5Vt26pLMTa69LpoiFBFidRX4VSINzVzDPOxpJVxMRZbE7xMKfXNVQ+iC0ew3gBw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@discordx/lava-queue/-/lava-queue-3.1.1.tgz", + "integrity": "sha512-73cYtRsOcUv9yL1chPwlXhzitZIc3sI1pOP7qayElL/VCtZMQ0cmDbvly+3zCU3DcBJ95HXZHqAYIHCwhxU/fw==", "dependencies": { "lodash": "^4.17.21", "tslib": "^2.6.3" @@ -231,14 +231,14 @@ "npm": ">=7.0.0" }, "peerDependencies": { - "@discordx/lava-player": ">=2.0.3", + "@discordx/lava-player": ">=2.0.4", "discord.js": ">=13" } }, "node_modules/@discordx/pagination": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@discordx/pagination/-/pagination-3.5.2.tgz", - "integrity": "sha512-VEBJwF10TRHMBQfFq2uSCidGQTD+85D3BQgij6tR7sNbfaBbGDUD+QtQq7oZhhJ2eXDI+BIVKrUDrGQ30ZRvzA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@discordx/pagination/-/pagination-3.5.3.tgz", + "integrity": "sha512-5DlYAWGzFfVRUEVtxPd2YxrRfigJewoXUQ1xL236dn/sUMLBJ0tQsbGXiEgqmHj8JyLRFvm9FaYNlknqNGwBeA==", "dependencies": { "lodash": "^4.17.21", "tslib": "^2.6.3" @@ -252,14 +252,14 @@ } }, "node_modules/@discordx/plugin-lava-player": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@discordx/plugin-lava-player/-/plugin-lava-player-2.1.0.tgz", - "integrity": "sha512-GC5FrQ6S6c167R+06YlNnMsgpcLES7KcADeTwu00XIQRxzydxql7Vyi4w6VzFBj7k42VfoEqpyWImDIpHJtiOQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordx/plugin-lava-player/-/plugin-lava-player-2.2.0.tgz", + "integrity": "sha512-9c1pLz5fKZ80o0HsyzojBT4Co/a4h3dkgCPyxdJ1nMkkczjDyADXpfw1SQhsOQjGwVPxD9ODhYY4NIdXWPLZhw==", "dependencies": { "@discordx/importer": "^1.3.0", - "@discordx/lava-player": "^2.0.3", - "@discordx/lava-queue": "^3.1.0", - "@discordx/pagination": "^3.5.2" + "@discordx/lava-player": "^2.0.5", + "@discordx/lava-queue": "^3.1.1", + "@discordx/pagination": "^3.5.3" } }, "node_modules/@eslint-community/eslint-utils": { @@ -1559,9 +1559,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/discordx": { - "version": "11.9.4", - "resolved": "https://registry.npmjs.org/discordx/-/discordx-11.9.4.tgz", - "integrity": "sha512-fZdvsys76KhsDJwoTwzyXL2BhMAQL+IxREWjD8YkfTIkkGhQZ3h2q2HkWUPrStU+uNC6gOj/NZ95KzXBneTcmg==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/discordx/-/discordx-11.10.0.tgz", + "integrity": "sha512-n91SpvyjNV2/7D9Hl8fmlepZtjwkxSfr95P2lmyOQFa6PxLGvYvqzqIUa8Ut2/fFEYTsZAgrG0Egl1eHYUDrOQ==", "dependencies": { "@discordx/di": "^3.3.1", "@discordx/internal": "^1.1.2", diff --git a/package.json b/package.json index 7008fb0..b39174a 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,10 @@ }, "dependencies": { "@discordx/importer": "^1.3.0", - "@discordx/plugin-lava-player": "^2.1.0", + "@discordx/plugin-lava-player": "^2.2.0", "axios": "^1.7.2", "discord.js": "^14.15.3", - "discordx": "^11.9.4", + "discordx": "^11.10.0", "dotenv": "^16.4.5", "lodash": "^4.17.21" }, diff --git a/src/commands/doc.cmd.ts b/src/commands/doc.cmd.ts index 40ce51a..fbc862c 100644 --- a/src/commands/doc.cmd.ts +++ b/src/commands/doc.cmd.ts @@ -1,5 +1,5 @@ -import type { CommandInteraction, GuildMember, User } from "discord.js"; -import { ApplicationCommandOptionType } from "discord.js"; +import type { CommandInteraction, User } from "discord.js"; +import { ApplicationCommandOptionType, GuildMember } from "discord.js"; import { Discord, Slash, SlashOption } from "discordx"; import { SearchDoc } from "../util/search-doc.js"; @@ -29,8 +29,12 @@ export class Command { user: GuildMember | User | undefined, interaction: CommandInteraction, ): Promise { + if (!(interaction.member instanceof GuildMember)) { + return; + } + if (user && user.id != interaction.user.id) { - url += `\n\n${user.toString()}, ${interaction.member?.toString()} requested you to view the mentioned documentation`; + url += `\n\n${user.toString()}, ${interaction.member.toString()} requested you to view the mentioned documentation`; } await interaction.reply({ diff --git a/src/commands/mdn.cmd.ts b/src/commands/mdn.cmd.ts index a5b08af..42eeef1 100644 --- a/src/commands/mdn.cmd.ts +++ b/src/commands/mdn.cmd.ts @@ -1,5 +1,5 @@ -import type { CommandInteraction, GuildMember, User } from "discord.js"; -import { ApplicationCommandOptionType } from "discord.js"; +import type { CommandInteraction, User } from "discord.js"; +import { ApplicationCommandOptionType, GuildMember } from "discord.js"; import { Discord, Slash, SlashOption } from "discordx"; import { MDN_BASE_URL, searchMDN } from "../util/search-mdn.js"; @@ -29,9 +29,13 @@ export class Command { user: GuildMember | User | undefined, interaction: CommandInteraction, ): Promise { + if (!(interaction.member instanceof GuildMember)) { + return; + } + url = MDN_BASE_URL + url; if (user && user.id != interaction.user.id) { - url += `\n\n${user.toString()}, ${interaction.member?.toString()} requested you to view the mentioned mdn documentation`; + url += `\n\n${user.toString()}, ${interaction.member.toString()} requested you to view the mentioned mdn documentation`; } await interaction.reply(url); diff --git a/src/commands/package.cmd.ts b/src/commands/package.cmd.ts index 36d06ae..0901151 100644 --- a/src/commands/package.cmd.ts +++ b/src/commands/package.cmd.ts @@ -1,5 +1,5 @@ -import type { CommandInteraction, GuildMember, User } from "discord.js"; -import { ApplicationCommandOptionType } from "discord.js"; +import type { CommandInteraction, User } from "discord.js"; +import { ApplicationCommandOptionType, GuildMember } from "discord.js"; import { Discord, Slash, SlashChoice, SlashOption } from "discordx"; import { packages } from "../util/packages.js"; @@ -25,6 +25,10 @@ export class Command { user: GuildMember | User | undefined, interaction: CommandInteraction, ): Promise { + if (!(interaction.member instanceof GuildMember)) { + return; + } + const pkg = packages.find((p) => p.name === selection); if (!pkg) { @@ -37,7 +41,7 @@ export class Command { `**Links**: [GitHub](${pkg.github}) || [NPM](${pkg.npm})\n`; if (user && user.id != interaction.user.id) { - response += `\n${user.toString()}, ${interaction.member?.toString()} requested you to view the mentioned package`; + response += `\n${user.toString()}, ${interaction.member.toString()} requested you to view the mentioned package`; } await interaction.reply({ diff --git a/src/main.ts b/src/main.ts index 3cd7fbd..b021117 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,15 +1,12 @@ +import "@discordx/plugin-lava-player"; + import { dirname, importx } from "@discordx/importer"; -import { LavaPlayerPlugin } from "@discordx/plugin-lava-player"; import type { Interaction, Message } from "discord.js"; import { IntentsBitField, Partials } from "discord.js"; -import { Client, MetadataStorage } from "discordx"; +import { Client } from "discordx"; import env from "./env.js"; -const lavaPlayer = new LavaPlayerPlugin({ - metadata: MetadataStorage.instance, -}); - export const bot = new Client({ // To only use global commands (use @Guild for specific guild command), comment this line // botGuilds: [(client) => client.guilds.cache.map((guild) => guild.id)], @@ -31,9 +28,6 @@ export const bot = new Client({ Partials.User, ], - // plugins - plugins: [lavaPlayer], - // Debug logs are disabled in silent mode silent: false, diff --git a/src/util/search-doc.ts b/src/util/search-doc.ts index e01b844..2e5a6c2 100644 --- a/src/util/search-doc.ts +++ b/src/util/search-doc.ts @@ -117,18 +117,18 @@ export async function SearchDoc(input: string): Promise { return []; } - const results: (IDocResults | undefined)[] = response.results[0]?.hits.map( + const results: (IDocResults | null)[] = response.results[0]?.hits.map( (hit) => { const title = `${hit.hierarchy.lvl0}${ hit.hierarchy.lvl1 ? `#${hit.hierarchy.lvl1}` : "" }` + - `${hit.hierarchy.lvl2 ? `#${hit.hierarchy.lvl2}` : ""}` + - `${hit.hierarchy.lvl3 ? `#${hit.hierarchy.lvl3}` : ""}` + - `${hit.hierarchy.lvl4 ? `#${hit.hierarchy.lvl4}` : ""}`.slice(0, 99); + (hit.hierarchy.lvl2 ? `#${hit.hierarchy.lvl2}` : "") + + (hit.hierarchy.lvl3 ? `#${hit.hierarchy.lvl3}` : "") + + (hit.hierarchy.lvl4 ? `#${hit.hierarchy.lvl4}` : "").slice(0, 99); if (!title.length || !hit.url.length || hit.url.length > 99) { - return; + return null; } return { diff --git a/src/util/search-mdn.ts b/src/util/search-mdn.ts index 1d77b6c..b412e49 100644 --- a/src/util/search-mdn.ts +++ b/src/util/search-mdn.ts @@ -59,12 +59,12 @@ export async function searchMDN(input: string): Promise { const docs = response.documents; - const results: (IDocResults | undefined)[] = docs.map((doc) => { + const results: (IDocResults | null)[] = docs.map((doc) => { const title = doc.title.slice(0, 99); const url = doc.mdn_url; if (!title.length || !url.length || url.length > 99) { - return; + return null; } return {