Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import {
- Guild,
- GuildMember,
- MessageCreateOptions,
- TextChannel,
- } from "discord.js";
- import { Discord, On } from "discordx";
- import { bot } from "../classes/discord-bot.js";
- import { createUserApplyButtonRow } from "../commands/onboarding-setup.js";
- import { OnboardingService } from "../services/onboarding-service.js";
- import { logger } from "../util/logger.js";
- @Discord()
- export class WelcomeEvent {
- @On({ event: "guildMemberAdd" })
- async onMemberJoin(members: GuildMember[]): Promise<void> {
- for (const member of members) {
- let fetchedMember: GuildMember = member;
- try {
- // Fetch the member to ensure all data is loaded
- fetchedMember = await member.fetch();
- } catch (error) {
- logger.error(
- `Unable to fetch new guildmember with id ${member.id}`,
- error
- );
- }
- const config = OnboardingService.getConfig(fetchedMember.guild.id);
- if (!config.welcomeText && !config.welcomeChannelId) return;
- const welcomeChannel = fetchedMember.guild.channels.cache.get(
- config.welcomeChannelId
- ) as TextChannel;
- if (!welcomeChannel) {
- logger.warn(
- "Onboarding welcome channel by id was not found in cache",
- config.welcomeChannelId,
- config.discordGuildName
- );
- return;
- }
- const joinButtons = createUserApplyButtonRow(
- config.enableWelcomeClanOnboarding,
- config.enableWelcomeFriendOnboarding
- );
- const greeting = transformedWelcomeText({
- welcomeText: config.welcomeText,
- newUser: fetchedMember,
- guild: bot.guilds.cache.find((g) => g.id === config.discordGuildId)!,
- });
- const sendOptions: MessageCreateOptions = {
- content: greeting,
- };
- if (
- config.enableWelcomeClanOnboarding ||
- config.enableWelcomeFriendOnboarding
- ) {
- sendOptions.components = [joinButtons];
- }
- try {
- logger.info("Sending welcome text to welcome channel");
- await welcomeChannel.send(sendOptions);
- } catch (error) {
- logger.error("Unable to send welcome text to welcome channel", error);
- }
- }
- }
- }
- function transformedWelcomeText(data: {
- welcomeText: string;
- newUser: GuildMember;
- guild: Guild;
- }): string {
- const { guild, newUser, welcomeText } = data;
- const changes = new Map<string, string>([
- ["[ServerName]", guild.name],
- ["[UserMention]", `<@${newUser.id}>`], // Works better then userMention, as fetching the user might fail.
- ]);
- let result = welcomeText;
- changes.forEach((v, k) => {
- result = result.replaceAll(k, v);
- });
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement