feat(ticket): add transfer, priority, lock/unlock, stats, message recording
All checks were successful
ci / ci (push) Successful in 44s

- TransferButton: transfer ticket to another staff member
- PriorityButton: set ticket priority (low/normal/high/urgent)
- LockButton: lock/unlock ticket (toggle channel permissions)
- StatsButton: show ticket info (category, user, claimed, priority, messages)
- on_message listener: records all messages for transcript
- TicketData: added locked, priority fields
This commit is contained in:
Mathis 2026-09-25 19:38:24 +02:00
parent 4d1e265848
commit e46c04fe98
3 changed files with 269 additions and 2 deletions

View file

@ -9,6 +9,13 @@ class TicketStatus(str, Enum):
CLOSED = "closed"
class TicketPriority(str, Enum):
LOW = "low"
NORMAL = "normal"
HIGH = "high"
URGENT = "urgent"
@dataclass
class TicketCategory:
id: str
@ -54,6 +61,8 @@ class TicketData:
closed_at: str | None = None
closed_by: int | None = None
claimed_by: int | None = None
locked: bool = False
priority: TicketPriority = TicketPriority.NORMAL
messages: list[TicketMessage] = field(default_factory=list)
reason: str = ""
@ -68,6 +77,8 @@ class TicketData:
"closed_at": self.closed_at,
"closed_by": self.closed_by,
"claimed_by": self.claimed_by,
"locked": self.locked,
"priority": self.priority.value,
"messages": [
{
"author_id": m.author_id,
@ -86,6 +97,7 @@ class TicketData:
def from_dict(cls, data: dict) -> TicketData:
messages = [TicketMessage(**m) for m in data.pop("messages", [])]
data["status"] = TicketStatus(data.get("status", "open"))
data["priority"] = TicketPriority(data.get("priority", "normal"))
data.pop("transcript_path", None)
data.pop("rating", None)
data.pop("feedback", None)