const { Client, GatewayIntentBits, Partials, Collection, ActivityType } = require('discord.js'); const { Guilds, GuildMembers, GuildMessages } = GatewayIntentBits; const { User, Message, GuildMember, ThreadMember, Channel } = Partials; const fs = require("fs") const { setup } = require("./api/api.js") let products = JSON.parse(fs.readFileSync("./api/products.json")); let users = JSON.parse(fs.readFileSync("./api/users.json")); let crashCount = 0; setup() const client = new Client({ intents: [Guilds, GuildMembers, GuildMessages], partials: [User, Message, GuildMember, ThreadMember], }); function startBot() { client.login(""); }; function handleCrash() { crashCount++; console.error(`The Bot has crashed. Total crashed: ${crashCount}`); console.log('Restarting the Bot...') startBot() }; function generateRandomProductNumber() { return Math.floor(5555555555 + Math.random() * 9999999999); }; function generateUniqueProductNumber(users, productName) { let productNumber = generateRandomProductNumber(); while (users.some(user => user.product_number === productNumber)) { productNumber = generateRandomProductNumber(); } return productNumber; }; client.on("ready", (client) => { console.log(`Logged in as ${client.user.tag}!`); client.user.setPresence({ activities: [{ name: `FiveM`, type: ActivityType.Playing }], status: 'dnd', }); client.application.commands.create({ name: "changeguildid", description: "Ändere die GuildID deines Produktes", options: [ { name: "productid", description: "ID des Produktes", type: 3, required: true }, { name: "guildid", description: "Server ID deines Discords", type: 3, required: true } ] }) client.application.commands.create({ name: "addproduct", description: "Ein Produkt zur Liste hinzufügen", options: [ { type: 6, name: "benutzer", description: "Der Benutzer, dem das Produkt hinzugefügt werden soll.", required: true, }, { type: 3, name: "produkt", description: "Der Name des Produkts, das hinzugefügt werden soll.", required: true, }, ], }) client.application.commands.create({ name: "removeproduct", description: "Entferne einen Kunden das Produkt.", options: [ { type: 6, name: "benutzer", description: "Der Benutzer, dem das Produkt Entfernt werden soll.", required: true, }, { type: 3, name: "produkt", description: "Der Name des Produkts, das Entfernt werden soll.", required: true, }, ], }) }); client.on('error', (error) => { console.error('Discord.js Error:', error); handleCrash(); }); process.on('unhandledRejection', (reason) => { console.error('Unhandled Promise Rejection:', reason); }); process.on('uncaughtException', (error) => { console.error('Unhandled Promise Rejection:', error); }); client.on("interactionCreate", (interaction) => { if (interaction.isCommand()) { const { commandName, options } = interaction; if (commandName === "changeguildid") { var id = options.getString("productid"); var data = JSON.parse(fs.readFileSync("./api/auth.json")); var user = options.getUser("guildid"); const existingServer = data.find((entry) => entry.serverid === id); if (existingServer) { return interaction.reply("Dieser Server wurde bereits hinzugefügt."); } if (data.length > 0) { return interaction.reply("Es kann nur eine Server-ID hinzugefügt werden") } data.push({ serverid: id, userid: interaction.options.getMember("user") }); fs.writeFileSync("./api/auth.json", JSON.stringify(data, null, 2)); return interaction.reply("Der Server wurde erfolgreich hinzugefügt."); } if (commandName === "addproduct") { const targetUser = options.getUser("benutzer"); const benutzer = interaction.user; const productName = options.getString("produkt"); const existingProduct = products.find(product => product.product === productName); if (!existingProduct) { return interaction.reply("Dieses Produkt existiert nicht."); } const existingUserProduct = users.find(user => user.user_id === targetUser.id && user.product === productName); if (existingUserProduct) { return interaction.reply(`${targetUser.tag} hat das Produkt "${productName}" bereits.`); } const productNumber = generateUniqueProductNumber(users, productName); users.push({ user_id: targetUser.id, tag: targetUser.tag, product: productName, product_number: productNumber }); fs.writeFileSync("./api/users.json", JSON.stringify(users, null, 2)); return interaction.reply(`${targetUser.tag} hat das Produkt "${productName}" erfolgreich erhalten. Deine Produkt-Nummer ist ${productNumber}.`); } if (commandName === "removeproduct") { const targetUser = options.getUser("benutzer"); const benutzer = interaction.user; const productName = options.getString("produkt"); const existingProduct = products.find(product => product.product === productName); if (!existingProduct) { return interaction.reply("Dieses Produkt existiert nicht."); } const existingUserProductIndex = users.findIndex(user => user.user_id === targetUser.id && user.product === productName); if (existingUserProductIndex === -1) { return interaction.reply(`${targetUser.tag} hat das Produkt "${productName}" nicht.`); } users.splice(existingUserProductIndex, 1); fs.writeFileSync("./api/users.json", JSON.stringify(users, null, 2)); return interaction.reply(`${targetUser.tag} wurde das Produkt "${productName}" erfolgreich entzogen.`); } } }); startBot();