The feedback board - the staff side. Post moderation, tags and bans are staff + developers; boards (and rewriting a post's title / body) are developers only (403 otherwise). None is behind the feedback flag, so boards can be set up before launch. Every change is written to the audit log (getFeedbackAudits).

Constructors

Methods

  • Comment as staff: internal for a staff-only note (a reply under a note is a note too), official for the pinned answer (replaces the current one; never a note, never a reply). Returns the full thread incl. notes.

    Parameters

    • __namedParameters: {
          auth: string;
          comment: {
              body: string;
              internal?: boolean;
              official?: boolean;
              parentId?: string;
              uploadIds?: string[];
          };
          number: number;
      }
      • auth: string
      • comment: {
            body: string;
            internal?: boolean;
            official?: boolean;
            parentId?: string;
            uploadIds?: string[];
        }
        • body: string
        • Optionalinternal?: boolean
        • Optionalofficial?: boolean
        • OptionalparentId?: string
        • OptionaluploadIds?: string[]
      • number: number

    Returns Promise<WebResponse<FeedbackThread>>

  • Ban a user from posting, commenting (and reacting), voting, or all of it. Survives their data deletion.

    Parameters

    • __namedParameters: {
          auth: string;
          ban: {
              reason: string;
              scope:
                  | "post"
                  | "all"
                  | "vote"
                  | "comment";
              until?: null | string;
              userId: string;
          };
      }
      • auth: string
      • ban: {
            reason: string;
            scope:
                | "post"
                | "all"
                | "vote"
                | "comment";
            until?: null | string;
            userId: string;
        }
        • reason: string
        • scope:
              | "post"
              | "all"
              | "vote"
              | "comment"
        • Optionaluntil?: null | string
        • userId: string

    Returns Promise<WebResponse<{
        banId: string;
    }>>

  • Merge post number into intoNumber: votes move (one per user), comments and follows move, the old number redirects. There is no unmerge. Refusals: same_post, not_found, already_merged, target_merged, deleted, busy.

    Parameters

    • __namedParameters: {
          auth: string;
          intoNumber: number;
          number: number;
      }
      • auth: string
      • intoNumber: number
      • number: number

    Returns Promise<WebResponse<{
        movedVotes: number;
        post: null | AdminFeedbackPost;
    }>>

  • Parameters

    • __namedParameters: {
          auth: string;
          tag: {
              color: string;
              hidden?: boolean;
              name: string;
              slug: string;
          };
      }
      • auth: string
      • tag: {
            color: string;
            hidden?: boolean;
            name: string;
            slug: string;
        }
        • color: string
        • Optionalhidden?: boolean
        • name: string
        • slug: string

    Returns Promise<WebResponse<{
        tagId: string;
    }>>

  • Hide everything one user wrote: scope posts, comments or all. reason is shown to them on each hidden post. Deleted posts / comments are left alone. Their posts' staff-channel messages are removed. busy (409) while another bulk hide for them runs.

    Parameters

    • __namedParameters: {
          auth: string;
          reason?: null | string;
          scope: "all" | "posts" | "comments";
          userId: string;
      }
      • auth: string
      • Optionalreason?: null | string
      • scope: "all" | "posts" | "comments"
      • userId: string

    Returns Promise<WebResponse<{
        comments: number;
        posts: number;
    }>>

  • A SOFT delete, the same as updateAdminFeedbackPost({ post: { deleted: true } }): restore with deleted: false. There is no permanent delete.

    Parameters

    • __namedParameters: {
          auth: string;
          number: number;
      }
      • auth: string
      • number: number

    Returns Promise<WebResponse<{
        post: null | AdminFeedbackPost;
    }>>

  • Parameters

    • __namedParameters: {
          auth: string;
          banId: string;
      }
      • auth: string
      • banId: string

    Returns Promise<WebResponse<{
        deleted: true;
    }>>

  • Only an empty board (board_has_posts otherwise - archive it instead).

    Parameters

    • __namedParameters: {
          auth: string;
          boardId: string;
      }
      • auth: string
      • boardId: string

    Returns Promise<WebResponse<{
        deleted: true;
    }>>

  • Show again: un-hides ALL of their hidden posts / comments in scope, including ones hidden one by one earlier.

    Parameters

    • __namedParameters: {
          auth: string;
          scope: "all" | "posts" | "comments";
          userId: string;
      }
      • auth: string
      • scope: "all" | "posts" | "comments"
      • userId: string

    Returns Promise<WebResponse<{
        comments: number;
        posts: number;
    }>>

  • Every post incl. hidden / private. deleted: true lists deleted ones instead; merged: true includes merged ones.

    Parameters

    • __namedParameters: {
          auth: string;
          boardId?: string;
          deleted?: boolean;
          hidden?: boolean;
          limit?: number;
          merged?: boolean;
          offset?: number;
          q?: string;
          sort?: "top" | "new";
          status?:
              | "done"
              | "open"
              | "underReview"
              | "planned"
              | "inProgress"
              | "declined";
      }
      • auth: string
      • OptionalboardId?: string
      • Optionaldeleted?: boolean
      • Optionalhidden?: boolean
      • Optionallimit?: number
      • Optionalmerged?: boolean
      • Optionaloffset?: number
      • Optionalq?: string
      • Optionalsort?: "top" | "new"
      • Optionalstatus?:
            | "done"
            | "open"
            | "underReview"
            | "planned"
            | "inProgress"
            | "declined"

    Returns Promise<WebResponse<{
        limit: number;
        offset: number;
        posts: AdminFeedbackPost[];
        total: number;
    }>>

  • Every tag, hidden ones included.

    Parameters

    • __namedParameters: {
          auth: string;
      }
      • auth: string

    Returns Promise<WebResponse<{
        tags: {
            color: string;
            hidden: boolean;
            name: string;
            slug: string;
            tagId: string;
        }[];
    }>>

  • A user's feedback profile for staff: who they are (display name, avatar, account age), counts, their newest 100 posts and comments - hidden and deleted included - and their bans. 404 when they have no feedback at all. Reach it from a post's authorId or a comment's authorId.

    Parameters

    • __namedParameters: {
          auth: string;
          userId: string;
      }
      • auth: string
      • userId: string

    Returns Promise<WebResponse<AdminFeedbackUser>>

  • The staff action log, newest first. target filters, e.g. post:42, board:<id>, user:<discordId>.

    Parameters

    • __namedParameters: {
          auth: string;
          limit?: number;
          offset?: number;
          target?: string;
      }
      • auth: string
      • Optionallimit?: number
      • Optionaloffset?: number
      • Optionaltarget?: string

    Returns Promise<WebResponse<{
        audits: FeedbackAudit[];
        limit: number;
        offset: number;
    }>>

  • Active bans (all: true includes expired), optionally for one userId.

    Parameters

    • __namedParameters: {
          all?: boolean;
          auth: string;
          userId?: string;
      }
      • Optionalall?: boolean
      • auth: string
      • OptionaluserId?: string

    Returns Promise<WebResponse<{
        bans: FeedbackBan[];
    }>>

  • Rewrite a comment (body: markdown, same rules and limits as a member comment; sets editedAt), hide / unhide it, or make it (or stop it being) the official answer. Audit-logged. A deleted comment's body answers 403 not_editable.

    Parameters

    • __namedParameters: {
          auth: string;
          comment: {
              body?: string;
              hidden?: boolean;
              official?: boolean;
          };
          commentId: string;
      }
      • auth: string
      • comment: {
            body?: string;
            hidden?: boolean;
            official?: boolean;
        }
        • Optionalbody?: string
        • Optionalhidden?: boolean
        • Optionalofficial?: boolean
      • commentId: string

    Returns Promise<WebResponse<FeedbackThread>>

  • Tags are hidden, never deleted.

    Parameters

    • __namedParameters: {
          auth: string;
          tag: {
              color?: string;
              hidden?: boolean;
              name?: string;
              slug?: string;
          };
          tagId: string;
      }
      • auth: string
      • tag: {
            color?: string;
            hidden?: boolean;
            name?: string;
            slug?: string;
        }
        • Optionalcolor?: string
        • Optionalhidden?: boolean
        • Optionalname?: string
        • Optionalslug?: string
      • tagId: string

    Returns Promise<WebResponse<{
        tagId: string;
    }>>