From 356c003503fa4e4e4092764a31bcc13cbb0c9554 Mon Sep 17 00:00:00 2001 From: Aris <64918822+Arisamiga@users.noreply.github.com> Date: Sat, 17 Oct 2026 00:39:33 +0100 Subject: [PATCH 1/3] Send transcript before deletion --- src/config.py | 1 + src/extensions/ticket.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/config.py b/src/config.py index ec12425..70baea6 100644 --- a/src/config.py +++ b/src/config.py @@ -134,6 +134,7 @@ def set_env_var( "rules": 578713759263096842, "waiting-room": 627548568613552138, "tickets": 1517611430126555298, + "ticket-archive": 1560799149488742440, } CATEGORY_IDS: dict[str, int] = { diff --git a/src/extensions/ticket.py b/src/extensions/ticket.py index 0f054e9..2a7b2f7 100644 --- a/src/extensions/ticket.py +++ b/src/extensions/ticket.py @@ -8,7 +8,7 @@ TextSelectMenuInteractionComponent, ) -from src.config import CATEGORY_IDS, ROLE_IDS, UID_MAPS +from src.config import CATEGORY_IDS, CHANNEL_IDS, ROLE_IDS, UID_MAPS from src.hooks import restrict_to_roles from src.models import Blockbot, BlockbotContext, BlockbotPlugin @@ -188,6 +188,17 @@ async def delete_channel(interaction: hikari.ComponentInteraction) -> None: "Closing ticket...", flags=hikari.MessageFlag.EPHEMERAL, ) + messages = await plugin.client.rest.fetch_messages(interaction.channel_id) + transcript = "\n".join( + f"{message.author.username}: {message.content}" + for message in reversed(messages) + ) + await plugin.client.rest.create_message( + CHANNEL_IDS["ticket-archive"], + content=f"## :octagonal_sign: Ticket Closure at {interaction.message.timestamp} \nAuthor: <@{interaction.user.id}>\nTicket closed by <@{interaction.user.id}>.\n\nTranscript:\n", + user_mentions=True, + attachment=hikari.Bytes(transcript.encode("utf-8"), "transcript.txt"), + ) await asyncio.sleep(3) await plugin.client.rest.delete_channel(interaction.channel_id) From 9fd5ccc31fa31f3477655d6e12eb746b7fece6ee Mon Sep 17 00:00:00 2001 From: Aris <64918822+Arisamiga@users.noreply.github.com> Date: Sat, 17 Oct 2026 00:51:47 +0100 Subject: [PATCH 2/3] Add better timestamp + ticket reasoning --- src/extensions/ticket.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/extensions/ticket.py b/src/extensions/ticket.py index 2a7b2f7..0818aca 100644 --- a/src/extensions/ticket.py +++ b/src/extensions/ticket.py @@ -193,9 +193,27 @@ async def delete_channel(interaction: hikari.ComponentInteraction) -> None: f"{message.author.username}: {message.content}" for message in reversed(messages) ) + closed_at = int(interaction.message.timestamp.timestamp()) + + reason = next( + ( + embed.description + for message in messages + for embed in message.embeds + if embed.title == "Ticket" and embed.description + ), + "No reason provided", + ) + await plugin.client.rest.create_message( CHANNEL_IDS["ticket-archive"], - content=f"## :octagonal_sign: Ticket Closure at {interaction.message.timestamp} \nAuthor: <@{interaction.user.id}>\nTicket closed by <@{interaction.user.id}>.\n\nTranscript:\n", + content=( + f"## :octagonal_sign: Ticket Closure at \n" + f"Author: <@{interaction.user.id}>\n" + f"Ticket closed by <@{interaction.user.id}>.\n" + f"Reason: ```{reason}```\n\n" + "Transcript:\n" + ), user_mentions=True, attachment=hikari.Bytes(transcript.encode("utf-8"), "transcript.txt"), ) From b8ed7529184d23824dfa7630b0b4906a78caf24a Mon Sep 17 00:00:00 2001 From: Aris <64918822+Arisamiga@users.noreply.github.com> Date: Mon, 19 Oct 2026 22:53:14 +0100 Subject: [PATCH 3/3] Check only first message for author + reason --- src/extensions/ticket.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/extensions/ticket.py b/src/extensions/ticket.py index 0818aca..c1c1103 100644 --- a/src/extensions/ticket.py +++ b/src/extensions/ticket.py @@ -1,4 +1,5 @@ import asyncio +from collections.abc import Mapping import arc import hikari @@ -195,21 +196,26 @@ async def delete_channel(interaction: hikari.ComponentInteraction) -> None: ) closed_at = int(interaction.message.timestamp.timestamp()) + ticket_message = messages[-1] + reason = next( ( embed.description - for message in messages - for embed in message.embeds + for embed in ticket_message.embeds if embed.title == "Ticket" and embed.description ), "No reason provided", ) + author_id: hikari.Snowflake | None = None + if isinstance(ticket_message.user_mentions, Mapping): + author_id = next(iter(ticket_message.user_mentions), None) + author = f"<@{author_id}>" if author_id else "Unknown" await plugin.client.rest.create_message( CHANNEL_IDS["ticket-archive"], content=( f"## :octagonal_sign: Ticket Closure at \n" - f"Author: <@{interaction.user.id}>\n" + f"Author: {author}\n" f"Ticket closed by <@{interaction.user.id}>.\n" f"Reason: ```{reason}```\n\n" "Transcript:\n"