43 lines
1.8 KiB
Python
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()) |