aboutsummaryrefslogtreecommitdiff
path: root/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/admin/channelPermissions.ts2
-rw-r--r--src/commands/admin/roleAll.ts1
-rw-r--r--src/commands/config/config.ts1
-rw-r--r--src/commands/config/disable.ts2
-rw-r--r--src/commands/dev/eval.ts3
-rw-r--r--src/commands/dev/reload.ts15
-rw-r--r--src/commands/dev/syncAutomod.ts11
-rw-r--r--src/commands/index.ts2
-rw-r--r--src/commands/info/help.ts2
-rw-r--r--src/commands/leveling/level.ts32
-rw-r--r--src/commands/moderation/unmute.ts38
-rw-r--r--src/commands/moulberry-bush/capePermissions.ts3
-rw-r--r--src/commands/moulberry-bush/capes.ts10
-rw-r--r--src/commands/moulberry-bush/serverStatus.ts8
-rw-r--r--src/commands/utilities/hash.ts82
-rw-r--r--src/commands/utilities/price.ts9
16 files changed, 85 insertions, 136 deletions
diff --git a/src/commands/admin/channelPermissions.ts b/src/commands/admin/channelPermissions.ts
index 21abd04..0b09e54 100644
--- a/src/commands/admin/channelPermissions.ts
+++ b/src/commands/admin/channelPermissions.ts
@@ -1,5 +1,6 @@
import {
Arg,
+ BushCommand,
ButtonPaginator,
clientSendAndPermCheck,
emojis,
@@ -10,7 +11,6 @@ import {
} from '#lib';
import assert from 'assert/strict';
import { ApplicationCommandOptionType, EmbedBuilder, PermissionFlagsBits } from 'discord.js';
-import { BushCommand } from '../../../lib/extensions/discord-akairo/BushCommand.js';
export default class ChannelPermissionsCommand extends BushCommand {
public constructor() {
diff --git a/src/commands/admin/roleAll.ts b/src/commands/admin/roleAll.ts
index a48bd6b..54afc2a 100644
--- a/src/commands/admin/roleAll.ts
+++ b/src/commands/admin/roleAll.ts
@@ -7,7 +7,6 @@ import {
type CommandMessage,
type SlashMessage
} from '#lib';
-
import assert from 'assert/strict';
import { ApplicationCommandOptionType, PermissionFlagsBits, type GuildMember } from 'discord.js';
diff --git a/src/commands/config/config.ts b/src/commands/config/config.ts
index f6b8bfa..39a44d1 100644
--- a/src/commands/config/config.ts
+++ b/src/commands/config/config.ts
@@ -15,7 +15,6 @@ import {
type SlashMessage
} from '#lib';
import assert from 'assert/strict';
-
import { type ArgumentGeneratorReturn, type SlashOption } from 'discord-akairo';
import {
ActionRowBuilder,
diff --git a/src/commands/config/disable.ts b/src/commands/config/disable.ts
index 00dea76..f9abb4a 100644
--- a/src/commands/config/disable.ts
+++ b/src/commands/config/disable.ts
@@ -11,7 +11,7 @@ import {
} from '#lib';
import assert from 'assert/strict';
import { ApplicationCommandOptionType, AutocompleteInteraction, PermissionFlagsBits } from 'discord.js';
-import Fuse from 'fuse.js';
+import { default as Fuse } from 'fuse.js';
assert(Fuse);
diff --git a/src/commands/dev/eval.ts b/src/commands/dev/eval.ts
index 04db2eb..fdef3ac 100644
--- a/src/commands/dev/eval.ts
+++ b/src/commands/dev/eval.ts
@@ -45,7 +45,6 @@ import {
ReactionCollector,
SelectMenuComponent
} from 'discord.js';
-import got from 'got';
import path from 'path';
import ts from 'typescript';
import { fileURLToPath } from 'url';
@@ -57,7 +56,7 @@ const { transpile } = ts,
/* eslint-enable @typescript-eslint/no-unused-vars */
// prettier-ignore
-assertAll(ActivePunishment, BushCommand, Global, Guild, Level, ModLog, Shared, StickyRole, Snowflake_, Canvas, exec, ActionRow, ButtonComponent, ButtonInteraction, Collection, Collector, CommandInteraction, ContextMenuCommandInteraction, DMChannel, Embed, Emoji, InteractionCollector, Message, Attachment, MessageCollector, OAuth2Scopes, PermissionFlagsBits, PermissionsBitField, ReactionCollector, SelectMenuComponent, path, ts, fileURLToPath, promisify, assert, got, transpile, sh, SnowflakeUtil, __dirname);
+assertAll(ActivePunishment, BushCommand, Global, Guild, Level, ModLog, Shared, StickyRole, Snowflake_, Canvas, exec, ActionRow, ButtonComponent, ButtonInteraction, Collection, Collector, CommandInteraction, ContextMenuCommandInteraction, DMChannel, Embed, Emoji, InteractionCollector, Message, Attachment, MessageCollector, OAuth2Scopes, PermissionFlagsBits, PermissionsBitField, ReactionCollector, SelectMenuComponent, path, ts, fileURLToPath, promisify, assert, transpile, sh, SnowflakeUtil, __dirname);
export default class EvalCommand extends BushCommand {
public constructor() {
diff --git a/src/commands/dev/reload.ts b/src/commands/dev/reload.ts
index 40d53eb..8125015 100644
--- a/src/commands/dev/reload.ts
+++ b/src/commands/dev/reload.ts
@@ -8,17 +8,6 @@ export default class ReloadCommand extends BushCommand {
description: 'Reloads the bot',
usage: ['reload'],
examples: ['reload'],
- // args: [
- // {
- // id: 'fast',
- // description: 'Whether or not to use esbuild for fast compiling.',
- // match: 'flag',
- // flag: ['--fast'],
- // prompt: 'Would you like to use esbuild for fast compiling?',
- // optional: true,
- // slashType: ApplicationCommandOptionType.Boolean
- // }
- // ],
ownerOnly: true,
typing: true,
slash: true,
@@ -27,13 +16,13 @@ export default class ReloadCommand extends BushCommand {
});
}
- public override async exec(message: CommandMessage | SlashMessage /* args: { fast: ArgType<'flag'> } */) {
+ public override async exec(message: CommandMessage | SlashMessage) {
if (!message.author.isOwner()) return await message.util.reply(`${emojis.error} Only my developers can run this command.`);
let output: { stdout: string; stderr: string };
try {
const s = new Date();
- output = await shell(`yarn build:${/* args.fast ? 'esbuild' : */ 'tsc'}`);
+ output = await shell(`yarn build`);
await Promise.all([
this.client.commandHandler.reloadAll(),
this.client.listenerHandler.reloadAll(),
diff --git a/src/commands/dev/syncAutomod.ts b/src/commands/dev/syncAutomod.ts
index c78e6c0..3dbd0be 100644
--- a/src/commands/dev/syncAutomod.ts
+++ b/src/commands/dev/syncAutomod.ts
@@ -1,5 +1,4 @@
import { BushCommand, clientSendAndPermCheck, emojis, Shared, type CommandMessage, type SlashMessage } from '#lib';
-import got from 'got';
import typescript from 'typescript';
import { NodeVM } from 'vm2';
@@ -22,10 +21,12 @@ export default class SyncAutomodCommand extends BushCommand {
if (!message.author.isOwner() && message.author.id !== '497789163555389441')
return await message.util.reply(`${emojis.error} Only a very select few may use this command.`);
- const badLinks = (await got.get('https://raw.githubusercontent.com/NotEnoughUpdates/bush-bot/master/src/lib/badlinks.ts'))
- .body;
- const badWords = (await got.get('https://raw.githubusercontent.com/NotEnoughUpdates/bush-bot/master/src/lib/badwords.ts'))
- .body;
+ const badLinks = await fetch('https://raw.githubusercontent.com/NotEnoughUpdates/bush-bot/master/src/lib/badlinks.ts').then(
+ (p) => p.text()
+ );
+ const badWords = await fetch('https://raw.githubusercontent.com/NotEnoughUpdates/bush-bot/master/src/lib/badwords.ts').then(
+ (p) => p.text()
+ );
const transpiledBadLinks = typescript.transpileModule(badLinks, {}).outputText;
const transpiledBadWords = typescript.transpileModule(badWords, {}).outputText;
diff --git a/src/commands/index.ts b/src/commands/index.ts
index a9db0de..59801c7 100644
--- a/src/commands/index.ts
+++ b/src/commands/index.ts
@@ -62,7 +62,7 @@ export { default as ServerStatusCommand } from './moulberry-bush/serverStatus.js
export { default as ActivityCommand } from './utilities/activity.js';
export { default as CalculatorCommand } from './utilities/calculator.js';
export { default as DecodeCommand } from './utilities/decode.js';
-export { default as HashCommand } from './utilities/hash.js';
+// export { default as HashCommand } from './utilities/hash.js';
export { default as PriceCommand } from './utilities/price.js';
export { default as RemindCommand } from './utilities/remind.js';
export { default as RemindersCommand } from './utilities/reminders.js';
diff --git a/src/commands/info/help.ts b/src/commands/info/help.ts
index 62f177e..df18403 100644
--- a/src/commands/info/help.ts
+++ b/src/commands/info/help.ts
@@ -20,7 +20,7 @@ import {
EmbedBuilder,
PermissionFlagsBits
} from 'discord.js';
-import Fuse from 'fuse.js';
+import { default as Fuse } from 'fuse.js';
import packageDotJSON from '../../../package.json' assert { type: 'json' };
assert(Fuse);
diff --git a/src/commands/leveling/level.ts b/src/commands/leveling/level.ts
index eda43f2..219ae19 100644
--- a/src/commands/leveling/level.ts
+++ b/src/commands/leveling/level.ts
@@ -13,11 +13,7 @@ import { SimplifyNumber } from '@notenoughupdates/simplify-number';
import assert from 'assert/strict';
import canvas from 'canvas';
import { ApplicationCommandOptionType, AttachmentBuilder, Guild, PermissionFlagsBits, User } from 'discord.js';
-import got from 'got';
-import { dirname, join } from 'path';
-import { fileURLToPath } from 'url';
assert(canvas);
-assert(got);
assert(SimplifyNumber);
export default class LevelCommand extends BushCommand {
@@ -85,10 +81,12 @@ export default class LevelCommand extends BushCommand {
const white = '#FFFFFF',
gray = '#23272A',
highlight = user.hexAccentColor ?? '#5865F2';
- // Load roboto font
+
+ // ! Broken on node v18 - install the font instead
+ /* // Load roboto font
canvas.registerFont(join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', '..', 'assets', 'Roboto-Regular.ttf'), {
family: 'Roboto'
- });
+ }); */
// Create image canvas
const levelCard = canvas.createCanvas(800, 200),
ctx = levelCard.getContext('2d');
@@ -97,9 +95,14 @@ export default class LevelCommand extends BushCommand {
ctx.fillRect(0, 0, levelCard.width, levelCard.height);
// Draw avatar
const AVATAR_SIZE = 128;
- const avatarBuffer = await got.get(user.displayAvatarURL({ extension: 'png', size: AVATAR_SIZE })).buffer();
const avatarImage = new canvas.Image();
- avatarImage.src = avatarBuffer;
+ avatarImage.src = user.displayAvatarURL({ extension: 'png', size: AVATAR_SIZE });
+
+ await new Promise((resolve, reject) => {
+ avatarImage.onload = () => resolve(undefined);
+ avatarImage.onerror = (e) => reject(e);
+ });
+
const imageTopCoord = levelCard.height / 2 - AVATAR_SIZE / 2;
ctx.drawImage(avatarImage, imageTopCoord, imageTopCoord, AVATAR_SIZE, AVATAR_SIZE);
// Write tag of user
@@ -123,13 +126,12 @@ export default class LevelCommand extends BushCommand {
progressBar.draw();
// Draw level data text
ctx.fillStyle = white;
- ctx.fillText(
- `Level: ${userLevel} XP: ${SimplifyNumber(currentLevelXpProgress)}/${SimplifyNumber(
- xpForNextLevel
- )} Rank: ${SimplifyNumber(rank.indexOf(rank.find((x) => x.user === user.id)!) + 1)}`,
- AVATAR_SIZE + 70,
- AVATAR_SIZE - 20
- );
+
+ const xpTxt = `${SimplifyNumber(currentLevelXpProgress)}/${SimplifyNumber(xpForNextLevel)}`;
+
+ const rankTxt = SimplifyNumber(rank.indexOf(rank.find((x) => x.user === user.id)!) + 1);
+
+ ctx.fillText(`Level: ${userLevel} XP: ${xpTxt} Rank: ${rankTxt}`, AVATAR_SIZE + 70, AVATAR_SIZE - 20);
// Return image in buffer form
return levelCard.toBuffer();
}
diff --git a/src/commands/moderation/unmute.ts b/src/commands/moderation/unmute.ts
index 620f499..f1e74ab 100644
--- a/src/commands/moderation/unmute.ts
+++ b/src/commands/moderation/unmute.ts
@@ -1,19 +1,16 @@
import {
AllowedMentions,
clientSendAndPermCheck,
- emojis,
- format,
+ formatUnmuteResponse,
Moderation,
- unmuteResponse,
userGuildPermCheck,
type ArgType,
type CommandMessage,
type OptArgType,
- type SlashMessage,
- type UnmuteResponse
+ type SlashMessage
} from '#lib';
import assert from 'assert/strict';
-import { ApplicationCommandOptionType, PermissionFlagsBits, type GuildMember } from 'discord.js';
+import { ApplicationCommandOptionType, PermissionFlagsBits } from 'discord.js';
import { BushCommand } from '../../../lib/extensions/discord-akairo/BushCommand.js';
export default class UnmuteCommand extends BushCommand {
@@ -83,35 +80,8 @@ export default class UnmuteCommand extends BushCommand {
});
return await message.util.reply({
- content: UnmuteCommand.formatCode(member.client.utils.prefix(message), member, responseCode),
+ content: formatUnmuteResponse(member.client.utils.prefix(message), member, responseCode),
allowedMentions: AllowedMentions.none()
});
}
-
- public static formatCode(prefix: string, member: GuildMember, code: UnmuteResponse): string {
- const error = emojis.error;
- const victim = format.input(member.user.tag);
- switch (code) {
- case unmuteResponse.MISSING_PERMISSIONS:
- return `${error} Could not unmute ${victim} because I am missing the **Manage Roles** permission.`;
- case unmuteResponse.NO_MUTE_ROLE:
- return `${error} Could not unmute ${victim}, you must set a mute role with \`${prefix}config muteRole\`.`;
- case unmuteResponse.MUTE_ROLE_INVALID:
- return `${error} Could not unmute ${victim} because the current mute role no longer exists. Please set a new mute role with \`${prefix}config muteRole\`.`;
- case unmuteResponse.MUTE_ROLE_NOT_MANAGEABLE:
- return `${error} Could not unmute ${victim} because I cannot assign the current mute role, either change the role's position or set a new mute role with \`${prefix}config muteRole\`.`;
- case unmuteResponse.ACTION_ERROR:
- return `${error} Could not unmute ${victim}, there was an error removing their mute role.`;
- case unmuteResponse.MODLOG_ERROR:
- return `${error} While muting ${victim}, there was an error creating a modlog entry, please report this to my developers.`;
- case unmuteResponse.PUNISHMENT_ENTRY_REMOVE_ERROR:
- return `${error} While muting ${victim}, there was an error removing their mute entry, please report this to my developers.`;
- case unmuteResponse.DM_ERROR:
- return `${emojis.warn} unmuted ${victim} however I could not send them a dm.`;
- case unmuteResponse.SUCCESS:
- return `${emojis.success} Successfully unmuted ${victim}.`;
- default:
- return `${emojis.error} An error occurred: ${format.input(code)}}`;
- }
- }
}
diff --git a/src/commands/moulberry-bush/capePermissions.ts b/src/commands/moulberry-bush/capePermissions.ts
index 3ad9602..793ac59 100644
--- a/src/commands/moulberry-bush/capePermissions.ts
+++ b/src/commands/moulberry-bush/capePermissions.ts
@@ -11,7 +11,6 @@ import {
type SlashMessage
} from '#lib';
import { ApplicationCommandOptionType, EmbedBuilder, PermissionFlagsBits } from 'discord.js';
-import got from 'got';
export default class CapePermissionsCommand extends BushCommand {
public constructor() {
@@ -50,7 +49,7 @@ export default class CapePermissionsCommand extends BushCommand {
}
try {
- capePerms = await got.get('http://moulberry.codes/permscapes.json').json();
+ capePerms = await fetch('http://moulberry.codes/permscapes.json').then((p) => (p.ok ? p.json() : null));
} catch (error) {
capePerms = null;
}
diff --git a/src/commands/moulberry-bush/capes.ts b/src/commands/moulberry-bush/capes.ts
index 8693dba..6ffc540 100644
--- a/src/commands/moulberry-bush/capes.ts
+++ b/src/commands/moulberry-bush/capes.ts
@@ -14,11 +14,9 @@ import {
} from '#lib';
import assert from 'assert/strict';
import { ApplicationCommandOptionType, PermissionFlagsBits, type APIEmbed, type AutocompleteInteraction } from 'discord.js';
-import Fuse from 'fuse.js';
-import got from 'got';
+import { default as Fuse } from 'fuse.js';
assert(Fuse);
-assert(got);
export default class CapesCommand extends BushCommand {
public constructor() {
@@ -47,9 +45,9 @@ export default class CapesCommand extends BushCommand {
}
public override async exec(message: CommandMessage | SlashMessage, args: { cape: OptArgType<'string'> }) {
- const { tree: neuFileTree }: GithubTreeApi = await got
- .get('https://api.github.com/repos/NotEnoughUpdates/NotEnoughUpdates/git/trees/master?recursive=1')
- .json();
+ const { tree: neuFileTree }: GithubTreeApi = await fetch(
+ 'https://api.github.com/repos/NotEnoughUpdates/NotEnoughUpdates/git/trees/master?recursive=1'
+ ).then((p) => (p.ok ? p.json() : { tree: [] }));
const rawCapes = neuFileTree
.map((f) => ({
match: f.path.match(/src\/main\/resources\/assets\/notenoughupdates\/capes\/(?<name>\w+)_preview\.png/),
diff --git a/src/commands/moulberry-bush/serverStatus.ts b/src/commands/moulberry-bush/serverStatus.ts
index 1237b3f..cde3f04 100644
--- a/src/commands/moulberry-bush/serverStatus.ts
+++ b/src/commands/moulberry-bush/serverStatus.ts
@@ -1,9 +1,5 @@
import { BushCommand, clientSendAndPermCheck, colors, emojis, type CommandMessage } from '#lib';
-import assert from 'assert/strict';
import { EmbedBuilder, PermissionFlagsBits } from 'discord.js';
-import got from 'got';
-
-assert(got);
export default class ServerStatusCommand extends BushCommand {
public constructor() {
@@ -28,8 +24,8 @@ export default class ServerStatusCommand extends BushCommand {
await message.util.reply({ embeds: [msgEmbed] });
let main;
try {
- await got.get('https://moulberry.codes/lowestbin.json').json();
- main = emojis.success;
+ const res = await fetch('https://moulberry.codes/lowestbin.json').then((p) => (p.ok ? p.json() : null));
+ main = res ? emojis.success : emojis.error;
} catch (e) {
main = emojis.error;
}
diff --git a/src/commands/utilities/hash.ts b/src/commands/utilities/hash.ts
index 6817f04..251d5e6 100644
--- a/src/commands/utilities/hash.ts
+++ b/src/commands/utilities/hash.ts
@@ -1,44 +1,44 @@
-import { BushCommand, clientSendAndPermCheck, type CommandMessage } from '#lib';
-import assert from 'assert/strict';
-import crypto from 'crypto';
-import { ApplicationCommandOptionType } from 'discord.js';
-import got from 'got';
+// import { BushCommand, clientSendAndPermCheck, type CommandMessage } from '#lib';
+// import assert from 'assert/strict';
+// import crypto from 'crypto';
+// import { ApplicationCommandOptionType } from 'discord.js';
+// import got from 'got';
-assert(crypto);
-assert(got);
+// assert(crypto);
+// assert(got);
-export default class HashCommand extends BushCommand {
- public constructor() {
- super('hash', {
- aliases: ['hash'],
- category: 'utilities',
- description: 'Gets the file hash of the given discord link',
- usage: ['hash <fileUrl>'],
- examples: ['hash https://cdn.discordapp.com/emojis/782630946435366942.png?v=1'], //nice
- args: [
- {
- id: 'url',
- description: 'The url of the discord link to find the hash of.',
- type: 'url',
- prompt: 'What url would you like to find the hash of?',
- retry: '{error} Enter a valid url.',
- slashType: ApplicationCommandOptionType.String
- }
- ],
- clientPermissions: (m) => clientSendAndPermCheck(m),
- userPermissions: []
- });
- }
+// export default class HashCommand extends BushCommand {
+// public constructor() {
+// super('hash', {
+// aliases: ['hash'],
+// category: 'utilities',
+// description: 'Gets the file hash of the given discord link',
+// usage: ['hash <fileUrl>'],
+// examples: ['hash https://cdn.discordapp.com/emojis/782630946435366942.png?v=1'], //nice
+// args: [
+// {
+// id: 'url',
+// description: 'The url of the discord link to find the hash of.',
+// type: 'url',
+// prompt: 'What url would you like to find the hash of?',
+// retry: '{error} Enter a valid url.',
+// slashType: ApplicationCommandOptionType.String
+// }
+// ],
+// clientPermissions: (m) => clientSendAndPermCheck(m),
+// userPermissions: []
+// });
+// }
- public override async exec(message: CommandMessage, { url }: { url: string }) {
- try {
- const req = await got.get(url);
- const rawHash = crypto.createHash('md5');
- rawHash.update(req.rawBody.toString('binary'));
- const hash = rawHash.digest('hex');
- await message.util.reply(`\`${hash}\``);
- } catch {
- await message.util.reply('Unable to calculate hash.');
- }
- }
-}
+// public override async exec(message: CommandMessage, { url }: { url: string }) {
+// try {
+// const req = await got.get(url);
+// const rawHash = crypto.createHash('md5');
+// rawHash.update(req.rawBody.toString('binary'));
+// const hash = rawHash.digest('hex');
+// await message.util.reply(`\`${hash}\``);
+// } catch {
+// await message.util.reply('Unable to calculate hash.');
+// }
+// }
+// }
diff --git a/src/commands/utilities/price.ts b/src/commands/utilities/price.ts
index 8a3b5c6..bfe1f10 100644
--- a/src/commands/utilities/price.ts
+++ b/src/commands/utilities/price.ts
@@ -1,11 +1,9 @@
import { ArgType, BushCommand, clientSendAndPermCheck, colors, emojis, format, oxford, type CommandMessage } from '#lib';
import assert from 'assert/strict';
import { ApplicationCommandOptionType, AutocompleteInteraction, EmbedBuilder, PermissionFlagsBits } from 'discord.js';
-import Fuse from 'fuse.js';
-import got from 'got';
+import { default as Fuse } from 'fuse.js';
assert(Fuse);
-assert(got);
export default class PriceCommand extends BushCommand {
public static cachedItemList: string[] = [];
@@ -57,9 +55,8 @@ export default class PriceCommand extends BushCommand {
const [bazaar, currentLowestBIN, averageLowestBIN, auctionAverages] = (await Promise.all(
PriceCommand.urls.map(({ url, error }) =>
- got
- .get(url)
- .json()
+ fetch(url)
+ .then((p) => (p.ok ? p.json() : undefined))
.catch(() => (errors.push(error), undefined))
)
)) as [Bazaar?, LowestBIN?, LowestBIN?, AuctionAverages?];