const { Events, MessageFlags } = require('discord.js') require('dotenv').config() const { client, mClient } = require('../index') const prefix = process.env.D_Prefix const db = mClient.db(process.env.M_DB) module.exports = { name: Events.MessageCreate, once: false, async execute(message) { if (message.author.bot) { return } // Erster/Zweiter/Dritter Handler if (message.channelId === '353902391021535244' || message.channelId === '471058991481487361') { const numbered = { Erst: "Ersti", Zweit: "Zweiti", Dritt: "Dritti" }; const found = Object.entries(numbered).find(([stem]) => new RegExp(`\\b\\w*${stem}\\w*\\b`, "i").test(message.content) )?.[1]; if (!found) return; const numberedColl = db.collection('items_daily_numbers'); const today = new Date().toLocaleDateString("en-CA", { timeZone: "Europe/Berlin" }); // Tages-Dokument sicherstellen await numberedColl.findOneAndUpdate( { date: today }, { $setOnInsert: { date: today, positions: { Ersti: null, Zweiti: null, Dritti: null } } }, { upsert: true } ); // 🔒 Atomarer Claim: // - Position muss frei sein // - User darf noch keine Position heute haben const result = await numberedColl.findOneAndUpdate( { date: today, [`positions.${found}`]: null, "positions.Ersti.userId": { $ne: message.author.id }, "positions.Zweiti.userId": { $ne: message.author.id }, "positions.Dritti.userId": { $ne: message.author.id } }, { $set: { [`positions.${found}`]: { userId: message.author.id, timestamp: new Date() } } }, { returnDocument: "after" } ); // ❌ bereits vergeben oder schon eine Position if (!result) { return message.reply({ content: `❌ Du kannst pro Tag nur eine Position beanspruchen, und sie muss noch frei sein.`, flags: MessageFlags.Ephemeral }); } // ✅ Erfolg return message.reply({ content: `✅ Du bist ${found}! :point_right: :point_left: <@${message.author.id}>`, flags: MessageFlags.Ephemeral }); } // Command Handler const args = message.content.slice(prefix.length).trim().split(/ +/); if (!message.content.startsWith(prefix)) return; const cmd = args.shift().toLowerCase(); let command = client.legacyCommands.get(cmd) if (!command) command = client.legacyCommands.get(client.aliases.get(cmd)) if (!command) return try { client.legacyCommands.get(command.name).execute(message, args) } catch (error) { console.error(error) } } }