Athena Bot
  • šŸ”—- LINKS -
    • Purchase here
    • Support Server
  • šŸ“–- CHANGELOG -
    • Changes / Requests
  • ā„¹ļø- ABOUT ATHENA -
    • Thanks for Purchasing!
    • Athena's Features
    • Athena's Addons
  • 🌟- Getting Started -
    • Basic Setup Guide
      • šŸ‘Øā€šŸ’»Discord Developer Portal
      • 🌿MongoDB Tutorial
    • Frequently Asked Questions
    • Common Issues
  • šŸ”Œ- Plugins -
    • BYOP
    • General / Core
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Management
      • šŸ”§Commands
      • šŸ“‚Configuration Template
      • šŸŽ“Management Master Tutorial
    • Music
      • šŸ”§Commands
      • šŸ“‚Configuration Template
      • šŸŽ“Music Master Tutorial
    • Join to Create
      • šŸ”§Commands
      • šŸ“‚Configuration Template
      • šŸŽ“Join to Create Master Tutorial
    • Giveaways
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Moderation
      • šŸ”§Commands
      • šŸ“‚Configuration Template
      • šŸŽ“Moderation Master Tutorial
    • Tickets
      • šŸ”§Commands
      • šŸ“‚Configuration Template
      • šŸŽ“Tickets Master Tutorial
      • šŸŽ“Applications Master Tutorial
    • Security
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Fun
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Social
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Tebex
      • šŸ”§Commands
      • šŸ“‚Configuration Template
  • šŸ’³- PREMIUM ADDONS -
    • Source Code
    • Watermark
    • Setup & Install
    • Minecraft
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Economy
      • šŸ”§Commands
      • šŸ“‚Configuration Template
    • Lavalink
      • šŸŽ“Lavalink Master Tutorial
    • Translation
      • šŸ“‚Configuration Template
    • Command Maker
      • šŸ“‚Configuration Template
Powered by GitBook
On this page
  • Welcome!
  • Feedback is welcome!
  • Basic Configuration Tutorial
  • "send_transcript_to_ticket_creator"
  • "save_ticket_transcript_on_disk"
  • "update_permissions_on_move"
  • "ticket_channel_name"
  • "ticket_transcript_message_limit"
  • "close_ticket_after_creator_left"
  • "ping_role_at_permission_update"
  • "limit_tickets_per_category"
  • "enable_web_server"
  • "send_transcript_to_claimed_user"
  • "send_plain_ticket_create_message"
  • Ticket Configuration Setup
  • Create a Category
  • Add a Description
  • Add an Emoji
  • Send It To a Specific Category
  • Send a Placeholder Message
  • Set the Permission Level (What?)
  • Setting the Ticket Question Set ID
  • Setting Role Mention IDs
  • Checkpoint!
  • Permissions Level Setup
  • What's this for?
  • How do I configure them?
  • Ticket Question Set Setup
  • What's this for?
  • What are the limitations?
  • How do I configure them?
  • Special Role Ticket Handling
  • What's this for?
  • How do I configure it?
  • Out of Service Hours
  • What's this?
  • How do I configure it?
  • Ticket Buttons
  • What's this for?
  • How do I configure this?
  • Congrats!
  1. - Plugins -
  2. Tickets

Tickets Master Tutorial

A heavy breakdown on the Tickets Plugin (lots of scrolling here, check the sidebar!)

PreviousConfiguration TemplateNextApplications Master Tutorial

Last updated 8 months ago

This configuration takes place in the /configuration/tickets.json file!

You might need Discord Developer Mode on to get ID's and such!

Key words:

Boolean: A true or false switch

String: An assortment of "text" or "numbers" like this

Numbers: Just numbers!

Array: Strings or Numbers["in", "a", "pattern", "like", "this"]

Welcome!

Here we'll go over the Ticket Plugin setup in its entirety, with brief (or not so brief!) explanations and descriptions on things.

I made sure to separate everything the best possible so that the sidebar has a quick reference to what you're looking for.

Feedback is welcome!

If you think something is missing, or needs a bit more work, then make sure to leave us a note at


Basic Configuration Tutorial

"send_transcript_to_ticket_creator"

Whether the ticket creator should receive a copy of the ticket transcript (Boolean)

Default: true,

A simple Boolean statement, this allows you to choose whether the person that opened the ticket gets a ticket transcript, some people like having it on, others don't, it's entirely up to choice.

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, the tickets' transcripts don't get sent to whoever created them.

On true, the tickets' transcripts do get sent to their creators.


"save_ticket_transcript_on_disk"

Whether ticket transcripts should be saved on disk - C:%root%/logs/transcripts/ - (Boolean)

Default: true,

A simple Boolean statement, this allows you to choose whether ticket transcripts are saved locally on the device you're running the bot on. Another optional thing to have enabled, but it may help you save on storage space if you receive a lot of tickets in your server with lots of pictures attached!

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, the tickets never store on disk, which can lead to them getting lost over time.

On true, the tickets create a file on disk, storing the ticket safely for you.


"update_permissions_on_move"

Whether permissions should be synced with the new ticket category once moved (/tmove) (Boolean)

Default: true,

A simple Boolean statement, this allows the tickets when being moved from one category to another, to have new updated permissions for the category it's being moved to. Let's say you have a General Support ticket open, but the user wants to change it into a Bug Report ticket, this will allow your ticket to go from regular staff being able to view it, to the bot developers being able to view it instead, for example.

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, the tickets retain permissions they had prior to being moved.

On true, the tickets get new permissions updated to whatever the new category is they're moved to.


"ticket_channel_name"

Ticket channel name, available placeholders: %random%, %creator%, %created_total% (String)

Default: "ticket-%random%",

A String statement, this allows your tickets' channels to have a specific way they get named.

You theoretically could leave it blank, but we don't recommend it. It could break things.

Examples:

"%creator%-%random%" creates a channel named Wumpus-24513 (their username and a random assortment of numbers)

"%creator%-%created_total%" creates a channel named Wumpus-2 (if that user has created two tickets)


"ticket_transcript_message_limit"

Max messages the transcript will include (Number)

Default: 200,

A Number statement, this allows you to choose how many messages you want your transcript to be made for. Highly recommended you set this to something reasonable, like 200-300 messages, probably a bit more if you have the resources and storage space to spare, or if you really wanna keep all the messages possible. Keep in mind on a server with a lot of tickets, if you close a lot of them at once, you're prone to hit a rate limit imposed by Discord and may cause a preventable error otherwise.

You theoretically could leave it blank, but we don't recommend it. It could break things.

Examples:

ticket_transcript_message_limit:200, (would impose a limit of 200 messages per transcript)


"close_ticket_after_creator_left"

Highly recommended to leave enabled!

Whether tickets should be automatically closed when the ticket creator leaves the discord (Boolean)

Default: true,

A Boolean statement, this allows you to have Athena automatically close tickets if the user leaves the Discord. It helps you by cleaning up tickets that the Ticket OP would not be available to respond to anymore!

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, the tickets stay open even if the Ticket OP left.

On true, the tickets automatically close when the Ticket OP leaves the server.


"ping_role_at_permission_update"

Whether whenever a ticket's permission level is being updated the effected role should be pinged (Boolean)

Default: false,

A Boolean statement, this causes Athena to automatically ping the appropriate roles when changing permission levels. For example, if you have helpers/mods working on a ticket, and the ticket gets transferred to a different category, eg. Store or Bug Reports, the ticket system will ping the roles set up for the Store or Bug Reports category to alert the different staff accordingly.

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, the tickets does not ping any assigned roles when the ticket changes levels/categories.

On true, the tickets automatically pings the assigned roles when the ticket changes levels/categories.


"limit_tickets_per_category"

If set to true a user can create one ticket per category, if set to false the user can create one ticket at all - this excludes applications (Boolean)

Default: false,

A Boolean statement, this allows you control how much tickets any one person can make per category. This can help control ticket spam to some degree.

It has to be to be either true or false, so there's no leaving it blank!

Usage:

On false, the user can only create one ticket altogether excluding staff applications.

On true, the user can create one ticket per category, giving them a bit more flexibility.


"enable_web_server"

If set to true the ticket transcripts are uploaded to your private web server. This will replace the ticket transcript files and replace them with a link (Boolean)

Default: true,

A Boolean statement, this causes Athena to upload the ticket transcripts to a locally held web server, as well cause the ticket transcripts to not be saved as files, but instead as links.

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, Athena creates ticket files locally instead of links, which do over time, take up space.

On true, Athena creates links instead of ticket files, allowing a dynamic ticket experience.


"send_transcript_to_claimed_user"

If set to true the staff member who claimed a ticket will receive a copy of the ticket transcript once the ticket is being closed (Boolean)

Default: false,

A Boolean statement, this allows the user that claims the ticket to receive a copy of the ticket transcript. Let's say you have a staff hierarchy in place that has staff members claiming tickets for themselves, this allows the participating staff member to get a copy of the ticket for themselves for future reference automatically.

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, the ticket claimer doesn't receive a ticket transcript, and instead get handled as normal.

On true, the ticket claimer receives a ticket transcript automatically.


"send_plain_ticket_create_message"

If set to true the ticket create message will not be generated as embed but rather as a plain message (Boolean)

Default: false,

A Boolean statement, this causes Athena to send a simple message, rather than an embed message.

It has to be either true or false, so there's no leaving it blank!

Usage:

On false, Athena generates the ticket creation message as plain text, removing the embed aspect.

On true, Athena generates the ticket creation message as an embed, making it look nicer.


Ticket Configuration Setup

Create a Category

First of all, we wanna set a Ticket category name! This can be anything you want it to be, since it's a String.

Category Name Config Example
// Ticket category name (String)
category: "Example Category",

Add a Description

Then we add a description so people know what the category is for.

Ticket Category Description Config Example
// Ticket category description (String)
description: "Press here to make a ticket!",

Add an Emoji

Emoji Config Example
// Custom or default Emoji (String)
// * Default: https://emojidb.org/discord-copy-and-paste-emojis - 
// * Custom: https://support.discord.com/hc/en-us/community/posts/360038896012-Can-Get-Emoji-ID-When-You-re-On-Chrome
emoji: "ā“",

Send It To a Specific Category

So we have a category set up, but it's not going anywhere without a category ID. So we set that here! To get a category ID, you right click on the category you want the tickets to go to.

Category ID Config Example
// Discord category ID (String)
// All ticket channels will be generated under this category.
category_id: "CATEGORY ID HERE",

Send a Placeholder Message

Alright, that's done, now we got new tickets to be generated where we want them to, now what? We gotta make the bot respond to the ticket being opened in some way! Here you can edit the message to your hearts' content. You can even make the bot say their name and the tickets' channel name with the placeholders! If you wanna split the lines up, you can use /n between sentences.

Placeholder Message Config Example
// First ticket message sent by the bot. 
// Available placeholders: %creator%, %ticket_channel% (String)
ticket_create_message: "Hey %creator%/nThanks for opening %ticket_channel%/nWe'll be with you in a bit!",

Alright! Hopefully you formatted your first message correctly! Now we move onto permission levels. We haven't touched on this yet in this so far, so we can leave them at 0 for now, but here's the TL;DR to permission levels! Permission levels in essence allow you to allow or deny access to certain roles by assigning them to 'levels'. The lower the level number, the less permissions you have.

Permission Level Config Example
// Permission level, for more information please check out the configuration
// option "permission_levels" below (Number)
permission_level: 0,

Setting the Ticket Question Set ID

Done with permission levels? If not we can worry about that in a bit, but for now, we have to assign questions to our ticket category. You're able to make question sets for the ticket modals, yes, modals! In this case, you can again, assign whatever ID you're gonna make your question set with, or even set it to null to disable it! We'll go over what ticket question sets are in just a moment.

IDs cannot have spaces! This will break the plugin!

Please use _ instead of spaces: eg. bug_report instead of Bug Report

Ticket Question Set ID Config Example
// Ticket create questions, for more information please check out the
// configuration option "ticket_create_questions" below. This configuration
// option requires the ID found below. Set to null to disable (String/null)
ticket_create_questions: "first_question_set",

Setting Role Mention IDs

Alright, almost done with this Ticket Category, at least the setup of it!

This step involves setting up role mentions for the ticket opening system. Basically, any IDs you set up in this Array get mentioned. Want only one bug support role mentioned? Go for it. Want your whole staff team pinged at one time? Sure thing. It's really up to you as to how you want to do it.

Note: In this case, Arrays can be either written horizontally or vertically. whatever helps you keep it more organized is best. Something like below!

Role Mention ID Config Example
        // List of role IDs - These roles are mentioned (@) once a ticket of this category 
        // is being created (Array)
        mention_roles: [
            "ROLE ID HERE", // HELPERS
            "ROLE ID HERE", // STAFF
        ]
    },

You set up your first ticket category, and any further ticket categories can be set up in exactly the same way using these steps! Once you get used to how the system works, your file can be even made smaller without the comments attached to each category! But overall, your config should look something like the below example. Once you get used to how it's formatted, you'll be able to make the new categories without all the comments in between. We've still got some work to do though!


Permissions Level Setup

What's this for?

Remember what we were talking earlier about Permission Levels? Well to put it in more depth, permission levels allow or disallow people from interacting with tickets depending on the permission level they have set up for their Role. It's a nice way of having, for example, Helpers not be able to see/interact with Moderation Tickets, or have regular Staff members not be able to interact with bug report tickets and so on. It's a really neat system of controlling who does and sees what.

How do I configure them?

So the Permissions Levels are hierachical, meaning they go by tiers. The lower the number assigned to a role, the less permissions they have to interact with tickets. The higher the numbers, the more permissions they have.

Let's take a look at the example config file snippet:

Permission Levels Config Format
    // Each ticket is assigned one permission level. Permission levels
    // are represented by certain roles. Whenever a ticket is being created
    // the role that represents the assigned permission level (for example: 1)
    // and all above (level 2, 3, 4, ...) will gain access to the ticket.
    //
    // The further down you get in the list below the higher is its permission level.
    //
    // Each ticket's permission level can be updated on Discord using specific
    // commands or the buttons applied to the ticket creation message.
    // The bot will either increase the permission level or decrease it.
    // Depending on that a specific role will either be removed from the ticket
    // or added (Array)
    permission_levels: [
        "ROLE ID HERE", // Level 0
        "ROLE ID HERE", // Level 1
        "ROLE ID HERE", // Level 2
        "ROLE ID HERE", // ...
    ],

So in this case, we see multiple role ID's, and multiple levels by them (which you can add more of by the way, simply by adding to the Array). Level 0 is the lowest, Level 2 is the highest. So for example, if we wanted to set up Helpers, Staff, Senior Staff, and Owner, all we have to do is change those role ID's accordingly, and assign them to the proper levels.

After editing the file, it should look like this:

Permission Levels Config Example
    // Each ticket is assigned one permission level. Permission levels
    // are represented by certain roles. Whenever a ticket is being created
    // the role that represents the assigned permission level (for example: 1)
    // and all above (level 2, 3, 4, ...) will gain access to the ticket.
    //
    // The further down you get in the list below the higher is its permission level.
    //
    // Each ticket's permission level can be updated on Discord using specific
    // commands or the buttons applied to the ticket creation message.
    // The bot will either increase the permission level or decrease it.
    // Depending on that a specific role will either be removed from the ticket
    // or added (Array)
    permission_levels: [
        "ROLE ID HERE", // Level 0 - HELPERS
        "ROLE ID HERE", // Level 1 - STAFF
        "ROLE ID HERE", // Level 2 - SENIOR STAFF
        "ROLE ID HERE", // Level 3 - OWNER
    ],

So make sure to edit your ticket category according to what you need it to do and who you want it to be seen/interacted by! Want only Helpers and above to access the ticket category? Assign the ticket category to Level 0, want only the Owner to deal with the ticket? Set it to 3. And so on.


Ticket Question Set Setup

This is an optional module!

You can set it to false and just have the bot send the Placeholder message, or set it to true and have a pop-up modal to have the user answer questions beforehand to speed the process up!

What's this for?

Got the Permission Levels set up? Awesome! Now we move onto the Ticket Question Sets.

Ticket Question Sets are what they sound like, they're sets of questions specifically made for a ticket category. Let's say you want a Bug Report ticket category, you can make 5 questions for it that will pop up in a modal for the users to answer.

What are the limitations?

  1. They can only have 45 characters in them. That's a Discord limitation, can't do anything for that.

  2. You can only input a max of 5 questions per category.

How do I configure them?

Ticket Question Sets aren't hard to make! They just take a bit of time. We have to assign an ID to the set, the questions we want to ask, the minimum and maximum response length, and if they're required or not.

This is the format (annotation enabled, hover over and click the }, for example):

Ticket Question Set Config Format
            question_list: {
                "first_question_set": [
                    {
                        question: "QUESTION 1",
                        max_letters: 20,
                        min_letters: 2,
                        required: true,
                    },


                    {
                        question: "QUESTION 2",
                        max_letters: 20,
                        min_letters: 3,
                        required: true,
                    },


                    {
                        question: "QUESTION 3",
                        max_letters: 200,
                        min_letters: 10,
                        required: true,
                    },                
                ]
            }
        },

For every additional question you want to add, you need to add it after the }, and then to add other additional set of questions, you add them after the] bracket by separating them with }],

Something like this (might look a bit different, but the syntax is the same):

Ticket Question Set Config Example
        "question_list": {
            "first_questions_set": [
            {
                "question": "What would you like to ask about?",
                "max_letters": 20,
                "min_letters": 2,
                "required": true
            }, 
            {
                "question": "Does this affect your fun in the server?",
                "max_letters": 30,
                "min_letters": 3,
                "required": true
            }, 
            {
                "question": "How do you think we can help with this?",
                "max_letters": 200,
                "min_letters": 10,
                "required": true
            }],
            "second_questions_set": [{
                "question": "What is the bug you're encountering?",
                "max_letters": 20,
                "min_letters": 2,
                "required": true
            }, 
            {
                "question": "What were you doing when the bug happened?",
                "max_letters": 30,
                "min_letters": 3,
                "required": true
            }, 
            {
                "question": "Can you replicate the issue?",
                "max_letters": 200,
                "min_letters": 10,
                "required": true
            }, 
            {
                "question": "How important is the problem?",
                "max_letters": 200,
                "min_letters": 10,
                "required": true
            }],

And that's it! You can add more question sets for new categories you make!


Special Role Ticket Handling

This is an optional module!

You can set it to false to have every member receive support equally, or true and have your selected role(s) prioritized over regular members when it comes to tickets.

What's this for?

Let's say you have people that boost your server, and you wanted to show them appreciation for it. You have lots of users too. So, you come up with the idea to be able to have some way to help your boosting members in tickets a lot faster than most other people. You can do that with Athena! Or even if you didn't want to do it boosters, you can do it with other roles too, it's configurable.

How do I configure it?

Since this is a much simpler module, we can speed through it.

We can configure the role ID(s) we want in an Array, which means you can actually support multiple roles for prioritization!

Special Role Config Example
// List of role IDs. If the ticket creator owns any of the following roles
// this module will trigger (Array)
    roles: [
        "ROLE ID HERE", //Booster
        "ROLE ID HERE", //MC Server Supporter
        "ROLE ID HERE", //Tebex Patron
    ],

As well as being able to configure extra roles to be pinged if someone that owns one of the roles above opens a ticket:

Special Role Pings Config Example
        // List of role IDs. All of these roles will be mentioned additionally
        // to the usual ticket category configuration (Array)
        mention_roles: [
            "ROLE ID HERE", // Owner
            "ROLE ID HERE", // Senior Staff
        ]
    },

And that's it!


Out of Service Hours

This is an optional module!

You can set it to false to handle off-hours tickets yourself, or true so Athena can automatically announce to any new tickets being opened in the time frame you selected when they are opened in off-hours scheduling.

The timeframe is based on the machine your bot is on. Check the console and the time, and calculate the off-hours depending on that.

Time is in 24hr!

It will not take AM or PM into account.

What's this?

Let's say you're in the EST time zone. And most of your staff is too. Shame really, having all those unanswered tickets during the nighttime hours. Well, no more waking up to tell people you're not able to help them right now! Athena can automatically send a message about Out of Service hours!

How do I configure it?

It's very simple. Another breeze to go through.

All you have to do is calculate the times your bot is in, and your correct time zone, and approximate when it is you think tickets will take longer to answer.

Out of Service Hours Config Example
        time: {
            start: "23:00",
            finished: "07:00",
        }
    },

Ticket Buttons

What's this for?

This simply controls the buttons that show up underneath the tickets when opened. If you don't want specific tickets to be visible, you can disable them individually.

How do I configure this?

Easy! It's all Boolean switches! Just true or false what you want or don't want, respectively.

Ticket Buttons Config Example
    ticket_buttons: {
        // Ticket close button (Boolean)
        close: true,
        // Ticket elevate button (Boolean)
        elevate: true,
        // Ticket lower button (Boolean)
        lower: true,
        // Ticket claim button (Boolean)
        claim: true,
        // Ticket unclaim button (Boolean)
        unclaim: true,
        },
    },
},

You're all done here! Now you can move onto other plugins and see how they work!

Afterwards, we can either copy paste an emoji directly into the config file, or we can use custom emojis by using \<whatever emoji you want to use>, or if you want a guide,

Set the Permission Level

Checkpoint!

Checkpoint Config
        ticket_categories: [
        {
            // Ticket category name (String)
            category: "General Support",
            // Ticket category description (String)
            description: "Select to create a General ticket.",
            // Custom or default Emoji (String)
            // * Default: https://emojidb.org/discord-copy-and-paste-emojis - 
            // * Custom: https://support.discord.com/hc/en-us/community/posts/360038896012-Can-Get-Emoji-ID-When-You-re-On-Chrome
            emoji: "ā“",
            // Discord category ID (String)
            // All ticket channels will be generated under this category.
            category_id: "CATEGORY ID HERE",
            // First ticket message sent by the bot. 
            // Available placeholders: %creator%, %ticket_channel% (String)
            ticket_create_message: "Hey %creator%,\nThank you for creating %ticket_channel%, we will get back to you as soon as possible.\n\nWhilst you are waiting for a response please explain the reason why you created this ticket by following this format:\n\n``IGN:``\n``Realm:``\n``Reason:``\n​",
            // Permission level, for more information please check out the configuration
            // option "permission_levels" below (Number)
            permission_level: 0,
            // Ticket create questions, for more information please check out the
            // configuration option "ticket_create_questions" below. This configuration
            // option requires the ID found below. Set to null to disable (String/null)
            ticket_create_questions: "first_question_set",
            // List of role IDs - These roles are mentioned (@) once a ticket of this category 
            // is being created (Array)
            mention_roles: [
                "ROLE ID HERE",
            ]
        },

Congrats!

🚩
🚩
šŸŽ‰
our support server!
that's here!
(What?)
šŸ”Œ
šŸŽ“
Page cover image