def build_actions( group: Group, project: Project, text: str, color: str, actions: Sequence[MessageAction] | None = None, identity: Identity | None = None, ) -> tuple[Sequence[MessageAction], str, str]: """Having actions means a button will be shown on the Slack message e.g. ignore, resolve, assign.""" if actions: text += get_action_text(text, actions, identity) return [], text, "_actioned_issue" ignore_button = MessageAction( name="status", label="Ignore", value="ignored", ) resolve_button = MessageAction( name="resolve_dialog", label="Resolve...", value="resolve_dialog", ) status = group.get_status() if not has_releases(project): resolve_button = MessageAction( name="status", label="Resolve", value="resolved", ) if status == GroupStatus.RESOLVED: resolve_button = MessageAction( name="status", label="Unresolve", value="unresolved", ) if status == GroupStatus.IGNORED: ignore_button = MessageAction( name="status", label="Stop Ignoring", value="unresolved", ) assignee = group.get_assignee() assign_button = MessageAction( name="assign", label="Select Assignee...", type="select", selected_options=format_actor_options([assignee]) if assignee else [], option_groups=get_option_groups(group), ) return [resolve_button, ignore_button, assign_button], text, color
def get_assignee_string(group: Group) -> Optional[str]: """Get a string representation of the group's assignee.""" assignee = group.get_assignee() if isinstance(assignee, User): return assignee.email if isinstance(assignee, Team): return f"#{assignee.slug}" return None