252 lines
10 KiB
JavaScript
252 lines
10 KiB
JavaScript
const discord = require('discord.js')
|
|
const bot = require('../index')
|
|
const client = bot.client
|
|
const config = require("../config.json")
|
|
|
|
const ticketStorage = bot.TicketStorage
|
|
const userTicketStorage = bot.userTicketStorage
|
|
const transcriptStorage = bot.transcriptStorage
|
|
|
|
var stringDecoder = "Created By "
|
|
exports.stringDecoder = stringDecoder
|
|
|
|
module.exports = () => {
|
|
|
|
var closeButton = new discord.MessageActionRow()
|
|
.addComponents(
|
|
new discord.MessageButton()
|
|
.setCustomId("closeTicket")
|
|
.setDisabled(false)
|
|
.setStyle("SECONDARY")
|
|
.setLabel("Sluit Ticket")
|
|
.setEmoji("❌")
|
|
)
|
|
|
|
client.on("interactionCreate",interaction => {
|
|
|
|
if (interaction.isButton() == false){
|
|
return
|
|
}
|
|
|
|
if (interaction.customId == "newTicketVraag"||interaction.customId == "newTicketSolli"||interaction.customId == "newTicketPartner"){
|
|
|
|
interaction.deferUpdate()
|
|
|
|
if (ticketStorage.getItem(interaction.member.id) == null ||ticketStorage.getItem(interaction.member.id) == "false"){
|
|
|
|
try{
|
|
interaction.member.send("**Je ticket is aangemaakt!**")
|
|
}
|
|
catch{console.log("cant send DM to member")}
|
|
|
|
|
|
|
|
ticketStorage.setItem(interaction.member.id,"true")
|
|
|
|
var ticketNumber = interaction.member.user.username
|
|
|
|
if (interaction.customId == "newTicketVraag"){
|
|
var ticketName = "vraag-"+ticketNumber
|
|
}else if (interaction.customId == "newTicketSolli"){
|
|
var ticketName = "solli-"+ticketNumber
|
|
}else if (interaction.customId == "newTicketPartner"){
|
|
var ticketName = "partner-"+ticketNumber
|
|
}
|
|
|
|
if (config.ticket_system.enable_category){
|
|
var Category = config.ticket_system.ticket_category
|
|
}else{var Category = null}
|
|
|
|
interaction.guild.channels.create(ticketName,{
|
|
type:"GUILD_TEXT",
|
|
parent:Category,
|
|
permissionOverwrites:[
|
|
{
|
|
id:interaction.member.id,
|
|
type:"member",
|
|
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
|
|
},
|
|
{
|
|
id:config.botperms_role,
|
|
type:"role",
|
|
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
|
|
},
|
|
{
|
|
id:config.ticket_system.member_role,
|
|
type:"role",
|
|
deny:["VIEW_CHANNEL"]
|
|
}
|
|
]
|
|
}).then(tChannel => {
|
|
userTicketStorage.setItem(tChannel.id,interaction.member.id)
|
|
|
|
|
|
var ticketEmbed = new discord.MessageEmbed()
|
|
.setColor(config.main_color)
|
|
|
|
if (interaction.customId == "newTicketVraag"){
|
|
ticketEmbed.setDescription("**Ticket gemaakt:**\nJe hebt gekozen voor **overige vragen**, zeg alvast maar je vraag, onze staffleden komen u zo helpen.\n\n_Klik op knop hieronder om dit ticket te sluiten_")
|
|
}else if (interaction.customId == "newTicketSolli"){
|
|
ticketEmbed.setDescription("**Ticket gemaakt:**\nJe hebt gekozen voor **sollicitatie**, neem maar tijd om u sollicitatie brief voor te bereiden. Met de `!solli` command kan je zien wat je allemaal moet zeggen.\n\n_Klik op knop hieronder om dit ticket te sluiten_")
|
|
}else if (interaction.customId == "newTicketPartner"){
|
|
ticketEmbed.setDescription("**Ticket gemaakt:**\nJe hebt gekozen voor **partner**, neem maar tijd om u partner brief voor te bereiden. Met de `!partner` command kan je zien wat de vereisen zijn.\n\n_Klik op knop hieronder om dit ticket te sluiten_")
|
|
}
|
|
|
|
tChannel.send({content:"<@"+interaction.member.id+"> <@&"+config.botperms_role+">",embeds:[ticketEmbed],components:[closeButton]}).then(firstmsg => {
|
|
firstmsg.pin()
|
|
})
|
|
})
|
|
|
|
|
|
|
|
}else{
|
|
try {
|
|
interaction.member.send("**Je hebt al een ticket open!**")
|
|
}
|
|
catch{console.log("cant send DM to member")}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
var closeBar = new discord.MessageActionRow()
|
|
.addComponents(
|
|
new discord.MessageButton()
|
|
.setCustomId("closeTicketTrue")
|
|
.setDisabled(false)
|
|
.setStyle("SECONDARY")
|
|
.setEmoji("✅")
|
|
)
|
|
.addComponents(
|
|
new discord.MessageButton()
|
|
.setCustomId("closeTicketFalse")
|
|
.setDisabled(false)
|
|
.setStyle("SECONDARY")
|
|
.setEmoji("❌")
|
|
)
|
|
|
|
|
|
|
|
client.on("interactionCreate",interaction => {
|
|
if (interaction.isButton() == false){
|
|
return
|
|
}
|
|
if (interaction.customId == "closeTicket"){
|
|
interaction.deferUpdate()
|
|
interaction.message.edit({components:[closeBar]})
|
|
}
|
|
})
|
|
|
|
client.on("interactionCreate",interaction => {
|
|
if (interaction.isButton() == false){
|
|
return
|
|
}
|
|
if (interaction.customId == "closeTicketFalse"){
|
|
interaction.deferUpdate()
|
|
|
|
interaction.message.edit({components:[closeButton]})
|
|
}
|
|
})
|
|
|
|
|
|
|
|
client.on("interactionCreate",interaction => {
|
|
if (interaction.isButton() == false){
|
|
return
|
|
}
|
|
if (interaction.customId == "closeTicketTrue"){
|
|
interaction.deferUpdate()
|
|
interaction.channel.messages.fetch().then(messages => {
|
|
var transcriptArray = []
|
|
messages.forEach(msg => {
|
|
if (msg.author.id != client.user.id){
|
|
transcriptArray.push("["+msg.author.username+"]: "+msg.content)
|
|
}
|
|
})
|
|
var getuserID = userTicketStorage.getItem(interaction.channel.id)
|
|
var getusernameStep1 = client.users.cache.find(u => u.id === getuserID)
|
|
if (getusernameStep1 == null || getusernameStep1 == undefined || getusernameStep1 == false || getusernameStep1 == ""){
|
|
var getuserNAME = ":user niet in database:"
|
|
}else {
|
|
var getuserNAME = getusernameStep1.username
|
|
}
|
|
|
|
|
|
if (config.ticket_system.enable_transcript){
|
|
var transcript = transcriptArray.reverse().join("\n")
|
|
transcriptStorage.setItem(interaction.channel.id,transcript)
|
|
|
|
var splittedTranscript = [transcript.slice(0,2000)]
|
|
if (transcript.length > 4000){
|
|
splittedTranscript.push(transcript.slice(2000,4000))
|
|
splittedTranscript.push(transcript.slice(4000))
|
|
}else if (transcript.length > 2000){
|
|
splittedTranscript.push(transcript.slice(2000))
|
|
}
|
|
var transcriptEmbed = new discord.MessageEmbed()
|
|
.setColor(config.main_color)
|
|
.setAuthor(interaction.channel.name + " - ticket gemaakt door "+getuserNAME)
|
|
.setTitle("Er is een nieuw transcript!")
|
|
.setDescription(splittedTranscript[0])
|
|
.setFooter("ticket gesloten door "+interaction.member.user.username)
|
|
|
|
if (transcript.length > 4000){
|
|
var transcriptEmbed2 = new discord.MessageEmbed()
|
|
.setColor(config.main_color)
|
|
.setAuthor(interaction.channel.name + " - ticket gemaakt door "+getuserNAME)
|
|
.setTitle("Deel 2 van het transcript")
|
|
.setDescription(splittedTranscript[1])
|
|
.setFooter("ticket gesloten door "+interaction.member.user.username)
|
|
var transcriptEmbed3 = new discord.MessageEmbed()
|
|
.setColor(config.main_color)
|
|
.setAuthor(interaction.channel.name + " - ticket gemaakt door "+getuserNAME)
|
|
.setTitle("Deel 3 van het transcript")
|
|
.setDescription(splittedTranscript[1])
|
|
.setFooter("ticket gesloten door "+interaction.member.user.username)
|
|
|
|
client.channels.cache.find(ch => ch.id == config.ticket_system.transcript_channel).send({embeds:[transcriptEmbed,transcriptEmbed2,transcriptEmbed3]})
|
|
|
|
}else if (transcript.length > 2000){
|
|
var transcriptEmbed2 = new discord.MessageEmbed()
|
|
.setColor(config.main_color)
|
|
.setAuthor(interaction.channel.name + " - ticket gemaakt door "+getuserNAME)
|
|
.setTitle("Deel 2 van het transcript")
|
|
.setDescription(splittedTranscript[1])
|
|
.setFooter("ticket gesloten door "+interaction.member.user.username)
|
|
|
|
client.channels.cache.find(ch => ch.id == config.ticket_system.transcript_channel).send({embeds:[transcriptEmbed,transcriptEmbed2]})
|
|
}else{
|
|
client.channels.cache.find(ch => ch.id == config.ticket_system.transcript_channel).send({embeds:[transcriptEmbed]})
|
|
}
|
|
}
|
|
|
|
|
|
|
|
interaction.channel.delete()
|
|
|
|
|
|
ticketStorage.setItem(getuserID,"false")
|
|
|
|
try {
|
|
interaction.member.send("**Je ticket is gesloten door "+interaction.member.user.username+"!**")
|
|
}
|
|
catch{console.log("cant send DM to member")}
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
})
|
|
|
|
|
|
|
|
process.on('unhandledRejection',error => {
|
|
console.log("ERROR: "+error)
|
|
})
|
|
|
|
} |