mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import { Snowflake, TextChannel } from "discord.js";
|
|
import {
|
|
channelToTemplateSafeChannel,
|
|
memberToTemplateSafeMember,
|
|
userToTemplateSafeUser,
|
|
} from "../../../utils/templateSafeObjects";
|
|
import { LogType } from "../../../data/LogType";
|
|
import { renderTemplate, TemplateParseError } from "../../../templateFormatter";
|
|
import { createChunkedMessage, stripObjectToScalars, verboseChannelMention, verboseUserMention } from "../../../utils";
|
|
import { sendDM } from "../../../utils/sendDM";
|
|
import { welcomeMessageEvt } from "../types";
|
|
import { LogsPlugin } from "../../Logs/LogsPlugin";
|
|
|
|
export const SendWelcomeMessageEvt = welcomeMessageEvt({
|
|
event: "guildMemberAdd",
|
|
|
|
async listener(meta) {
|
|
const pluginData = meta.pluginData;
|
|
const member = meta.args.member;
|
|
|
|
const config = pluginData.config.get();
|
|
if (!config.message) return;
|
|
if (!config.send_dm && !config.send_to_channel) return;
|
|
|
|
// Only send welcome messages once per user (even if they rejoin) until the plugin is reloaded
|
|
if (pluginData.state.sentWelcomeMessages.has(member.id)) {
|
|
return;
|
|
}
|
|
|
|
pluginData.state.sentWelcomeMessages.add(member.id);
|
|
|
|
let formatted;
|
|
|
|
try {
|
|
const strippedMember = stripObjectToScalars(member, ["user", "guild"]);
|
|
formatted = await renderTemplate(config.message, {
|
|
member: strippedMember,
|
|
user: strippedMember["user"],
|
|
guild: strippedMember["guild"],
|
|
});
|
|
} catch (e) {
|
|
if (e instanceof TemplateParseError) {
|
|
pluginData.getPlugin(LogsPlugin).logBotAlert({
|
|
body: `Error formatting welcome message: ${e.message}`,
|
|
});
|
|
return;
|
|
}
|
|
|
|
throw e;
|
|
}
|
|
|
|
if (config.send_dm) {
|
|
try {
|
|
await sendDM(member.user, formatted, "welcome message");
|
|
} catch {
|
|
pluginData.getPlugin(LogsPlugin).logDmFailed({
|
|
source: "welcome message",
|
|
user: member.user,
|
|
});
|
|
}
|
|
}
|
|
|
|
if (config.send_to_channel) {
|
|
const channel = meta.args.member.guild.channels.cache.get(config.send_to_channel as Snowflake);
|
|
if (!channel || !(channel instanceof TextChannel)) return;
|
|
|
|
try {
|
|
await createChunkedMessage(channel, formatted);
|
|
} catch {
|
|
pluginData.getPlugin(LogsPlugin).logBotAlert({
|
|
body: `Failed send a welcome message for ${verboseUserMention(member.user)} to ${verboseChannelMention(
|
|
channel,
|
|
)}`,
|
|
});
|
|
}
|
|
}
|
|
},
|
|
});
|