@@ -7,7 +7,7 @@ make a ticket in our server to start!
|
|||||||
*if you translate, you will come in the credits*
|
*if you translate, you will come in the credits*
|
||||||
|
|
||||||
# open-ticket
|
# open-ticket
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v2.3.2) [](#packages) [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v2.4.0) [](#packages) [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE)
|
||||||
|
|
||||||
This is an open-source discord ticket bot, you can configure it and it comes with cool features like transcripts & custom options!
|
This is an open-source discord ticket bot, you can configure it and it comes with cool features like transcripts & custom options!
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ if there are any errors, you can open an **issue on github** or **contact me in
|
|||||||
|
|
||||||
### config
|
### config
|
||||||
Our config documentation is moved to another file:
|
Our config documentation is moved to another file:
|
||||||
[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.3.2)
|
[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.4.0)
|
||||||
|
|
||||||
### intents & permissions
|
### intents & permissions
|
||||||
In the discord developer portal in the "bot" panel you will find 3 switches under the title "Gateaway Intents". The following switches should always be turned on
|
In the discord developer portal in the "bot" panel you will find 3 switches under the title "Gateaway Intents". The following switches should always be turned on
|
||||||
@@ -74,7 +74,7 @@ You can also configure your own permissions
|
|||||||
|
|
||||||
## information
|
## information
|
||||||
|
|
||||||
_v2.3.2 stable_
|
_v2.4.0 stable_
|
||||||
|
|
||||||
changelog: [click here](https://www.github.com/DJj123dj/open-ticket/wiki/Changelog)
|
changelog: [click here](https://www.github.com/DJj123dj/open-ticket/wiki/Changelog)
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ module.exports = () => {
|
|||||||
var user = msg.mentions.users.first()
|
var user = msg.mentions.users.first()
|
||||||
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"add <user>`")]})
|
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"add <user>`")]})
|
||||||
|
|
||||||
if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
||||||
try {
|
try {
|
||||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -40,7 +40,7 @@ module.exports = () => {
|
|||||||
const user = interaction.options.getUser("user")
|
const user = interaction.options.getUser("user")
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ module.exports = () => {
|
|||||||
client.on("messageCreate",msg => {
|
client.on("messageCreate",msg => {
|
||||||
if (!msg.content.startsWith(config.prefix+"delete")) return
|
if (!msg.content.startsWith(config.prefix+"delete")) return
|
||||||
|
|
||||||
if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
||||||
try {
|
try {
|
||||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -45,7 +45,7 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "delete") return
|
if (interaction.commandName != "delete") return
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ module.exports = () => {
|
|||||||
var user = msg.mentions.users.first()
|
var user = msg.mentions.users.first()
|
||||||
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"remove <user>`")]})
|
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"remove <user>`")]})
|
||||||
|
|
||||||
if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
||||||
try {
|
try {
|
||||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -41,7 +41,7 @@ module.exports = () => {
|
|||||||
const user = interaction.options.getUser("user")
|
const user = interaction.options.getUser("user")
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -14,7 +14,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
|
||||||
if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
||||||
try {
|
try {
|
||||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -58,7 +58,7 @@ module.exports = () => {
|
|||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id)return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id)return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ module.exports = () => {
|
|||||||
client.on("messageCreate", msg => {
|
client.on("messageCreate", msg => {
|
||||||
if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){
|
if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){
|
||||||
|
|
||||||
if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
|
||||||
try {
|
try {
|
||||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -43,7 +43,7 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "message") return
|
if (interaction.commandName != "message") return
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -79,7 +79,7 @@
|
|||||||
"name":"Choose Your Ticket",
|
"name":"Choose Your Ticket",
|
||||||
"description":"You can click one of the buttons below!",
|
"description":"You can click one of the buttons below!",
|
||||||
"enableFooter":false,
|
"enableFooter":false,
|
||||||
"footer":"Open Ticket v2.3.2 - I'm a footer!",
|
"footer":"Open Ticket v2.4.0 - I'm a footer!",
|
||||||
"enableThumbnail":false,
|
"enableThumbnail":false,
|
||||||
"thumbnail":"https://www.example.com/catmemes/cat.png",
|
"thumbnail":"https://www.example.com/catmemes/cat.png",
|
||||||
"color":"#ffffff",
|
"color":"#ffffff",
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
# OT-API Documentation
|
||||||
|
Extend open ticket with your own features!
|
||||||
|
|
||||||
|
The api is made for EXTENDING open ticket, not replacing! So with this api you are not able to replace existing features! You can only add your own features!
|
||||||
|
|
||||||
|
### DISCLAIMER:
|
||||||
|
Only edit or extend the code when you know what you are doing!
|
||||||
|
|
||||||
|
If open ticket crashes while you change the code, then we can't help you!
|
||||||
|
|
||||||
|
**DO IT ON YOUR OWN RISK!**
|
||||||
|
|
||||||
|
## Events:
|
||||||
|
Everything in the `events.js` file!
|
||||||
|
|
||||||
|
### onTicketOpen(...)
|
||||||
|
This function is executed when a new ticket is created. It happens after everything else is done, so the channel is already created!
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
- user: `discord.User`
|
||||||
|
- channel: `discord.TextChannel`
|
||||||
|
- guild: `discord.Guild`
|
||||||
|
- date: `Date`
|
||||||
|
- ticketdata: `OT TicketData` or `false` (more info further down this document)
|
||||||
|
|
||||||
|
### onTicketClose(...)
|
||||||
|
This function is executed when a ticket gets closed, it can happen multiple times with one ticket (because of reopen).
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
- user: `discord.User`
|
||||||
|
- channel: `discord.TextChannel`
|
||||||
|
- guild: `discord.Guild`
|
||||||
|
- date: `Date`
|
||||||
|
- ticketdata: `OT TicketData` or `false` (more info further down this document)
|
||||||
|
|
||||||
|
### onTicketDelete(...)
|
||||||
|
This function is executed when a ticket gets deleted, it can happen only 1 time.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
- user: `discord.User`
|
||||||
|
- channel: `discord.TextChannel`
|
||||||
|
- guild: `discord.Guild`
|
||||||
|
- date: `Date`
|
||||||
|
- ticketdata: `OT TicketData` or `false` (more info further down this document)
|
||||||
|
|
||||||
|
### onTicketReopen(...)
|
||||||
|
...
|
||||||
|
|
||||||
|
### onTranscriptCreation(...)
|
||||||
|
...
|
||||||
|
|
||||||
|
### onCommand(...)
|
||||||
|
...
|
||||||
|
|
||||||
|
### onReactionRole(...)
|
||||||
|
...
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"version":"1.0.0"
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
/** FOR DEVELOPERS ONLY!!
|
||||||
|
* Don't change anything in this file, read the api documentation first!
|
||||||
|
* look into "api docs.md" for the docs!
|
||||||
|
*/
|
||||||
|
|
||||||
|
//used when creating plugins!
|
||||||
|
exports.enableApiLogs = false
|
||||||
|
|
||||||
|
//this is used when embedding open ticket into another bot
|
||||||
|
exports.embeddedMode = false
|
||||||
|
exports.clientLocation = require("../../../index").client
|
||||||
|
|
||||||
|
/** !! WARNING !!
|
||||||
|
* Only edit or extend the code when you know what you are doing!
|
||||||
|
* If open ticket crashes while you change the code, then we can't help you!
|
||||||
|
*
|
||||||
|
* DO IT ON YOUR OWN RISK!
|
||||||
|
*/
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
const discord = require("discord.js")
|
||||||
|
const client = require("../../../index").client
|
||||||
|
|
||||||
|
module.exports = () => {
|
||||||
|
//this code will run when the bot starts!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.User} user
|
||||||
|
* @param {discord.TextChannel} channel
|
||||||
|
* @param {discord.Guild} guild
|
||||||
|
* @param {Date} date
|
||||||
|
* @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata
|
||||||
|
*/
|
||||||
|
exports.onTicketOpen = (user,channel,guild,date,ticketdata) => {
|
||||||
|
//system
|
||||||
|
bot.errorLog.log("api","new ticket created",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}])
|
||||||
|
|
||||||
|
//custom code
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.User} user
|
||||||
|
* @param {discord.TextChannel} channel
|
||||||
|
* @param {discord.Guild} guild
|
||||||
|
* @param {Date} date
|
||||||
|
* @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata
|
||||||
|
*/
|
||||||
|
exports.onTicketClose = (user,channel,guild,date,ticketdata) => {
|
||||||
|
//system
|
||||||
|
bot.errorLog.log("api","ticket closed",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}])
|
||||||
|
|
||||||
|
//custom code
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.User} user
|
||||||
|
* @param {discord.TextChannel} channel
|
||||||
|
* @param {discord.Guild} guild
|
||||||
|
* @param {Date} date
|
||||||
|
* @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata
|
||||||
|
*/
|
||||||
|
exports.onTicketDelete = (user,channel,guild,date,ticketdata) => {
|
||||||
|
//system
|
||||||
|
bot.errorLog.log("api","ticket deleted",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}])
|
||||||
|
|
||||||
|
//custom code
|
||||||
|
|
||||||
|
}
|
||||||
+34
-12
@@ -131,15 +131,20 @@ module.exports = () => {
|
|||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
interaction.message.edit({components:[closeRowNormal]})
|
interaction.message.edit({components:[closeRowNormal]})
|
||||||
})
|
})
|
||||||
client.on("interactionCreate",interaction => {
|
|
||||||
|
var closeTicketButtonChecker = false
|
||||||
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "closeTicketTrue") return
|
if (interaction.customId != "closeTicketTrue") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
|
|
||||||
|
if (closeTicketButtonChecker == true) return
|
||||||
|
closeTicketButtonChecker = true
|
||||||
|
|
||||||
if (config.system.closeMode == "adminonly"){
|
if (config.system.closeMode == "adminonly"){
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
try {
|
try {
|
||||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -162,18 +167,23 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
await require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
||||||
|
closeTicketButtonChecker = false
|
||||||
})
|
})
|
||||||
|
|
||||||
client.on("interactionCreate",interaction => {
|
var closeTicket1ButtonChecker = false
|
||||||
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "closeTicketTrue1") return
|
if (interaction.customId != "closeTicketTrue1") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
|
|
||||||
|
if (closeTicket1ButtonChecker == true) return
|
||||||
|
closeTicket1ButtonChecker = true
|
||||||
|
|
||||||
if (config.system.closeMode == "adminonly"){
|
if (config.system.closeMode == "adminonly"){
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
try {
|
try {
|
||||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -208,7 +218,8 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
await require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
||||||
|
closeTicket1ButtonChecker = false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -228,14 +239,18 @@ module.exports = () => {
|
|||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
interaction.message.edit({components:[closeRowNormal]})
|
interaction.message.edit({components:[closeRowNormal]})
|
||||||
})
|
})
|
||||||
client.on("interactionCreate",interaction => {
|
var deleteTicketButtonChecker = false
|
||||||
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "deleteTicketTrue") return
|
if (interaction.customId != "deleteTicketTrue") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
|
|
||||||
|
if (deleteTicketButtonChecker == true) return
|
||||||
|
deleteTicketButtonChecker = true
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
try {
|
try {
|
||||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -255,7 +270,8 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
require("./ticketCloser").closeTicket(interaction,prefix,"delete")
|
await require("./ticketCloser").closeTicket(interaction,prefix,"delete")
|
||||||
|
deleteTicketButtonChecker = false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -277,14 +293,19 @@ module.exports = () => {
|
|||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
interaction.message.edit({components:[closeRowClosed]})
|
interaction.message.edit({components:[closeRowClosed]})
|
||||||
})
|
})
|
||||||
client.on("interactionCreate",interaction => {
|
|
||||||
|
var deleteTicket1ButtonChecker = false
|
||||||
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "deleteTicketTrue1") return
|
if (interaction.customId != "deleteTicketTrue1") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
interaction.deferUpdate()
|
||||||
|
|
||||||
|
if (deleteTicket1ButtonChecker == true) return
|
||||||
|
deleteTicket1ButtonChecker = true
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
try {
|
try {
|
||||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -304,6 +325,7 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript")
|
await require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript")
|
||||||
|
deleteTicket1ButtonChecker = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -88,11 +88,12 @@ const normalLog = (debugString) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {"system"|"command"|"info"} type
|
* @param {"system"|"command"|"info"|"api"} type
|
||||||
* @param {String} message
|
* @param {String} message
|
||||||
* @param {[{key:String,value:String}]} params
|
* @param {[{key:String,value:String}]} params
|
||||||
*/
|
*/
|
||||||
exports.log = async (type,message,params) => {
|
exports.log = async (ptype,message,params) => {
|
||||||
|
var type = ptype
|
||||||
const chalk = await loadChalk()
|
const chalk = await loadChalk()
|
||||||
var paramstring = ""
|
var paramstring = ""
|
||||||
if (params){
|
if (params){
|
||||||
@@ -110,6 +111,11 @@ exports.log = async (type,message,params) => {
|
|||||||
console.log(chalk.blue("[info] ")+message+" "+chalk.yellow(parameters))
|
console.log(chalk.blue("[info] ")+message+" "+chalk.yellow(parameters))
|
||||||
}else if (type == "system"){
|
}else if (type == "system"){
|
||||||
console.log(chalk.green("[system] ")+message+" "+chalk.yellow(parameters))
|
console.log(chalk.green("[system] ")+message+" "+chalk.yellow(parameters))
|
||||||
|
}else if (type == "api"){
|
||||||
|
if (require("./api/base").enableApiLogs == true){
|
||||||
|
console.log(chalk.red("[api v"+require("./api/api.json").version+"] ")+message+" "+chalk.yellow(parameters))
|
||||||
|
}
|
||||||
|
type = "api v"+require("./api/api.json").version
|
||||||
}
|
}
|
||||||
|
|
||||||
const cd = new Date()
|
const cd = new Date()
|
||||||
|
|||||||
+23
-8
@@ -45,7 +45,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
|
|
||||||
if (mode == "delete"){
|
if (mode == "delete"){
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
try {
|
try {
|
||||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -53,17 +53,22 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
deleteRequired = true
|
deleteRequired = true
|
||||||
interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
await interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
||||||
log("system","deleted a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}])
|
log("system","deleted a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}])
|
||||||
|
|
||||||
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
||||||
|
|
||||||
//getID & send DM
|
//getID & send DM
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
var firstmsg = msglist.last()
|
var firstmsg = msglist.last()
|
||||||
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
||||||
|
|
||||||
|
const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1]
|
||||||
|
const ticketData = require("./getoptions").getOptionsById("newT"+ticketId)
|
||||||
|
|
||||||
|
require("./api/modules/events").onTicketDelete(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"deleted",ticketOptions:ticketData})
|
||||||
|
|
||||||
if (!firstmsg.embeds[0].author) return false
|
if (!firstmsg.embeds[0].author) return false
|
||||||
const id = firstmsg.embeds[0].author.name
|
const id = firstmsg.embeds[0].author.name
|
||||||
|
|
||||||
@@ -81,7 +86,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
|
|
||||||
if (config.system.closeMode == "adminonly"){
|
if (config.system.closeMode == "adminonly"){
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
try {
|
try {
|
||||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
}catch{
|
}catch{
|
||||||
@@ -143,11 +148,16 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
|
|
||||||
log("system","closed a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}])
|
log("system","closed a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}])
|
||||||
|
|
||||||
|
|
||||||
//getID & send DM
|
//getID & send DM
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
var firstmsg = msglist.last()
|
var firstmsg = msglist.last()
|
||||||
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
||||||
|
const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1]
|
||||||
|
const ticketData = require("./getoptions").getOptionsById("newT"+ticketId)
|
||||||
|
|
||||||
|
require("./api/modules/events").onTicketClose(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"closed",ticketOptions:ticketData})
|
||||||
|
|
||||||
const id = firstmsg.embeds[0].author.name
|
const id = firstmsg.embeds[0].author.name
|
||||||
|
|
||||||
@@ -165,7 +175,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
}else if (mode == "deletenotranscript"){
|
}else if (mode == "deletenotranscript"){
|
||||||
|
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||||
interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
|
interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -178,11 +188,16 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
||||||
|
|
||||||
//getID & send DM
|
//getID & send DM
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
var firstmsg = msglist.last()
|
var firstmsg = msglist.last()
|
||||||
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
||||||
|
|
||||||
|
const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1]
|
||||||
|
const ticketData = require("./getoptions").getOptionsById("newT"+ticketId)
|
||||||
|
|
||||||
|
require("./api/modules/events").onTicketDelete(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"deleted",ticketOptions:ticketData})
|
||||||
|
|
||||||
const id = firstmsg.embeds[0].author.name
|
const id = firstmsg.embeds[0].author.name
|
||||||
|
|
||||||
if (!id) return false
|
if (!id) return false
|
||||||
@@ -238,7 +253,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
|||||||
setTimeout(() => {resolve(true)},7000)
|
setTimeout(() => {resolve(true)},7000)
|
||||||
})}
|
})}
|
||||||
await timer()
|
await timer()
|
||||||
interaction.channel.delete()
|
await interaction.channel.delete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ module.exports = () => {
|
|||||||
.setAuthor({name:interaction.user.id})
|
.setAuthor({name:interaction.user.id})
|
||||||
.setColor(config.main_color)
|
.setColor(config.main_color)
|
||||||
.setTitle(currentTicketOptions.name)
|
.setTitle(currentTicketOptions.name)
|
||||||
|
.setFooter({text:"Ticket Type: "+currentTicketOptions.id})
|
||||||
if (currentTicketOptions.ticketmessage.length > 0) ticketEmbed.setDescription(currentTicketOptions.ticketmessage)
|
if (currentTicketOptions.ticketmessage.length > 0) ticketEmbed.setDescription(currentTicketOptions.ticketmessage)
|
||||||
|
|
||||||
ticketChannel.send({
|
ticketChannel.send({
|
||||||
@@ -190,6 +191,7 @@ module.exports = () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.tag}])
|
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.tag}])
|
||||||
|
require("./api/modules/events").onTicketOpen(interaction.user,ticketChannel,interaction.guild,new Date(),{name:ticketName,status:"open",ticketOptions:currentTicketOptions})
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
try {
|
try {
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "open-ticket",
|
"name": "open-ticket",
|
||||||
"version": "2.3.2",
|
"version": "2.4.0",
|
||||||
"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": {
|
||||||
|
|||||||
Reference in New Issue
Block a user