fix: cache user data, do daily role sweep
Node.js CI / Lint and Test (push) Successful in 38s

This commit is contained in:
2025-08-20 16:35:01 -07:00
parent 4611b13465
commit 1346a29a1f
3 changed files with 47 additions and 0 deletions
+7
View File
@@ -7,6 +7,7 @@
import { Client, GatewayIntentBits, Events, Partials } from "discord.js"; import { Client, GatewayIntentBits, Events, Partials } from "discord.js";
import { scheduleJob } from "node-schedule"; import { scheduleJob } from "node-schedule";
import { handleMessageCreate } from "./events/handleMessageCreate.js"; import { handleMessageCreate } from "./events/handleMessageCreate.js";
import { cacheData } from "./modules/cacheData.js";
import { import {
postFreeCodeCampNews, postFreeCodeCampNews,
postHackerNews, postHackerNews,
@@ -35,10 +36,16 @@ const amari: Amari = {
amari.discord.once(Events.ClientReady, () => { amari.discord.once(Events.ClientReady, () => {
void logger.log("debug", void logger.log("debug",
`Authenticated to Discord as ${amari.discord.user?.username ?? "unknown"}`); `Authenticated to Discord as ${amari.discord.user?.username ?? "unknown"}`);
void cacheData(amari);
scheduleJob("post news", "0 * * * *", async() => { scheduleJob("post news", "0 * * * *", async() => {
await logger.log("debug", "Fetching tech news.");
await postFreeCodeCampNews(amari); await postFreeCodeCampNews(amari);
await postHackerNews(amari); await postHackerNews(amari);
}); });
scheduleJob("check guild tags", "0 0 * * *", async() => {
await logger.log("debug", "Auditing guild tags.");
await cacheData(amari);
});
}); });
amari.discord.on(Events.MessageCreate, (message) => { amari.discord.on(Events.MessageCreate, (message) => {
+35
View File
@@ -0,0 +1,35 @@
/**
* @copyright NHCarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { ids } from "../config/ids.js";
import { logger } from "../utils/logger.js";
import { processUserGuildTag } from "./processUserGuildTag.js";
import type { Amari } from "../interfaces/amari.js";
/**
* To run on boot. Loads and caches our home guild members/users.
* @param amari - Amari's instance.
*/
export const cacheData = async(amari: Amari): Promise<void> => {
try {
const guild = amari.discord.guilds.cache.get(ids.guilds.nhcarrigan)
?? await amari.discord.guilds.fetch(ids.guilds.nhcarrigan).catch(() => {
return null;
});
if (guild === null) {
throw new Error("Cannot find home guild. Amari will not function.");
}
const members = await guild.members.fetch();
await logger.log("info", `Cached ${members.size.toString()} guild members.`);
await Promise.all([ ...members.values() ].map(async(member) => {
await processUserGuildTag(amari, member.user);
}));
} catch (error) {
if (error instanceof Error) {
await logger.error("cache data module", error);
}
}
};
+5
View File
@@ -35,6 +35,11 @@ export const processUserGuildTag = async(
if (member === null) { if (member === null) {
return; return;
} }
if (user.primaryGuild?.identityEnabled !== true
&& member.roles.cache.has(ids.roles.representing)) {
await member.roles.remove(ids.roles.representing);
return;
}
if (user.primaryGuild?.identityGuildId === ids.guilds.nhcarrigan if (user.primaryGuild?.identityGuildId === ids.guilds.nhcarrigan
&& !member.roles.cache.has(ids.roles.representing)) { && !member.roles.cache.has(ids.roles.representing)) {
await member.roles.add(ids.roles.representing); await member.roles.add(ids.roles.representing);