ticket
hisoka
python
2 years ago
5.2 kB
7
Indexable
import asyncio import contextlib import json import logging import os import platform import random import string import time import traceback from typing import Union import discord from discord import app_commands, ui from discord.ext import commands import settings logger = settings.logging.getLogger("bot") # ? default_role = @everyone # ? interaction.user = user who opened ticket # ? interaction.guild.me = the bot # ? ticketmanager_role = role for staff to see tickets bot = commands.Bot(command_prefix="-", intents=discord.Intents().all()) class ticket_launcher(commands.Cog): def __init__(self, bot): self.bot = bot super().__init__(timeout=None) @discord.ui.button( label="Open a Ticket", style=discord.ButtonStyle.blurple, custom_id="open_ticket_button", ) async def ticket(self, interaction: discord.Interaction, button: discord.ui.Button): ticket = utils.get( interaction.guild.text_channels, name=f"ticket-{interaction.user.name}" ) # ? TICKET EMBEDS # USER ALREADY HAS A TICKET OPENED EMBED MESSAGE ticketerrorembed = discord.Embed( title="Error!", description=f"{interaction.user.name}\n**New Ticket Request Error:**\nUser has an active ticket open.\n\n**Ticket Location:**\n{ticket.mention}\n\nMultiple tickets are not allowed!\nPlease use the current active ticket.", color=0xFFFFFF, ) ticketerrorembed.set_footer( text="Ticket System", icon_url="https://i.imgur.com/4DuUUVU.png", ) # USER NEW TICKET OPENED EMBED MESSAGE -> FOR NEW TICKET CHANNEL newticketembed = discord.Embed( title="Ticket", description=f"{channel.mention} opened for {interaction.user.name}\n\n__Note__\n**Please do not ping staff, they will be with you when they are available.**", color=0xFFFFFF, ) newticketembed.set_footer( text="Ticket System", icon_url="https://i.imgur.com/4DuUUVU.png", ) # TICKET HAS BEEN CREATED EMBED -> FOR OPEN A TICKET CHANNEL ticketcreatedembed = discord.Embed( title="Error!", description=f"{interaction.user.name} ticket has been opened. \n\n**Ticket Location:**\n{channel.mention}", color=0xFFFFFF, ) ticketcreatedembed.set_footer( text="Ticket System", icon_url="https://i.imgur.com/4DuUUVU.png", ) # IF USER HAS TICKET OPENED, SEND EPHEMERAL ERROR EMBED if ticket is not None: await interaction.response.send_message( embed=ticketerrorembed, ephemeral=True, ) # IF USER DOES NOT HAVE TICKET OPENED, CREATE NEW CHANNEL AND SET PERMISSIONS else: overwrites = { interaction.guild.default_role: discord.PermissionOverwrite( view_channel=False ), interaction.user: discord.PermissionOverwrite( view_channel=True, send_messages=True, attach_files=True, embed_links=True, external_emojis=True, external_stickers=True, ), interaction.guild.me: discord.PermissionOverwrite( view_channel=True, send_messages=True, read_message_history=True ), ###############? INSERT TICKET MANAGER ROLE HERE! ?############## # interaction.guild.ticketmanager_role: discord.PermissionOverwrite(view_channel = True, send_messages = True, attach_files = True, embed_links = True, external_emojis = True, external_stickers = True, manage_messages = True, read_message_history = True) } channel = await interaction.guild.create_text_channel( name=f"ticket-{interaction.user.name}", overwrites=overwrites, reason=f"Ticket opened for {interaction.user}", ) # SEND EMBED INTO NEW TICKET CHANNEL await channel.send(text=f"{interaction.user.mention}", embed=newticketembed) # NOTIFY USER OF NEW TICKET OPENED await interaction.response.send_message( embed=ticketcreatedembed, ephemeral=True ) @commands.command(name="ticket_launcher") async def ticket_launcher(self): embed = discord.Embed( title="Ticket System", description="To open a ticket, click the button below.", color=0xFFFFFF, ) embed.set_footer( text="Ticket System", icon_url="https://i.imgur.com/4DuUUVU.png", ) await interaction.channel.send(embed=embed, view=ticket_launcher()) await interaction.response.send_message( "Ticket system enabled!", ephemeral=True ) async def setup(bot): await bot.add_cog(ticket_launcher(bot))
Editor is loading...