v3.2 push 1 NOT WORKING YET!!!

This commit is contained in:
DJj123dj
2023-01-17 17:34:51 +01:00
parent fc50a8e83f
commit 7ed2d7bcc7
25 changed files with 687 additions and 184 deletions
+1
View File
@@ -12,6 +12,7 @@ developerChangelog.md
storage/dynamicDB/ storage/dynamicDB/
storage/slashcmdEnabled.txt storage/slashcmdEnabled.txt
storage/database.json storage/database.json
storage/tsdatabase.json
storage/.DS_Store storage/.DS_Store
.vscode/ .vscode/
livestatus.json livestatus.json
+9 -8
View File
@@ -15,14 +15,15 @@ Start using it now, you can do anything!
- Sanke: for translation & new ideas - Sanke: for translation & new ideas
- Everyone that reported a bug - Everyone that reported a bug
#### And our translators! #### And our translators!
- ExothDE - Sanke#6086 (Romanian & French)
- 1x1 - Redactado#1673 (Spanish)
- Redactado - t0miiis#3022 (Czech)
- t0miiis - josuens14 (Spanish)
- josuens14 - M4#5882 (Arabic)
- M4 - ChilledBroke#9986 (Arabic)
- David. - David.#0187 (German)
- Maurizio - Maurizio#0268 (Italian)
- the_gamer#5095 (Danish)
## features ## features
- discord interaction buttons - discord interaction buttons
+105
View File
@@ -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": []
}
]
}
-2
View File
@@ -21,8 +21,6 @@ module.exports = () => {
const header = config.system.ticket_channel ? l.helpMenu.header1.replace("{0}","<#"+config.system.ticket_channel+">") : l.helpMenu.header2 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+"_") 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 var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix
if (!DISABLE.commands.text.help) client.on("messageCreate",msg => { if (!DISABLE.commands.text.help) client.on("messageCreate",msg => {
+1 -4
View File
@@ -6,7 +6,6 @@
"prefix":"!ticket ", "prefix":"!ticket ",
"languagefile":"english", "languagefile":"english",
"credits":true,
"status":{ "status":{
"enabled":true, "enabled":true,
"type":"PLAYING", "type":"PLAYING",
@@ -22,9 +21,7 @@
"member_role":"member role (doesn't have access to tickets)", "member_role":"member role (doesn't have access to tickets)",
"closeMode":"adminonly|normal", "closeMode":"adminonly|normal",
"enable_transcript":false, "transcripts":"!!!! ALL SETTINGS FOR TRANSCRIPTS ARE LOCATED IN: transcriptconfig.json !!!!",
"enable_DM_transcript":false,
"transcript_channel":"channel id",
"showSlashcmdsInHelp":false "showSlashcmdsInHelp":false
}, },
+1 -7
View File
@@ -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) => { configArray.forEach((item) => {
if (config[item] == undefined){ if (config[item] == undefined){
throw new Error("\n\nMAIN ERROR: the item '"+item+"' doesn't exist in config.json") 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") createError("'languagefile' | invalid language, more info in the wiki")
} }
checkType(config.credits,"boolean","credits")
//status: //status:
checkType(config.status.enabled,"boolean","status/enabled") checkType(config.status.enabled,"boolean","status/enabled")
if (config.status.enabled){ if (config.status.enabled){
@@ -423,11 +422,6 @@ exports.checker = async () => {
createError("'system/closeMode' | the close mode must be adminonly or normal") 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") checkType(config.system.showSlashcmdsInHelp,"boolean","system/showSlashcmdsInHelp")
//options //options
+15 -5
View File
@@ -25,16 +25,26 @@ exports.closeCommandRow = new arb()
) )
.addComponents( .addComponents(
new button() new button()
.setCustomId("OTsendTranscript") .setCustomId("OTreopenTicket")
.setDisabled(false) .setDisabled(false)
.setStyle(bs.Secondary) .setStyle(bs.Success)
.setLabel(l.buttons.sendTranscript) .setLabel(l.buttons.reopen)
.setEmoji("📄") .setEmoji("✔")
)
exports.closeCommandRowDisabled = new arb()
.addComponents(
new button()
.setCustomId("OTdeleteTicket1")
.setDisabled(true)
.setStyle(bs.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
) )
.addComponents( .addComponents(
new button() new button()
.setCustomId("OTreopenTicket") .setCustomId("OTreopenTicket")
.setDisabled(false) .setDisabled(true)
.setStyle(bs.Success) .setStyle(bs.Success)
.setLabel(l.buttons.reopen) .setLabel(l.buttons.reopen)
.setEmoji("✔") .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.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) await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
deleteTicketButtonChecker = false deleteTicketButtonChecker = false
}) })
@@ -90,8 +90,10 @@ module.exports = () => {
} }
}) })
interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]}) await interaction.message.edit({components:[bot.buttons.close.closeCommandRowDisabled]})
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"deletenotranscript",false,true) 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 deleteTicketButtonChecker1 = false
}) })
} }
@@ -1,6 +1,5 @@
module.exports = () => { module.exports = () => {
require("./firstmsg")() require("./firstmsg")()
require("./sendTranscript")()
require("./verifyBars")() require("./verifyBars")()
//accepted //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{}
})
}
+1
View File
@@ -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("spanish")) localLanguage = require("../language/spanish.json")
else if (config.languagefile.startsWith("portuguese")) localLanguage = require("../language/portuguese.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("italian")) localLanguage = require("../language/italian.json")
else if (config.languagefile.startsWith("danish")) localLanguage = require("../language/danish.json")
const errorLog = async () => { const errorLog = async () => {
+8 -101
View File
@@ -49,7 +49,7 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
var enableTranscript = true var enableTranscript = true
var deleteRequired = false var deleteRequired = false
if (mode == "delete"){ if (mode == "delete" || mode == "deletenotranscript"){
//delete //delete
//check perms //check perms
if (!guild) return if (!guild) return
@@ -196,14 +196,6 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
.setLabel(l.buttons.delete) .setLabel(l.buttons.delete)
.setEmoji("✖️") .setEmoji("✖️")
) )
.addComponents(
new discord.ButtonBuilder()
.setCustomId("OTsendTranscript")
.setDisabled(false)
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.sendTranscript)
.setEmoji("📄")
)
.addComponents( .addComponents(
new discord.ButtonBuilder() new discord.ButtonBuilder()
.setCustomId("OTreopenTicket") .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 () => { const transcriptHandler = async () => {
if (enableTranscript == true && mode != "deletenotranscript"){ if (!bot.tsconfig.sendTranscripts.enableChannel && !bot.tsconfig.sendTranscripts.enableDM) return false
//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 (config.system.enable_transcript || config.system.enable_DM_transcript){ const APIEvents = require("../api/modules/events")
const channelmessages = await channel.messages.fetch({cache:true}) const messages = await channel.messages.fetch({cache:true})
//remove ot bot from transcript await require("../transcriptSystem/manager")(messages,guild,channel,user,reason)
channelmessages.sweep((msgSweep) => {return msgSweep.author.id == client.user.id}) APIEvents.onTranscriptCreation(messages,channel,guild,new Date())
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 deleteHandler = async () => { const deleteHandler = async () => {
if (deleteRequired){ if (deleteRequired){
//const timer = () => {return new Promise((resolve,reject) => {
// setTimeout(() => {resolve(true)},7000)
//})}
//await timer()
pendingDelete.shift() pendingDelete.shift()
await channel.delete() await channel.delete()
//setTimeout(async () => {
// pendingDelete.shift()
// await channel.delete()
//},6000)
} }
} }
await transcriptHandler() if (mode == "delete" || mode == "deletenotranscript") await transcriptHandler()
deleteHandler() 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"
}
]
}
]
}
+53
View File
@@ -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
}
+3
View File
@@ -0,0 +1,3 @@
{
"version":"1.0.0"
}
+92
View File
@@ -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)
}
+71
View File
@@ -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
}
+4 -1
View File
@@ -35,7 +35,10 @@ exports.createEmbed = (id) => {
const embed = new discord.EmbedBuilder() const embed = new discord.EmbedBuilder()
.setTitle(data.name) .setTitle(data.name)
if (data.enableFooter) embed.setFooter({text:data.footer}) 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){ if (data.enableCustomColor){
embed.setColor(data.color) embed.setColor(data.color)
+5
View File
@@ -69,8 +69,13 @@ const language = require("./core/languageManager").language
exports.language = language exports.language = language
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded language") if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded language")
const config = tempconfig const config = tempconfig
exports.config = config exports.config = config
const tsconfig = require("./transcriptconfig.json")
exports.tsconfig = tsconfig
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config") if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config")
exports.storage = require('./core/dynamicdatabase/storage') exports.storage = require('./core/dynamicdatabase/storage')
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded storage") if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded storage")
+83
View File
@@ -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"
}
}
+2 -3
View File
@@ -69,9 +69,8 @@
"deletedTicketDmTitle":"Ticket löschen!", "deletedTicketDmTitle":"Ticket löschen!",
"closedTicketDmDescription":"Ihr Ticket ist geschlossen!", "closedTicketDmDescription":"Ihr Ticket ist geschlossen!",
"deletedTicketDmDescription":"Ihr Ticket ist gelöscht!", "deletedTicketDmDescription":"Ihr Ticket ist gelöscht!",
"newTranscriptTitle":"Eine neue Transscript finden Sie hier!", "newTranscriptTitle":"Eine neue Transcript finden Sie hier!",
"newTranscriptDescription":"Die Abschrift finden Sie in der obigen Textdatei!", "hereIsTheTranscript":"Hier ist das Transcript:",
"hereIsTheTranscript":"Hier ist das Transscript:",
"chooseCategory":"Wähle eine Kategorie:", "chooseCategory":"Wähle eine Kategorie:",
+1 -3
View File
@@ -16,9 +16,7 @@
"axios": "^0.27.2", "axios": "^0.27.2",
"chalk": "^5.0.1", "chalk": "^5.0.1",
"discord.js": "^14.7.1", "discord.js": "^14.7.1",
"express": "^4.17.1", "node": "^16.10.0"
"node": "^16.10.0",
"node-localstorage": "^2.2.1"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
+17
View File
@@ -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"
}
}
}