v3.2 push 1 NOT WORKING YET!!!
This commit is contained in:
@@ -12,6 +12,7 @@ developerChangelog.md
|
||||
storage/dynamicDB/
|
||||
storage/slashcmdEnabled.txt
|
||||
storage/database.json
|
||||
storage/tsdatabase.json
|
||||
storage/.DS_Store
|
||||
.vscode/
|
||||
livestatus.json
|
||||
|
||||
@@ -15,14 +15,15 @@ Start using it now, you can do anything!
|
||||
- Sanke: for translation & new ideas
|
||||
- Everyone that reported a bug
|
||||
#### And our translators!
|
||||
- ExothDE
|
||||
- 1x1
|
||||
- Redactado
|
||||
- t0miiis
|
||||
- josuens14
|
||||
- M4
|
||||
- David.
|
||||
- Maurizio
|
||||
- Sanke#6086 (Romanian & French)
|
||||
- Redactado#1673 (Spanish)
|
||||
- t0miiis#3022 (Czech)
|
||||
- josuens14 (Spanish)
|
||||
- M4#5882 (Arabic)
|
||||
- ChilledBroke#9986 (Arabic)
|
||||
- David.#0187 (German)
|
||||
- Maurizio#0268 (Italian)
|
||||
- the_gamer#5095 (Danish)
|
||||
|
||||
## features
|
||||
- discord interaction buttons
|
||||
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"otversion": "3.1.0",
|
||||
"style": {
|
||||
"backgroundData": "https://pbs.twimg.com/media/EBjFBlVXsAAhvXl?format=jpg&name=4096x4096",
|
||||
"backgroundModus": "image",
|
||||
"enableCustomBackground": true,
|
||||
"titleColor": "#49c100"
|
||||
},
|
||||
"bot": {
|
||||
"name": "DJdj Test Bot",
|
||||
"id": 958290611331539000,
|
||||
"pfp": "https://cdn.discordapp.com/avatars/958290611331538975/7a989e8ce6cde2b3e3c7fc15001452a0.webp"
|
||||
},
|
||||
"ticket": {
|
||||
"name": "question-djj123dj",
|
||||
"id": 1064653735772565500,
|
||||
"guildname": "DJDJ bot test",
|
||||
"guildid": 935983011281903600,
|
||||
"creatorname": "DJj123dj#1706",
|
||||
"creatorid": 779742674932072400,
|
||||
"closedbyname": "DJj123dj#1706",
|
||||
"closedbyid": 779742674932072400,
|
||||
"closedtime": 1673903703543,
|
||||
"openedtime": 1673903631015,
|
||||
"messages": 4,
|
||||
"files": 0
|
||||
},
|
||||
"messages": [
|
||||
{
|
||||
"author": {
|
||||
"name": "DJdj Test Bot#7338",
|
||||
"id": 958290611331539000,
|
||||
"color": "#ffffff",
|
||||
"pfp": "https://cdn.discordapp.com/avatars/958290611331538975/7a989e8ce6cde2b3e3c7fc15001452a0.webp"
|
||||
},
|
||||
"content": "<@779742674932072469> @here",
|
||||
"timestamp": 1673903631356,
|
||||
"embeds": [
|
||||
{
|
||||
"title": "Question",
|
||||
"description": "The staff will help you soon!\n\n*Click on the button below to close the ticket!*",
|
||||
"authorimg": false,
|
||||
"authortext": false,
|
||||
"footerimg": false,
|
||||
"footertext": false,
|
||||
"color": "#49c100",
|
||||
"image": false,
|
||||
"thumbnail": false,
|
||||
"url": false
|
||||
}
|
||||
],
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"author": {
|
||||
"name": "DJdj Test Bot#7338",
|
||||
"id": 958290611331539000,
|
||||
"color": "#ffffff",
|
||||
"pfp": "https://cdn.discordapp.com/avatars/958290611331538975/7a989e8ce6cde2b3e3c7fc15001452a0.webp"
|
||||
},
|
||||
"content": "",
|
||||
"timestamp": 1673903631652,
|
||||
"embeds": [],
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"author": {
|
||||
"name": "DJj123dj#1706",
|
||||
"id": 779742674932072400,
|
||||
"color": "#ffffff",
|
||||
"pfp": "https://cdn.discordapp.com/avatars/779742674932072469/4588af0ccb6a18a66d66c77bddbdfc81.webp"
|
||||
},
|
||||
"content": "**test markdown (again)**\n__hi__\n~~hello!~~\n\n_nice_\n\n**___super text!__**",
|
||||
"timestamp": 1673903693407,
|
||||
"embeds": [],
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"author": {
|
||||
"name": "DJdj Test Bot#7338",
|
||||
"id": 958290611331539000,
|
||||
"color": "#ffffff",
|
||||
"pfp": "https://cdn.discordapp.com/avatars/958290611331538975/7a989e8ce6cde2b3e3c7fc15001452a0.webp"
|
||||
},
|
||||
"content": "",
|
||||
"timestamp": 1673903697253,
|
||||
"embeds": [
|
||||
{
|
||||
"title": "❌ Deleting this ticket...",
|
||||
"description": false,
|
||||
"authorimg": false,
|
||||
"authortext": false,
|
||||
"footerimg": "https://cdn.discordapp.com/avatars/779742674932072469/4588af0ccb6a18a66d66c77bddbdfc81.webp",
|
||||
"footertext": "DJj123dj#1706",
|
||||
"color": "#49c100",
|
||||
"image": false,
|
||||
"thumbnail": false,
|
||||
"url": false
|
||||
}
|
||||
],
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -21,8 +21,6 @@ module.exports = () => {
|
||||
const header = config.system.ticket_channel ? l.helpMenu.header1.replace("{0}","<#"+config.system.ticket_channel+">") : l.helpMenu.header2
|
||||
helpEmbed.setDescription(header+"`"+prefix+msgName+" <id>` ➜ _"+l.helpMenu.msgCmd+"_\n\n`"+prefix+"rename <name>` ➜ _"+l.helpMenu.renameCmd+"_\n`"+prefix+"close` ➜ _"+l.helpMenu.closeCmd+"_\n`"+prefix+"delete` ➜ _"+l.helpMenu.deleteCmd+"_\n`"+prefix+"reopen` ➜ _"+l.helpMenu.reopenCmd+"_\n\n`"+prefix+"add <user>` ➜ _"+l.helpMenu.addCmd+"_\n`"+prefix+"remove <user>` ➜ _"+l.helpMenu.removeCmd+"_")
|
||||
|
||||
if (config.credits) helpEmbed.setFooter({text:"Open-Ticket by DJdj Development | view on github for source code",iconURL:"https://raw.githubusercontent.com/DJj123dj/open-ticket/main/logo.png"})
|
||||
|
||||
var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix
|
||||
|
||||
if (!DISABLE.commands.text.help) client.on("messageCreate",msg => {
|
||||
|
||||
+1
-4
@@ -6,7 +6,6 @@
|
||||
"prefix":"!ticket ",
|
||||
"languagefile":"english",
|
||||
|
||||
"credits":true,
|
||||
"status":{
|
||||
"enabled":true,
|
||||
"type":"PLAYING",
|
||||
@@ -22,9 +21,7 @@
|
||||
"member_role":"member role (doesn't have access to tickets)",
|
||||
"closeMode":"adminonly|normal",
|
||||
|
||||
"enable_transcript":false,
|
||||
"enable_DM_transcript":false,
|
||||
"transcript_channel":"channel id",
|
||||
"transcripts":"!!!! ALL SETTINGS FOR TRANSCRIPTS ARE LOCATED IN: transcriptconfig.json !!!!",
|
||||
|
||||
"showSlashcmdsInHelp":false
|
||||
},
|
||||
|
||||
+1
-7
@@ -368,7 +368,7 @@ exports.checker = async () => {
|
||||
//--------------------------|
|
||||
//--------------------------|
|
||||
|
||||
var configArray = ["main_color","server_id","auth_token","main_adminroles","prefix","languagefile","credits","status","system","options","messages"]
|
||||
var configArray = ["main_color","server_id","auth_token","main_adminroles","prefix","languagefile","status","system","options","messages"]
|
||||
configArray.forEach((item) => {
|
||||
if (config[item] == undefined){
|
||||
throw new Error("\n\nMAIN ERROR: the item '"+item+"' doesn't exist in config.json")
|
||||
@@ -390,7 +390,6 @@ exports.checker = async () => {
|
||||
createError("'languagefile' | invalid language, more info in the wiki")
|
||||
}
|
||||
|
||||
checkType(config.credits,"boolean","credits")
|
||||
//status:
|
||||
checkType(config.status.enabled,"boolean","status/enabled")
|
||||
if (config.status.enabled){
|
||||
@@ -423,11 +422,6 @@ exports.checker = async () => {
|
||||
createError("'system/closeMode' | the close mode must be adminonly or normal")
|
||||
}
|
||||
|
||||
checkType(config.system.enable_transcript,"boolean","system/enable_transcript")
|
||||
checkType(config.system.enable_DM_transcript,"boolean","system/enable_DM_transcript")
|
||||
if (config.system.enable_transcript){
|
||||
checkDiscord("channelid",config.system.transcript_channel,"system/transcript_channel")
|
||||
}
|
||||
checkType(config.system.showSlashcmdsInHelp,"boolean","system/showSlashcmdsInHelp")
|
||||
|
||||
//options
|
||||
|
||||
@@ -25,16 +25,26 @@ exports.closeCommandRow = new arb()
|
||||
)
|
||||
.addComponents(
|
||||
new button()
|
||||
.setCustomId("OTsendTranscript")
|
||||
.setCustomId("OTreopenTicket")
|
||||
.setDisabled(false)
|
||||
.setStyle(bs.Secondary)
|
||||
.setLabel(l.buttons.sendTranscript)
|
||||
.setEmoji("📄")
|
||||
.setStyle(bs.Success)
|
||||
.setLabel(l.buttons.reopen)
|
||||
.setEmoji("✔")
|
||||
)
|
||||
|
||||
exports.closeCommandRowDisabled = new arb()
|
||||
.addComponents(
|
||||
new button()
|
||||
.setCustomId("OTdeleteTicket1")
|
||||
.setDisabled(true)
|
||||
.setStyle(bs.Danger)
|
||||
.setLabel(l.buttons.delete)
|
||||
.setEmoji("✖️")
|
||||
)
|
||||
.addComponents(
|
||||
new button()
|
||||
.setCustomId("OTreopenTicket")
|
||||
.setDisabled(false)
|
||||
.setDisabled(true)
|
||||
.setStyle(bs.Success)
|
||||
.setLabel(l.buttons.reopen)
|
||||
.setEmoji("✔")
|
||||
|
||||
@@ -50,8 +50,8 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||
await interaction.message.edit({components:[bot.buttons.close.openRowDisabled]})
|
||||
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
deleteTicketButtonChecker = false
|
||||
})
|
||||
@@ -90,8 +90,10 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"deletenotranscript",false,true)
|
||||
await interaction.message.edit({components:[bot.buttons.close.closeCommandRowDisabled]})
|
||||
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
deleteTicketButtonChecker1 = false
|
||||
|
||||
})
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
module.exports = () => {
|
||||
require("./firstmsg")()
|
||||
require("./sendTranscript")()
|
||||
require("./verifyBars")()
|
||||
|
||||
//accepted
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
const discord = require('discord.js')
|
||||
const bot = require('../../../index')
|
||||
const client = bot.client
|
||||
const config = bot.config
|
||||
const l = bot.language
|
||||
const log = bot.errorLog.log
|
||||
|
||||
const storage = bot.storage
|
||||
const hiddendata = bot.hiddenData
|
||||
const embed = discord.EmbedBuilder
|
||||
const mc = config.main_color
|
||||
|
||||
const button = discord.ButtonBuilder
|
||||
const arb = discord.ActionRowBuilder
|
||||
const bs = discord.ButtonStyle
|
||||
|
||||
|
||||
module.exports = () => {
|
||||
client.on("interactionCreate",async (interaction) => {
|
||||
if (!interaction.isButton()) return
|
||||
if (interaction.customId != "OTsendTranscript") return
|
||||
|
||||
try {
|
||||
interaction.deferUpdate()
|
||||
} catch{}
|
||||
const tsmsg = await interaction.channel.send({embeds:[bot.embeds.commands.sendTranscriptEmbed(false,interaction.channel,interaction.user)]})
|
||||
|
||||
const channelmessages = await interaction.channel.messages.fetch()
|
||||
|
||||
channelmessages.sweep((msgSweep) => {
|
||||
return msgSweep.author.id == client.user.id
|
||||
})
|
||||
|
||||
var fileattachment = await require("../../transcript").createTranscript(channelmessages,interaction.channel)
|
||||
|
||||
if (fileattachment == false){
|
||||
log("system","internal error: transcript is not created!")
|
||||
tsmsg.edit({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrongTranscript)]})
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
tsmsg.edit({embeds:[bot.embeds.commands.sendTranscriptEmbed(true,interaction.channel,interaction.user)],files:[fileattachment]})
|
||||
}catch{}
|
||||
})
|
||||
}
|
||||
@@ -16,6 +16,7 @@ else if (config.languagefile.startsWith("arabic")) localLanguage = require("../l
|
||||
else if (config.languagefile.startsWith("spanish")) localLanguage = require("../language/spanish.json")
|
||||
else if (config.languagefile.startsWith("portuguese")) localLanguage = require("../language/portuguese.json")
|
||||
else if (config.languagefile.startsWith("italian")) localLanguage = require("../language/italian.json")
|
||||
else if (config.languagefile.startsWith("danish")) localLanguage = require("../language/danish.json")
|
||||
|
||||
|
||||
const errorLog = async () => {
|
||||
|
||||
@@ -49,7 +49,7 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
||||
var enableTranscript = true
|
||||
var deleteRequired = false
|
||||
|
||||
if (mode == "delete"){
|
||||
if (mode == "delete" || mode == "deletenotranscript"){
|
||||
//delete
|
||||
//check perms
|
||||
if (!guild) return
|
||||
@@ -196,14 +196,6 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
||||
.setLabel(l.buttons.delete)
|
||||
.setEmoji("✖️")
|
||||
)
|
||||
.addComponents(
|
||||
new discord.ButtonBuilder()
|
||||
.setCustomId("OTsendTranscript")
|
||||
.setDisabled(false)
|
||||
.setStyle(discord.ButtonStyle.Secondary)
|
||||
.setLabel(l.buttons.sendTranscript)
|
||||
.setEmoji("📄")
|
||||
)
|
||||
.addComponents(
|
||||
new discord.ButtonBuilder()
|
||||
.setCustomId("OTreopenTicket")
|
||||
@@ -246,108 +238,23 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
||||
})
|
||||
|
||||
|
||||
}else if (mode == "deletenotranscript"){
|
||||
//delete with no transcript
|
||||
//check perms
|
||||
if (!guild) return
|
||||
if (!permsChecker.command(user.id,guild.id)){
|
||||
permsChecker.sendUserNoPerms(user)
|
||||
return
|
||||
}
|
||||
|
||||
//start delete proccess
|
||||
enableTranscript = false
|
||||
deleteRequired = true
|
||||
if (!nomessage){
|
||||
await channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
||||
}
|
||||
log("system","deleted a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
|
||||
|
||||
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
||||
|
||||
//getID & send DM & send api event
|
||||
await channel.messages.fetchPinned().then(msglist => {
|
||||
var firstmsg = msglist.last()
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
||||
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
||||
|
||||
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
|
||||
|
||||
const id = hiddendata.data.find(d => d.key == "openerid").value
|
||||
|
||||
if (!id) return false
|
||||
|
||||
try{
|
||||
if (config.system.enable_DM_Messages){
|
||||
member.send({embeds:[bot.errorLog.custom(l.messages.deletedTicketDmTitle,l.messages.deletedTicketDmDescription,":ticket:",config.main_color)]})
|
||||
}
|
||||
}
|
||||
catch{log("system","can't send DM to member, member doesn't allow dm's")}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const transcriptHandler = async () => {
|
||||
if (enableTranscript == true && mode != "deletenotranscript"){
|
||||
//transcript messages
|
||||
const transcriptReason = (mode == "close") ? "**"+l.messages.reason+":** "+newReason : "**"+l.messages.reason+":** "+l.messages.none
|
||||
const closedByPrefix = (mode.startsWith("delete")) ? l.messages.deletedby : l.messages.closedby
|
||||
if (!bot.tsconfig.sendTranscripts.enableChannel && !bot.tsconfig.sendTranscripts.enableDM) return false
|
||||
|
||||
if (config.system.enable_transcript || config.system.enable_DM_transcript){
|
||||
const channelmessages = await channel.messages.fetch({cache:true})
|
||||
//remove ot bot from transcript
|
||||
channelmessages.sweep((msgSweep) => {return msgSweep.author.id == client.user.id})
|
||||
|
||||
var fileattachment = await require("../transcript").createTranscript(channelmessages,channel)
|
||||
|
||||
if (fileattachment == false){log("system","internal error: transcript is not created!");return}
|
||||
}
|
||||
|
||||
if (config.system.enable_transcript && !require("../api/api.json").disable.transcripts.server){
|
||||
const transcriptEmbed = new discord.EmbedBuilder()
|
||||
.setColor(config.main_color)
|
||||
.setTitle("📄 "+l.messages.newTranscriptTitle)
|
||||
.setDescription(transcriptReason)
|
||||
.setFooter({text:closedByPrefix+": "+user.tag+" | ticket: "+channelname,iconURL:user.displayAvatarURL()})
|
||||
|
||||
guild.channels.cache.find(c => c.id == config.system.transcript_channel).send({
|
||||
embeds:[transcriptEmbed],
|
||||
files:[fileattachment]
|
||||
})
|
||||
}
|
||||
|
||||
if (config.system.enable_DM_transcript && !require("../api/api.json").disable.transcripts.dm){
|
||||
const transcriptEmbed = new discord.EmbedBuilder()
|
||||
.setColor(config.main_color)
|
||||
.setTitle("📄 "+l.messages.newTranscriptTitle)
|
||||
.setDescription(transcriptReason)
|
||||
.setFooter({text:closedByPrefix+": "+user.tag+" | ticket: "+channelname,iconURL:user.displayAvatarURL()})
|
||||
|
||||
if (!isDatabaseError) ticketOpener.send({
|
||||
embeds:[transcriptEmbed],
|
||||
files:[fileattachment]
|
||||
})
|
||||
}
|
||||
}
|
||||
const APIEvents = require("../api/modules/events")
|
||||
const messages = await channel.messages.fetch({cache:true})
|
||||
await require("../transcriptSystem/manager")(messages,guild,channel,user,reason)
|
||||
APIEvents.onTranscriptCreation(messages,channel,guild,new Date())
|
||||
}
|
||||
const deleteHandler = async () => {
|
||||
if (deleteRequired){
|
||||
//const timer = () => {return new Promise((resolve,reject) => {
|
||||
// setTimeout(() => {resolve(true)},7000)
|
||||
//})}
|
||||
//await timer()
|
||||
|
||||
pendingDelete.shift()
|
||||
await channel.delete()
|
||||
|
||||
//setTimeout(async () => {
|
||||
// pendingDelete.shift()
|
||||
// await channel.delete()
|
||||
//},6000)
|
||||
await channel.delete()
|
||||
}
|
||||
}
|
||||
await transcriptHandler()
|
||||
if (mode == "delete" || mode == "deletenotranscript") await transcriptHandler()
|
||||
deleteHandler()
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
const discord = require('discord.js')
|
||||
|
||||
const bot = require("../../../index")
|
||||
const tsconfig = bot.tsconfig
|
||||
const tsembeds = require("../embeds")
|
||||
const tsdb = require("../tsdb")
|
||||
|
||||
const otversion = require("../../../package.json").version
|
||||
const version = require("../info.json").version
|
||||
|
||||
/**@typedef {{style:{enableCustomBackground:Boolean, backgroundModus:"color"|"image", backgroundData:String, titleColor:String}, bot:{name:String, id:Number, pfp:String}, ticket:{creatorname:String, creatorid:Number, closedtime:Number, openedtime:Number}}} OThtsDataOption */
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.Guild} guild
|
||||
* @param {discord.Channel} channel
|
||||
* @param {discord.User} user
|
||||
* @param {discord.Message[]} messagesInv
|
||||
* @param {OThtsDataOption} data
|
||||
*/
|
||||
exports.compile = (guild,channel,user,messagesInv,data) => {
|
||||
const messages = messagesInv.reverse()
|
||||
|
||||
const rawfiles = messages.filter((m) => Array.from(m.attachments).length > 0)
|
||||
var fileAmount = 0
|
||||
rawfiles.forEach((msg) => {
|
||||
fileAmount = fileAmount + Array.from(msg.attachments).length
|
||||
})
|
||||
|
||||
const messagesArray = []
|
||||
messages.forEach((msg) => {
|
||||
const embedArray = []
|
||||
const fileArray = []
|
||||
|
||||
msg.attachments.forEach((file) => {
|
||||
fileArray.push({
|
||||
name:file.name,
|
||||
type:file.contentType,
|
||||
size:file.size.toString()+" bytes",
|
||||
url:file.url
|
||||
})
|
||||
})
|
||||
|
||||
msg.embeds.forEach((embed) => {
|
||||
if (embed.description){
|
||||
var desc = bot.hiddenData.removeHiddenData(embed.description).description
|
||||
}else{var desc = false}
|
||||
|
||||
embedArray.push({
|
||||
title:embed.title || false,
|
||||
description:desc,
|
||||
authorimg:((embed.author && embed.author.iconURL) ? embed.author.iconURL : false),
|
||||
authortext:(embed.author ? embed.author.name : false),
|
||||
footerimg:((embed.footer && embed.footer.iconURL) ? embed.footer.iconURL : false),
|
||||
footertext:(embed.footer ? embed.footer.text : false),
|
||||
color:embed.hexColor,
|
||||
image:((embed.image && embed.image.url) ? embed.image.url : false),
|
||||
thumbnail:((embed.thumbnail && embed.thumbnail.url) ? embed.thumbnail.url : false),
|
||||
url:(embed.url ? embed.url : false)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
messagesArray.push({
|
||||
author:{
|
||||
name:msg.author.tag,
|
||||
id:Number(msg.author.id),
|
||||
color:msg.author.hexAccentColor || "#ffffff",
|
||||
pfp:msg.author.displayAvatarURL()
|
||||
},
|
||||
content:msg.content || "",
|
||||
timestamp:msg.createdTimestamp,
|
||||
embeds:embedArray,
|
||||
files:fileArray
|
||||
})
|
||||
})
|
||||
|
||||
const result = {
|
||||
version,otversion,
|
||||
style:{
|
||||
backgroundData:data.style.backgroundData || "",
|
||||
backgroundModus:data.style.backgroundModus || "",
|
||||
enableCustomBackground:data.style.enableCustomBackground || false,
|
||||
titleColor:data.style.titleColor || "#F8BA00"
|
||||
},
|
||||
bot:{
|
||||
name:data.bot.name || "Open Ticket",
|
||||
id:Number(data.bot.id) || 0,
|
||||
pfp:data.bot.pfp || "dj-dj.be/wp-content/uploads/2022/07/profielfoto-blauw-wit.png?size=128"
|
||||
},
|
||||
ticket:{
|
||||
name:channel.name,
|
||||
id:Number(channel.id),
|
||||
|
||||
guildname:guild.name,
|
||||
guildid:Number(guild.id),
|
||||
|
||||
creatorname:data.ticket.creatorname,
|
||||
creatorid:Number(data.ticket.creatorid),
|
||||
closedbyname:user.tag,
|
||||
closedbyid:Number(user.id),
|
||||
|
||||
closedtime:data.ticket.closedtime,
|
||||
openedtime:data.ticket.openedtime,
|
||||
|
||||
messages:Array.from(messages).length,
|
||||
files:fileAmount
|
||||
},
|
||||
messages:messagesArray
|
||||
}
|
||||
|
||||
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
const axios = require("axios").default
|
||||
const discord = require('discord.js')
|
||||
|
||||
const bot = require("../../../index")
|
||||
const tsconfig = bot.tsconfig
|
||||
const tsembeds = require("../embeds")
|
||||
const tsdb = require("../tsdb")
|
||||
|
||||
/**@typedef {{status:"success"|"error", id:String, time:Number, estimated:{lastdump: Number, processtime:Number}, transcriptstatus:{value:2, data:{fetchedmsgs:true, uploaded:true, inqueue:true, processed:false, waiting:false, available:false}}}} OTuploadResponse */
|
||||
|
||||
/**
|
||||
* @param {Object} json
|
||||
* @returns {OTuploadResponse}
|
||||
*/
|
||||
exports.upload = async (json) => {
|
||||
|
||||
const data = encodeURIComponent(JSON.stringify(json))
|
||||
|
||||
try {
|
||||
const res = await axios.get("https://api.transcripts.dj-dj.be/upload?auth=openticketTRANSCRIPT1234&version=1.0.0&data="+data)
|
||||
if (res.status != 200) return false
|
||||
|
||||
return res.data
|
||||
}catch{
|
||||
console.log("failed transcript upload!")
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"version":"1.0.0",
|
||||
"otversion":"3.2.0",
|
||||
"style":{
|
||||
"enableCustomBackground":false,
|
||||
"backgroundModus":"color OR image",
|
||||
"backgroundData":"#ffffff OR https://www.example.com/image.png",
|
||||
"titleColor":"#ffffff"
|
||||
},
|
||||
"bot":{
|
||||
"name":"DJdj Support Bot",
|
||||
"id":12345678910,
|
||||
"pfp":"https://www.example.com/image.png"
|
||||
},
|
||||
"ticket":{
|
||||
"name":"support-DJj123dj",
|
||||
"id":12345678910,
|
||||
|
||||
"guildname":"DJdj Development",
|
||||
"guildid":12345678910,
|
||||
|
||||
"creatorname":"DJj123dj#1706",
|
||||
"creatorid":12345678910,
|
||||
"closedbyname":"DJj123dj#1706",
|
||||
"closedbyid":12345678910,
|
||||
|
||||
"closedtime":12345678910,
|
||||
"openedtime":12345678910,
|
||||
|
||||
"messages":1,
|
||||
"files":1
|
||||
},
|
||||
"messages":[
|
||||
{
|
||||
"author":{
|
||||
"name":"DJj123dj#1706",
|
||||
"id":12345678910,
|
||||
"color":"#ffffff",
|
||||
"pfp":"https://www.example.com/image.png"
|
||||
},
|
||||
"content":"string or FALSE",
|
||||
"timestamp":12345678910,
|
||||
"embeds":[
|
||||
{
|
||||
"title":"string or FALSE",
|
||||
"description":"string or FALSE",
|
||||
"authorimg":"https://www.example.com/image.png or FALSE",
|
||||
"authortext":"string or FALSE",
|
||||
"footerimg":"https://www.example.com/image.png or FALSE",
|
||||
"footertext":"string or FALSE",
|
||||
"color":"#ffffff",
|
||||
"image":"https://www.example.com/image.png or FALSE",
|
||||
"thumbnail":"https://www.example.com/image.png or FALSE",
|
||||
"url":"https://www.example.com/image.png or FALSE"
|
||||
}
|
||||
],
|
||||
"files":[
|
||||
{
|
||||
"name":"image.png",
|
||||
"type":"PNG",
|
||||
"size":"1MB",
|
||||
"url":"https://www.example.com/image.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
const discord = require('discord.js')
|
||||
const bot = require('../../index')
|
||||
const client = bot.client
|
||||
const config = bot.config
|
||||
const log = bot.errorLog.log
|
||||
const l = bot.language
|
||||
const storage = bot.storage
|
||||
const tsconfig = bot.tsconfig
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} name
|
||||
* @param {String} id
|
||||
* @param {Number} rawprocesstime milliseconds
|
||||
* @param {discord.User} user
|
||||
*/
|
||||
exports.beingprocessed = (name,id,rawprocesstime,user) => {
|
||||
|
||||
const newtime = new Date(new Date().getTime() + rawprocesstime)
|
||||
|
||||
const processtime = "<t:"+newtime.getTime().toString().substring(0,newtime.getTime().toString().length-3)+":R>"
|
||||
|
||||
const embed = new discord.EmbedBuilder()
|
||||
.setTitle("🧾 Transcript")
|
||||
.setColor(config.main_color)
|
||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setFooter({text:name})
|
||||
|
||||
.setDescription("`This transcript is being processed...`\nPlease wait!\n\nEstimated time: "+processtime)
|
||||
|
||||
return embed
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} name
|
||||
* @param {String} id
|
||||
* @param {String} url
|
||||
* @param {discord.User} user
|
||||
*/
|
||||
exports.tsready = (name,id,url,user) => {
|
||||
const embed = new discord.EmbedBuilder()
|
||||
.setTitle("🧾 Transcript")
|
||||
.setColor(config.main_color)
|
||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setFooter({text:name})
|
||||
.setURL(url)
|
||||
|
||||
.setDescription("The transcript is available [here]("+url+")")
|
||||
|
||||
return embed
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"version":"1.0.0"
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
const discord = require('discord.js')
|
||||
const bot = require('../../index')
|
||||
const client = bot.client
|
||||
const config = bot.config
|
||||
const log = bot.errorLog.log
|
||||
const l = bot.language
|
||||
const storage = bot.storage
|
||||
|
||||
const tsconfig = bot.tsconfig
|
||||
const tsembeds = require("./embeds")
|
||||
const tsdb = require("./tsdb")
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.Message[]} messages
|
||||
* @param {discord.Guild} guild
|
||||
* @param {discord.TextChannel} channel
|
||||
* @param {discord.User} user
|
||||
* @param {String|false} reason
|
||||
*/
|
||||
module.exports = async (messages,guild,channel,user,reason) => {
|
||||
const msglist = await channel.messages.fetchPinned()
|
||||
|
||||
const chName = channel.id
|
||||
const chId = channel.name
|
||||
|
||||
if (tsconfig.sendTranscripts.enableChannel){
|
||||
/**@type {discord.TextChannel|undefined} */
|
||||
const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel)
|
||||
|
||||
if (!tc) return
|
||||
const embed = tsembeds.beingprocessed(chName,chId,60000,user)
|
||||
var msg = await tc.send({embeds:[embed]})
|
||||
}else {var msg = false}
|
||||
|
||||
/**@param {discord.Collection<string, discord.Message<true>>} msglist*/
|
||||
const asyncmanager = async (msglist) => {
|
||||
var firstmsg = msglist.last()
|
||||
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
||||
const ticketId = hiddendata.data.find(d => d.key == "type")
|
||||
|
||||
const id = hiddendata.data.find(d => d.key == "openerid").value
|
||||
const opentime = new Date(Number(hiddendata.data.find(d => d.key == "createdms").value))
|
||||
|
||||
const ticketopener = client.users.cache.find(u => u.id == id)
|
||||
|
||||
|
||||
const JSONDATA = require("./communication/compileJson").compile(guild,channel,user,messages,{
|
||||
style:{
|
||||
titleColor:tsconfig.style.titleColor,
|
||||
enableCustomBackground:tsconfig.style.background.enableCustomBackground,
|
||||
backgroundModus:tsconfig.style.background.backgroundModus,
|
||||
backgroundData:tsconfig.style.background.backgroundData
|
||||
},
|
||||
bot:{
|
||||
name:client.user.username,
|
||||
id:client.user.id,
|
||||
pfp:client.user.displayAvatarURL()
|
||||
},
|
||||
ticket:{
|
||||
creatorid:ticketopener.id,
|
||||
creatorname:ticketopener.tag,
|
||||
openedtime:opentime.getTime(),
|
||||
closedtime:new Date().getTime()
|
||||
}
|
||||
})
|
||||
|
||||
require("fs").writeFileSync("./TESTJSON.json",JSON.stringify(JSONDATA,null,"\t"))
|
||||
|
||||
const TSdata = await require("./communication/index").upload(JSONDATA)
|
||||
if (!TSdata) return false
|
||||
if (TSdata.status == "success"){
|
||||
const url = "https://transcripts.dj-dj.be/t/"+TSdata.time+"_"+TSdata.id+".html"
|
||||
|
||||
if (msg){
|
||||
msg.edit(tsembeds.tsready(chName,chId,url,user))
|
||||
console.log("URL:",url)
|
||||
}
|
||||
|
||||
if (tsconfig.sendTranscripts.enableDM){
|
||||
if (!user) return
|
||||
const embed = tsembeds.tsready(chName,chId,url,user)
|
||||
try {
|
||||
user.send({embeds:[embed]})
|
||||
}catch{}
|
||||
}
|
||||
}
|
||||
}
|
||||
asyncmanager(msglist)
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
const fs = require("fs")
|
||||
const location = "./storage/tsdatabase.json"
|
||||
|
||||
|
||||
/**@returns {[{category:String, key:String, value:String}]}*/
|
||||
function getData(){
|
||||
if (fs.existsSync(location)){
|
||||
return JSON.parse(fs.readFileSync(location).toString())
|
||||
}else{
|
||||
fs.writeFileSync(location,"[]")
|
||||
return []
|
||||
}
|
||||
}
|
||||
/**@param {[{category:String, key:String, value:String}]} data*/
|
||||
function setData(data){
|
||||
fs.writeFileSync(location,JSON.stringify(data,null,"\t"))
|
||||
}
|
||||
|
||||
exports.set = (category,key,value) => {
|
||||
const currentData = getData()
|
||||
const exists = currentData.find((d) => (d.category == category) && (d.key == key)) ? true : false
|
||||
var newData = []
|
||||
if (exists){
|
||||
currentData.forEach((d,i) => {
|
||||
if (d.category == category && d.key == key){
|
||||
newData.push({category,key,value})
|
||||
}else{
|
||||
newData.push(d)
|
||||
}
|
||||
})
|
||||
}else{
|
||||
currentData.push({category,key,value})
|
||||
newData = currentData
|
||||
}
|
||||
|
||||
setData(newData)
|
||||
return exists
|
||||
}
|
||||
/**
|
||||
* @param {String} category
|
||||
* @param {String} key
|
||||
* @returns {String|false}
|
||||
*/
|
||||
exports.get = (category,key) => {
|
||||
const currentData = getData()
|
||||
const tempresult = currentData.find((d) => (d.category == category) && (d.key == key))
|
||||
const result = tempresult ? tempresult.value : false
|
||||
return result
|
||||
}
|
||||
/**
|
||||
* @param {String} category
|
||||
* @param {String} key
|
||||
* @param {String} value
|
||||
*/
|
||||
exports.delete = (category,key) => {
|
||||
const currentData = getData()
|
||||
const exists = currentData.find((d) => (d.category == category) && (d.key == key)) ? true : false
|
||||
var newData = []
|
||||
if (exists){
|
||||
currentData.forEach((d,i) => {
|
||||
if (!(d.category == category && d.key == key)){
|
||||
newData.push(d)
|
||||
}
|
||||
})
|
||||
}else{
|
||||
newData = currentData
|
||||
}
|
||||
|
||||
setData(newData)
|
||||
return exists
|
||||
}
|
||||
@@ -35,7 +35,10 @@ exports.createEmbed = (id) => {
|
||||
const embed = new discord.EmbedBuilder()
|
||||
.setTitle(data.name)
|
||||
if (data.enableFooter) embed.setFooter({text:data.footer})
|
||||
if (data.enableThumbnail) embed.setThumbnail(data.thumbnail)
|
||||
|
||||
try {
|
||||
if (data.enableThumbnail) embed.setThumbnail(data.thumbnail)
|
||||
}catch{bot.errorLog.log("info","THUMBNAIL FAILED TO LOAD, probably invalid url!")}
|
||||
|
||||
if (data.enableCustomColor){
|
||||
embed.setColor(data.color)
|
||||
|
||||
@@ -69,8 +69,13 @@ const language = require("./core/languageManager").language
|
||||
exports.language = language
|
||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded language")
|
||||
|
||||
|
||||
const config = tempconfig
|
||||
exports.config = config
|
||||
|
||||
const tsconfig = require("./transcriptconfig.json")
|
||||
exports.tsconfig = tsconfig
|
||||
|
||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config")
|
||||
exports.storage = require('./core/dynamicdatabase/storage')
|
||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded storage")
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"errors":{
|
||||
"missingArgsTitle":"Ugyldige argumenter",
|
||||
"missingArgsDescription":"Manglende argumenter",
|
||||
"noPermsTitle":"Ingen adgang",
|
||||
"noPermsDescription":"Du har ikke adgang til denne kommando",
|
||||
"noPermsDelete":"Kun administrators kan slette tickets",
|
||||
"chooseFromListTitle":"Ugyldig ID",
|
||||
"chooseFromListDescription":"Vælg et ID nedenunder",
|
||||
"boterror":"Bot Fejl!",
|
||||
"notInTicketTitle":"Du er ikke i en ticket!",
|
||||
"notInTicketDescription":"Denne kommando fungere kun i tickets!",
|
||||
"ticketDoesntExist":"Denne ticket eksistere ikke mere!",
|
||||
"roleDoesntExist":"Denne rolle eksistere ikke mere!",
|
||||
"anotherOption":"Dette er ikke en ticket, men noget andet!",
|
||||
"maxAmountTitle":"For mange tickets er blevet oprettet!",
|
||||
"maxAmountDescription":"Du har for mange tickets åbne!\nSå luk dem hvis du gerne vil oprette nye!",
|
||||
"somethingWentWrong":"**Noget gik galt**\nKontakt en udvikler!",
|
||||
"somethingWentWrongTranscript":"Noget gik galt med transcript!**\nKontakt en udvikler!"
|
||||
},
|
||||
"commands":{
|
||||
"userAddedTitle":"Tilføjer {0} til denne ticket!",
|
||||
"userRemovedTitle":"Fjernet {0} fra denne ticket!",
|
||||
"renameTitle":"Ændret navnet til{0}!",
|
||||
"closeTitle":"Closed this ticket!",
|
||||
"deleteTitle":"Fjerner ticketen",
|
||||
"reopenTitle":"Genåbnede denne ticket",
|
||||
"claimTitle":"Denne ticket er blevet taget af {0}",
|
||||
"unclaimTitle":"Denne ticket er nu tilgængelig!",
|
||||
|
||||
"ticketWarning":"Emebeddet er i beskeden nedenunder",
|
||||
"maxTicketWarning":"**Fejl:** _Du kan kun oprettre {0} ticket adgangen!_"
|
||||
},
|
||||
"helpMenu":{
|
||||
"title":"Tilgængelig kommandoer:",
|
||||
"header1":"**Gå til {0} For at oprette en ticket!**\n\n",
|
||||
"header2":"**Skriv kommandoen `/new` eller `/ticket` for at oprette en ticket!**\n\n",
|
||||
|
||||
"msgCmd":"Lav en embed med knapper (admins kun)",
|
||||
"renameCmd":"Ændre navnet (ingen mellemrum)",
|
||||
"closeCmd":"Luk denne ticket",
|
||||
"deleteCmd":"Fjern denne ticket",
|
||||
"addCmd":"Tilføj en person til ticketen",
|
||||
"removeCmd":"Fjern en person fra ticketen",
|
||||
"reopenCmd":"Genåben en ticket efter den har været lukket"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"Luk ticket",
|
||||
"delete":"Fjern ticket",
|
||||
"reopen":"Genåben ticket",
|
||||
"sendTranscript":"Transcript",
|
||||
"closeWithReason":"Luk med grundlag"
|
||||
},
|
||||
"messages":{
|
||||
"reopenTitle":"Genåbener denne ticket",
|
||||
"reopenDescription":"Du kan nu skrive igen",
|
||||
"closedTitle":"Lukker ticketen!",
|
||||
"closedDescription":"Kun administrators kan skrive lige nu!\n\n*Klik på knappen nedenunder for at slette eller genåbne ticketen!*",
|
||||
"createdTitle":"Ticket oprettet!",
|
||||
"createdDescription":"Din ticket er oprettet!",
|
||||
|
||||
"newTicketDmTitle":"Ny Ticket!",
|
||||
"closedTicketDmTitle":"Ticket Lukket!",
|
||||
"deletedTicketDmTitle":"Ticket Fjernet!",
|
||||
"closedTicketDmDescription":"Din ticket er blevet lukket!",
|
||||
"deletedTicketDmDescription":"Din ticket er blevet fjernet!",
|
||||
"reopenTicketDmTitle":"Ticket Genåbnet!",
|
||||
"reopenTicketDmDescription":"Din ticket er blevet genåbent!",
|
||||
"newTranscriptTitle":" En ny transcript er tilføjet!",
|
||||
"hereIsTheTranscript":"Følgende transcript:",
|
||||
|
||||
"chooseCategory":"Vælg en kategori:",
|
||||
"gettingdeleted":"Ticketen slettes..",
|
||||
|
||||
"none":"Ingen",
|
||||
"reason":"Grundlag",
|
||||
|
||||
"deletedby":"Fjernet af",
|
||||
"closedby":"Lukket af",
|
||||
"modalreason":"Hvad er grundlaget for lukkens af denne ticket?",
|
||||
"chooseATicket": "Vælg en ticket"
|
||||
}
|
||||
}
|
||||
@@ -69,9 +69,8 @@
|
||||
"deletedTicketDmTitle":"Ticket löschen!",
|
||||
"closedTicketDmDescription":"Ihr Ticket ist geschlossen!",
|
||||
"deletedTicketDmDescription":"Ihr Ticket ist gelöscht!",
|
||||
"newTranscriptTitle":"Eine neue Transscript finden Sie hier!",
|
||||
"newTranscriptDescription":"Die Abschrift finden Sie in der obigen Textdatei!",
|
||||
"hereIsTheTranscript":"Hier ist das Transscript:",
|
||||
"newTranscriptTitle":"Eine neue Transcript finden Sie hier!",
|
||||
"hereIsTheTranscript":"Hier ist das Transcript:",
|
||||
|
||||
"chooseCategory":"Wähle eine Kategorie:",
|
||||
|
||||
|
||||
+1
-3
@@ -16,9 +16,7 @@
|
||||
"axios": "^0.27.2",
|
||||
"chalk": "^5.0.1",
|
||||
"discord.js": "^14.7.1",
|
||||
"express": "^4.17.1",
|
||||
"node": "^16.10.0",
|
||||
"node-localstorage": "^2.2.1"
|
||||
"node": "^16.10.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"sendTranscripts":{
|
||||
"enableChannel":true,
|
||||
"channel":"968899606912061490",
|
||||
|
||||
"enableDM":true
|
||||
},
|
||||
"style":{
|
||||
"titleColor":"#49c100",
|
||||
"background":{
|
||||
"enableCustomBackground":true,
|
||||
"backgroundModus":"image",
|
||||
"backgroundData":"https://pbs.twimg.com/media/EBjFBlVXsAAhvXl?format=jpg&name=4096x4096"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user