This is the first stable version of open-ticket 1.3
This commit is contained in:
DJj123dj
2022-04-02 16:38:00 +02:00
parent 8cab4cc686
commit 6df23d84bc
11 changed files with 319 additions and 57 deletions
+3 -3
View File
@@ -1,6 +1,6 @@
# open-ticket # open-ticket
[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3)
[![version](https://img.shields.io/badge/version-1.3.1%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v1.3.1) [![version](https://img.shields.io/badge/version-1.3.2%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v1.3.2)
[![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages) [![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages)
[![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE)
@@ -31,7 +31,7 @@ This is an open-source discord ticket bot, you can configure it and it comes wit
You can clone or download this project. You can clone or download this project.
### packages ### packages
- canvas => version `latest` - chalk => version `latest`
- discord.js => version `latest` - discord.js => version `latest`
- express => version `latest` - express => version `latest`
- node-localstorage => version `latest` - node-localstorage => version `latest`
@@ -61,7 +61,7 @@ Hello everyone, soon open-ticket v1.4.0 will be launched, it contains a lot of n
## information ## information
_v1.3.1_ _v1.3.2_
changelog: [click here](./documentation/CHANGELOG.md) changelog: [click here](./documentation/CHANGELOG.md)
+214
View File
@@ -0,0 +1,214 @@
module.exports = async () => {
const chalk = await (await import("chalk")).default
const config = require("./config.json")
var errorList = []
var isError = false
var warnList = []
var isWarn = false
const createError = (message) => {
isError = true
errorList.push("open-ticket ERROR: "+message)
}
const createWarn = (message) => {
isWarn = true
warnList.push("open-ticket WARNING: "+message)
}
//checker
//token
if (config.auth_token.includes(" ")){
createError("invalid token | there are spaces in your token!")
}
if (config.auth_token.length < 40){
createError("invalid token | length not correct!")
}
//color
if (!config.main_color.startsWith("#")){
createError("color not detected | 'main_color' doesn't start with a '#'!")
}
if (config.main_color.length > 7 || config.main_color.length < 7){
createError("color not detected | 'main_color' is not a valid hex color!")
}
//admin
if (config.botperms_role.includes(" ")){
createError("invalid role id | 'botperms_role' is not a valid role id!")
}
if (config.botperms_role.length > 20|| config.botperms_role.length < 16){
createError("invalid role id | 'botperms_role' is not a valid role id!")
}
//prefix
if (config.prefix == ""){
createError("no prefix | 'prefix' is empty!")
}
if (config.prefix.length > 3){
createWarn("long prefix | your prefix is a little bit long!")
}
//status
if (config.status.enabled && (config.status.type != "PLAYING" && config.status.type != "LISTENING" && config.status.type != "WATCHING" && config.status.type != "CUSTOM")){
createError("status error | 'status/type' is invalid!")
}
if (config.status.enabled && config.status.text.length < 1){
createError("status error | 'status/text' must be at least 1 character long!")
}
//ticketchannel
if (config.system.ticket_channel.includes(" ")){
createWarn("invalid channel id | 'system/ticket_channel' is not a valid channel id!")
}
if (config.system.ticket_channel.length < 1){
createWarn("no ticket channel | 'system/ticket_channel' is empty")
}else if (config.system.ticket_channel.length > 20|| config.system.ticket_channel.length < 16){
createWarn("invalid channel id | 'system/ticket_channel' is not a valid channel id!")
}
//maxticket
if (config.system.max_allowed_tickets < 1){
createWarn("no tickets | if 'system/max_allowed_tickets' is under 1 you can't create any ticket")
}
//category
if (config.system.enable_category == true && config.system.ticket_category.includes(" ")){
createError("invalid category id | 'system/ticket_category' is not a valid category id!")
}
if (config.system.enable_category && config.system.ticket_category > 20 || config.system.ticket_category < 16){
createError("invalid category id | 'system/ticket_category' is not a valid category id!")
}
//everyoneaccess
if (config.system["has@everyoneaccess"] == true){
createWarn("access | everyone has access to the tickets!")
}
//memberrole
if (config.system.member_role.includes(" ")){
createError("invalid role id | 'system/member_role' is not a valid role id!")
}
if (config.system.member_role.length > 20){
createError("invalid role id | 'system/member_role' is not a valid role id!")
}
if (config.system.member_role == "" || config.system.member_role == " " || config.system.member_role == "false" || config.system.member_role == "null" || config.system.member_role == "0"){
createWarn("no member role | 'system/member_role' is not valid so technically everyone can view a ticket!")
}
//transcript
if (config.system.enable_transcript && config.system.transcript_channel.includes(" ")){
createError("invalid channel id | 'system/transcript_channel' is not a valid channel id!")
}
if (config.system.enable_transcript && config.system.transcript_channel.length > 20 || config.system.transcript_channel.length < 16){
createError("invalid channel id | 'system/transcript_channel' is not a valid channel id!")
}
//messages
if (config.messages.general.nopermissions.length < 1){
createError("no message | 'messages/general/nopermissions' is empty!")
}
if (config.messages.ticket.newTicketEmbed.length < 1){
createError("no message | 'messages/ticket/newTicketEmbed' is empty!")
}
if (config.messages.dm.alreadyCreated.length < 1){
createError("no message | 'messages/dm/alreadyCreated' is empty!")
}
if (config.messages.dm.newTicket.length < 1){
createError("no message | 'messages/dm/newTicket' is empty!")
}
if (config.messages.dm.closeTicket.length < 1){
createError("no message | 'messages/dm/closeTicket' is empty!")
}
//layout
const checkLayout = (layout,layoutname,color,footer,thumbnail) => {
if (color){
if (!layout.customColor.startsWith("#")){
createError("color not detected | 'layout/"+layoutname+"/customColor' doesn't start with a '#'!")
}
if (layout.customColor.length > 7 || layout.customColor.length < 7){
createError("color not detected | 'layout/"+layoutname+"/customColor' is not a valid hex color!")
}
}
if (footer){
if (layout.footer.length < 1){
createError("no footer | 'layout/"+layoutname+"/footer' doesn't have a footer!")
}
}
if (thumbnail){
if (!layout.thumbnailURL.startsWith("https://") && !layout.thumbnailURL.startsWith("http://")){
createError("thumbnail | the thumbnail url in 'layout/"+layoutname+"/thumbnailURL' is not a valid url!")
}
}
}
checkLayout(config.layout.ticketEmbed,"ticketEmbed",config.layout.ticketEmbed.customColorEnabled,config.layout.ticketEmbed.footerEnabled,config.layout.ticketEmbed.thumbnailEnabled)
checkLayout(config.layout.ticketMsg,"ticketMsg",config.layout.ticketMsg.customColorEnabled,config.layout.ticketMsg.footerEnabled,config.layout.ticketMsg.thumbnailEnabled)
checkLayout(config.layout.transcripts,"transcripts",config.layout.transcripts.customColorEnabled,false,config.layout.transcripts.thumbnailEnabled)
const checkOption = (ticket,ticketname,enabled,urlmode) => {
if (enabled){
if (ticket.icon.length > 0){
const emojiRegex = /\p{Emoji}/u
const isEmoji = emojiRegex.test(ticket.icon)
if (isEmoji == false){
createWarn("invalid emoji | 'options/"+ticketname+"/icon' is not a valid emoji (code can be wrong)")
}
}
if (ticket.description.length < 1){
createWarn("no description | 'options/"+ticketname+"/description' is empty")
}
if (ticket.name.length < 1){
createWarn("no description | 'options/"+ticketname+"/name' is empty")
}
if (ticket.channel_prefix.length < 1){
createWarn("no description | 'options/"+ticketname+"/channel_prefix' is empty")
}
if (ticket.isURL == true && ticket.color != "red" && ticket.color != "blue" && ticket.color != "green" && ticket.color != "gray" && ticket.color != "none"){
createWarn("invalid button color | 'options/"+ticketname+"/color' must be one of (red,green,blue,gray,none)")
}
if (urlmode && (!ticket.url.startsWith("https://") && !ticket.url.startsWith("http://"))){
createError("url invalid | the url in 'options/"+ticketname+"/url' is not a valid url!")
}
}
return
}
checkOption(config.options.ticket1,"ticket1",config.options.ticket1.enabled,config.options.ticket1.isURL)
checkOption(config.options.ticket2,"ticket2",config.options.ticket2.enabled,config.options.ticket2.isURL)
checkOption(config.options.ticket3,"ticket3",config.options.ticket3.enabled,config.options.ticket3.isURL)
checkOption(config.options.ticket4,"ticket4",config.options.ticket4.enabled,config.options.ticket4.isURL)
checkOption(config.options.ticket5,"ticket5",config.options.ticket5.enabled,config.options.ticket5.isURL)
checkOption(config.options.ticket6,"ticket6",config.options.ticket6.enabled,config.options.ticket6.isURL)
//the end
if (errorList.length > 0 || warnList.length > 0){
console.log("REPORT:\n===========================")
}
warnList.forEach((w) => {
const splitw = w.split("'")
if (splitw.length > 1){
var splitstring = chalk.yellow(splitw[0])+chalk.blue("'"+splitw[1]+"'")+chalk.yellow(splitw[2])
}else {var splitstring = chalk.yellow(splitw[0])}
console.log(splitstring)
})
errorList.forEach((e) => {
const splite = e.split("'")
if (splite.length > 1){
var splitstring = chalk.red(splite[0])+chalk.blue("'"+splite[1]+"'")+chalk.red(splite[2])
}else {var splitstring = chalk.red(splite[0])}
console.log(splitstring)
})
if (isError){
console.log("===========================")
console.log("=> "+chalk.bgRed("your bot doesn't work if you don't fix the above errors!"))
if (isWarn){
console.log("\n=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
}
process.exit(0)
}else if (isWarn == true && isError == false){
console.log("===========================")
console.log("=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
}
}
+2 -3
View File
@@ -7,8 +7,7 @@ const config = require("../config.json")
module.exports = () => { module.exports = () => {
client.on("messageCreate",(msg) => { client.on("messageCreate",(msg) => {
var args = msg.content.split(" ") var args = msg.content.split(" ")
if (args[0] == config.prefix+"resetdatabase"){ if (args[0] == config.prefix+"resetdatabase" || args[0] == config.prefix+"resetdb"){
if (msg.author.id == client.application.owner.id){
const databaseEmbed = new discord.MessageEmbed() const databaseEmbed = new discord.MessageEmbed()
.setColor(config.main_color) .setColor(config.main_color)
.setTitle("How to reset the database:") .setTitle("How to reset the database:")
@@ -16,7 +15,7 @@ module.exports = () => {
.setFooter({text:"if it doesn't work, create an issue on github or DM me on discord!"}) .setFooter({text:"if it doesn't work, create an issue on github or DM me on discord!"})
msg.channel.send({embeds:[databaseEmbed]}) msg.channel.send({embeds:[databaseEmbed]})
} if (config.logs){console.log("[command] "+config.prefix+"resetdatabase (user:"+msg.author.username+")")}
} }
}) })
} }
+2 -2
View File
@@ -59,7 +59,6 @@ module.exports = () => {
) )
} }
} }
if (config.options.ticket2.enabled){ if (config.options.ticket2.enabled){
if (currentTicketButtons < 4){ if (currentTicketButtons < 4){
var localTicketButton = ticketButton var localTicketButton = ticketButton
@@ -236,7 +235,8 @@ module.exports = () => {
msg.channel.send({embeds:[ticketEmbed],components:embedComponents}) msg.channel.send({embeds:[ticketEmbed],components:embedComponents})
if (config.logs){console.log("[command] "+config.prefix+"ticket msg (user:"+msg.author.username+")")}
if (config.logs){console.log("[system] created ticket message")}
} }
}) })
} }
+13 -1
View File
@@ -14,13 +14,14 @@ module.exports = () => {
.setTitle("Ticket commands") .setTitle("Ticket commands")
const prefix = config.prefix const prefix = config.prefix
TicketHelpMsg.setDescription("**Go to <#"+config.system.ticket_channel+"> to create a ticket!**\n\n`"+prefix+"ticket msg` ➜ _Admin command._\n`"+prefix+"ticket rename` ➜ _Rename a ticket (no spaces)._\n`"+prefix+"ticket close` ➜ _Close a ticket._\n`"+prefix+"ticket add <user>` ➜ _Add a user to the ticket._\n`"+prefix+"ticket remove <user>` ➜ _Remove a user from the ticket._\n`"+prefix+"resetdatabase` ➜ _Steps to reset the database._") TicketHelpMsg.setDescription("**Go to <#"+config.system.ticket_channel+"> to create a ticket!**\n\n`"+prefix+"ticket msg` ➜ _Admin command._\n`"+prefix+"ticket rename` ➜ _Rename a ticket (no spaces)._\n`"+prefix+"ticket close` ➜ _Close a ticket._\n`"+prefix+"ticket add <user>` ➜ _Add a user to the ticket._\n`"+prefix+"ticket remove <user>` ➜ _Remove a user from the ticket._\n`"+prefix+"resetdatabase` ➜ _Steps to reset the database._\n`"+prefix+"resetdb` ➜ _Also database stuff._")
if (config.credits){ if (config.credits){
TicketHelpMsg.setFooter({text:"Open-Ticket by DJdj Development | view on github for source code"}) TicketHelpMsg.setFooter({text:"Open-Ticket by DJdj Development | view on github for source code"})
} }
msg.channel.send({embeds:[TicketHelpMsg]}) msg.channel.send({embeds:[TicketHelpMsg]})
if (config.logs){console.log("[command] "+config.prefix+"ticket help (user:"+msg.author.username+")")}
} }
}) })
@@ -44,6 +45,7 @@ module.exports = () => {
.setTitle("Close this ticket:") .setTitle("Close this ticket:")
msg.channel.send({embeds:[CloseMsg]}) msg.channel.send({embeds:[CloseMsg]})
if (config.logs){console.log("[command] "+config.prefix+"ticket close (user:"+msg.author.username+")")}
}) })
@@ -65,15 +67,18 @@ module.exports = () => {
} }
var name = args[2] var name = args[2]
var oldname = msg.channel.name
msg.channel.messages.fetchPinned().then(msglist => { msg.channel.messages.fetchPinned().then(msglist => {
if (msglist.last().author.id == client.user.id){ if (msglist.last().author.id == client.user.id){
msg.channel.send({content:"The name from the ticket is changed!"}).then(rmsg => { msg.channel.send({content:"The name from the ticket is changed!"}).then(rmsg => {
rmsg.channel.setName(name) rmsg.channel.setName(name)
if (config.logs){console.log("[system] renamed a ticket (name:"+oldname+",newname:"+name+")")}
}) })
}else{ }else{
msg.channel.send({content:"You are not in a ticket!"}) msg.channel.send({content:"You are not in a ticket!"})
} }
}) })
if (config.logs){console.log("[command] "+config.prefix+"ticket rename (user:"+msg.author.username+")")}
} }
}) })
@@ -102,8 +107,11 @@ module.exports = () => {
} }
msg.channel.permissionOverwrites.create(user.id, { VIEW_CHANNEL:true, ADD_REACTIONS:true,ATTACH_FILES:true, EMBED_LINKS:true, SEND_MESSAGES:true}) msg.channel.permissionOverwrites.create(user.id, { VIEW_CHANNEL:true, ADD_REACTIONS:true,ATTACH_FILES:true, EMBED_LINKS:true, SEND_MESSAGES:true})
if (config.logs){console.log("[system] added user to ticket (name:"+user.username+",ticket:"+msg.channel.name+")")}
}) })
var loguser = msg.mentions.users.first()
if (config.logs){console.log("[command] "+config.prefix+"ticket add "+loguser.username+" (user:"+msg.author.username+")")}
} }
}) })
@@ -132,8 +140,12 @@ module.exports = () => {
} }
msg.channel.permissionOverwrites.delete(user.id) msg.channel.permissionOverwrites.delete(user.id)
if (config.logs){console.log("[system] removed user from ticket (name:"+user.username+",ticket:"+msg.channel.name+")")}
}) })
var loguser = msg.mentions.users.first()
if (config.logs){console.log("[command] "+config.prefix+"ticket remove "+loguser.username+" (user:"+msg.author.username+")")}
} }
}) })
} }
+39 -27
View File
@@ -47,16 +47,22 @@ module.exports = () => {
//set ticketName //set ticketName
if (interaction.customId == "newTicket1"){ if (interaction.customId == "newTicket1"){
var ticketName = config.options.ticket1.channel_prefix+ticketNumber var ticketName = config.options.ticket1.channel_prefix+ticketNumber
var logsname = config.options.ticket1.name
}else if (interaction.customId == "newTicket2"){ }else if (interaction.customId == "newTicket2"){
var ticketName = config.options.ticket2.channel_prefix+ticketNumber var ticketName = config.options.ticket2.channel_prefix+ticketNumber
var logsname = config.options.ticket2.name
}else if (interaction.customId == "newTicket3"){ }else if (interaction.customId == "newTicket3"){
var ticketName = config.options.ticket3.channel_prefix+ticketNumber var ticketName = config.options.ticket3.channel_prefix+ticketNumber
var logsname = config.options.ticket3.name
}else if (interaction.customId == "newTicket4"){ }else if (interaction.customId == "newTicket4"){
var ticketName = config.options.ticket4.channel_prefix+ticketNumber var ticketName = config.options.ticket4.channel_prefix+ticketNumber
var logsname = config.options.ticket4.name
}else if (interaction.customId == "newTicket5"){ }else if (interaction.customId == "newTicket5"){
var ticketName = config.options.ticket5.channel_prefix+ticketNumber var ticketName = config.options.ticket5.channel_prefix+ticketNumber
var logsname = config.options.ticket5.name
}else if (interaction.customId == "newTicket6"){ }else if (interaction.customId == "newTicket6"){
var ticketName = config.options.ticket6.channel_prefix+ticketNumber var ticketName = config.options.ticket6.channel_prefix+ticketNumber
var logsname = config.options.ticket6.name
} }
//set category //set category
@@ -64,6 +70,8 @@ module.exports = () => {
var Category = config.system.ticket_category var Category = config.system.ticket_category
}else{var Category = null} }else{var Category = null}
var permissionsArray = []
//set everyone allowed //set everyone allowed
if (config.system['has@everyoneaccess']){ if (config.system['has@everyoneaccess']){
var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"] var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
@@ -72,34 +80,35 @@ module.exports = () => {
var everyoneAllowPerms = [] var everyoneAllowPerms = []
var everyoneDenyPerms = ["VIEW_CHANNEL"] var everyoneDenyPerms = ["VIEW_CHANNEL"]
} }
permissionsArray.push({
id:interaction.member.id,
type:"member",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
})
permissionsArray.push({
id:config.botperms_role,
type:"role",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
})
permissionsArray.push({
id:interaction.guild.id,
type:"role",
allow:everyoneAllowPerms,
deny:everyoneDenyPerms
})
if (config.system.member_role == "" || config.system.member_role == " " || config.system.member_role == "false" || config.system.member_role == "null" || config.system.member_role == "0"){
permissionsArray.push({
id:config.system.member_role,
type:"role",
deny:["VIEW_CHANNEL"]
})
}
//create the channel //create the channel
interaction.guild.channels.create(ticketName,{ interaction.guild.channels.create(ticketName,{
type:"GUILD_TEXT", type:"GUILD_TEXT",
parent:Category, parent:Category,
permissionOverwrites:[ permissionOverwrites:permissionsArray
{
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.system.member_role,
type:"role",
deny:["VIEW_CHANNEL"]
},
{
id:interaction.guild.id,
type:"role",
allow:everyoneAllowPerms,
deny:everyoneDenyPerms
}
]
}).then(tChannel => { }).then(tChannel => {
userTicketStorage.setItem(tChannel.id,interaction.member.id) userTicketStorage.setItem(tChannel.id,interaction.member.id)
@@ -121,6 +130,7 @@ module.exports = () => {
tChannel.send({content:"<@"+interaction.member.id+"> <@&"+config.botperms_role+">",embeds:[ticketEmbed],components:[closeButton]}).then(firstmsg => { tChannel.send({content:"<@"+interaction.member.id+"> <@&"+config.botperms_role+">",embeds:[ticketEmbed],components:[closeButton]}).then(firstmsg => {
firstmsg.pin() firstmsg.pin()
}) })
if (config.logs){console.log("[system] created a new ticket (name:"+logsname+",user:"+interaction.user.username+")")}
}) })
@@ -227,7 +237,7 @@ module.exports = () => {
} }
var transcriptEmbed = new discord.MessageEmbed() var transcriptEmbed = new discord.MessageEmbed()
.setColor(transcriptColor) .setColor(transcriptColor)
.setAuthor({text:interaction.channel.name + " - ticket created by "+getuserNAME}) .setAuthor({name:interaction.channel.name + " - ticket created by "+getuserNAME})
.setTitle("There is a new transcript!") .setTitle("There is a new transcript!")
.setDescription(splittedTranscript[0]) .setDescription(splittedTranscript[0])
.setFooter({text:"ticket closed by "+interaction.member.user.username}) .setFooter({text:"ticket closed by "+interaction.member.user.username})
@@ -236,7 +246,7 @@ module.exports = () => {
if (transcript.length > 4000){ if (transcript.length > 4000){
var transcriptEmbed2 = new discord.MessageEmbed() var transcriptEmbed2 = new discord.MessageEmbed()
.setColor(transcriptColor) .setColor(transcriptColor)
.setAuthor({text:interaction.channel.name + " - ticket created by "+getuserNAME}) .setAuthor({name:interaction.channel.name + " - ticket created by "+getuserNAME})
.setTitle("transcript #2") .setTitle("transcript #2")
.setDescription(splittedTranscript[1]) .setDescription(splittedTranscript[1])
.setFooter("ticket closed by "+interaction.member.user.username) .setFooter("ticket closed by "+interaction.member.user.username)
@@ -244,7 +254,7 @@ module.exports = () => {
var transcriptEmbed3 = new discord.MessageEmbed() var transcriptEmbed3 = new discord.MessageEmbed()
.setColor(transcriptColor) .setColor(transcriptColor)
.setAuthor({text:interaction.channel.name + " - ticket created by "+getuserNAME}) .setAuthor({name:interaction.channel.name + " - ticket created by "+getuserNAME})
.setTitle("transcript #3") .setTitle("transcript #3")
.setDescription(splittedTranscript[1]) .setDescription(splittedTranscript[1])
.setFooter({text:"ticket closed by "+interaction.member.user.username}) .setFooter({text:"ticket closed by "+interaction.member.user.username})
@@ -255,7 +265,7 @@ module.exports = () => {
}else if (transcript.length > 2000){ }else if (transcript.length > 2000){
var transcriptEmbed2 = new discord.MessageEmbed() var transcriptEmbed2 = new discord.MessageEmbed()
.setColor(transcriptColor) .setColor(transcriptColor)
.setAuthor({text:interaction.channel.name + " - ticket created by "+getuserNAME}) .setAuthor({name:interaction.channel.name + " - ticket created by "+getuserNAME})
.setTitle("transcript #2") .setTitle("transcript #2")
.setDescription(splittedTranscript[1]) .setDescription(splittedTranscript[1])
.setFooter({text:"ticket closed by "+interaction.member.user.username}) .setFooter({text:"ticket closed by "+interaction.member.user.username})
@@ -270,6 +280,8 @@ module.exports = () => {
interaction.channel.delete() interaction.channel.delete()
if (config.logs){console.log("[system] closed a ticket (name:"+interaction.channel.name+",user:"+interaction.user.username+")")}
ticketStorage.setItem(getuserID,Number(ticketStorage.getItem(getuserID)) - 1) ticketStorage.setItem(getuserID,Number(ticketStorage.getItem(getuserID)) - 1)
+3 -3
View File
@@ -1,15 +1,15 @@
{ {
"server_name":"Ticket Bot",
"server_logo":"https://www.example.com/another-example/yourlogo.png",
"bot_name":"Wumpus", "bot_name":"Wumpus",
"main_color":"#fffff", "main_color":"#fffff",
"auth_token":"the bot's auth token", "auth_token":"the bot's auth token",
"botperms_role":"the id from an admin role (they can do admin things with the bot)", "botperms_role":"the id from an admin role (they can do admin things with the bot)",
"prefix":"!", "prefix":"!",
"logs":true,
"credits":true, "credits":true,
"status":{ "status":{
"type":"PLAYING | STREAMING | LISTENING | WATCHING | CUSTOM | COMPETING", "enabled":true,
"type":"PLAYING | LISTENING | WATCHING | CUSTOM",
"text":"!ticket" "text":"!ticket"
}, },
+18
View File
@@ -1,5 +1,23 @@
# changelog # changelog
## v1.3.2
### added:
- an alias for !resetdatabase: !resetdb
- you need the "chalk" library now!
- checker.js
- "enabled" option for status
- better console logs
- enable logs option to config
### fixed
- a bug that crashed the bot on using the command !resetdatabase
- "member_role" in config is optional but not recommended
- fixed crash on startup
- fixed bug where the bot crashes by using transcripts
- changed package.json
### removed
- "canvas" library is not longer required
- removed "server_icon" & "server_name" from config
## v1.3.1 ## v1.3.1
### added: ### added:
- Q&A in the README.md - Q&A in the README.md
+5 -4
View File
@@ -1,21 +1,22 @@
# config file # config file
[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3)
[![version](https://img.shields.io/badge/version-1.3.1%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v1.3.1) [![version](https://img.shields.io/badge/version-1.3.2%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v1.3.2)
[![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages) [![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages)
[![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE)
In this file you find all the information about commands in the config.json file In this file you find all the information about commands in the config.json file
- server_name ➜ the name of your server (optional) _**type: string**_
- server_logo ➜ the logo of your server (optional) _**type: url**_
- bot_name ➜ the name from the bot _**type: string**_ - bot_name ➜ the name from the bot _**type: string**_
- main_color ➜ the color used in embeds _**type: hex color (#000000)**_ - main_color ➜ the color used in embeds _**type: hex color (#000000)**_
- auth_token ➜ your bot's token _**type: string**_ - auth_token ➜ your bot's token _**type: string**_
- botperms_role ➜ this role can do all admin commands from the bot _**type: discord role id**_ - botperms_role ➜ this role can do all admin commands from the bot _**type: discord role id**_
- prefix ➜ the prefix _**type: string**_ - prefix ➜ the prefix _**type: string**_
- logs ➜ enable logs _**type: boolean**_
- credits ➜ disable the credits _**type: boolean**_ - credits ➜ disable the credits _**type: boolean**_
## status: (the status from the bot) ## status: (the status from the bot)
- enabled ➜ enable status _**type: boolean**_
- type ➜ set the status type _**type: string (PLAYING | LISTENING | WATCHING | CUSTOM)** - type ➜ set the status type _**type: string (PLAYING | LISTENING | WATCHING | CUSTOM)**
- text ➜ set the status text _**type: string**_ - text ➜ set the status text _**type: string**_
@@ -64,4 +65,4 @@ I didn't know that open-tickets was going to be so much used. I will be creating
If you have an idea for new updates you can always say it in my discord server! If you have an idea for new updates you can always say it in my discord server!
open-tickets v1.3.1 open-tickets v1.3.2
+8 -2
View File
@@ -4,9 +4,15 @@ const intents = discord.Intents
const client = new discord.Client({intents:[intents.FLAGS.GUILDS,intents.FLAGS.GUILD_MESSAGES,intents.FLAGS.GUILD_MEMBERS]}) const client = new discord.Client({intents:[intents.FLAGS.GUILDS,intents.FLAGS.GUILD_MESSAGES,intents.FLAGS.GUILD_MEMBERS]})
exports.client = client exports.client = client
client.on('ready',() => { require("./checker")()
console.log('ready')
client.on('ready',async () => {
const chalk = await (await import("chalk")).default
console.log(chalk.green("open-ticket ready!"))
if (config.logs){chalk.white("\n\nlogs:\n============")}
if (config.status.enabled){
client.user.setActivity(config.status.text,{type:config.status.type}) client.user.setActivity(config.status.text,{type:config.status.type})
}
}) })
var storage = require('./storage/storage') var storage = require('./storage/storage')
+4 -4
View File
@@ -1,16 +1,16 @@
{ {
"name": "safemt-tickets", "name": "open-ticket",
"version": "1.0.0", "version": "1.3.2",
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.", "description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"start": "node index.js", "start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"author": "", "author": "DJdj Development",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"canvas": "^2.8.0", "chalk": "^5.0.1",
"discord.js": "^13.6.0", "discord.js": "^13.6.0",
"express": "^4.17.1", "express": "^4.17.1",
"node": "^16.10.0", "node": "^16.10.0",