feat: send onboarding message when mentorship role granted
Node.js CI / Lint and Test (push) Successful in 46s

This commit is contained in:
2025-09-02 19:11:43 -07:00
parent 7facefccd8
commit 9cc8f1fdbb
3 changed files with 59 additions and 0 deletions
+2
View File
@@ -7,6 +7,7 @@
export const ids = { export const ids = {
channels: { channels: {
formSubmissions: "1410435042898874471", formSubmissions: "1410435042898874471",
menteeChat: "1400589073613062204",
mentorshipGoalForum: "1400629118110011526", mentorshipGoalForum: "1400629118110011526",
mentorshipProjectForum: "1400616702265266186", mentorshipProjectForum: "1400616702265266186",
naomiDiscussionForum: "1408154690121633917", naomiDiscussionForum: "1408154690121633917",
@@ -17,6 +18,7 @@ export const ids = {
nhcarrigan: "1354624415861833870", nhcarrigan: "1354624415861833870",
}, },
roles: { roles: {
mentorship: "1400588705273745550",
nhcarrigan: "1355033209037127771", nhcarrigan: "1355033209037127771",
representing: "1407861842847469598", representing: "1407861842847469598",
}, },
+5
View File
@@ -18,6 +18,7 @@ import {
postFreeCodeCampNews, postFreeCodeCampNews,
postHackerNews, postHackerNews,
} from "./modules/postNews.js"; } from "./modules/postNews.js";
import { processMentorshipRole } from "./modules/processMentorshipRole.js";
import { processUserGuildTag } from "./modules/processUserGuildTag.js"; import { processUserGuildTag } from "./modules/processUserGuildTag.js";
import { respondToDm } from "./modules/respondToDm.js"; import { respondToDm } from "./modules/respondToDm.js";
import { instantiateServer } from "./server/serve.js"; import { instantiateServer } from "./server/serve.js";
@@ -102,5 +103,9 @@ amari.discord.on(Events.UserUpdate, (_oldUser, updatedUser) => {
void processUserGuildTag(amari, updatedUser); void processUserGuildTag(amari, updatedUser);
}); });
amari.discord.on(Events.GuildMemberUpdate, (oldMember, updatedMember) => {
void processMentorshipRole(amari, oldMember, updatedMember);
});
await amari.discord.login(process.env.BOT_TOKEN); await amari.discord.login(process.env.BOT_TOKEN);
instantiateServer(amari); instantiateServer(amari);
+52
View File
@@ -0,0 +1,52 @@
/**
* @copyright NHCarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { ids } from "../config/ids.js";
import { logger } from "../utils/logger.js";
import type { Amari } from "../interfaces/amari.js";
import type { GuildMember, PartialGuildMember } from "discord.js";
/**
* Handles the guild member update. If a member has
* been granted the mentorship role, send them an
* onboarding message.
* @param amari - Amari's instance.
* @param oldMember - The cached member record.
* @param updatedMember - The updated member payload from Discord.
*/
export const processMentorshipRole = async(
amari: Amari,
oldMember: GuildMember | PartialGuildMember,
updatedMember: GuildMember,
): Promise<void> => {
if (oldMember.roles.cache.has(ids.roles.mentorship)
|| !updatedMember.roles.cache.has(ids.roles.mentorship)) {
return;
}
const channel = amari.discord.channels.cache.get(ids.channels.menteeChat)
?? await amari.discord.channels.fetch(ids.channels.menteeChat);
if (channel?.isSendable() !== true) {
await logger.log(
"warn",
"Mentee Chat channel does not exist or is not sendable.",
);
return;
}
await channel.send({
content: `Hey <@${updatedMember.id}>~!
Welcome to our mentorship programme! We are excited to have you here and help you grow and reach success.
To get started, please make sure you have accepted the GitHub invite for your dedicated repository under the [NHCarrigan Mentorship organsation](<https://github.com/nhcarrigan-mentorship>).
Once you have done this, your next step is to read our [wiki](<https://nhcarrigan.notion.site/mentorship-wiki>). Then, create your post in <#1400629118110011526> as outlined in the wiki.
Naomi will follow up with you from there! Best of luck on your journey~! <a:love:1364089736557494353>`,
});
};