AssistantReply: {
    clarify: {
        options: string[];
        pick?: "channel" | "role";
        question: string;
    }[];
    conversationId: string;
    intent: AssistantIntent;
    notices: AssistantNotice[];
    problems: string[];
    proposals: AssistantProposal[];
    remaining: number | null;
    reply: string;
    sources: string[];
    supportUrl?: string;
}

Type declaration

  • clarify: {
        options: string[];
        pick?: "channel" | "role";
        question: string;
    }[]

    For intent: 'clarify': up to 3 questions for ONE round. Collect an answer to every question, then send them together as one message. With pick, show the real channel / role picker (options is empty); otherwise show options as choices.

  • conversationId: string

    Send back as conversationId with the next message.

  • intent: AssistantIntent
  • notices: AssistantNotice[]
  • problems: string[]

    Why some changes could not become proposals, in plain words. Show under the cards.

  • proposals: AssistantProposal[]
  • remaining: number | null

    Messages left today for this user on this server. null = no daily cap (dev accounts): show no counter.

  • reply: string

    Markdown. Render without raw HTML and without images; links only to noti.bot hosts. Empty with some notices.

  • sources: string[]

    The source keys the answer cited (live:limits, catalogue:..., memory:..., errors:..., map:...).

  • OptionalsupportUrl?: string

    With the unsure notice: where to ask instead.