UserObject:
  type: object
  properties:
    uid:
      type: number
      description: A user identifier
      example: 1
    username:
      type: string
      description: A friendly name for a given user account
      example: Dragon Fruit
    userslug:
      type: string
      description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.)
      example: dragon-fruit
    email:
      type: string
      description: Email address associated with the user account
      example: dragonfruit@example.org
    'email:confirmed':
      type: number
      description: Whether the user has confirmed their email address or not
      example: 1
    joindate:
      type: number
      description: A UNIX timestamp representing the moment the user's account was created
      example: 1585337827953
    lastonline:
      type: number
      description: A UNIX timestamp representing the moment the user was last recorded online on this site
      example: 1585337827953
    picture:
      type: string
      description: A URL pointing to a picture to be used as the user's avatar
      example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
      nullable: true
    fullname:
      type: string
      example: Mr. Dragon Fruit Jr.
    displayname:
      type: string
      description: This is either username or fullname depending on forum and user settings
      example: Dragon Fruit
    location:
      type: string
      example: 'Toronto, Canada'
      nullable: true
    birthday:
      type: string
      description: A birthdate given in an ISO format parseable by the Date object
      example: 03/27/2020
      nullable: true
    website:
      type: string
      example: 'https://example.org'
      nullable: true
    aboutme:
      type: string
      example: |
        This is a paragraph all about how my life got twist-turned upside-down
        and I'd like to take a minute and sit right here,
        to tell you all about how I became the administrator of NodeBB
      nullable: true
    signature:
      type: string
      example: |
        This is an example signature
        It can span multiple lines.
      nullable: true
    uploadedpicture:
      type: string
      example: /assets/profile/1-profileimg.png
      description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.'
      nullable: true
    profileviews:
      type: number
      description: The number of times this user's profile has been viewed
      example: 1000
    reputation:
      type: number
      description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points
      example: 100
    postcount:
      type: number
      example: 1000
    topiccount:
      type: number
      example: 50
    lastposttime:
      type: number
      description: A UNIX timestamp representing the moment the user posted last
      example: 1585337827953
    banned:
      type: number
      description: A Boolean representing whether a user is banned or not
      example: 0
    'banned:expire':
      type: number
      description: A UNIX timestamp representing the moment the ban will be lifted
      example: 1585337827953
    status:
      type: string
      enum:
        - online
        - offline
        - dnd
        - away
      example: online
    flags:
      type: number
      example: 0
      nullable: true
    followerCount:
      type: number
      example: 2
    followingCount:
      type: number
      example: 5
    'cover:url':
      type: string
      example: /assets/profile/1-cover.png
      nullable: true
    'cover:position':
      type: string
      example: 50.0301% 19.2464%
      nullable: true
    groupTitle:
      type: string
      example: '["administrators","Staff"]'
      nullable: true
    groupTitleArray:
      type: array
      example:
        - administrators
        - Staff
    muted:
      type: boolean
      description: Whether or not the user has been muted.
    mutedUntil:
      type: number
      description: A UNIX timestamp representing the moment a muted state will be lifted.
    mutedReason:
      type: string
      description: The admin-provided reason for being muted.
    'icon:text':
      type: string
      description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
      example: D
    'icon:bgColor':
      type: string
      description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
      example: '#9c27b0'
    joindateISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    lastonlineISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    banned_until:
      type: number
      description: A UNIX timestamp representing the moment a ban will be lifted
      example: 0
    banned_until_readable:
      type: string
      description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
      example: Not Banned
  required:
    - uid
    - username
    - userslug
    - 'email:confirmed'
    - joindate
    - lastonline
    - picture
    - location
    - birthday
    - website
    - aboutme
    - signature
    - uploadedpicture
    - profileviews
    - reputation
    - postcount
    - topiccount
    - lastposttime
    - banned
    - 'banned:expire'
    - status
    - enum
    - flags
    - followerCount
    - followingCount
    - 'cover:url'
    - 'cover:position'
    - groupTitle
    - groupTitleArray
    - example
    - 'icon:text'
    - 'icon:bgColor'
    - joindateISO
    - lastonlineISO
    - banned_until
    - banned_until_readable
UserObjectFull:
  # accountHelpers.getUserDataByUserSlug
  type: object
  properties:
    uid:
      type: number
      description: A user identifier
      example: 1
    username:
      type: string
      description: A friendly name for a given user account
      example: Dragon Fruit
    userslug:
      type: string
      description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.)
      example: dragon-fruit
    email:
      type: string
      description: Email address associated with the user account
      example: dragonfruit@example.org
    'email:confirmed':
      type: number
      description: Whether the user has confirmed their email address or not
      example: 1
    joindate:
      type: number
      description: A UNIX timestamp representing the moment the user's account was created
      example: 1585337827953
    lastonline:
      type: number
      description: A UNIX timestamp representing the moment the user was last recorded online on this site
      example: 1585337827953
    picture:
      type: string
      description: A URL pointing to a picture to be used as the user's avatar
      example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
      nullable: true
    fullname:
      type: string
      example: Mr. Dragon Fruit Jr.
    displayname:
      type: string
      description: This is either username or fullname depending on forum and user settings
      example: Dragon Fruit
    location:
      type: string
      example: 'Toronto, Canada'
    birthday:
      type: string
      description: A birthdate given in an ISO format parseable by the Date object
      example: 03/27/2020
    website:
      type: string
      example: 'https://example.org'
    aboutme:
      type: string
      example: |
        This is a paragraph all about how my life got twist-turned upside-down
        and I'd like to take a minute and sit right here,
        to tell you all about how I became the administrator of NodeBB
    signature:
      type: string
      example: |
        This is an example signature
        It can span multiple lines.
    uploadedpicture:
      type: string
      example: /assets/profile/1-profileimg.png
      description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.'
      nullable: true
    profileviews:
      type: number
      description: The number of times this user's profile has been viewed
      example: 1000
    reputation:
      type: number
      description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points
      example: 100
    postcount:
      type: number
      example: 1000
    topiccount:
      type: number
      example: 50
    lastposttime:
      type: number
      description: A UNIX timestamp representing the moment the user posted last
      example: 1585337827953
    banned:
      type: number
      description: A Boolean representing whether a user is banned or not
      example: 0
    'banned:expire':
      type: number
      description: A UNIX timestamp representing the moment the ban will be lifted
      example: 1585337827953
    status:
      type: string
      enum:
        - online
        - offline
        - dnd
        - away
      example: online
    flags:
      type: number
      example: 0
      nullable: true
    followerCount:
      type: number
      example: 2
    followingCount:
      type: number
      example: 5
    'cover:url':
      type: string
      example: /assets/profile/1-cover.png
      nullable: true
    'cover:position':
      type: string
      example: 50.0301% 19.2464%
      nullable: true
    groupTitle:
      type: string
      example: '["administrators","Staff"]'
    groupTitleArray:
      type: array
      example:
        - administrators
        - Staff
    muted:
      type: boolean
      description: Whether or not the user has been muted.
    mutedUntil:
      type: number
      description: A UNIX timestamp representing the moment a muted state will be lifted.
      nullable: true
    mutedReason:
      type: string
      description: The admin-provided reason for being muted.
      nullable: true
    'icon:text':
      type: string
      description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
      example: D
    'icon:bgColor':
      type: string
      description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
      example: '#9c27b0'
    joindateISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    lastonlineISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    banned_until:
      type: number
      description: A UNIX timestamp representing the moment a ban will be lifted
      example: 0
    banned_until_readable:
      type: string
      description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
      example: Not Banned
    aboutmeParsed:
      type: string
    age:
      type: number
    emailHidden:
      type: boolean
    emailClass:
      type: string
    ips:
      type: array
      items:
        type: string
    moderationNote:
      type: string
    counts:
      type: object
      properties:
        best:
          type: number
        controversial:
          type: number
        blocks:
          type: number
        bookmarks:
          type: number
        categoriesWatched:
          type: number
        downvoted:
          type: number
        followers:
          type: number
        following:
          type: number
        groups:
          type: number
        ignored:
          type: number
        posts:
          type: number
        topics:
          type: number
        uploaded:
          type: number
        upvoted:
          type: number
        watched:
          type: number
    isBlocked:
      type: boolean
    blocksCount:
      type: number
    yourid:
      type: number
    theirid:
      type: number
    isTargetAdmin:
      type: boolean
    isAdmin:
      type: boolean
    isGlobalModerator:
      type: boolean
    isModerator:
      type: boolean
    isAdminOrGlobalModerator:
      type: boolean
    isAdminOrGlobalModeratorOrModerator:
      type: boolean
    isSelfOrAdminOrGlobalModerator:
      type: boolean
    canEdit:
      type: boolean
    canBan:
      type: boolean
    canMute:
      type: boolean
    canFlag:
      type: boolean
    canChangePassword:
      type: boolean
    isSelf:
      type: boolean
    isFollowing:
      type: boolean
    hasPrivateChat:
      type: number
    showHidden:
      type: boolean
    allowProfilePicture:
      type: boolean
    allowCoverPicture:
      type: boolean
    allowProfileImageUploads:
      type: number
    allowedProfileImageExtensions:
      type: string
    groups:
      type: array
      items:
        $ref: ./GroupObject.yaml#/GroupFullObject
    selectedGroup:
      type: array
      items:
        $ref: ./GroupObject.yaml#/GroupFullObject
    disableSignatures:
      type: boolean
    reputation:disabled:
      type: boolean
    downvote:disabled:
      type: boolean
    profile_links:
      type: array
      items:
        type: object
        properties:
          id:
            type: string
          route:
            type: string
          url:
            type: string
            description: The relative path to the profile link route from the root of the forum
          name:
            type: string
          visibility:
            type: object
            properties:
              self:
                type: boolean
              other:
                type: boolean
              moderator:
                type: boolean
              globalMod:
                type: boolean
              admin:
                type: boolean
              canViewInfo:
                type: boolean
          public:
            type: boolean
          icon:
            type: string
        required:
          - id
          - route
          - name
          - visibility
          - public
    sso:
      type: array
      items:
        type: object
        properties:
          associated:
            type: boolean
          url:
            type: string
          name:
            type: string
          icon:
            type: string
          deauthUrl:
            type: string
    websiteLink:
      type: string
    websiteName:
      type: string
    username:disableEdit:
      type: number
    email:disableEdit:
      type: number
UserObjectSlim:
  type: object
  properties:
    uid:
      type: number
      description: A user identifier
      example: 1
    username:
      type: string
      description: A friendly name for a given user account
      example: Dragon Fruit
    displayname:
      type: string
      description: This is either username or fullname depending on forum and user settings
      example: Dragon Fruit
    userslug:
      type: string
      description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.)
      example: dragon-fruit
    picture:
      type: string
      description: A URL pointing to a picture to be used as the user's avatar
      example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
      nullable: true
    status:
      type: string
      enum:
        - online
        - offline
        - dnd
        - away
      example: online
    postcount:
      type: number
      example: 1000
    reputation:
      type: number
      description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points
      example: 100
    'email:confirmed':
      type: number
      description: Whether the user has confirmed their email address or not
      example: 1
    lastonline:
      type: number
      description: A UNIX timestamp representing the moment the user was last recorded online on this site
      example: 1585337827953
    flags:
      type: number
      example: 0
      nullable: true
    banned:
      type: number
      description: A Boolean representing whether a user is banned or not
      example: 0
    'banned:expire':
      type: number
      description: A UNIX timestamp representing the moment the ban will be lifted
      example: 1585337827953
    joindate:
      type: number
      description: A UNIX timestamp representing the moment the user's account was created
      example: 1585337827953
    'icon:text':
      type: string
      description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
      example: D
    'icon:bgColor':
      type: string
      description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
      example: '#9c27b0'
    joindateISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    lastonlineISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    banned_until:
      type: number
      description: A UNIX timestamp representing the moment a ban will be lifted
      example: 0
    banned_until_readable:
      type: string
      description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
      example: Not Banned
UserObjectACP:
  type: object
  required:
    - uid
    - username
  properties:
    uid:
      type: number
      description: A user identifier
      example: 1
    username:
      type: string
      description: A friendly name for a given user account
      example: Dragon Fruit
    displayname:
      type: string
      description: This is either username or fullname depending on forum and user settings
      example: Dragon Fruit
    userslug:
      type: string
      description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.)
      example: dragon-fruit
    email:
      type: string
      description: Email address associated with the user account
      example: dragonfruit@example.org
    emailToConfirm:
      type: string
      description: Email address user used during signup, this email is not associated with the user until it is confirmed by clicking the link in the confirmation email.
    postcount:
      type: number
      example: 1000
    joindate:
      type: number
      description: A UNIX timestamp representing the moment the user's account was created
      example: 1585337827953
    banned:
      type: number
      description: A Boolean representing whether a user is banned or not
      example: 0
    reputation:
      type: number
      description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points
      example: 100
    picture:
      type: string
      description: A URL pointing to a picture to be used as the user's avatar
      example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
      nullable: true
    flags:
      type: number
      example: 0
      nullable: true
    lastonline:
      type: number
      description: A UNIX timestamp representing the moment the user was last recorded online on this site
      example: 1585337827953
    'email:confirmed':
      type: number
      description: Whether the user has confirmed their email address or not
      example: 1
    'email:expired':
      type: boolean
      description: True if confirmation email expired
    'email:pending':
      type: boolean
      description: True if confirmation email is still pending
    'icon:text':
      type: string
      description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
      example: D
    'icon:bgColor':
      type: string
      description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
      example: '#9c27b0'
    joindateISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    lastonlineISO:
      type: string
      example: '2020-03-27T20:30:36.590Z'
    banned_until_readable:
      type: string
      description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
      example: Not Banned
    administrator:
      type: boolean
    ip:
      type: string
      nullable: true
    ips:
      type: array
BanMuteArray:
  type: array
  items:
    type: object
    properties:
      uid:
        type: number
      timestamp:
        type: number
      expire:
        type: number
      fromUid:
        type: number
      user:
        type: object
        properties:
          username:
            type: string
            description: A friendly name for a given user account
          userslug:
            type: string
            description: An URL-safe variant of the username (i.e. lower-cased, spaces
              removed, etc.)
          picture:
            type: string
          uid:
            type: number
            description: A user identifier
          icon:text:
            type: string
            description: A single-letter representation of a username. This is used in the
              auto-generated icon given to users without
              an avatar
          icon:bgColor:
            type: string
            description: A six-character hexadecimal colour code assigned to the user. This
              value is used in conjunction with
              `icon:text` for the user's auto-generated
              icon
            example: "#f44336"
      until:
        type: number
      untilReadable:
        type: string
      timestampReadable:
        type: string
      timestampISO:
        type: string
      reason:
        type: string