From 23eb057780250268393771212dcc52adc8ce2bdb Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Fri, 3 May 2019 23:56:38 +0300 Subject: [PATCH] Add WelcomeMessage plugin --- src/index.ts | 2 ++ src/plugins/WelcomeMessage.ts | 54 +++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/plugins/WelcomeMessage.ts diff --git a/src/index.ts b/src/index.ts index 2a479924..75bd5706 100644 --- a/src/index.ts +++ b/src/index.ts @@ -92,6 +92,7 @@ import { ZeppelinPlugin } from "./plugins/ZeppelinPlugin"; import { customArgumentTypes } from "./customArgumentTypes"; import { startUptimeCounter } from "./uptime"; import { UsernameSaver } from "./plugins/UsernameSaver"; +import { WelcomeMessagePlugin } from "./plugins/WelcomeMessage"; // Run latest database migrations logger.info("Running database migrations"); @@ -136,6 +137,7 @@ connect().then(async conn => { PingableRolesPlugin, SelfGrantableRolesPlugin, RemindersPlugin, + WelcomeMessagePlugin, ], globalPlugins: [BotControlPlugin, LogServerPlugin, UsernameSaver], diff --git a/src/plugins/WelcomeMessage.ts b/src/plugins/WelcomeMessage.ts new file mode 100644 index 00000000..5812f40d --- /dev/null +++ b/src/plugins/WelcomeMessage.ts @@ -0,0 +1,54 @@ +import { ZeppelinPlugin } from "./ZeppelinPlugin"; +import { decorators as d, IPluginOptions } from "knub"; +import { Member, TextChannel } from "eris"; +import { renderTemplate } from "../templateFormatter"; +import { createChunkedMessage, stripObjectToScalars } from "../utils"; + +interface IWelcomeMessageConfig { + send_dm: boolean; + send_to_channel: string; + message: string; +} + +export class WelcomeMessagePlugin extends ZeppelinPlugin { + public static pluginName = "welcome_message"; + + protected getDefaultOptions(): IPluginOptions { + return { + config: { + send_dm: false, + send_to_channel: null, + message: null, + }, + }; + } + + @d.event("guildMemberAdd") + async onGuildMemberAdd(_, member: Member) { + const config = this.getConfig(); + if (!config.message) return; + if (!config.send_dm && !config.send_to_channel) return; + + const formatted = await renderTemplate(config.message, { + member: stripObjectToScalars(member, ["user"]), + }); + + if (config.send_dm) { + const dmChannel = await member.user.getDMChannel(); + if (!dmChannel) return; + + try { + createChunkedMessage(dmChannel, formatted); + } catch (e) {} // tslint:disable-line + } + + if (config.send_to_channel) { + const channel = this.guild.channels.get(config.send_to_channel); + if (!channel || !(channel instanceof TextChannel)) return; + + try { + createChunkedMessage(channel, formatted); + } catch (e) {} // tslint:disable-line + } + } +}