Compare commits

...
19 Commits
Author SHA1 Message Date
Jasper 2603a7bdd0 Merge pull request #21 from DJj123dj/dev
v2.3.3
2022-07-25 20:10:15 +02:00
DJj123dj c1ba677b82 v2.3.3 2022-07-25 20:09:52 +02:00
Jasper 7e6ac6a4b9 Merge pull request #20 from DJj123dj/dev
v2.3.2
2022-07-23 14:41:27 +02:00
DJj123dj 0ee9a312eb v2.3.2 2022-07-23 14:39:55 +02:00
Jasper d282a516e6 Merge pull request #19 from DJj123dj/dev
v2.3.1
2022-07-21 11:57:04 +02:00
DJj123dj 9638179d45 v2.3.1 push 1 2022-07-21 10:32:36 +02:00
Jasper 30d45ddc39 Merge pull request #18 from DJj123dj/dev
little change i forgot
2022-07-19 16:44:23 +02:00
DJj123dj 2c08ca7245 little change i forgot 2022-07-19 16:43:44 +02:00
Jasper 3d5b1f6e8d Merge pull request #17 from DJj123dj/dev
Update 2.3.0
2022-07-19 16:41:42 +02:00
DJj123dj edc8d4bc44 almost ready for discord.js 14! 2022-07-19 16:40:18 +02:00
DJj123dj c57507cea9 open ticket v2.3 push 1 (doesn't work yet) 2022-07-19 11:57:14 +02:00
Jasper ace46deb52 Merge pull request #16 from DJj123dj/dev
2.2.0 update
2022-07-18 09:37:22 +02:00
DJj123dj fc09858f92 2.2.0 update
bug fixes & 2 new languages
2022-07-18 09:14:25 +02:00
Jasper 1b7767641e Merge pull request #14 from DJj123dj/dev
important bug fix update v2.1.2
2022-07-01 08:20:20 +02:00
DJj123dj 76d491d27c important bug fix update v2.1.2 2022-07-01 08:19:35 +02:00
Jasper 06b57f18f1 Merge pull request #13 from DJj123dj/dev
Dev
2022-06-28 11:53:25 +02:00
DJj123dj 5f5699f160 v2.1.1 last push 2022-06-28 11:52:55 +02:00
DJj123dj 702f225983 fixed the "startsWith" bug 2022-06-28 08:43:14 +02:00
DJj123dj aab5a9c241 removed the "hoi" bug 2022-06-27 14:19:54 +02:00
40 changed files with 1015 additions and 312 deletions
+22 -6
View File
@@ -1,14 +1,27 @@
### large announcement:
[![open moderation](./openmod.png)](https://www.dj-dj.be/projects/open-moderation)
## We need translators!
If you know a language that isn't already in open ticket and you can write json,
then is this the job for you!
make a ticket in our server to start!
*if you translate, you will come in the credits*
# open-ticket
[![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-2.1.0%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.1.0) [![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)
[![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-2.4.0%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.4.0) [![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)
This is an open-source discord ticket bot, you can configure it and it comes with cool features like transcripts & custom options!
<img src="logo.png" alt="Open Ticket logo" style="height: 200px; width:200px;"/>
[![q&a](https://img.shields.io/badge/Q&A-click%20here-blue.svg?style=flat-square)](https://www.github.com/DJj123dj/open-ticket/wiki/q&a)
[![wiki](https://img.shields.io/badge/documentation-click%20here-blue.svg?style=flat-square)](https://www.github.com/DJj123dj/open-ticket/wiki)
### Thanks to these people:
- DJ-Lite: for doing the administration
- Sanke: for translation & new ideas
- ExothDE: for translation
- 1x1: for translation
- R0JO: for translation
- Everyone that reported a bug
## features
- discord buttons
@@ -29,6 +42,9 @@ This is an open-source discord ticket bot, you can configure it and it comes wit
## installation
**You need `node.js 16` to run this project!**
**At this moment you still need discord.js v13!**
This will change soon!
You can clone or download this project.
### packages
@@ -46,7 +62,7 @@ if there are any errors, you can open an **issue on github** or **contact me in
### config
Our config documentation is moved to another file:
[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.1.0)
[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.4.0)
### 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
@@ -58,7 +74,7 @@ You can also configure your own permissions
## information
_v2.1.0 unstable_
_v2.4.0 stable_
changelog: [click here](https://www.github.com/DJj123dj/open-ticket/wiki/Changelog)
+8 -5
View File
@@ -11,8 +11,12 @@ module.exports = () => {
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 (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
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 {
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
msg.channel.messages.fetchPinned().then(msglist => {
@@ -31,17 +35,16 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "add") return
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)
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})
return
}
interaction.channel.messages.fetchPinned().then(msglist => {
var firstmsg = msglist.last()
+7 -7
View File
@@ -15,12 +15,12 @@ module.exports = () => {
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
const closebutton = new discord.MessageActionRow()
const closebutton = new discord.ActionRowBuilder()
.addComponents([
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicketTrue1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("🔒")
])
@@ -34,7 +34,7 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "close") return
interaction.channel.messages.fetchPinned().then(msglist => {
@@ -42,12 +42,12 @@ module.exports = () => {
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const closebutton = new discord.MessageActionRow()
const closebutton = new discord.ActionRowBuilder()
.addComponents([
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicketTrue1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("🔒")
])
+14 -10
View File
@@ -9,8 +9,12 @@ module.exports = () => {
client.on("messageCreate",msg => {
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){
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
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 {
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
msg.channel.messages.fetchPinned().then(msglist => {
@@ -18,12 +22,12 @@ module.exports = () => {
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
const closebutton = new discord.MessageActionRow()
const closebutton = new discord.ActionRowBuilder()
.addComponents([
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicketTrue")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
])
@@ -37,11 +41,11 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) 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)
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})
return
}
@@ -51,12 +55,12 @@ module.exports = () => {
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const closebutton = new discord.MessageActionRow()
const closebutton = new discord.ActionRowBuilder()
.addComponents([
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicketTrue")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
])
+8 -2
View File
@@ -6,7 +6,7 @@ const log = bot.errorLog.log
const l = bot.language
module.exports = () => {
const helpEmbed = new discord.MessageEmbed()
const helpEmbed = new discord.EmbedBuilder()
.setColor(config.main_color)
.setTitle(l.helpMenu.title)
@@ -21,6 +21,12 @@ module.exports = () => {
if (!msg.content.startsWith(config.prefix)) return
var args = msg.content.split(config.prefix)
if (!args[1]){
msg.channel.send({embeds:[helpEmbed]})
log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}])
return
}
if (!args[1].startsWith("close") && !args[1].startsWith("delete") && !args[1].startsWith("remove") && !args[1].startsWith("add") && !args[1].startsWith("msg") && !args[1].startsWith("remove") && !args[1].startsWith("rename") && !args[1].startsWith("reopen")){
msg.channel.send({embeds:[helpEmbed]})
@@ -29,7 +35,7 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "help") return
interaction.reply({embeds:[helpEmbed]})
+8 -4
View File
@@ -11,8 +11,12 @@ module.exports = () => {
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 (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
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 {
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
msg.channel.messages.fetchPinned().then(msglist => {
@@ -32,12 +36,12 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "remove") return
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)
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})
return
}
+8 -4
View File
@@ -14,8 +14,12 @@ module.exports = () => {
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){
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
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 {
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
var newname = msg.content.split(config.prefix+"rename")[1].substring(1)
@@ -45,7 +49,7 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "rename") return
interaction.channel.messages.fetchPinned().then(msglist => {
@@ -54,7 +58,7 @@ module.exports = () => {
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)
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})
return
}
+4 -4
View File
@@ -6,12 +6,12 @@ const log = bot.errorLog.log
const l = bot.language
module.exports = () => {
var reopenCommandBar = new discord.MessageActionRow()
var reopenCommandBar = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicket1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("🔓")
)
@@ -32,7 +32,7 @@ module.exports = () => {
})
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "reopen") return
interaction.channel.messages.fetchPinned().then(msglist => {
+8 -4
View File
@@ -16,8 +16,12 @@ module.exports = () => {
client.on("messageCreate", msg => {
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){
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
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 {
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
const id = msg.content.split(config.prefix+"msg")[1].substring(1) ? msg.content.split(config.prefix+"msg")[1].substring(1) : false
@@ -35,11 +39,11 @@ module.exports = () => {
})
client.on("interactionCreate", (interaction) => {
if (!interaction.isCommand()) return
if (!interaction.isChatInputCommand()) 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)
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})
return
}
+4 -4
View File
@@ -11,7 +11,7 @@
"status":{
"enabled":true,
"type":"PLAYING",
"text":"!ticket"
"text":"!ticket help"
},
"system":{
@@ -77,9 +77,9 @@
{
"id":"1",
"name":"Choose Your Ticket",
"description":"You can click one of the buttons below!\nYou can also customize all the embeds now!",
"enableFooter":true,
"footer":"Open Ticket v2.1.0 - I'm a footer!",
"description":"You can click one of the buttons below!",
"enableFooter":false,
"footer":"Open Ticket v2.4.0 - I'm a footer!",
"enableThumbnail":false,
"thumbnail":"https://www.example.com/catmemes/cat.png",
"color":"#ffffff",
+56
View File
@@ -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(...)
...
+3
View File
@@ -0,0 +1,3 @@
{
"version":"1.0.0"
}
+26
View File
@@ -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!
*/
+9
View File
@@ -0,0 +1,9 @@
const discord = require("discord.js")
const client = require("../../../index").client
module.exports = () => {
//this code will run when the bot starts!
}
+55
View File
@@ -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
}
+4 -11
View File
@@ -252,14 +252,8 @@ exports.checker = async () => {
}
})
checkType(config.bot_name,"string","bot_name")
if (config.main_color.startsWith("#")){
checkHexColor(config.main_color,"main_color")
}else{
checkEmbedColor(config.main_color,"main_color")
}
checkHexColor(config.main_color,"main_color")
checkDiscord("serverid",config.server_id,"server_id")
checkToken(config.auth_token)
checkDiscordArray("roleid",config.main_adminroles,"main_adminroles")
@@ -267,7 +261,7 @@ exports.checker = async () => {
//languagefile
checkType(config.languagefile,"string","languagefile")
const lf = config.languagefile
if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian")){
if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish")){
createError("'languagefile' | invalid language, more info in the wiki")
}
@@ -296,12 +290,13 @@ exports.checker = async () => {
checkType(config.system["has@everyoneaccess"],"boolean","system/has@everyoneaccess")
if (config.system.member_role != "" && config.system.member_role != " " && config.system.member_role != "false" && config.system.member_role != "null" && config.system.member_role != "0"){
checkDiscord("roleid",config.system.member_role,"system/member_role")
}else{
createWarn("'system/member_role' | You don't have a member role, but it's recommended!")
}
checkType(config.system.closeMode,"string","system/closeMode")
if (!["normal","adminonly"].includes(config.system.closeMode)){
createError("'system/closeMode' | the close mode must be adminonly or normal")
}
console.log("hoi")
checkType(config.system.enable_transcript,"boolean","system/enable_transcript")
checkType(config.system.enable_DM_transcript,"boolean","system/enable_DM_transcript")
@@ -348,5 +343,3 @@ exports.checker = async () => {
}
}
this.checker()
+89 -55
View File
@@ -7,109 +7,109 @@ const l = bot.language
module.exports = () => {
//closebar
var closeBar = new discord.MessageActionRow()
var closeBar = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicketTrue")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("✅")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicketFalse")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
)
var deleteBar = new discord.MessageActionRow()
var deleteBar = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicketTrue")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("✅")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicketFalse")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
)
var deleteBar1 = new discord.MessageActionRow()
var deleteBar1 = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicketTrue1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("✅")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicketFalse1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
)
//closebutton
var closeRowNormal = new discord.MessageActionRow()
var closeRowNormal = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicket")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.close)
.setEmoji("🔒")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket")
.setDisabled(false)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
var closeRowClosed = new discord.MessageActionRow()
var closeRowClosed = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket1")
.setDisabled(false)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("sendTranscript")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.sendTranscript)
.setEmoji("📄")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicket")
.setDisabled(false)
.setStyle("SUCCESS")
.setStyle(discord.ButtonStyle.Success)
.setLabel(l.buttons.reopen)
.setEmoji("✔")
)
var closeRowDisabled = new discord.MessageActionRow()
var closeRowDisabled = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicket")
.setDisabled(true)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.close)
.setEmoji("🔒")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket")
.setDisabled(true)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
@@ -131,17 +131,25 @@ module.exports = () => {
interaction.deferUpdate()
interaction.message.edit({components:[closeRowNormal]})
})
client.on("interactionCreate",interaction => {
var closeTicketButtonChecker = false
client.on("interactionCreate",async interaction => {
if (!interaction.isButton()) return
if (interaction.customId != "closeTicketTrue") return
interaction.deferUpdate()
if (closeTicketButtonChecker == true) return
closeTicketButtonChecker = true
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)
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]})
return
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
try {
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
}
@@ -159,29 +167,37 @@ 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.customId != "closeTicketTrue1") return
interaction.deferUpdate()
if (closeTicket1ButtonChecker == true) return
closeTicket1ButtonChecker = true
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)
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]})
return
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
try {
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
}
const closedButtonDisabled = new discord.MessageActionRow()
const closedButtonDisabled = new discord.ActionRowBuilder()
.addComponents([
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicketTrue1")
.setDisabled(true)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("🔒")
])
interaction.message.edit({components:[closedButtonDisabled]})
@@ -202,7 +218,8 @@ module.exports = () => {
}
})
require("./ticketCloser").closeTicket(interaction,prefix,"close")
await require("./ticketCloser").closeTicket(interaction,prefix,"close")
closeTicket1ButtonChecker = false
})
@@ -222,16 +239,23 @@ module.exports = () => {
interaction.deferUpdate()
interaction.message.edit({components:[closeRowNormal]})
})
client.on("interactionCreate",interaction => {
var deleteTicketButtonChecker = false
client.on("interactionCreate",async interaction => {
if (!interaction.isButton()) return
if (interaction.customId != "deleteTicketTrue") return
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)
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]})
return
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
try {
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
/**
@@ -246,7 +270,8 @@ module.exports = () => {
}
})
require("./ticketCloser").closeTicket(interaction,prefix,"delete")
await require("./ticketCloser").closeTicket(interaction,prefix,"delete")
deleteTicketButtonChecker = false
})
@@ -268,16 +293,24 @@ module.exports = () => {
interaction.deferUpdate()
interaction.message.edit({components:[closeRowClosed]})
})
client.on("interactionCreate",interaction => {
var deleteTicket1ButtonChecker = false
client.on("interactionCreate",async interaction => {
if (!interaction.isButton()) return
if (interaction.customId != "deleteTicketTrue1") return
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)
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]})
return
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
try {
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
/**
@@ -292,6 +325,7 @@ module.exports = () => {
}
})
require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript")
await require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript")
deleteTicket1ButtonChecker = false
})
}
+16 -9
View File
@@ -7,17 +7,18 @@ const l = bot.language
const loadChalk = async () => {
return await (await import("chalk")).default
}
const embed = discord.MessageEmbed
const embed = discord.EmbedBuilder
const c = discord.Colors
exports.noPermsMessage = new embed()
.setColor("RED")
.setColor(c.Red)
.setTitle(":x: "+l.errors.noPermsTitle+" :x:")
.setDescription(l.errors.noPermsDescription)
/**@param {String} message */
exports.invalidArgsMessage = (message) => {
var x = new embed()
.setColor("RED")
.setColor(c.Red)
.setTitle(":x: "+l.errors.missingArgsTitle+" :x:")
.setDescription(message)
@@ -27,7 +28,7 @@ exports.invalidArgsMessage = (message) => {
/**@param {String} message */
exports.serverError = (message) => {
var x = new embed()
.setColor("ORANGE")
.setColor(c.Orange)
.setTitle(":warning: "+l.errors.boterror+" :warning:")
.setDescription(message)
@@ -37,14 +38,14 @@ exports.serverError = (message) => {
/**@param {String[]} list */
exports.invalidIdChooseFromList = (list) => {
var x = new embed()
.setColor("RED")
.setColor(c.Red)
.setTitle(":x: "+l.errors.chooseFromListTitle+" :x:")
.setDescription(l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`")
return x
}
exports.notInATicket = new embed()
.setColor("RED")
.setColor(c.Red)
.setTitle(":x: "+l.errors.notInTicketTitle+" :x:")
.setDescription(l.errors.notInTicketDescription)
@@ -62,7 +63,7 @@ exports.success = (title,message) => {
/**@param {String} message @param {String} title */
exports.warning = (title,message) => {
var x = new embed()
.setColor("ORANGE")
.setColor(c.Orange)
.setTitle(":warning: "+title+" :warning:")
.setDescription(message)
@@ -87,11 +88,12 @@ const normalLog = (debugString) => {
/**
*
* @param {"system"|"command"|"info"} type
* @param {"system"|"command"|"info"|"api"} type
* @param {String} message
* @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()
var paramstring = ""
if (params){
@@ -109,6 +111,11 @@ exports.log = async (type,message,params) => {
console.log(chalk.blue("[info] ")+message+" "+chalk.yellow(parameters))
}else if (type == "system"){
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()
+3 -1
View File
@@ -9,9 +9,11 @@ var localLanguage = require("../language/english.json")
if (config.languagefile.startsWith("custom")) localLanguage = require("../language/custom.json")
else if (config.languagefile.startsWith("dutch")) localLanguage = require("../language/dutch.json")
else if (config.languagefile.startsWith("english")) localLanguage = require("../language/english.json")
else if (config.languagefile.startsWith("deutsch")) localLanguage = require("../language/deutsch.json")
else if (config.languagefile.startsWith("german")) localLanguage = require("../language/german.json")
else if (config.languagefile.startsWith("french")) localLanguage = require("../language/french.json")
else if (config.languagefile.startsWith("romanian")) localLanguage = require("../language/romanian.json")
else if (config.languagefile.startsWith("arabic")) localLanguage = require("../language/arabic.json")
else if (config.languagefile.startsWith("spanish")) localLanguage = require("../language/spanish.json")
const errorLog = async () => {
const chalk = await (await import("chalk")).default
+29 -28
View File
@@ -21,42 +21,43 @@ module.exports = async () => {
interaction.reply({embeds:[bot.errorLog.serverError(l.errors.roleDoesntExist)]})
return
}
}
try {
const option = require("./utils/getButton").getOption(optionid)
/**@type {"add"|"remove"|"add&remove"} */
const mode = option.mode
const user = interaction.member
try {
if (mode == "add"){
option.roles.forEach((role) => {
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
const option = require("./utils/getButton").getOption(optionid)
/**@type {"add"|"remove"|"add&remove"} */
const mode = option.mode
const user = interaction.member
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
})
}else if (mode == "remove"){
option.roles.forEach((role) => {
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
if (mode == "add"){
option.roles.forEach((role) => {
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
})
}else if (mode == "add&remove"){
option.roles.forEach((role) => {
if (interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
})
}else if (mode == "remove"){
option.roles.forEach((role) => {
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
}else {
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
})
}else if (mode == "add&remove"){
option.roles.forEach((role) => {
if (interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
}else {
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
}
})
}
})
}
}catch{
interaction.replyinteraction.channel.send({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrong)]})
}catch{
interaction.channel.send({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrong)]})
}
}
})
}
+1 -1
View File
@@ -9,7 +9,7 @@ module.exports = async () => {
console.log(chalk.red("\nINSTRUCTIONS:\n\n1: Run the command you want to delete in discord.\n2: You get the message 'This command is now deleted!'\n3: There is also a message in the console that says the command is deleted.\n4: reload your discord."))
client.on("interactionCreate",(interaction) => {
if (!interaction.isCommand()) return console.log("this isn't a command!")
if (!interaction.isChatInputCommand()) return console.log("this isn't a command!")
interaction.reply({content:"This command is now deleted!"})
+21 -17
View File
@@ -4,6 +4,9 @@ const client = require("../../index").client
const config = bot.config
const getoptions = require("../getoptions")
const act = discord.ApplicationCommandType
const acot = discord.ApplicationCommandOptionType
module.exports = async () => {
const chalk = (await import("chalk")).default
const sid = config.server_id
@@ -42,10 +45,10 @@ module.exports = async () => {
name:"ticket",
description:"Create a ticket!",
defaultPermission:true,
type:"CHAT_INPUT",
type:act.ChatInput,
options:[
{
type:"STRING",
type:acot.String,
name:"type",
description:"The type of ticket.",
required:true,
@@ -61,10 +64,10 @@ module.exports = async () => {
name:"new",
description:"Create a ticket!",
defaultPermission:true,
type:"CHAT_INPUT",
type:act.ChatInput,
options:[
{
type:"STRING",
type:acot.String,
name:"type",
description:"The type of ticket.",
required:true,
@@ -81,7 +84,7 @@ module.exports = async () => {
name:"help",
description:"The help menu",
defaultPermission:true,
type:"CHAT_INPUT"
type:act.ChatInput
},sid).then(() => {
readystats++
@@ -92,7 +95,7 @@ module.exports = async () => {
name:"close",
description:"Close the current ticket.",
defaultPermission:true,
type:"CHAT_INPUT"
type:act.ChatInput
},sid).then(() => {
readystats++
})
@@ -102,7 +105,7 @@ module.exports = async () => {
name:"delete",
description:"Delete the current ticket.",
defaultPermission:true,
type:"CHAT_INPUT"
type:act.ChatInput
},sid).then(() => {
readystats++
})
@@ -112,14 +115,15 @@ module.exports = async () => {
name:"message",
description:"Create a ticket message.",
defaultPermission:true,
type:"CHAT_INPUT",
type:act.ChatInput,
options:[
{
type:"STRING",
type:acot.String,
name:"id",
description:"The message id.",
required:true,
choices:msgchoices
choices:msgchoices,
max_length:30
}
]
@@ -132,10 +136,10 @@ module.exports = async () => {
name:"add",
description:"Add people to this ticket.",
defaultPermission:true,
type:"CHAT_INPUT",
type:act.ChatInput,
options:[
{
type:"USER",
type:acot.User,
name:"user",
description:"The user to add.",
required:true
@@ -150,10 +154,10 @@ module.exports = async () => {
name:"remove",
description:"Remove people from this ticket.",
defaultPermission:true,
type:"CHAT_INPUT",
type:act.ChatInput,
options:[
{
type:"USER",
type:acot.User,
name:"user",
description:"The user to remove.",
required:true
@@ -168,10 +172,10 @@ module.exports = async () => {
name:"rename",
description:"Rename this ticket.",
defaultPermission:true,
type:"CHAT_INPUT",
type:act.ChatInput,
options:[
{
type:"STRING",
type:acot.String,
name:"name",
description:"The new name (without prefix).",
required:true
@@ -186,7 +190,7 @@ module.exports = async () => {
name:"reopen",
description:"Reopen this ticket.",
defaultPermission:true,
type:"CHAT_INPUT"
type:act.ChatInput
},sid).then(() => {
readystats++
})
Regular → Executable
+62 -28
View File
@@ -41,25 +41,34 @@ exports.closeTicket = async (interaction,prefix,mode) => {
}
var enableTranscript = true
var deleteRequired = false
if (mode == "delete"){
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")){
interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
return
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
try {
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
interaction.channel.delete()
deleteRequired = true
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}])
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
//getID & send DM
interaction.channel.messages.fetchPinned().then(msglist => {
await interaction.channel.messages.fetchPinned().then(msglist => {
var firstmsg = msglist.last()
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
const id = firstmsg.embeds[0].author.name
@@ -77,56 +86,61 @@ exports.closeTicket = async (interaction,prefix,mode) => {
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)
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]})
return
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
try {
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
}catch{
return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
}
}
}
var permissionArray = []
const pfb = discord.PermissionFlagsBits
if (!isDatabaseError) permissionArray.push({
id:getusernameStep1.id,
id:getusernameStep1,
type:"member",
allow:["VIEW_CHANNEL"],
deny:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES"]
allow:[pfb.ViewChannel],
deny:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages]
})
permissionArray.push({
id:interaction.guild.id,
id:interaction.guild.roles.everyone,
type:"role",
deny:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
deny:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
})
interaction.channel.permissionOverwrites.set(permissionArray)
//message
var closeButtonRow = new discord.MessageActionRow()
var closeButtonRow = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket1")
.setDisabled(false)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("sendTranscript")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.sendTranscript)
.setEmoji("📄")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicket")
.setDisabled(false)
.setStyle("SUCCESS")
.setStyle(discord.ButtonStyle.Success)
.setLabel(l.buttons.reopen)
.setEmoji("✔")
)
const embed = new discord.MessageEmbed()
const embed = new discord.EmbedBuilder()
.setColor(config.main_color)
.setTitle(":lock: "+l.messages.closedTitle+" :lock:")
.setDescription(l.messages.closedDescription)
@@ -134,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}])
//getID & send DM
interaction.channel.messages.fetchPinned().then(msglist => {
await interaction.channel.messages.fetchPinned().then(msglist => {
var firstmsg = msglist.last()
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
@@ -156,23 +175,29 @@ exports.closeTicket = async (interaction,prefix,mode) => {
}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)
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]})
return
}
enableTranscript = false
interaction.channel.delete()
deleteRequired = true
interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"})
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)
//getID & send DM
interaction.channel.messages.fetchPinned().then(msglist => {
await interaction.channel.messages.fetchPinned().then(msglist => {
var firstmsg = msglist.last()
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
if (!id) return false
@@ -186,6 +211,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
})
}
if (enableTranscript == true && mode != "deletenotranscript"){
if (config.system.enable_transcript || config.system.enable_DM_transcript){
@@ -195,7 +221,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
}
if (config.system.enable_transcript){
const transcriptEmbed = new discord.MessageEmbed()
const transcriptEmbed = new discord.EmbedBuilder()
.setColor(config.main_color)
.setTitle(l.messages.newTranscriptTitle)
.setAuthor({name:interaction.user.username,iconURL:interaction.user.displayAvatarURL({format:"png"})})
@@ -209,7 +235,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
}
if (config.system.enable_DM_transcript){
const transcriptEmbed = new discord.MessageEmbed()
const transcriptEmbed = new discord.EmbedBuilder()
.setColor(config.main_color)
.setTitle(l.messages.newTranscriptTitle)
.setDescription(l.messages.newTranscriptDescription)
@@ -221,6 +247,14 @@ exports.closeTicket = async (interaction,prefix,mode) => {
})
}
}
if (deleteRequired){
const timer = () => {return new Promise((resolve,reject) => {
setTimeout(() => {resolve(true)},7000)
})}
await timer()
await interaction.channel.delete()
}
}
exports.runThis = () => {
+5 -5
View File
@@ -8,7 +8,7 @@ const l = bot.language
/**
*
* @param {String} id the id from an open-ticket embed
* @returns {{embed:discord.MessageEmbed,componentRows:discord.MessageActionRow[]}} discord embed
* @returns {{embed:discord.EmbedBuilder,componentRows:discord.MessageActionRow[]}} discord embed
*/
@@ -17,7 +17,7 @@ exports.createEmbed = (id) => {
//-----------------------------------
//general importing
const data = require("./utils/getTicketMessages").getTicketMessage(id)
/**@type {discord.MessageButton[]}*/
/**@type {discord.ButtonBuilder[]}*/
var buttons = []
/**@type {getButton.rawButtonData[]} */
var buttonData = []
@@ -32,7 +32,7 @@ exports.createEmbed = (id) => {
//-----------------------------------
//create the embed
const embed = new discord.MessageEmbed()
const embed = new discord.EmbedBuilder()
.setColor(data.color)
.setTitle(data.name)
if (data.enableFooter) embed.setFooter({text:data.footer})
@@ -70,7 +70,7 @@ exports.createEmbed = (id) => {
for (let i = AmountOfRows; i > 0; i--){
componentRows.push(new discord.MessageActionRow())
componentRows.push(new discord.ActionRowBuilder())
}
buttons.forEach((button,index) => {
@@ -86,7 +86,7 @@ exports.createEmbed = (id) => {
//return everything
/**
* @type {{embed:discord.MessageEmbed,componentRows:discord.MessageActionRow[]}}
* @type {{embed:discord.EmbedBuilder,componentRows:discord.MessageActionRow[]}}
*/
const returnedData = {embed:embed,componentRows:componentRows}
return returnedData
Regular → Executable
+65 -39
View File
@@ -9,40 +9,43 @@ const getconfigoptions = require("./getoptions")
const storage = bot.storage
module.exports = () => {
var closeButton = new discord.MessageActionRow()
var closeButton = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicket")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.close)
.setEmoji("🔒")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket")
.setDisabled(false)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
//ticket button click / create ticket
client.on("interactionCreate",(interaction) => {
if (interaction.isCommand() && (interaction.commandName == "new" || interaction.commandName == "ticket")){
if (interaction.isChatInputCommand() && (interaction.commandName == "new" || interaction.commandName == "ticket")){
var customId = "newT"+interaction.options.getString("type")
}else if (interaction.isButton()){
var customId = interaction.customId
}else return
if (interaction.customId.startsWith("newT")){
const optionid = interaction.customId.split("newT")[1]
if (!optionid){
interaction.reply({embeds:[bot.errorLog.serverError(l.errors.ticketDoesntExist)]})
return
if (interaction.isButton()){
if (interaction.customId.startsWith("newT")){
const optionid = interaction.customId.split("newT")[1]
if (!optionid){
interaction.reply({embeds:[bot.errorLog.serverError(l.errors.ticketDoesntExist)]})
return
}
}
}
if (getconfigoptions.getTicketValues("id").includes(customId)){
//ticketoptions from config
@@ -52,7 +55,7 @@ module.exports = () => {
if (interaction.isButton()){
interaction.deferUpdate()
}else if (interaction.isCommand()){
}else if (interaction.isChatInputCommand()){
interaction.reply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)]})
}
@@ -66,7 +69,6 @@ module.exports = () => {
catch{log("system","can't send DM to member, member doesn't allow dm's")}
//update storage
storage.set("ticketStorage",interaction.member.id,Number(storage.get("ticketStorage",interaction.member.id))+1)
var ticketNumber = interaction.member.user.username
@@ -83,17 +85,19 @@ module.exports = () => {
}
var permissionsArray = []
const pfb = discord.PermissionFlagsBits
const guild = client.guilds.cache.find(g => g.id == interaction.guild.id)
//set everyone allowed
if (config.system['has@everyoneaccess']){
var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
var everyoneDenyPerms = []
}else{
var everyoneAllowPerms = []
var everyoneDenyPerms = ["VIEW_CHANNEL"]
var everyoneDenyPerms = [pfb.ViewChannel]
}
permissionsArray.push({
id:interaction.guild.id,
id:interaction.guild.roles.everyone,
type:"role",
allow:everyoneAllowPerms,
deny:everyoneDenyPerms
@@ -101,18 +105,25 @@ module.exports = () => {
//add the user that created the ticket
permissionsArray.push({
id:interaction.member.id,
id:interaction.member.user,
type:"member",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
})
//add main adminroles
config.main_adminroles.forEach((role) => {
permissionsArray.push({
id:role,
type:"role",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
})
config.main_adminroles.forEach((role,index) => {
try {
const adminrole = guild.roles.cache.find(r => r.id == role)
if (!adminrole) return
permissionsArray.push({
id:adminrole,
type:"role",
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
})
}catch{
log("system","invalid role! At 'config.json => main_adminroles:"+index)
}
})
//add ticket adminroles
@@ -120,29 +131,42 @@ module.exports = () => {
* @type {String[]}
*/
const ticketadmin = currentTicketOptions.adminroles
ticketadmin.forEach((role) => {
ticketadmin.forEach((role,index) => {
if (!config.main_adminroles.includes(role)){
permissionsArray.push({
id:role,
type:"role",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
})
try {
const adminrole = guild.roles.cache.find(r => r.id == role)
if (!adminrole) return
permissionsArray.push({
id:adminrole,
type:"role",
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
})
}catch{
log("system","invalid role! At 'config.json => options/ticket/...:"+index)
}
}
})
//add member role
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"]
})
try {
const userrole = guild.roles.cache.find(r => r.id == config.system.member_role)
if (!userrole) return
permissionsArray.push({
id:userrole,
type:"role",
deny:[pfb.ViewChannel]
})
}catch{
log("system","invalid role! At 'config.json => system/member_role")
}
}
//create the channel
interaction.guild.channels.create(ticketName,{
type:"GUILD_TEXT",
interaction.guild.channels.create({
name:ticketName,
type:discord.ChannelType.GuildText,
parent:newTicketCategory,
reason:"A new ticket is created",
permissionOverwrites:permissionsArray
@@ -150,10 +174,11 @@ module.exports = () => {
}).then((ticketChannel) => {
storage.set("userTicketStorage",ticketChannel.id,interaction.member.id)
var ticketEmbed = new discord.MessageEmbed()
var ticketEmbed = new discord.EmbedBuilder()
.setAuthor({name:interaction.user.id})
.setColor(config.main_color)
.setTitle(currentTicketOptions.name)
.setFooter({text:"Ticket Type: "+currentTicketOptions.id})
if (currentTicketOptions.ticketmessage.length > 0) ticketEmbed.setDescription(currentTicketOptions.ticketmessage)
ticketChannel.send({
@@ -166,6 +191,7 @@ module.exports = () => {
})
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{
try {
Regular → Executable
+79 -35
View File
@@ -7,88 +7,88 @@ const l = bot.language
const storage = bot.storage
module.exports = () => {
var closeRowNormal = new discord.MessageActionRow()
var closeRowNormal = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("closeTicket")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.close)
.setEmoji("🔒")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket")
.setDisabled(false)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
var closeRowClosed = new discord.MessageActionRow()
var closeRowClosed = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("deleteTicket1")
.setDisabled(false)
.setStyle("DANGER")
.setStyle(discord.ButtonStyle.Danger)
.setLabel(l.buttons.delete)
.setEmoji("✖️")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("sendTranscript")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setLabel(l.buttons.sendTranscript)
.setEmoji("📄")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicket")
.setDisabled(false)
.setStyle("SUCCESS")
.setStyle(discord.ButtonStyle.Success)
.setLabel(l.buttons.reopen)
.setEmoji("✔")
)
var reopenBar = new discord.MessageActionRow()
var reopenBar = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicketTrue")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("✅")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicketFalse")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
)
var reopenBar1 = new discord.MessageActionRow()
var reopenBar1 = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicketTrue1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("✅")
)
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicketFalse1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("❌")
)
var reopenCommandBar = new discord.MessageActionRow()
var reopenCommandBar = new discord.ActionRowBuilder()
.addComponents(
new discord.MessageButton()
new discord.ButtonBuilder()
.setCustomId("reopenTicket1")
.setDisabled(false)
.setStyle("SECONDARY")
.setStyle(discord.ButtonStyle.Secondary)
.setEmoji("🔓")
)
@@ -111,13 +111,15 @@ module.exports = () => {
})
const pfb = discord.PermissionFlagsBits
client.on("interactionCreate",(interaction) => {
if (!interaction.isButton()) return
if (interaction.customId != "reopenTicketTrue") return
interaction.deferUpdate()
const embed = new discord.MessageEmbed()
const embed = new discord.EmbedBuilder()
.setColor(config.main_color)
.setTitle(":unlock: "+l.messages.reopenTitle+" :unlock:")
.setDescription(l.messages.reopenDescription)
@@ -131,14 +133,14 @@ module.exports = () => {
//set everyone allowed
if (config.system['has@everyoneaccess']){
var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
var everyoneDenyPerms = []
}else{
var everyoneAllowPerms = []
var everyoneDenyPerms = ["VIEW_CHANNEL"]
var everyoneDenyPerms = [pfb.ViewChannel]
}
permissionsArray.push({
id:interaction.guild.id,
id:interaction.guild.roles.everyone,
type:"role",
allow:everyoneAllowPerms,
deny:everyoneDenyPerms
@@ -149,7 +151,7 @@ module.exports = () => {
permissionsArray.push({
id:p.id,
type:"member",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"],
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
deny:[]
})
}
@@ -184,7 +186,7 @@ module.exports = () => {
interaction.deferUpdate()
const embed = new discord.MessageEmbed()
const embed = new discord.EmbedBuilder()
.setColor(config.main_color)
.setTitle(":unlock: "+l.messages.reopenTitle+" :unlock:")
.setDescription(l.messages.reopenDescription)
@@ -198,14 +200,14 @@ module.exports = () => {
//set everyone allowed
if (config.system['has@everyoneaccess']){
var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
var everyoneDenyPerms = []
}else{
var everyoneAllowPerms = []
var everyoneDenyPerms = ["VIEW_CHANNEL"]
var everyoneDenyPerms = [pfb.ViewChannel]
}
permissionsArray.push({
id:interaction.guild.id,
id:interaction.guild.roles.everyone,
type:"role",
allow:everyoneAllowPerms,
deny:everyoneDenyPerms
@@ -216,7 +218,7 @@ module.exports = () => {
permissionsArray.push({
id:p.id,
type:"member",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"],
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
deny:[]
})
}
@@ -242,4 +244,46 @@ module.exports = () => {
catch{log("system","can't send DM to member, member doesn't allow dm's")}
})
})
//DASHBOARD (comming soon!)
/**
*
* @param {discord.Guild} guild
* @param {discord.TextBasedChannel} channel
* @param {discord.User} user
* @returns
*/
const reopenTicket = (guild,channel,user) => {
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.tag}])
var permissionsArray = []
//set everyone allowed
if (config.system['has@everyoneaccess']){
var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
var everyoneDenyPerms = []
}else{
var everyoneAllowPerms = []
var everyoneDenyPerms = [pfb.ViewChannel]
}
permissionsArray.push({
id:guild.roles.everyone,
type:"role",
allow:everyoneAllowPerms,
deny:everyoneDenyPerms
})
channel.permissionOverwrites.cache.forEach((p) => {
if (p.type == "member"){
permissionsArray.push({
id:p.id,
type:"member",
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
deny:[]
})
}
})
channel.permissionOverwrites.set(permissionsArray)
}
}
Regular → Executable
+2 -2
View File
@@ -39,7 +39,7 @@ const getUserInfo = (channel) => {
*
* @param {discord.Message[]} messagecollection
* @param {discord.Channel} channel
* @returns new `discord.messageAttachment`
* @returns new `discord.attachmentBuilder`
*/
exports.createTranscript = async (messagecollection,channel) => {
@@ -64,7 +64,7 @@ exports.createTranscript = async (messagecollection,channel) => {
if (filearray.length < 2) filearray.push("transcript is empty")
const filestring = filearray.join("\n")
const filebuff = Buffer.from(filestring,"utf-8")
return new discord.MessageAttachment(filebuff,"transcript_"+ticketuserdata.ticketname+".txt")
return new discord.AttachmentBuilder(filebuff,{name:"transcript_"+ticketuserdata.ticketname+".txt",description:"An Open Ticket transcript"})
}catch(err){
console.log("[error] "+err)
return false
+12 -11
View File
@@ -6,19 +6,20 @@ const l = bot.language
/**@returns {"DANGER"|"SUCCESS"|"PRIMARY"|"SECONDARY"} */
const getColor = (color) => {
const b = discord.ButtonStyle
if (color.toLowerCase() == "red"){
return "DANGER"
return b.Danger
}else if (color.toLowerCase() == "green"){
return "SUCCESS"
return b.Success
}else if (color.toLowerCase() == "blue" || color.toLowerCase() == "blurple"){
return "PRIMARY"
return b.Primary
}else if (color.toLowerCase() == "black" || color.toLowerCase() == "gray" || color.toLowerCase() == "grey"){
return "SECONDARY"
return b.Secondary
}else if (color == "DANGER" || color == "SECONDARY" || color == "SUCCESS" || color == "PRIMARY"){
return color
}else if (color.toLowerCase() == "none" || color.toLowerCase() == "false" || color.toLowerCase() == ""){
return "SECONDARY"
}else return "SECONDARY"
return b.Secondary
}else return b.Secondary
}
const getOption = (id) => {
@@ -29,13 +30,13 @@ exports.getOption = getOption
/**
*
* @param {String} id
* @returns {discord.MessageButton|false}
* @returns {discord.ButtonBuilder|false}
*/
exports.getButton = (id) => {
const option = getOption(id)
if (!option) return false
if (option.type == "ticket"){
var button = new discord.MessageButton()
var button = new discord.ButtonBuilder()
.setCustomId("newT"+option.id)
.setDisabled(false)
.setStyle(getColor(option.color))
@@ -45,9 +46,9 @@ exports.getButton = (id) => {
if (!option.label && !option.icon){button.setLabel("no label or emoji")}
}else if (option.type == "website"){
var button = new discord.MessageButton()
var button = new discord.ButtonBuilder()
.setDisabled(false)
.setStyle("LINK")
.setStyle(discord.ButtonStyle.Link)
.setURL(option.url)
if (option.label){button.setLabel(option.label)}
@@ -55,7 +56,7 @@ exports.getButton = (id) => {
if (!option.label && !option.icon){button.setLabel("no label or emoji")}
}else if (option.type == "role"){
var button = new discord.MessageButton()
var button = new discord.ButtonBuilder()
.setCustomId("newR"+option.id)
.setDisabled(false)
.setStyle(getColor(option.color))
+51 -4
View File
@@ -12,8 +12,18 @@
const discord = require('discord.js')
const fs = require('fs')
const intents = discord.Intents
const client = new discord.Client({intents:[intents.FLAGS.GUILDS,intents.FLAGS.GUILD_MESSAGES,intents.FLAGS.GUILD_MEMBERS],partials:["CHANNEL"]})
const {GatewayIntentBits,Partials} = discord
const client = new discord.Client({
intents:[
GatewayIntentBits.DirectMessages,
GatewayIntentBits.GuildInvites,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.Guilds,
GatewayIntentBits.MessageContent
],
partials:[Partials.Channel,Partials.Message]
})
exports.client = client
client.setMaxListeners(30)
@@ -42,15 +52,50 @@ exports.errorLog = require("./core/errorLogSystem")
const log = this.errorLog.log
client.on('ready',async () => {
var statusSet = false
const setStatus = (type,text) => {
if (statusSet == true) return
const getTypeEnum = (text) => {
if (text.toLowerCase() == "playing") return discord.ActivityType.Playing
else if (text.toLowerCase() == "listening") return discord.ActivityType.Listening
else if (text.toLowerCase() == "watching") return discord.ActivityType.Watching
else return discord.ActivityType.Listening
}
client.user.setActivity(text,{type:getTypeEnum(type)})
statusSet = true
log("system","loaded status",[{key:"type",value:type},{key:"text",value:text}])
}
const chalk = await (await import("chalk")).default
if (!process.argv[2]){
console.log(chalk.red("WELCOME TO OPEN TICKET!"))
log("info","open ticket ready",[{key:"version",value:require("./package.json").version},{key:"language",value:config.languagefile}])
console.log(chalk.blue("\n\nlogs:")+"\n============")
if (config.status.enabled){
setStatus(config.status.type,config.status.text)
}
log("system","bot logged in!")
await client.guilds.cache.find((g) => g.id == config.server_id).members.fetch()
return
}
if (process.argv[2] == "d"){
if (config.status.enabled){
setStatus(config.status.type,config.status.text)
}
}
if (!process.argv[2].startsWith("slash")){
console.log(chalk.red("WELCOME TO OPEN TICKET!"))
log("info","open ticket ready",[{key:"version",value:require("./package.json").version},{key:"language",value:config.languagefile}])
console.log(chalk.blue("\n\nlogs:")+"\n============")
if (config.status.enabled){
client.user.setActivity(config.status.text,{type:config.status.type})
setStatus(config.status.type,config.status.text)
}
log("system","bot logged in!")
@@ -78,7 +123,9 @@ if (!isDev){
require("./core/checker").checker()
}
if (process.argv[2] && !process.argv[2].startsWith("slash")){
if (process.argv[2] && process.argv[2].startsWith("slash")){
//do nothing
}else{
var storage = require('./core/dynamicdatabase/storage')
exports.storage = storage
+80
View File
@@ -0,0 +1,80 @@
{
"errors":{
"missingArgsTitle":"حجج باطلة",
"missingArgsDescription":"حجة مفقودة",
"noPermsTitle":"ليس لديك إذن",
"noPermsDescription":"ليس لديك إذن لاستخدام هذا\nأنت بحاجة إلى إذن 'ADMINISTRATOR' أو أن تكون في قائمة الأدوار المسموح بها!",
"chooseFromListTitle":"بطاقة التعريف غير صالحة",
"chooseFromListDescription":"اختر أحد المعرفات أدناه:",
"boterror":"مشكلة في الروبوت",
"notInTicketTitle":"أنت لست في تذكرة!",
"notInTicketDescription":"هذا الأمر لا يعمل خارج التذاكر!",
"ticketDoesntExist":"هذه التذكرة لم تعد موجودة!",
"roleDoesntExist":"هذا الدور لم يعد موجودًا!",
"anotherOption":"هذا الخيار ليس تذكرة بل نوع آخر!",
"maxAmountTitle":"بلغ الحد الأقصى!",
"maxAmountDescription":"لقد وصلت إلى الحد الأقصى لعدد التذاكر المسموح بها!\nلذلك لا يمكنك إنشاء واحدة جديدة!",
"somethingWentWrong":"**هناك خطأ ما!**\nالرجاء المحاولة مرة أخرى!",
"somethingWentWrongTranscript":"**حدث خطأ ما أثناء كتابة النص!**\nالرجاء المحاولة مرة أخرى!"
},
"commands":{
"userAddedTitle":"تمت إضافة المستخدم!",
"userAddedDescription":"{0} يضاف إلى هذه التذكرة!",
"userRemovedTitle":"تمت إزالة المستخدم!",
"userRemovedDescription":"{0} تمت إزالته من هذه التذكرة!",
"renameTitle":"تم تغيير الاسم!",
"renameWarning":"تحذير: يمكنك فقط تغيير اسم القناة مرتين في الدقيقة!\n(هذا يرجع إلى حدود معدل الخلاف)",
"closeTitle":"أغلق هذه التذكرة!",
"closeDescription":"يمكنك إغلاق هذه التذكرة بالضغط على الزر أدناه!",
"deleteTitle":"احذف هذه التذكرة!",
"deleteDescription":"يمكنك حذف هذه التذكرة بالضغط على الزر أدناه!",
"reopenTitle":"أعد فتح هذه التذكرة!",
"reopenDescription":"يمكنك إعادة فتح هذه التذكرة بالضغط على الزر أدناه!",
"ticketWarning":"التضمين في الرسالة أدناه!",
"maxTicketWarning":"**تحذير:** _يمكنك فقط إنشاء ملفات {0} تذكرة في كل مرة!_"
},
"helpMenu":{
"title":"قائمة التعليمات:",
"header1":"**اذهب إلى {0} لإنشاء تذكرة!**\n\n",
"header2":"**قم بتشغيل الأمر `/new` أو `/ticket` لإنشاء تذكرة!**\n\n",
"msgCmd":"تفرخ تضمين مع الأزرار. (المسؤولون فقط)",
"renameCmd":"إعادة تسمية تذكرة. (بدون مسافات)",
"closeCmd":"أغلق التذكرة.",
"deleteCmd":"حذف التذكرة.",
"addCmd":"أضف مستخدمًا إلى التذكرة.",
"removeCmd":"إزالة مستخدم من التذكرة.",
"reopenCmd":"أعد فتح التذكرة بعد إغلاقه."
},
"buttons":{
"close":"إغلاق التذكرة",
"delete":"حذف التذكرة",
"reopen":"إعادة فتح التذكرة",
"sendTranscript":"إرسال ملف النص"
},
"messages":{
"reopenTitle":"أعيد فتح هذه التذكرة!",
"reopenDescription":"لا تتردد في التحدث مرة أخرى!",
"closedTitle":"أغلقت هذه التذكرة!",
"closedDescription":"يمكن للمسؤولين فقط التحدث في هذه التذكرة الآن!\n\n*انقر فوق الزر أدناه لحذف هذه التذكرة أو إعادة فتحها!*",
"createdTitle":"تم إنشاء التذكرة!",
"createdDescription":"تم إنشاء تذكرتك ، يمكنك اكتشافها عن طريق ping",
"newTicketDmTitle":"تذكرة جديدة!",
"closedTicketDmTitle":"تم إغلاق التذكرة!",
"deletedTicketDmTitle":"تم حذف التذكرة!",
"closedTicketDmDescription":"تم إغلاق تذكرتك!",
"deletedTicketDmDescription":"تم حذف تذكرتك!",
"reopenTicketDmTitle":"أعيد فتح التذكرة!",
"reopenTicketDmDescription":"تم إعادة فتح تذكرتك!",
"newTranscriptTitle":"نسخة جديدة هنا!",
"newTranscriptDescription":"يمكنك العثور على النص في الملف النصي أعلاه!",
"hereIsTheTranscript":"هذا هو النص:",
"chooseCategory":"اختر فئة:",
"gettingdeleted":"...يتم حذف التذكرة"
}
}
+5 -2
View File
@@ -14,7 +14,7 @@
"anotherOption":"This option is not a ticket but another type!",
"maxAmountTitle":"Max amount reached!",
"maxAmountDescription":"You reached the maximum number of tickets allowed!\nSo you can't create a new one!",
"somethingWentWrong":"Something went wrong!**\nPlease try again another time!",
"somethingWentWrong":"**Something went wrong!**\nPlease try again another time!",
"somethingWentWrongTranscript":"Something went wrong while making the transcript!**\nPlease try again another time!"
},
"commands":{
@@ -68,10 +68,13 @@
"deletedTicketDmTitle":"Ticket Deleted!",
"closedTicketDmDescription":"Your ticket is closed!",
"deletedTicketDmDescription":"Your ticket is deleted!",
"reopenTicketDmTitle":"Ticket Re-opened!",
"reopenTicketDmDescription":"Your ticket is re-opened!",
"newTranscriptTitle":"A new transcript is here!",
"newTranscriptDescription":"You can find the transcript in the text file above!",
"hereIsTheTranscript":"Here is the transcript:",
"chooseCategory":"choose a category:"
"chooseCategory":"choose a category:",
"gettingdeleted":"Ticket is getting deleted..."
}
}
+3 -2
View File
@@ -14,7 +14,7 @@
"anotherOption":"Deze optie is geen ticket maar een ander type!",
"maxAmountTitle":"Max aantal bereikt!",
"maxAmountDescription":"Je hebt het maximum aantal openstaande ticket bereikt!\nDus je kan er geen nieuwe maken!",
"somethingWentWrong":"Iets ging fout!**\nProbeer een andere keer opnieuw!",
"somethingWentWrong":"**Iets ging fout!**\nProbeer een andere keer opnieuw!",
"somethingWentWrongTranscript":"Iets ging fout bij het maken van het transcript!**\nProbeer een andere keer opnieuw!"
},
"commands":{
@@ -74,6 +74,7 @@
"newTranscriptDescription":"Je kan het transcript vinden in het bestand hierboven!",
"hereIsTheTranscript":"Hier is het transcript:",
"chooseCategory":"kies een categorie:"
"chooseCategory":"kies een categorie:",
"gettingdeleted":"Ticket wordt verwijderd..."
}
}
+3 -2
View File
@@ -14,7 +14,7 @@
"anotherOption":"This option is not a ticket but another type!",
"maxAmountTitle":"Max amount reached!",
"maxAmountDescription":"You reached the maximum number of tickets allowed!\nSo you can't create a new one!",
"somethingWentWrong":"Something went wrong!**\nPlease try again another time!",
"somethingWentWrong":"**Something went wrong!**\nPlease try again another time!",
"somethingWentWrongTranscript":"Something went wrong while making the transcript!**\nPlease try again another time!"
},
"commands":{
@@ -74,6 +74,7 @@
"newTranscriptDescription":"You can find the transcript in the text file above!",
"hereIsTheTranscript":"Here is the transcript:",
"chooseCategory":"choose a category:"
"chooseCategory":"choose a category:",
"gettingdeleted":"Ticket is getting deleted..."
}
}
+74
View File
@@ -0,0 +1,74 @@
{
"errors":{
"missingArgsTitle":"Arguments invalides !",
"missingArgsDescription":"Argument manquant",
"noPermsTitle":"Pas de permissions!",
"noPermsDescription":"Vous n'avez pas les bons rôles pour exécuter cette commande !\nVous avez besoin de la permission `ADMINISTRATOR` ou d'être dans la liste des rôles autorisés !",
"chooseFromListTitle":"Invalid ID",
"chooseFromListDescription":"Choisissez l'un des identifiants ci-dessous:",
"boterror":"Bot Error!",
"notInTicketTitle":"Vous n'êtes pas dans un ticket !",
"notInTicketDescription":"Cette commande ne fonctionne pas en dehors des tickets !",
"ticketDoesntExist":"Ce billet n'existe plus !",
"roleDoesntExist":"Ce rôle n'existe plus !",
"anotherOption":"Cette option n'est pas un ticket mais un autre type !",
"maxAmountTitle":"Montant max atteint !",
"maxAmountDescription":"Vous avez atteint le nombre maximum de tickets autorisés !\nVous ne pouvez donc pas en créer un nouveau !",
"somethingWentWrong":"**Une erreur s'est produite !**\nVeuillez réessayer une autre fois !",
"somethingWentWrongTranscript":"Une erreur s'est produite lors de la création de la transcription !**\nVeuillez réessayer une autre fois !"
},
"commands":{
"userAddedTitle":"Utilisateur ajouté !",
"userAddedDescription":"{0} est ajouté à ce billet !",
"userRemovedTitle":"Utilisateur supprimé!",
"userRemovedDescription":"{0} est supprimé de ce ticket!",
"renameTitle":"Le nom est changé !",
"renameWarning":"Attention : vous ne pouvez modifier le nom de la chaîne que 2 fois par minute !\n(ceci est dû aux limites du taux de discorde)",
"closeTitle":"Fermez ce ticket !",
"closeDescription":"Vous pouvez fermer ce ticket en cliquant sur le bouton ci-dessous !",
"deleteTitle":"Supprimez ce billet !",
"deleteDescription":"Vous pouvez supprimer ce ticket en cliquant sur le bouton ci-dessous !",
"reopenTitle":"Ré-ouvrez ce ticket !",
"reopenDescription":"Vous pouvez rouvrir ce ticket en cliquant sur le bouton ci-dessous !",
"ticketWarning":"L'intégration est dans le message ci-dessous !",
"maxTicketWarning":"**Attention :** _Vous ne pouvez créer que {0} billet(s) à la fois !_"
},
"helpMenu":{
"title":"Menu d'aide:",
"header1":"**Allez à {0} pour créer un ticket !**\n\n",
"header2":"**Exécutez la commande `/new` ou `/ticket` pour créer un ticket!**\n\n",
"msgCmd":"Créez une intégration avec des boutons. (administrateurs uniquement)",
"renameCmd":"Renommer un ticket. (sans espaces)",
"closeCmd":"Fermer un ticket.",
"deleteCmd":"Supprimer un billet.",
"addCmd":"Ajouter un utilisateur au ticket.",
"removeCmd":"Supprimer un utilisateur du ticket.",
"reopenCmd":"Re-Open a ticket after it was closed."
},
"buttons":{
"close":"Fermer le ticket",
"delete":"Supprimer le billet",
"reopen":"Billet de réouverture",
"sendTranscript":"Envoyer le fichier de transcription"
},
"messages":{
"reopenTitle":"A rouvert ce ticket!",
"reopenDescription":"N'hésitez pas à reparler!",
"closedTitle":"Fermé ce ticket",
"closedDescription":"Seuls les administrateurs peuvent parler dans ce ticket maintenant !\n\n*Cliquez sur le bouton ci-dessous pour supprimer ou rouvrir ce ticket !*",
"createdTitle":"Ticket créé !",
"createdDescription":"Votre ticket est créé, vous pouvez le détecter par un ping !",
"newTicketDmTitle":"Nouveau ticket!",
"newTranscriptTitle":"Une nouvelle transcription est ici!",
"newTranscriptDescription":"Vous pouvez trouver la transcription dans le fichier texte ci-dessus !",
"hereIsTheTranscript":"Voici la transcription :",
"chooseCategory":"choisissez une catégorie:",
"gettingdeleted":"Le ticket est en cours de suppression..."
}
}
+80
View File
@@ -0,0 +1,80 @@
{
"errors":{
"missingArgsTitle":"Ungültiges Argument!",
"missingArgsDescription":"Fehlendes Argument!",
"noPermsTitle":"Du hast keine Rechte!",
"noPermsDescription":"Sie haben nicht die richtigen Rollen, um diesen Befehl auszuführen!\nSie benötigen die `ADMINISTRATOR` Erlaubnis oder in der Liste der erlaubten Rollen sein!",
"chooseFromListTitle":"Ungültige ID",
"chooseFromListDescription":"Wählen Sie eine der folgenden ID:",
"boterror":"Bot Fehler!",
"notInTicketTitle":"Du bist ein kein Ticket!",
"notInTicketDescription":"Der Befehl funktioniert nicht außerhalb eines Tickets!",
"ticketDoesntExist":"Das Ticket Exisitert nicht mehr!",
"roleDoesntExist":"Die Rolle Exisitiert nicht mehr!",
"anotherOption":"Diese Option ist kein Ticket, sondern eine andere Art!",
"maxAmountTitle":"Das Limit wurde erreicht!",
"maxAmountDescription":"Sie haben die maximal zulässige Anzahl von Tickets erreicht!\nSie können also keine neue erstellen.!",
"somethingWentWrong":"**Etwas ist schief gelaufen!**\nBitte versuchen Sie es ein anderes Mal!",
"somethingWentWrongTranscript":"Bei der Erstellung der Transcript ist etwas schief gelaufen!**\nBitte versuchen Sie es ein anderes Mal!"
},
"commands":{
"userAddedTitle":"User geaddet!",
"userAddedDescription":"{0} wird zu diesem Ticket hinzugefügt!",
"userRemovedTitle":"User entfernt!",
"userRemovedDescription":"{0} wird aus diesem Ticket entfernt!",
"renameTitle":"Der Name wurde geändert!",
"renameWarning":"Achtung: Sie können den Kanalnamen nur 2 Mal pro Minute ändern!\n(dies ist auf die Begrenzung der Diskordrate zurückzuführen)",
"closeTitle":"Dieses Ticket schließen!",
"closeDescription":"Sie können dieses Ticket schließen, indem Sie auf die Schaltfläche unten klicken!",
"deleteTitle":"Löschen Sie dieses Ticket!",
"deleteDescription":"Sie können dieses Ticket löschen, indem Sie auf die Schaltfläche unten klicken!",
"reopenTitle":"Öffne dieses Ticket erneut!",
"reopenDescription":"Sie können dieses Ticket erneut öffnen, indem Sie auf die Schaltfläche unten klicken!",
"ticketWarning":"Die Einbettung befindet sich in der Nachricht unten!",
"maxTicketWarning":"**Warnung:** _Sie können nur {0} ticket(s) erstellen zu einer Zeit!_"
},
"helpMenu":{
"title":"Hilfe Menu:",
"header1":"**Gehe zu {0} um ein Ticket zu erstellen!**\n\n",
"header2":"**Führen Sie den Befehl `/new` oder `/ticket` um ein Ticket zu erstellen!**\n\n",
"msgCmd":"Eine Einbettung mit Schaltflächen erzeugen. (nur admins)",
"renameCmd":"Ein Ticket umbenennen. (keine Leerzeichen)",
"closeCmd":"Schließen Sie ein Ticket.",
"deleteCmd":"Ein Ticket löschen.",
"addCmd":"Fügen Sie dem Ticket einen Benutzer hinzu.",
"removeCmd":"Entfernen eines Benutzers aus dem Ticket.",
"reopenCmd":"Öffnen Sie ein Ticket erneut, nachdem es geschlossen wurde."
},
"buttons":{
"close":"Ticket schließen",
"delete":"Ticket löschen",
"reopen":"Ticket wieder öffnen",
"sendTranscript":"Transcript-Datei senden"
},
"messages":{
"reopenTitle":"Dieses Ticket wiedereröffnet!",
"reopenDescription":"Sie können gerne weiterreden!",
"closedTitle":"Dieses Ticket geschlossen!",
"closedDescription":"Nur Admins können jetzt in diesem Ticket sprechen!\n\n*Klicken Sie auf die Schaltfläche unten, um dieses Ticket zu löschen oder erneut zu öffnen!*",
"createdTitle":"Ticket erstellt!",
"createdDescription":"Ihr Ticket ist erstellt, Sie können es durch einen Ping erkennen!",
"newTicketDmTitle":"Neues Ticket!",
"closedTicketDmTitle":"Ticket schließen!",
"deletedTicketDmTitle":"Ticket löschen!",
"closedTicketDmDescription":"Ihr Ticket ist geschlossen!",
"deletedTicketDmDescription":"Ihr Ticket ist gelöscht!",
"reopenTicketDmTitle":"Ticket neu Eröffnen!",
"reopenTicketDmDescription":"Dein Ticket ist Neu eröffnet!",
"newTranscriptTitle":"Eine neue Transscript finden Sie hier!",
"newTranscriptDescription":"Die Abschrift finden Sie in der obigen Textdatei!",
"hereIsTheTranscript":"Hier ist das Transscript:",
"chooseCategory":"Wähle eine Kategorie:",
"gettingdeleted":"Ticket wird gelöscht..."
}
}
+2 -1
View File
@@ -74,6 +74,7 @@
"newTranscriptDescription":"Poti vedea copia ticket-ului in fisierul .txt de mai sus!",
"hereIsTheTranscript":"Aceasta este copia ticket-ului:",
"chooseCategory":"Alege o categorie:"
"chooseCategory":"Alege o categorie:",
"gettingdeleted":"Ticket-ul se sterge..."
}
}
+80
View File
@@ -0,0 +1,80 @@
{
"errors":{
"missingArgsTitle":"¡Argumentos inválidos!",
"missingArgsDescription":"Argumento faltante.",
"noPermsTitle":"¡Sin permisos!",
"noPermsDescription":"¡No tienes permiso para usar este comando.!\n¡Necesitas el permiso `ADMINISTRATOR` permiso o tener uno de los roles permitidos!",
"chooseFromListTitle":"ID Invalida",
"chooseFromListDescription":"Elije una de las ID de abajo:",
"boterror":"¡Error del bot!",
"notInTicketTitle":"¡No te encuentras en un ticket!",
"notInTicketDescription":"¡Este comando no funciona fuera de los tickets!",
"ticketDoesntExist":"¡Este ticket no existe!",
"roleDoesntExist":"¡Este rol no existe!",
"anotherOption":"¡Esta opción no es un ticket, si no otra cosa!",
"maxAmountTitle":"¡Máxima cantidad alcanzada!",
"maxAmountDescription":"¡Has alcanzado la máxima cantidad de tickets permitida!\n¡Por lo que no puedes crear otro!",
"somethingWentWrong":"**¡Algo salió mal!**\n¡Prueba dentro de un rato!",
"somethingWentWrongTranscript":"**¡Algo salió mal al hacer el transcript!**\n¡Prueba en otro momento!"
},
"commands":{
"userAddedTitle":"¡Usuario agregado!",
"userAddedDescription":"¡{0} fué agregado al ticket!",
"userRemovedTitle":"¡Usuario eliminado!",
"userRemovedDescription":"¡{0} fué eliminado del ticket!",
"renameTitle":"¡El nombre fué cambiado!",
"renameWarning":"Aviso: Solo puedes cambiar el nombre 2 veces por minuto.\n(Esto es por limitaciones de Discord)",
"closeTitle":"¡Cierra el ticket!",
"closeDescription":"¡Puedes cerrar el ticket con el botón de abajo!",
"deleteTitle":"¡Elimina el ticket!",
"deleteDescription":"¡Puedes eliminar el ticket con el botón de abajo!",
"reopenTitle":"¡Re-Abre el ticket!",
"reopenDescription":"¡Puedes re-abrir el ticket con el botón de abajo!",
"ticketWarning":"¡El emblema está en el mensaje de abajo!",
"maxTicketWarning":"**Aviso:** _Solo puedes poseer {0} ticket(s) al mismo tiempo!_"
},
"helpMenu":{
"title":"Menú de ayuda:",
"header1":"**¡Dirígete a {0} para crear un nuevo ticket!**\n\n",
"header2":"**¡Ejecuta el comando `/new` o `/ticket` para crear un ticket!**\n\n",
"msgCmd":"Generar un embed con botones. (Solo admins)",
"renameCmd":"Renombrar un ticket. (Sin espacios)",
"closeCmd":"Cerrar un ticket.",
"deleteCmd":"Eliminar un ticket.",
"addCmd":"Agregar un usuario al ticket.",
"removeCmd":"Eliminar un usuario del ticket.",
"reopenCmd":"Re-Abre un ticket después de que este se vea cerrado."
},
"buttons":{
"close":"Cerrar ticket.",
"delete":"Eliminar ticket",
"reopen":"Re-Abrir ticket",
"sendTranscript":"Obtener transcript."
},
"messages":{
"reopenTitle":"¡Ticket Re-Abierto!",
"reopenDescription":"¡Siéntete libre de hablar de nuevo!",
"closedTitle":"¡Ticket cerrado!",
"closedDescription":"¡Solo admins pueden hablar ahora en este ticket!\n\n*¡Presiona en el botón de abajo para eliminar o re-abrir el ticket!*",
"createdTitle":"¡Ticket creado!",
"createdDescription":"¡Ticket creado, también te he mencionado en él!",
"newTicketDmTitle":"¡Nuevo ticket!",
"closedTicketDmTitle":"¡Ticket cerrado!",
"deletedTicketDmTitle":"¡Ticket eliminado!",
"closedTicketDmDescription":"¡Tu ticket fué cerrado!",
"deletedTicketDmDescription":"¡Tu ticket fué eliminado!",
"reopenTicketDmTitle":"¡Ticket re-abierto!",
"reopenTicketDmDescription":"¡Tu ticket se vió abierto de nuevo!",
"newTranscriptTitle":"¡Un nuevo transcript está aquí!",
"newTranscriptDescription":"¡Puedes encontrar el transcript en el archivo de texto que se muestra arriba!",
"hereIsTheTranscript":"Aquí está el transcript:",
"chooseCategory":"elije una categoría:",
"gettingdeleted":"El ticket se está viendo eliminado..."
}
}
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

+3 -3
View File
@@ -1,11 +1,11 @@
{
"name": "open-ticket",
"version": "2.1.0",
"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.",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"test": "node index.js d",
"slashEnable": "node index.js slash enable",
"slashDisable": "node index.js slash disable",
"cleardata": "node ./core/dynamicdatabase/cleardata.js"
@@ -14,7 +14,7 @@
"license": "ISC",
"dependencies": {
"chalk": "^5.0.1",
"discord.js": "^13.8.0",
"discord.js": "^14.0.2",
"express": "^4.17.1",
"node": "^16.10.0",
"node-localstorage": "^2.2.1"
BIN
View File
Binary file not shown.