aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json3
-rw-r--r--src/arguments/abbreviatedNumber.ts2
-rw-r--r--src/commands/info/userInfo.ts3
-rw-r--r--src/inhibitors/blacklist/channelGlobalBlacklist.ts5
-rw-r--r--src/inhibitors/blacklist/channelGuildBlacklist.ts5
-rw-r--r--src/inhibitors/blacklist/guildBlacklist.ts8
-rw-r--r--src/inhibitors/blacklist/userGlobalBlacklist.ts2
-rw-r--r--src/inhibitors/blacklist/userGuildBlacklist.ts5
-rw-r--r--src/inhibitors/checks/fatal.ts2
-rw-r--r--src/lib/extensions/discord-akairo/BushClientUtil.ts18
-rw-r--r--src/lib/utils/BushConstants.ts3
-rw-r--r--src/listeners/guild/guildMemberRemove.ts3
-rw-r--r--src/listeners/track-manual-punishments/modlogSyncBan.ts2
-rw-r--r--src/listeners/track-manual-punishments/modlogSyncKick.ts2
-rw-r--r--src/listeners/track-manual-punishments/modlogSyncTimeout.ts2
-rw-r--r--src/listeners/track-manual-punishments/modlogSyncUnban.ts2
-rw-r--r--src/tasks/cpuUsage.ts6
-rw-r--r--src/tasks/handleReminders.ts6
-rw-r--r--src/tasks/removeExpiredPunishements.ts6
-rw-r--r--src/tasks/updateCache.ts3
-rw-r--r--src/tasks/updateHighlightCache.ts15
-rw-r--r--src/tasks/updatePriceItemCache.ts4
-rw-r--r--src/tasks/updateStats.ts4
-rw-r--r--tsconfig.json3
24 files changed, 69 insertions, 45 deletions
diff --git a/package.json b/package.json
index fc23824..b39aa04 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,9 @@
"#lib": {
"default": "./src/lib/index.js"
},
+ "#constants": {
+ "default": "./src/lib/utils/BushConstants.js"
+ },
"#args": {
"default": "./src/arguments/index.js"
},
diff --git a/src/arguments/abbreviatedNumber.ts b/src/arguments/abbreviatedNumber.ts
index a98699c..43d2938 100644
--- a/src/arguments/abbreviatedNumber.ts
+++ b/src/arguments/abbreviatedNumber.ts
@@ -7,7 +7,7 @@ export const abbreviatedNumber: BushArgumentTypeCaster<number | null> = (_, phra
if (!phrase) return null;
const num = numeral(phrase?.toLowerCase()).value();
- if (num === undefined || num === null || isNaN(num)) return null;
+ if (typeof num !== 'number' || isNaN(num)) return null;
return num;
};
diff --git a/src/commands/info/userInfo.ts b/src/commands/info/userInfo.ts
index 4e3675b..0ff8611 100644
--- a/src/commands/info/userInfo.ts
+++ b/src/commands/info/userInfo.ts
@@ -1,5 +1,6 @@
import {
BushCommand,
+ Time,
type ArgType,
type BushGuild,
type BushGuildMember,
@@ -127,7 +128,7 @@ export default class UserInfoCommand extends BushCommand {
if (user.accentColor !== null) generalInfo.push(`**Accent Color:** ${user.hexAccentColor}`);
if (user.banner) generalInfo.push(`**Banner:** [link](${user.bannerURL({ extension: 'png', size: 4096 })})`);
- const pronouns = await Promise.race([util.getPronounsOf(user), util.sleep(2)]); // cut off request after 2 seconds
+ const pronouns = await Promise.race([util.getPronounsOf(user), util.sleep(2 * Time.Second)]); // cut off request after 2 seconds
if (pronouns && typeof pronouns === 'string' && pronouns !== 'Unspecified') generalInfo.push(`**Pronouns:** ${pronouns}`);
diff --git a/src/inhibitors/blacklist/channelGlobalBlacklist.ts b/src/inhibitors/blacklist/channelGlobalBlacklist.ts
index b9d7240..9023dc2 100644
--- a/src/inhibitors/blacklist/channelGlobalBlacklist.ts
+++ b/src/inhibitors/blacklist/channelGlobalBlacklist.ts
@@ -11,9 +11,8 @@ export default class UserGlobalBlacklistInhibitor extends BushInhibitor {
}
public override exec(message: BushMessage | BushSlashMessage, command: BushCommand): boolean {
- if (!message.author || !message.guild) return false;
- if (client.isOwner(message.author) || /* client.isSuperUser(message.author) ||*/ client.user!.id === message.author.id)
- return false;
+ if (!message.inGuild()) return false;
+ if (message.author.isOwner() || client.user!.id === message.author.id) return false;
if (client.cache.global.blacklistedChannels.includes(message.channel!.id) && !command.bypassChannelBlacklist) {
void client.console.verbose(
'channelGlobalBlacklist',
diff --git a/src/inhibitors/blacklist/channelGuildBlacklist.ts b/src/inhibitors/blacklist/channelGuildBlacklist.ts
index e881ebb..aa5b2d9 100644
--- a/src/inhibitors/blacklist/channelGuildBlacklist.ts
+++ b/src/inhibitors/blacklist/channelGuildBlacklist.ts
@@ -11,9 +11,8 @@ export default class ChannelGuildBlacklistInhibitor extends BushInhibitor {
}
public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
- if (!message.author || !message.guild) return false;
- if (client.isOwner(message.author) || /* client.isSuperUser(message.author) || */ client.user!.id === message.author.id)
- return false;
+ if (!message.inGuild()) return false;
+ if (message.author.isOwner() || client.user!.id === message.author.id) return false;
if (
(await message.guild.getSetting('bypassChannelBlacklist'))?.includes(message.author.id) &&
!command.bypassChannelBlacklist
diff --git a/src/inhibitors/blacklist/guildBlacklist.ts b/src/inhibitors/blacklist/guildBlacklist.ts
index b319475..9949c22 100644
--- a/src/inhibitors/blacklist/guildBlacklist.ts
+++ b/src/inhibitors/blacklist/guildBlacklist.ts
@@ -11,12 +11,8 @@ export default class GuildBlacklistInhibitor extends BushInhibitor {
}
public override exec(message: BushMessage | BushSlashMessage): boolean {
- if (!message.guild) return false;
- if (
- message.author &&
- (client.isOwner(message.author) || client.isSuperUser(message.author) || client.user!.id === message.author.id)
- )
- return false;
+ if (!message.inGuild()) return false;
+ if (message.author.isOwner() || message.author.isSuperUser() || client.user!.id === message.author.id) return false;
if (client.cache.global.blacklistedGuilds.includes(message.guild.id)) {
void client.console.verbose(
'guildBlacklist',
diff --git a/src/inhibitors/blacklist/userGlobalBlacklist.ts b/src/inhibitors/blacklist/userGlobalBlacklist.ts
index ad906f8..d0f9a9f 100644
--- a/src/inhibitors/blacklist/userGlobalBlacklist.ts
+++ b/src/inhibitors/blacklist/userGlobalBlacklist.ts
@@ -12,7 +12,7 @@ export default class UserGlobalBlacklistInhibitor extends BushInhibitor {
public override exec(message: BushMessage | BushSlashMessage): boolean {
if (!message.author) return false;
- if (client.isOwner(message.author) || client.user!.id === message.author.id) return false;
+ if (message.author.isOwner() || client.user!.id === message.author.id) return false;
if (client.cache.global.blacklistedUsers.includes(message.author.id)) {
void client.console.verbose(
'userGlobalBlacklist',
diff --git a/src/inhibitors/blacklist/userGuildBlacklist.ts b/src/inhibitors/blacklist/userGuildBlacklist.ts
index a87e47c..61f670e 100644
--- a/src/inhibitors/blacklist/userGuildBlacklist.ts
+++ b/src/inhibitors/blacklist/userGuildBlacklist.ts
@@ -11,9 +11,8 @@ export default class UserGuildBlacklistInhibitor extends BushInhibitor {
}
public override async exec(message: BushMessage | BushSlashMessage): Promise<boolean> {
- if (!message.author || !message.guild) return false;
- if (client.isOwner(message.author) || client.isSuperUser(message.author) || client.user!.id === message.author.id)
- return false;
+ if (!message.inGuild()) return false;
+ if (message.author.isOwner() || message.author.isSuperUser() || client.user!.id === message.author.id) return false;
if ((await message.guild.getSetting('blacklistedUsers'))?.includes(message.author.id)) {
void client.console.verbose(
'userGuildBlacklist',
diff --git a/src/inhibitors/checks/fatal.ts b/src/inhibitors/checks/fatal.ts
index 2521b2f..411357c 100644
--- a/src/inhibitors/checks/fatal.ts
+++ b/src/inhibitors/checks/fatal.ts
@@ -11,7 +11,7 @@ export default class FatalInhibitor extends BushInhibitor {
}
public override async exec(message: BushMessage | BushSlashMessage): Promise<boolean> {
- if (client.isOwner(message.author)) return false;
+ if (message.author.isOwner()) return false;
for (const property in client.cache.global) {
if (!client.cache.global[property as keyof typeof client.cache.global]) {
void client.console.verbose(
diff --git a/src/lib/extensions/discord-akairo/BushClientUtil.ts b/src/lib/extensions/discord-akairo/BushClientUtil.ts
index 36dc396..6b5cb39 100644
--- a/src/lib/extensions/discord-akairo/BushClientUtil.ts
+++ b/src/lib/extensions/discord-akairo/BushClientUtil.ts
@@ -402,7 +402,7 @@ export class BushClientUtil extends ClientUtil {
* @returns The combined elements or `ifEmpty`.
*
* @example
- * const permissions = oxford([PermissionFlagsBits.Administrator, PermissionFlagsBits.SendMessages, PermissionFlagsBits.ManageMessages], 'and', 'none');
+ * const permissions = oxford(['Administrator', 'SendMessages', 'ManageMessages'], 'and', 'none');
* console.log(permissions); // Administrator, SendMessages and ManageMessages
*/
public oxford(array: string[], conjunction: string, ifEmpty?: string): string | undefined {
@@ -415,7 +415,14 @@ export class BushClientUtil extends ClientUtil {
return array.join(', ');
}
+ /**
+ * Get the global cache.
+ */
public getGlobal(): GlobalCache;
+ /**
+ * Get a key from the global cache.
+ * @param key The key to get in the global cache.
+ */
public getGlobal<K extends keyof GlobalCache>(key: K): GlobalCache[K];
public getGlobal(key?: keyof GlobalCache) {
return key ? client.cache.global[key] : client.cache.global;
@@ -651,12 +658,11 @@ export class BushClientUtil extends ClientUtil {
}
/**
- * Wait an amount in seconds.
- * @param seconds The number of seconds to wait
- * @returns A promise that resolves after the specified amount of seconds
+ * Wait an amount in milliseconds.
+ * @returns A promise that resolves after the specified amount of milliseconds
*/
- public async sleep(seconds: number) {
- return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
+ public get sleep() {
+ return promisify(setTimeout);
}
/**
diff --git a/src/lib/utils/BushConstants.ts b/src/lib/utils/BushConstants.ts
index 93de100..8d35522 100644
--- a/src/lib/utils/BushConstants.ts
+++ b/src/lib/utils/BushConstants.ts
@@ -3,6 +3,9 @@ import { BushClientUtil } from '../extensions/discord-akairo/BushClientUtil.js';
const rawCapeUrl = 'https://raw.githubusercontent.com/NotEnoughUpdates/capes/master/';
+/**
+ * Time units in milliseconds
+ */
export const enum Time {
/**
* One millisecond (1 ms).
diff --git a/src/listeners/guild/guildMemberRemove.ts b/src/listeners/guild/guildMemberRemove.ts
index ac162f6..d71f3fd 100644
--- a/src/listeners/guild/guildMemberRemove.ts
+++ b/src/listeners/guild/guildMemberRemove.ts
@@ -1,6 +1,7 @@
import {
BushListener,
StickyRole,
+ Time,
type BushClientEvents,
type BushGuildMember,
type BushTextChannel,
@@ -25,7 +26,7 @@ export default class GuildMemberRemoveListener extends BushListener {
private async sendWelcomeMessage(member: BushGuildMember | PartialBushGuildMember) {
if (client.config.isDevelopment) return;
const user = member.partial ? await client.users.fetch(member.id) : member.user;
- await util.sleep(0.05); // ban usually triggers after member leave
+ await util.sleep(50 * Time.Millisecond); // ban usually triggers after member leave
const isBan = member.guild.bans.cache.has(member.id);
const welcomeChannel = await member.guild.getSetting('welcomeChannel');
if (!welcomeChannel) return;
diff --git a/src/listeners/track-manual-punishments/modlogSyncBan.ts b/src/listeners/track-manual-punishments/modlogSyncBan.ts
index 480daab..16fa75d 100644
--- a/src/listeners/track-manual-punishments/modlogSyncBan.ts
+++ b/src/listeners/track-manual-punishments/modlogSyncBan.ts
@@ -22,7 +22,7 @@ export default class ModlogSyncBanListener extends BushListener {
}
const now = new Date();
- await util.sleep(0.5); // wait for audit log entry
+ await util.sleep(500 * Time.Millisecond); // wait for audit log entry
const logs = (await ban.guild.fetchAuditLogs({ type: AuditLogEvent.MemberBanAdd })).entries.filter(
(entry) => entry.target?.id === ban.user.id
diff --git a/src/listeners/track-manual-punishments/modlogSyncKick.ts b/src/listeners/track-manual-punishments/modlogSyncKick.ts
index d766aa3..fa7a6dd 100644
--- a/src/listeners/track-manual-punishments/modlogSyncKick.ts
+++ b/src/listeners/track-manual-punishments/modlogSyncKick.ts
@@ -22,7 +22,7 @@ export default class ModlogSyncKickListener extends BushListener {
}
const now = new Date();
- await util.sleep(0.5); // wait for audit log entry
+ await util.sleep(500 * Time.Millisecond); // wait for audit log entry
const logs = (await member.guild.fetchAuditLogs({ type: AuditLogEvent.MemberKick })).entries.filter(
(entry) => entry.target?.id === member.user.id
diff --git a/src/listeners/track-manual-punishments/modlogSyncTimeout.ts b/src/listeners/track-manual-punishments/modlogSyncTimeout.ts
index 4796f84..4d7f901 100644
--- a/src/listeners/track-manual-punishments/modlogSyncTimeout.ts
+++ b/src/listeners/track-manual-punishments/modlogSyncTimeout.ts
@@ -21,7 +21,7 @@ export default class ModlogSyncTimeoutListener extends BushListener {
}
const now = new Date();
- await util.sleep(0.5); // wait for audit log entry
+ await util.sleep(500 * Time.Millisecond); // wait for audit log entry
const logs = (await newMember.guild.fetchAuditLogs({ type: AuditLogEvent.MemberUpdate })).entries.filter(
(entry) => entry.target?.id === newMember.user.id
diff --git a/src/listeners/track-manual-punishments/modlogSyncUnban.ts b/src/listeners/track-manual-punishments/modlogSyncUnban.ts
index c1ef561..680b965 100644
--- a/src/listeners/track-manual-punishments/modlogSyncUnban.ts
+++ b/src/listeners/track-manual-punishments/modlogSyncUnban.ts
@@ -21,7 +21,7 @@ export default class ModlogSyncUnbanListener extends BushListener {
}
const now = new Date();
- await util.sleep(0.5); // wait for audit log entry
+ await util.sleep(500 * Time.Millisecond); // wait for audit log entry
const logs = (await ban.guild.fetchAuditLogs({ type: AuditLogEvent.MemberBanRemove })).entries.filter(
(entry) => entry.target?.id === ban.user.id
diff --git a/src/tasks/cpuUsage.ts b/src/tasks/cpuUsage.ts
index 9985e48..e5cfc00 100644
--- a/src/tasks/cpuUsage.ts
+++ b/src/tasks/cpuUsage.ts
@@ -1,16 +1,16 @@
-import { BushTask } from '#lib';
+import { BushTask, Time } from '#lib';
import osu from 'node-os-utils';
export default class CpuUsageTask extends BushTask {
public constructor() {
super('cpuUsage', {
- delay: 60_000, // 1 minute
+ delay: Time.Minute,
runOnStart: true
});
}
public override async exec() {
- const cpu = await osu.cpu.usage(client.stats.cpu === undefined ? 100 : 60_000);
+ const cpu = await osu.cpu.usage(client.stats.cpu === undefined ? 100 * Time.Millisecond : Time.Minute);
client.stats.cpu = cpu;
}
}
diff --git a/src/tasks/handleReminders.ts b/src/tasks/handleReminders.ts
index d1af480..e281903 100644
--- a/src/tasks/handleReminders.ts
+++ b/src/tasks/handleReminders.ts
@@ -1,10 +1,10 @@
-import { BushTask, Reminder } from '#lib';
+import { BushTask, Reminder, Time } from '#lib';
const { Op } = (await import('sequelize')).default;
export default class HandlerRemindersTask extends BushTask {
public constructor() {
super('handlerReminders', {
- delay: 30_000, // 30 seconds
+ delay: 30 * Time.Second,
runOnStart: true
});
}
@@ -13,7 +13,7 @@ export default class HandlerRemindersTask extends BushTask {
const expiredEntries = await Reminder.findAll({
where: {
expires: {
- [Op.lt]: new Date(Date.now() + 30_000) // Find all rows with an expiry date before 30 seconds from now
+ [Op.lt]: new Date(Date.now() + 30 * Time.Second) // Find all rows with an expiry date before 30 seconds from now
},
notified: false
}
diff --git a/src/tasks/removeExpiredPunishements.ts b/src/tasks/removeExpiredPunishements.ts
index 904e614..b1ca042 100644
--- a/src/tasks/removeExpiredPunishements.ts
+++ b/src/tasks/removeExpiredPunishements.ts
@@ -1,11 +1,11 @@
-import { ActivePunishment, ActivePunishmentType, BushTask, type BushGuild, type BushUser } from '#lib';
+import { ActivePunishment, ActivePunishmentType, BushTask, Time, type BushGuild, type BushUser } from '#lib';
import assert from 'assert';
const { Op } = (await import('sequelize')).default;
export default class RemoveExpiredPunishmentsTask extends BushTask {
public constructor() {
super('removeExpiredPunishments', {
- delay: 15_000, // 15 seconds
+ delay: 15 * Time.Second,
runOnStart: true
});
}
@@ -14,7 +14,7 @@ export default class RemoveExpiredPunishmentsTask extends BushTask {
const expiredEntries = await ActivePunishment.findAll({
where: {
expires: {
- [Op.lt]: new Date(Date.now() + 15_000) // Find all rows with an expiry date before 15 seconds from now
+ [Op.lt]: new Date(Date.now() + 15 * Time.Second) // Find all rows with an expiry date before 15 seconds from now
}
}
});
diff --git a/src/tasks/updateCache.ts b/src/tasks/updateCache.ts
index 9084c1c..3794f76 100644
--- a/src/tasks/updateCache.ts
+++ b/src/tasks/updateCache.ts
@@ -1,3 +1,4 @@
+import { Time } from '#constants';
import { Global, Guild, Shared, type BushClient } from '#lib';
import { BushTask } from '../lib/extensions/discord-akairo/BushTask.js';
import config from './../config/options.js';
@@ -5,7 +6,7 @@ import config from './../config/options.js';
export default class UpdateCacheTask extends BushTask {
public constructor() {
super('updateCache', {
- delay: 300_000, // 5 minutes
+ delay: 5 * Time.Minute,
runOnStart: false // done in preinit task
});
}
diff --git a/src/tasks/updateHighlightCache.ts b/src/tasks/updateHighlightCache.ts
new file mode 100644
index 0000000..22289ce
--- /dev/null
+++ b/src/tasks/updateHighlightCache.ts
@@ -0,0 +1,15 @@
+import { Time } from '#constants';
+import { BushTask } from '../lib/extensions/discord-akairo/BushTask.js';
+
+export default class UpdateHighlightCacheTask extends BushTask {
+ public constructor() {
+ super('updateHighlightCache', {
+ delay: 5 * Time.Minute,
+ runOnStart: false
+ });
+ }
+
+ public override async exec() {
+ return client.highlightManager.syncCache();
+ }
+}
diff --git a/src/tasks/updatePriceItemCache.ts b/src/tasks/updatePriceItemCache.ts
index 096354b..6414eb0 100644
--- a/src/tasks/updatePriceItemCache.ts
+++ b/src/tasks/updatePriceItemCache.ts
@@ -1,11 +1,11 @@
-import { BushTask } from '#lib';
+import { BushTask, Time } from '#lib';
import got from 'got';
import PriceCommand, { AuctionAverages, Bazaar, LowestBIN } from '../commands/utilities/price.js';
export default class UpdatePriceItemCache extends BushTask {
public constructor() {
super('updatePriceItemCache', {
- delay: 600_000, // 10 minutes
+ delay: 10 * Time.Minute,
runOnStart: true
});
}
diff --git a/src/tasks/updateStats.ts b/src/tasks/updateStats.ts
index bf8d2ed..15ebe96 100644
--- a/src/tasks/updateStats.ts
+++ b/src/tasks/updateStats.ts
@@ -1,9 +1,9 @@
-import { BushTask, Stat } from '#lib';
+import { BushTask, Stat, Time } from '#lib';
export default class UpdateStatsTask extends BushTask {
public constructor() {
super('updateStats', {
- delay: 600_000, // 10 minutes
+ delay: 10 * Time.Minute,
runOnStart: true
});
}
diff --git a/tsconfig.json b/tsconfig.json
index 2bb70c9..32b9b83 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -20,7 +20,8 @@
"preserveValueImports": true,
"removeComments": true,
"paths": {
- "#lib": ["./src/lib/index.js"],
+ "#lib": ["./src/lib/index.ts"],
+ "#constants": ["./src/lib/utils/BushConstants.ts"],
"#args": ["./src/arguments/index.ts"],
"#commands": ["./src/commands/index.ts"]
},