From cb7235fd6948392e814376020e2019d70b70756e Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Tue, 17 Feb 2026 23:30:24 +0100 Subject: [PATCH] extend messages service for logging sent messages --- adapters/discord/src/discord.controller.ts | 36 ------------------- .../entitites/messages/messages.service.ts | 36 +++++++++++++++++-- .../guild-members/guild-members.listener.ts | 4 +++ .../listeners/messages/messages.listener.ts | 6 ++++ .../src/entities/messages/messages.service.ts | 4 ++- core/src/permissions/index.ts | 31 ++++++++++------ 6 files changed, 67 insertions(+), 50 deletions(-) create mode 100644 adapters/discord/src/listeners/messages/messages.listener.ts diff --git a/adapters/discord/src/discord.controller.ts b/adapters/discord/src/discord.controller.ts index a91903b..9f634da 100644 --- a/adapters/discord/src/discord.controller.ts +++ b/adapters/discord/src/discord.controller.ts @@ -12,42 +12,6 @@ export default class DiscordController extends EventEmitter { super(); let channelListeners = new Map(); - process.on("exit", async () => { - const channels = client.channels; - const logChannel = channels.cache.get(config.discord.channelIdLog); - await this.handleShutdown(logChannel); - process.exit(0); - }); - - process.on("SIGINT", async () => { - const channels = client.channels; - const logChannel = channels.cache.get(config.discord.channelIdLog); - await this.handleShutdown(logChannel); - process.exit(0); - }); - - process.on("SIGTERM", async () => { - const channels = client.channels; - const logChannel = channels.cache.get(config.discord.channelIdLog); - await this.handleShutdown(logChannel); - process.exit(0); - }); - - // listen for interactions - client.on("interactionCreate", this.handleInteraction.bind(this)); - - client.on("messageCreate", async (message) => { - console.log(message.id); - if (message.channel.type === ChannelType.DM) { - console.log("got msg"); - await this.dmService.forward(message); - } - }); - - client.on("guildMemberAdd", async (member) => { - await this.greetingService.welcome(member); - }); - client.on( Events.VoiceStateUpdate, async (oldState: VoiceState, newState: VoiceState) => { diff --git a/adapters/discord/src/entitites/messages/messages.service.ts b/adapters/discord/src/entitites/messages/messages.service.ts index bd3d730..8944cbc 100644 --- a/adapters/discord/src/entitites/messages/messages.service.ts +++ b/adapters/discord/src/entitites/messages/messages.service.ts @@ -1,9 +1,18 @@ import type { MessagesServiceInterface } from "@avocadi/bot-core/entities/messages/messages.service"; import { createLogger } from "@avocadi/bot-core/lib/logger"; -import type { User } from "discord.js"; +import { + ChannelType, + type DMChannel, + type Message, + type PartialDMChannel, + type User, +} from "discord.js"; +import { logChannelService } from "features/log-channel/log-channel.service"; import client from "lib/client"; -export class MessagesService implements MessagesServiceInterface { +export class MessagesService + implements MessagesServiceInterface +{ private logger = createLogger("MessagesService"); async sendToUser(userInput: User, message: string): Promise { @@ -15,6 +24,29 @@ export class MessagesService implements MessagesServiceInterface { this.logger.error(`User with ID ${userInput.id} not found.`); } } + + async logMessage(message: Message): Promise { + let recipient: User | null = null; + + if ( + message.channel.isDMBased() && + message.channel.type !== ChannelType.GroupDM + ) { + const channel = message.channel as DMChannel | PartialDMChannel; + + recipient = channel.recipient; + } + + let logMessage: string; + + if (recipient) { + logMessage = `<@${message.author.id}> sent a message to <@${recipient.id}>:\n"${message.content}"`; + } else { + logMessage = `<@${message.author.id}> sent a message:\n"${message.content}"`; + } + + await logChannelService.sendLogMessage(logMessage); + } } export const messagesService = new MessagesService(); diff --git a/adapters/discord/src/listeners/guild-members/guild-members.listener.ts b/adapters/discord/src/listeners/guild-members/guild-members.listener.ts index b752e09..8d8154f 100644 --- a/adapters/discord/src/listeners/guild-members/guild-members.listener.ts +++ b/adapters/discord/src/listeners/guild-members/guild-members.listener.ts @@ -1,4 +1,5 @@ import { greetingsService } from "features/greeting/greetings.service"; +import { logChannelService } from "features/log-channel/log-channel.service"; import client from "lib/client"; client.on("guildMemberAdd", async (member) => { @@ -9,4 +10,7 @@ client.on("guildMemberAdd", async (member) => { } greetingsService.sendGreeting(member.user, member.user.username); + logChannelService.sendLogMessage( + `Neues Mitglied: <@${member.user.id}> (${member.user.tag}) ist dem Server beigetreten.`, + ); }); diff --git a/adapters/discord/src/listeners/messages/messages.listener.ts b/adapters/discord/src/listeners/messages/messages.listener.ts new file mode 100644 index 0000000..b54eb4f --- /dev/null +++ b/adapters/discord/src/listeners/messages/messages.listener.ts @@ -0,0 +1,6 @@ +import { messagesService } from "entitites/messages/messages.service"; +import client from "lib/client"; + +client.on("messageCreate", async (message) => { + messagesService.logMessage(message); +}); diff --git a/core/src/entities/messages/messages.service.ts b/core/src/entities/messages/messages.service.ts index 248006a..21f640c 100644 --- a/core/src/entities/messages/messages.service.ts +++ b/core/src/entities/messages/messages.service.ts @@ -1,3 +1,5 @@ -export interface MessagesServiceInterface { +export interface MessagesServiceInterface { sendToUser(user: U, message: string): Promise; + + logMessage(message: M): Promise; } diff --git a/core/src/permissions/index.ts b/core/src/permissions/index.ts index 71107c4..9473146 100644 --- a/core/src/permissions/index.ts +++ b/core/src/permissions/index.ts @@ -1,13 +1,22 @@ import config from "config"; -import { GuildMember, GuildMemberRoleManager, type APIInteractionGuildMember } from "discord.js"; +import { + type APIInteractionGuildMember, + type GuildMember, + GuildMemberRoleManager, +} from "discord.js"; -export async function checkPermission(member: GuildMember | APIInteractionGuildMember | null) { - let permission = false; - if (member?.roles instanceof GuildMemberRoleManager) { - if (member.roles.cache.has(config.discord.roleAdmin) || member.roles.cache.has(config.discord.roleMod)) { - permission = true; - } - } - console.log("user permission == " + permission); - return permission; -} \ No newline at end of file +export async function checkPermission( + member: GuildMember | APIInteractionGuildMember | null, +) { + let permission = false; + if (member?.roles instanceof GuildMemberRoleManager) { + if ( + member.roles.cache.has(config.discord.roleAdmin) || + member.roles.cache.has(config.discord.roleMod) + ) { + permission = true; + } + } + console.log("user permission == " + permission); + return permission; +}