import discord from database import create_ticket, get_ticket, get_config, get_session, Ticket from sqlalchemy import select async def handle_ticket_create(interaction: discord.Interaction): for channel in interaction.guild.channels: if isinstance(channel, discord.TextChannel): ticket = await get_ticket(channel.id) if ticket and ticket.user_id == interaction.user.id: await interaction.response.send_message( f"❌ You already have an open ticket: {channel.mention}", ephemeral=True ) return config = await get_config(interaction.guild_id) category = None if config and config.category_id: category = interaction.guild.get_channel(config.category_id) if not category: category = discord.utils.get(interaction.guild.categories, name="Tickets") if not category: category = await interaction.guild.create_category("Tickets") async with get_session() as session: result = await session.execute( select(Ticket).where(Ticket.guild_id == interaction.guild_id).order_by(Ticket.ticket_number.desc()) ) last_ticket = result.scalars().first() ticket_num = (last_ticket.ticket_number + 1) if last_ticket else 1 overwrites = { interaction.guild.default_role: discord.PermissionOverwrite(read_messages=False), interaction.user: discord.PermissionOverwrite(read_messages=True, send_messages=True), interaction.guild.me: discord.PermissionOverwrite(read_messages=True, send_messages=True) } channel = await interaction.guild.create_text_channel( name=f"ticket-{ticket_num}", category=category, overwrites=overwrites ) ticket = await create_ticket( interaction.guild_id, channel.id, interaction.user.id ) embed = discord.Embed( title=f"Ticket #{ticket.ticket_number}", description=f"Welcome {interaction.user.mention}!\nPlease describe your issue and a staff member will be with you shortly.", color=discord.Color.green() ) from ticket_view import TicketView await channel.send(embed=embed, view=TicketView()) await interaction.response.send_message( f"✅ Ticket created: {channel.mention}", ephemeral=True )