Before publishing
Every panel requires a panel publication destination, a private ticket category, staff role, member-facing description, intake prompt, and routing key. The publication destination is where the entry panel appears; the category is where private ticket channels are created. You can also require an eligible role, limit each member’s open tickets from that panel, and set an availability window. Preview the saved draft in the dashboard, then choose the Discord message channel where the entry point belongs. Publishing creates a new Pup-owned message. Moving a panel publishes the current revision in the new channel and disables the old control. Each publication has a durable receipt before Pup calls Discord. If Discord accepts a message but Pup cannot save its ID, the panel stays in a reconciliation state instead of being published again. An administrator can verify the message’s receipt token and enter its Discord message ID to finish that one publication. Failed attempts retain their error and can be retried safely; the receipt prevents a retry from silently orphaning an uncertain message.Safe changes
Editing creates a new panel revision. Disable pauses new entries, repair restores a disabled or faulted control, and retire permanently closes that entry point. Replace retires one panel in favor of another published panel. An accepted entry keeps a snapshot of the exact panel revision, request type, destination, staff team, routing key, and prompt it used. Later edits, moves, replacement, or retirement therefore do not detach existing tickets from their original configuration. Each panel also sets a lowercase private-channel prefix and a bounded number of open containers. The prefix and capacity policy are snapshotted when a request is accepted, so later edits do not rename or change the retention rules for an existing ticket.Typed support recipes
Each panel may configure an acknowledgement, requester follow-up, escalation, inactivity action, and closure message. These are five named recipe stages, not a programmable workflow engine. The policy revision is copied to the private intake and then to its ticket together with the exact request type, validated answers, routed priority, staff role, availability decision, and deadline. Later panel edits cannot change an in-flight request. The recipe preview exposes the named stages before delivery. An escalation that requires an unavailable configured staff role is shown as skipped rather than silently rerouted. Reconciliation has explicit outcomes for stale leases, duplicate delivery, partial delivery, cancellation, and failure; it never opens a second ticket or changes a completed ticket’s route. Provider and security ceilings remain fixed.Private ticket creation
When a member submits a published panel, Pup records the request before asking Discord to create its private channel. Pup grants access to the requester and the configured staff role; the server owner and Discord administrators can also see it. If Discord cannot create it, the saved request is marked for a safe staff retry; members do not need to submit the form again. Pup reconciles each managed private channel’s permission overrides for the submitter, configured staff role and Pup itself, while denying the everyone role. Discord’s owner and administrator access still applies. A stale managed overwrite is repaired on the next safe ticket-open attempt; provider failures keep the ticket faulted and retryable instead of widening access. Approved staff participants are stored with the ticket and deduplicated before their private overwrite is applied. Participant changes use the ticket revision so stale add/remove requests are rejected rather than silently changing access. Authorized staff changes immediately reconcile the managed channel. If Discord is unavailable or the channel is missing, Pup returns a repair-needed outcome and retains the audited desired participant state rather than granting access elsewhere. Each ticket keeps a separate event history for its opening, container creation, assignment, status changes, and recovery. Closing, archiving, reopening, and deletion are explicit retention-aware states rather than channel deletion side effects.Ticket lifecycle
The panel’s workflow preset is snapshotted onto the ticket: standard opens a ready ticket, while staff review opens it paused for an explicit staff claim or assignment. Authorized staff use explicit actions to claim, assign or transfer ownership, set priority or deadline, pause with a reason, reopen, close, archive, delete, or restore a retained record. Each action supplies the ticket revision shown by the staff panel; a stale panel, duplicate retry, or concurrent staff action is rejected and must be refreshed. Pup retains the requester, approved participants, owner, status reasons, deadline, and append-only event history separately from the Discord container. A missing managed channel is recorded as an orphaned, retryable container fault, rather than erasing the request. Restoring a soft-deleted record returns it to archived retention state; reopening it is a separate, deliberate action. This makes restoration and retention decisions reviewable.Staff collaboration
Ticket conversations, internal notes and collaboration are available to the configured staff team and the verified server owner. The owner does not need the configured staff role. Configuration permission or installation-operator status alone does not grant this dashboard access. Staff may add approved team members as participants or watchers, claim and transfer ownership, and set priority or a deadline. Before a participant, owner, or mention is accepted, Pup checks that the member still has the ticket’s snapshotted staff role; a ticket cannot be used to grant a different member private-channel access. Internal notes, handoffs, escalations, and staff mentions are stored only in Pup’s private ticket record and are never relayed into Discord. The ticket workflow preset controls the collaboration rules stored with the ticket: standard allows any authorized staff member to reassign work; staff review requires the current owner to transfer work and requires a handoff explanation. Every collaboration and ownership mutation uses the observed ticket revision. Pup rejects stale or conflicting actions, retains the private note immutably, and records an append-only event without duplicating private note content into the broader lifecycle history. You can optionally set an inactivity period before an open ticket is archived, and a period after archival before its support record is soft-deleted. Both values are bounded between one hour and thirty days, are off by default, and are stored with the ticket. Archiving keeps the private Discord channel and its history, while preventing the requester from sending further messages. Deletion is deliberately database-only: Pup never deletes a Discord channel from this policy.Bounded transcripts
When a ticket has an archive-deletion period, authorized members of that ticket’s configured staff team or the verified server owner can generate a bounded transcript for export. Each panel chooses how many recent messages to include, from 1 to 100; 100 remains the universal safety ceiling. The configured depth is snapshotted when the member opens their intake and again when Pup creates the support ticket, so later panel edits do not change that ticket’s transcript. Messages are stored in chronological order, without attachment URLs or attachment copies. The transcript is accessible to the configured staff team and server owner, and inherits that ticket’s snapshotted retention period; tickets with no configured deletion period do not produce a retained transcript. Search is performed only after an authorized read of the encrypted export. Authorized staff and the server owner can read, search, export, or delete the transcript through the private ticket surface; deletion removes the encrypted object and soft-deletes its ticket association without deleting the Discord channel. At expiry, the worker schedules provider deletion and marks the association deleted only after the encrypted object removal is verified.Submit a ticket
Panels can ask for up to five answers: short or long text, a configured choice, a member or channel reference, or a date. Required answers must be completed.- Open the panel in Discord and complete its form. Pup shows a private preview before sharing the request with staff.
- If attachments are allowed, use
/ticket-attachmentwith the draft reference from the preview and a file. Repeat for additional files within the panel’s limit. Discord modals cannot collect files directly. Pup checks each file against the panel’s count, size and approved image, PDF or text types. - Review the answers, attached files and disclosure, then confirm the request. After confirmation, the configured staff team and server owner can access the intake. The preview expires after the panel’s configured interval of one to sixty minutes; an expired preview must be started again.