From 40f9581991e12082a2708fa8fdd454c080f67a4b Mon Sep 17 00:00:00 2001 From: IRONM00N <64110067+IRONM00N@users.noreply.github.com> Date: Sun, 24 Apr 2022 23:04:49 -0400 Subject: add member ship tracking because I want to make graph --- src/lib/extensions/discord-akairo/BushClient.ts | 2 ++ src/lib/index.ts | 1 + src/lib/models/shared/MemberCount.ts | 38 +++++++++++++++++++++++++ src/tasks/memberCount.ts | 26 +++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 src/lib/models/shared/MemberCount.ts create mode 100644 src/tasks/memberCount.ts (limited to 'src') diff --git a/src/lib/extensions/discord-akairo/BushClient.ts b/src/lib/extensions/discord-akairo/BushClient.ts index 1e6418c..4f0c6b0 100644 --- a/src/lib/extensions/discord-akairo/BushClient.ts +++ b/src/lib/extensions/discord-akairo/BushClient.ts @@ -58,6 +58,7 @@ import { ModLog } from '../../models/instance/ModLog.js'; import { Reminder } from '../../models/instance/Reminder.js'; import { StickyRole } from '../../models/instance/StickyRole.js'; import { Global } from '../../models/shared/Global.js'; +import { MemberCount } from '../../models/shared/MemberCount.js'; import { Shared } from '../../models/shared/Shared.js'; import { Stat } from '../../models/shared/Stat.js'; import { AllowedMentions } from '../../utils/AllowedMentions.js'; @@ -444,6 +445,7 @@ export class BushClient extends AkairoClient implements MemberCountModel { + public declare timestamp: Date; + public declare guildId: string; + public declare memberCount: number; + + /** + * Initializes the model. + * @param sequelize The sequelize instance. + */ + public static initModel(sequelize: Sequelize): void { + MemberCount.init( + { + timestamp: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW }, + guildId: { type: DataTypes.STRING, allowNull: false }, + memberCount: { type: DataTypes.BIGINT, allowNull: false } + }, + { sequelize, timestamps: false } + ); + } +} diff --git a/src/tasks/memberCount.ts b/src/tasks/memberCount.ts new file mode 100644 index 0000000..0f1dfc0 --- /dev/null +++ b/src/tasks/memberCount.ts @@ -0,0 +1,26 @@ +import { BushTask, MemberCount, Time } from '#lib'; +import assert from 'assert'; + +export default class MemberCountTask extends BushTask { + public constructor() { + super('memberCount', { + delay: Time.Minute, + runOnStart: true + }); + } + + public override async exec() { + if (!client.config.isProduction) return; + + const res = await Promise.allSettled( + client.guilds.cache.map((g) => MemberCount.create({ guildId: g.id, memberCount: g.memberCount })) + ); + + res + .filter((r) => r.status === 'rejected') + .forEach((r) => { + assert(r.status === 'rejected'); + void client.console.error('memberCount', r.status); + }); + } +} -- cgit