@skybloxsystems/ticket-bot
Version:
195 lines (139 loc) • 9.36 kB
JavaScript
const { SlashCommandBuilder } = require('@discordjs/builders');
const Discord = require('discord.js');
const ClaimTicket = require('../schemas/ticketclaim');
const { findOneAndUpdate } = require('../schemas/ticketclaim');
const { MessageEmbed } = require('discord.js');
var currentDateAndTime = new Date().toLocaleString('en-GB', { timeZone: 'UTC' });
const MainDatabase = require('../schemas/TicketData');
module.exports.data = new SlashCommandBuilder()
.setName('claim')
.setDescription('claim ticket')
.addStringOption(option =>
option.setName('ticketid')
.setDescription('Ticket ID for ticket')
.setRequired(true))
.addStringOption(option =>
option.setName('date')
.setDescription('DD/MM/YY (premium only)')
.setRequired(false))
.addStringOption(option =>
option.setName('time')
.setDescription('Time for the ticket + include timezone (premium only)')
.setRequired(false));
module.exports.run = (client, interaction) => {
const claimit = interaction.options.getString('ticketid')
const PremDate = interaction.options.getString('data')
const PremTime = interaction.options.getString('time')
MainDatabase.findOne({ ServerID: interaction.guildId }, async (err01, data01) => {
if (err01) throw err01;
if (data01) {
if (!interaction.member.roles.cache.some(r => r.name === "ticket support")) {
const NoPerms = new MessageEmbed()
.setTitle('Error')
.setDescription('The command you tried to run is only allowed to be used on Ticket staff members only')
return interaction.reply({ embeds: [NoPerms] })
}
if (data01.ModMail === 'Enabled') {
ClaimTicket.findOne({ TicketIDs: claimit }, async (err, data) => {
if (err) throw err;
if (data) {
const user1 = data.id
data = ClaimTicket.findOneAndUpdate({ TicketIDs: claimit }, { ClaimUserID: interaction.user.id }, async (err2, data2) => {
if (err2) throw err2;
if (data2) {
data2.save()
const TicketClaimed = new MessageEmbed()
.setTitle('Ticket Claimed!')
.setDescription(`<#${data2.ChannelID}> has been claimed by <@${interaction.user.id}> You should off be given the permission to send the message in the ticket!`)
const TicketClaimedDM = new MessageEmbed()
.setTitle('Ticket Claimed!')
.setDescription(`Your ticket <#${data2.ChannelID}> has been claimed by <@${interaction.user.id}>! For you to reply, you need to reply to our DMs with your ticket id ${data2.TicketIDs}`)
// if (message.author.id !== data2.ClaimUserID) {
// const AlreadyClaimed = new MessageEmbed()
// .setTitle('Ticket already claimed!')
// .setDescription(`This ticket has already been claimed by <@${data2.ClaimUserID}>`)
// return message.channel.send(AlreadyClaimed)
// }
const user2 = data2.id
interaction.reply({ embeds: [TicketClaimed] })
const sendtouser = client.users.cache.get(`${user1}`)
sendtouser.send({ embeds: [TicketClaimedDM] })
const MainChan = interaction.guild.channels.cache.get(data2.ChannelID)
MainChan.permissionOverwrites.create(interaction.user.id, {
SEND_MESSAGES: true,
VIEW_CHANNEL: true,
ATTACH_FILES: true,
MANAGE_CHANNELS: true,
})
}
})
} else {
interaction.reply('The ID you put has not open a ticket or an invaild id')
.catch(err => console.log(err))
}
})
} else {
if (data01.ModMail === 'Disabled') {
ClaimTicket.findOne({ TicketIDs: claimit }, async (err03, data03) => {
if (err03) throw err;
if (data03) {
const user1 = data03.id
data03 = ClaimTicket.findOneAndUpdate({ TicketIDs: claimit }, { ClaimUserID: interaction.user.id }, async (err2, data2) => {
if (err2) throw err2;
if (data2) {
data2.save()
const TicketClaimed = new MessageEmbed()
.setTitle('Ticket Claimed!')
.setDescription(`<#${data2.ChannelID}> has been claimed by <@${interaction.user.id}> You should off be given the permission to send the message in the ticket!`)
// if (message.author.id !== data2.ClaimUserID) {
// const AlreadyClaimed = new MessageEmbed()
// .setTitle('Ticket already claimed!')
// .setDescription(`This ticket has already been claimed by <@${data2.ClaimUserID}>`)
// return message.channel.send(AlreadyClaimed)
// }
const VCTicketClaim = interaction.guild.channels.cache.get(data2.ChannelID)
if (VCTicketClaim.type === 'GUILD_TEXT') {
const TicketClaimedDM = new MessageEmbed()
.setTitle('Ticket Claimed!')
.setDescription(`Your ticket <#${data2.ChannelID}> has been claimed by <@${interaction.user.id}>!`)
const dmUserID = data2.id;
interaction.reply({ embeds: [TicketClaimed] })
interaction.guild.channels.cache.get(data2.ChannelID).send(`<@${data2.id}>`)
const sendtouser = client.users.cache.get(`${user1}`)
client.users.cache.get(data2.id).send({ embeds: [TicketClaimedDM]})
const MainChan = interaction.guild.channels.cache.get(data2.ChannelID)
MainChan.permissionOverwrites.create(interaction.user.id, {
SEND_MESSAGES: true,
VIEW_CHANNEL: true,
ATTACH_FILES: true,
MANAGE_CHANNELS: true,
})
}
if (VCTicketClaim.type === 'GUILD_VOICE') {
const dmUserID = data2.id;
const TicketVCClaimedDM = new MessageEmbed()
.setTitle('Ticket Claimed!')
.setDescription(`Your ticket <#${data2.ChannelID}> has been claimed by <@${interaction.user.id}>! You are required to join the voice call on this date **${PremDate}** and time **${PremTime}**`)
interaction.reply({ embeds: [TicketClaimed] })
const sendtouser = client.users.cache.get(`${user1}`)
const MainChan = interaction.guild.channels.cache.get(data2.ChannelID)
client.users.cache.get(data2.id).send({ embeds: [TicketVCClaimedDM]})
MainChan.permissionOverwrites.create(interaction.user.id, {
CONNECT: true,
VIEW_CHANNEL: true,
SPEAK: true,
MANAGE_CHANNELS: true,
})
}
}
})
} else {
interaction.reply('The ID you put has not open a ticket or an invaild id')
.catch(err => console.log(err))
}
})
}
}
}
})
}