diff --git a/.env.example b/.env.example index 8141df0..7f4692f 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,2 @@ -DISCORD_TOKEN= \ No newline at end of file +DISCORD_TOKEN= +CHANNEL_HONEY_POT= \ No newline at end of file diff --git a/domain/service/channelResolver.ts b/domain/service/channelResolver.ts index 1d921d9..aeab0ad 100644 --- a/domain/service/channelResolver.ts +++ b/domain/service/channelResolver.ts @@ -5,6 +5,7 @@ const fallbackChannelIds: Record = { [ChannelSlug.JOBS]: "876826576749215744", [ChannelSlug.MODERATION]: "987719981443723266", [ChannelSlug.QUESTIONS]: "1065751368809324634", + [ChannelSlug.HONEY_POT]: "", }; export default class ChannelResolver { diff --git a/index.ts b/index.ts index 747a146..7b10967 100644 --- a/index.ts +++ b/index.ts @@ -1,4 +1,4 @@ -import { Client, Events, GatewayIntentBits, GuildMember, Message, Partials } from "discord.js"; +import { Client, Events, GatewayIntentBits, Guild, GuildMember, Message, Partials } from "discord.js"; import * as dotenv from "dotenv"; import { CronJob } from "cron"; import SendWelcomeMessageUseCase from "./application/usecases/sendWelcomeMessageUseCase"; @@ -20,7 +20,7 @@ import CodewarsLeaderboardCommand from "./application/command/codewarsLeaderboar import DontAskToAskCommand from "./application/command/dontAskToAskCommand"; import OnlyCodeQuestionsCommand from "./application/command/onlyCodeQuestionsCommand"; import AnonymousQuestionCommand from "./application/command/anonymousQuestionCommand"; -import { Command } from "./types"; +import { ChannelSlug, Command } from "./types"; dotenv.config(); @@ -62,6 +62,8 @@ const interactionResolver = new InteractionResolver({ questionTrackingService, }); +const honeyPotChannelId = channelResolver.getBySlug(ChannelSlug.HONEY_POT); + const checkForNewPosts = async () => { loggerService.log("Checking for new posts on content aggregator..."); @@ -141,6 +143,22 @@ client.on(Events.MessageCreate, async (message: Message) => { } }); +client.on(Events.MessageCreate, async (message: Message) => { + if (message.channelId !== honeyPotChannelId) return; + if (message.author.bot) return; + if (!message.member) return; + try { + loggerService.log(`Honeypot triggered by ${message.author.username} (${message.author.id})`); + + await message.member?.ban({ + reason: "Triggered honeypot channel", + deleteMessageSeconds: 60, + }); + } catch (error: unknown) { + loggerService.log(error); + } +}); + client.on(Events.InteractionCreate, async (interaction) => { if (interaction.isButton()) { await interactionResolver.resolveButtonInteraction(interaction); diff --git a/types.ts b/types.ts index ed9fb51..7f9a3b2 100644 --- a/types.ts +++ b/types.ts @@ -14,6 +14,7 @@ export enum ChannelSlug { JOBS = "JOBS", MODERATION = "MODERATION", QUESTIONS = "QUESTIONS", + HONEY_POT = "HONEY_POT", } export type CommandMessages = {