tickets-bot/ticket_view.py
Neil Revin 00d90dea36
feat: initial
Signed-off-by: ItsNeil17 <neil@willofsteel.me>
2025-11-29 20:44:22 +05:30

43 lines
1.8 KiB
Python

import discord
from database import get_ticket, delete_ticket
import io
from datetime import datetime
class TicketView(discord.ui.View):
def __init__(self):
super().__init__(timeout=None)
@discord.ui.button(label="Close", style=discord.ButtonStyle.red, custom_id="close_ticket", emoji="🔒")
async def close_ticket(self, interaction: discord.Interaction, button: discord.ui.Button):
ticket = await get_ticket(interaction.channel_id)
if not ticket:
await interaction.response.send_message("❌ This is not a ticket channel.", ephemeral=True)
return
if not interaction.user.guild_permissions.manage_channels and interaction.user.id != ticket.user_id:
await interaction.response.send_message("❌ You don't have permission to close this ticket.", ephemeral=True)
return
await interaction.response.send_message("🔒 Closing ticket and saving transcript...")
messages = []
async for msg in interaction.channel.history(limit=None, oldest_first=True):
timestamp = msg.created_at.strftime("%Y-%m-%d %H:%M:%S")
messages.append(f"[{timestamp}] {msg.author}: {msg.content}")
transcript = "\n".join(messages)
file = discord.File(io.BytesIO(transcript.encode()), filename=f"ticket-{ticket.ticket_number}.txt")
user = interaction.guild.get_member(ticket.user_id)
if user:
try:
await user.send(f"Your ticket #{ticket.ticket_number} has been closed. Here's the transcript:", file=file)
except:
pass
await delete_ticket(interaction.channel_id)
await interaction.channel.delete()
async def setup(bot):
bot.add_view(TicketView())