|
@@ -7,10 +7,12 @@ import * as path from "path";
|
|
import { client } from "./client";
|
|
import { client } from "./client";
|
|
import * as mCmd from "./model/command";
|
|
import * as mCmd from "./model/command";
|
|
import "reflect-metadata";
|
|
import "reflect-metadata";
|
|
-import { createConnection, getConnectionOptions } from "typeorm";
|
|
|
|
-import { getNumberEnums } from "./util";
|
|
|
|
|
|
+import { createConnection, getConnectionOptions, getRepository } from "typeorm";
|
|
|
|
+import { getNumberEnums, formatString } from "./util";
|
|
import { DB_ENTITIES } from "@shared/db/entities";
|
|
import { DB_ENTITIES } from "@shared/db/entities";
|
|
import { logger } from "./logging";
|
|
import { logger } from "./logging";
|
|
|
|
+import { GuildGreeting } from "@shared/db/entity/GuildGreeting";
|
|
|
|
+import { TextChannel, GuildMember, PartialGuildMember } from "discord.js";
|
|
|
|
|
|
const REACT_PROBABILITY = 0.3;
|
|
const REACT_PROBABILITY = 0.3;
|
|
|
|
|
|
@@ -108,6 +110,54 @@ client.bot.on("messageReactionAdd", (r, u) => {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+
|
|
|
|
+async function getGreeting(member: GuildMember | PartialGuildMember) {
|
|
|
|
+ const repo = getRepository(GuildGreeting);
|
|
|
|
+
|
|
|
|
+ const guildGreeting = await repo.findOne(member.guild.id);
|
|
|
|
+ if (!guildGreeting) {
|
|
|
|
+ logger.debug("Tried to greet user %s in guild %s but no greeting is defined!", member.id, member.guild.id);
|
|
|
|
+ return undefined;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const greetingChannel = client.bot.channels.resolve(guildGreeting.greetingChannelId);
|
|
|
|
+ if (!greetingChannel) {
|
|
|
|
+ logger.warning("No channel %s in guild %s, can't greet!", guildGreeting.greetingChannelId, guildGreeting.guildId);
|
|
|
|
+ return undefined;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!(greetingChannel instanceof TextChannel)) {
|
|
|
|
+ logger.warning("Channel %s is of not a text channel (got type: %s)", greetingChannel.id, greetingChannel.type);
|
|
|
|
+ return undefined;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return {guildGreeting, greetingChannel};
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+client.bot.on("guildMemberAdd", async member => {
|
|
|
|
+ const result = await getGreeting(member);
|
|
|
|
+ if(!result)
|
|
|
|
+ return;
|
|
|
|
+ const {guildGreeting, greetingChannel} = result;
|
|
|
|
+
|
|
|
|
+ greetingChannel.send(formatString(guildGreeting.onJoinMessage, {
|
|
|
|
+ memberID: member.id,
|
|
|
|
+ memberTag: member.user?.tag ?? member.displayName
|
|
|
|
+ }));
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+client.bot.on("guildMemberRemove", async member => {
|
|
|
|
+ const result = await getGreeting(member);
|
|
|
|
+ if(!result)
|
|
|
|
+ return;
|
|
|
|
+ const {guildGreeting, greetingChannel} = result;
|
|
|
|
+
|
|
|
|
+ greetingChannel.send(formatString(guildGreeting.onLeaveMessage, {
|
|
|
|
+ memberID: member.id,
|
|
|
|
+ memberTag: member.user?.tag ?? member.displayName
|
|
|
|
+ }));
|
|
|
|
+});
|
|
|
|
+
|
|
function loadCommand(mod: Record<string, unknown>) {
|
|
function loadCommand(mod: Record<string, unknown>) {
|
|
for (const i in mod) {
|
|
for (const i in mod) {
|
|
if (!Object.prototype.hasOwnProperty.call(mod, i))
|
|
if (!Object.prototype.hasOwnProperty.call(mod, i))
|