aboutsummaryrefslogtreecommitdiff
path: root/src/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'src/tasks')
-rw-r--r--src/tasks/removePunishmentRole.ts (renamed from src/tasks/unrole.ts)0
-rw-r--r--src/tasks/unmute.ts45
-rw-r--r--src/tasks/updateCache.ts18
3 files changed, 59 insertions, 4 deletions
diff --git a/src/tasks/unrole.ts b/src/tasks/removePunishmentRole.ts
index e69de29..e69de29 100644
--- a/src/tasks/unrole.ts
+++ b/src/tasks/removePunishmentRole.ts
diff --git a/src/tasks/unmute.ts b/src/tasks/unmute.ts
index e69de29..33cbd92 100644
--- a/src/tasks/unmute.ts
+++ b/src/tasks/unmute.ts
@@ -0,0 +1,45 @@
+import { DiscordAPIError } from 'discord.js';
+import { Op } from 'sequelize';
+import { BushTask } from '../lib/extensions/BushTask';
+import { Guild } from '../lib/models';
+import { Mute } from '../lib/models/Mute';
+
+export default class UnmuteTask extends BushTask {
+ constructor() {
+ super('unmute', {
+ delay: 30_000, // 1/2 min
+ runOnStart: true
+ });
+ }
+ async exec(): Promise<void> {
+ const rows = await Mute.findAll({
+ where: {
+ [Op.and]: [
+ {
+ expires: {
+ [Op.lt]: new Date() // Find all rows with an expiry date before now
+ }
+ }
+ ]
+ }
+ });
+ this.client.logger.verbose(`UnmuteTask`, `Queried mutes, found <<${rows.length}>> expired mutes.`);
+ for (const row of rows) {
+ const guild = this.client.guilds.cache.get(row.guild);
+ const muteRole = (await Guild.findByPk(row.guild)).muteRole;
+ if (!guild) {
+ await row.destroy();
+ continue;
+ }
+ try {
+ await (await guild.members.fetch(row.user)).roles.remove(muteRole);
+ } catch (e) {
+ if (e instanceof DiscordAPIError) {
+ // ignore
+ } else throw e;
+ }
+ await row.destroy();
+ this.client.logger.verbose(`UnmuteTask`, `Unmuted ${row.user}`);
+ }
+ }
+}
diff --git a/src/tasks/updateCache.ts b/src/tasks/updateCache.ts
index 6c1f098..3f213f2 100644
--- a/src/tasks/updateCache.ts
+++ b/src/tasks/updateCache.ts
@@ -1,15 +1,26 @@
+import { BushClient } from '../lib/extensions/BushClient';
import { BushTask } from '../lib/extensions/BushTask';
import { Global } from '../lib/models';
+import * as config from './../config/options';
export default class UpdateCacheTask extends BushTask {
constructor() {
super('updateCache', {
delay: 300_000, // 5 minutes
- runOnStart: true
+ runOnStart: false // done in preinit task
});
}
async exec(): Promise<void> {
- const environment = this.client.config.dev ? 'development' : 'production';
+ await this.updateCache(this.client);
+ await this.client.logger.verbose(`UpdateCache`, `Updated cache.`);
+ }
+
+ async init(client: BushClient): Promise<void> {
+ await this.updateCache(client);
+ }
+
+ async updateCache(client: BushClient): Promise<void> {
+ const environment = config.dev ? 'development' : 'production';
const row =
(await Global.findByPk(environment)) ||
(await Global.create({
@@ -22,8 +33,7 @@ export default class UpdateCacheTask extends BushTask {
}));
for (const option in row) {
- if (this.client.cache[option]) this.client.cache[option] = row[option];
+ if (client.cache[option]) this.client.cache[option] = row[option];
}
- this.client.logger.verbose(`UpdateCache`, `Updated cache.`);
}
}