Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const { Client, GatewayIntentBits, EmbedBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
- const bot = new Client({
- intents: [
- GatewayIntentBits.Guilds,
- GatewayIntentBits.GuildMessages,
- GatewayIntentBits.MessageContent,
- GatewayIntentBits.GuildMembers
- ]
- });
- /////////////////////////////////////////////// Setup /////////////////////////////////////////////////
- const PREFIX = "-"; // البريفكس
- const rpi = ''; // id log channel - اي دي اتشانل اللوج
- const token = ""; // توكن البوت
- ///////////////////////////////////////////////////////////////////////////////////////////////////////
- const tic = new Map();
- let lang = 'ar';
- const translations = {
- ar: {
- noTicketId: "لم يتم العثور على رقم التذكرة. الرجاء النقر على الزر لإدخال الرقم يدويًا.",
- enterTicketNumber: "إدخال رقم التذكرة",
- closeTicket: "إغلاق التذكرة",
- fillDetails: "لاستكمال الإجراءات، يرجى ملء البيانات التالية:\n- بيانات المسؤول\n- بيانات التذكرة",
- ticketNumber: "رقم التذكرة:",
- ticketLink: "رابط التذكرة:",
- adminData: "بيانات المسؤول",
- ticketData: "بيانات التذكرة",
- savedTicketNum: (num) => `تم حفظ رقم التذكرة: ${num}`,
- adminModalTitle: "بيانات المسؤول",
- adminLabel: "اسم المسؤول عن التذكرة (اليوزر أو الآيدي)",
- statusLabel: "حالة التذكرة: (مغلق / مفتوح / قيد المعالجة)",
- ticketModalTitle: "تقرير التذكرة",
- reasonLabel: "سبب فتح التذكرة؟",
- actionsTakenLabel: "ما هي الإجراءات المتخذة؟",
- contactedLabel: "هل تم التواصل مع المستخدم؟ (نعم/لا)",
- resolvedLabel: "هل تم حل المشكلة؟ (نعم/لا)",
- notesLabel: "ملاحظات إضافية (اختياري)",
- savedAdmin: "تم حفظ بيانات المسؤول.",
- reportTitle: "تقرير التذكرة",
- doneSend: "**تم الارسال**",
- noData: "حدث خطاء",
- langChanged: "تم تغيير اللغة إلى العربية.",
- staffticket: "المسؤول عن التذكرة",
- ticketst: "حالة التذكرة",
- adnote: "ملاحظات إضافية",
- addnote: "لا يوجد"
- },
- en: {
- noTicketId: "Ticket number not found. Please click the button to enter it manually.",
- enterTicketNumber: "Enter Ticket Number",
- closeTicket: "Close Ticket",
- fillDetails: "To proceed, please fill in the following:\n- Admin Info\n- Ticket Info",
- ticketNumber: "Ticket Number:",
- ticketLink: "Ticket Link:",
- adminData: "Admin Info",
- ticketData: "Ticket Info",
- savedTicketNum: (num) => `Ticket number saved: ${num}`,
- adminModalTitle: "Admin Info",
- adminLabel: "Admin name (username or ID)",
- statusLabel: "Ticket Status: (Closed / Open / Processing)",
- ticketModalTitle: "Ticket Report",
- reasonLabel: "Why was the ticket opened?",
- actionsTakenLabel: "What actions were taken?",
- contactedLabel: "Was the user contacted? (Yes/No)",
- resolvedLabel: "Was the issue resolved? (Yes/No)",
- notesLabel: "Additional notes (optional)",
- savedAdmin: "Admin data saved.",
- reportTitle: "Ticket Report",
- doneSend: "**Done Send**",
- noData: "Error: No data saved",
- langChanged: "Language changed to English.",
- staffticket: "Ticket Staff",
- ticketst: "Ticket status",
- adnote: "Additional notes",
- addnote: "No Notes"
- }
- };
- let t = translations[lang];
- bot.once('ready', () => {
- console.log(`Done ${bot.user.tag}`);
- });
- bot.on('messageCreate', async (message) => {
- if (message.author.bot || !message.content.startsWith(PREFIX)) return;
- const args = message.content.slice(PREFIX.length).trim().split(/ +/);
- const command = args.shift().toLowerCase();
- if (command === 'lang') {
- if (args[0] === 'ar' || args[0] === 'en') {
- lang = args[0];
- t = translations[lang];
- await message.reply(t.langChanged);
- } else {
- await message.reply("Usage: -lang [ar/en]");
- }
- return;
- }
- if (command === 'tc') {
- const channel = message.channel;
- const ticid = channel.name.split('-').pop();
- if (!ticid || isNaN(ticid)) {
- const button = new ButtonBuilder()
- .setCustomId('req_ticket_num')
- .setLabel(t.enterTicketNumber)
- .setStyle(ButtonStyle.Primary);
- const row = new ActionRowBuilder().addComponents(button);
- await message.reply({
- content: t.noTicketId,
- components: [row]
- });
- return;
- }
- tic.set(channel.id, { ticid });
- const confirmEmbed = new EmbedBuilder()
- .setTitle(t.closeTicket)
- .setDescription(t.fillDetails)
- .addFields(
- { name: t.ticketNumber, value: ticid, inline: true },
- { name: t.ticketLink, value: `<#${channel.id}>`, inline: true }
- )
- .setColor(0x29D2D2);
- const adminButton = new ButtonBuilder()
- .setCustomId('admin_data')
- .setLabel(t.adminData)
- .setStyle(ButtonStyle.Primary);
- const ticketButton = new ButtonBuilder()
- .setCustomId('tic_data')
- .setLabel(t.ticketData)
- .setStyle(ButtonStyle.Secondary);
- const row = new ActionRowBuilder().addComponents(adminButton, ticketButton);
- await message.channel.send({ embeds: [confirmEmbed], components: [row] });
- }
- });
- bot.on('interactionCreate', async (interaction) => {
- if (interaction.isButton() && interaction.customId === 'req_ticket_num') {
- const modal = new ModalBuilder()
- .setCustomId('ticket_num_modal')
- .setTitle(t.enterTicketNumber);
- const ticketNumberInput = new TextInputBuilder()
- .setCustomId('ticket_num')
- .setLabel(t.ticketNumber)
- .setStyle(TextInputStyle.Short)
- .setRequired(true);
- modal.addComponents(new ActionRowBuilder().addComponents(ticketNumberInput));
- await interaction.showModal(modal);
- return;
- }
- if (interaction.isModalSubmit() && interaction.customId === 'ticket_num_modal') {
- const ticketNum = interaction.fields.getTextInputValue('ticket_num');
- const channelID = interaction.channel.id;
- tic.set(channelID, { ticid: ticketNum });
- await interaction.reply({ content: t.savedTicketNum(ticketNum), ephemeral: true });
- const confirmEmbed = new EmbedBuilder()
- .setTitle(t.closeTicket)
- .setDescription(t.fillDetails)
- .addFields(
- { name: t.ticketNumber, value: ticketNum, inline: true },
- { name: t.ticketLink, value: `<#${channelID}>`, inline: true }
- )
- .setColor(0x29D2D2);
- const adminButton = new ButtonBuilder()
- .setCustomId('admin_data')
- .setLabel(t.adminData)
- .setStyle(ButtonStyle.Primary);
- const ticketButton = new ButtonBuilder()
- .setCustomId('tic_data')
- .setLabel(t.ticketData)
- .setStyle(ButtonStyle.Secondary);
- await interaction.channel.send({ embeds: [confirmEmbed], components: [new ActionRowBuilder().addComponents(adminButton, ticketButton)] });
- }
- if (interaction.isButton() && (interaction.customId === 'admin_data' || interaction.customId === 'tic_data')) {
- const channelID = interaction.channel.id;
- const ticket = tic.get(channelID);
- if (!ticket) return interaction.reply({ content: t.noData, ephemeral: true });
- if (interaction.customId === 'admin_data') {
- const modal = new ModalBuilder()
- .setCustomId('ad_rp')
- .setTitle(t.adminModalTitle);
- const adminInput = new TextInputBuilder()
- .setCustomId('admin')
- .setLabel(t.adminLabel)
- .setStyle(TextInputStyle.Short)
- .setRequired(true);
- const statusInput = new TextInputBuilder()
- .setCustomId('status')
- .setLabel(t.statusLabel)
- .setStyle(TextInputStyle.Short)
- .setRequired(true);
- modal.addComponents(
- new ActionRowBuilder().addComponents(adminInput),
- new ActionRowBuilder().addComponents(statusInput)
- );
- await interaction.showModal(modal);
- } else if (interaction.customId === 'tic_data') {
- const modal = new ModalBuilder()
- .setCustomId('tic_rp')
- .setTitle(t.ticketModalTitle);
- const reasonInput = new TextInputBuilder()
- .setCustomId('reason')
- .setLabel(t.reasonLabel)
- .setStyle(TextInputStyle.Short)
- .setRequired(true);
- const actionInput = new TextInputBuilder()
- .setCustomId('actions_taken')
- .setLabel(t.actionsTakenLabel)
- .setStyle(TextInputStyle.Paragraph)
- .setRequired(true);
- const contactInput = new TextInputBuilder()
- .setCustomId('contacted')
- .setLabel(t.contactedLabel)
- .setStyle(TextInputStyle.Short)
- .setRequired(true);
- const resolvedInput = new TextInputBuilder()
- .setCustomId('resolved')
- .setLabel(t.resolvedLabel)
- .setStyle(TextInputStyle.Short)
- .setRequired(true);
- const notesInput = new TextInputBuilder()
- .setCustomId('notes')
- .setLabel(t.notesLabel)
- .setStyle(TextInputStyle.Paragraph)
- .setRequired(false);
- modal.addComponents(
- new ActionRowBuilder().addComponents(reasonInput),
- new ActionRowBuilder().addComponents(actionInput),
- new ActionRowBuilder().addComponents(contactInput),
- new ActionRowBuilder().addComponents(resolvedInput),
- new ActionRowBuilder().addComponents(notesInput)
- );
- await interaction.showModal(modal);
- }
- }
- if (interaction.isModalSubmit() && (interaction.customId === 'ad_rp' || interaction.customId === 'tic_rp')) {
- const channelID = interaction.channel.id;
- const ticket = tic.get(channelID);
- if (!ticket) return interaction.reply({ content: t.noData, ephemeral: true });
- if (interaction.customId === 'ad_rp') {
- const admin = interaction.fields.getTextInputValue('admin');
- const status = interaction.fields.getTextInputValue('status');
- tic.set(channelID, { ...ticket, admin, status });
- await interaction.reply({ content: t.savedAdmin, ephemeral: true });
- } else if (interaction.customId === 'tic_rp') {
- const reason = interaction.fields.getTextInputValue('reason');
- const actionsTaken = interaction.fields.getTextInputValue('actions_taken');
- const contacted = interaction.fields.getTextInputValue('contacted');
- const resolved = interaction.fields.getTextInputValue('resolved');
- const notes = interaction.fields.getTextInputValue('notes') || t.addnote;
- const staffMember = interaction.user;
- const finalData = { ...tic.get(channelID), reason, actionsTaken, contacted, resolved, notes };
- const reportEmbed = new EmbedBuilder()
- .setTitle(t.reportTitle)
- .setColor(0x29D2D2)
- .addFields(
- { name: t.ticketNumber, value: finalData.ticid, inline: true },
- { name: t.ticketLink, value: `<#${channelID}>`, inline: true },
- { name: t.staffticket, value: finalData.admin, inline: true },
- { name: t.ticketst, value: finalData.status, inline: true },
- { name: t.reasonLabel, value: finalData.reason, inline: false },
- { name: t.actionsTakenLabel, value: finalData.actionsTaken, inline: false },
- { name: t.contactedLabel, value: finalData.contacted, inline: true },
- { name: t.resolvedLabel, value: finalData.resolved, inline: true },
- { name: t.adnote, value: finalData.notes, inline: false }
- )
- .setFooter({ text: `${staffMember.tag}`, iconURL: staffMember.displayAvatarURL() });
- const reportChannel = await bot.channels.fetch(rpi);
- if (reportChannel.isTextBased()) {
- await reportChannel.send({ embeds: [reportEmbed] });
- }
- tic.delete(channelID);
- await interaction.reply({ content: t.doneSend, ephemeral: true });
- }
- }
- });
- bot.login(token);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement