Go to file
2023-11-01 11:24:12 -05:00
API Initial Commit 2023-10-24 01:37:34 -05:00
README.org docs: migrate spec to org format 2023-11-01 11:24:12 -05:00

Squad Whitelist Management

Discord Bot

Commands

  • /link

    • Example: /link 7312312312395
    • Links user's discord ID with their provided steam64

      • If linked to another discord id, reject
      • Use the user's discord username for their username in the API
  • /group-link

    • Example: /group-link @Odin {group-uuid}
    • Links a Group on the API with a given discord ID for the role

      • If the Discord ID already exists, inform about it but allow
  • /list-groups

    • Example: /list-groups
    • Outputs:

      • Groups with Associated Discord Role

        • Example: @Odin | https://my-api.com/org/asgard/group-uuid

Events

  • on-member-update

    • For each member, look at the change in discord roles

      • If they had a role added to them that's a linked group, add them to the Group
      • If they don't have a linked Steam64, ping them in a channel to do so
  • on-startup

    • Hit up API for all members of linked roles
    • Check if the members are in those roles and modify as needed

API

Functionality

Generate Remote Admin List
  • Capability to export as remote admin list
  • Can be applied to an entire Org
  • Example: https://api-url.com/org/asgard?reserved
  • Example: https://api-url.com/group/group-uuid?startvote&changemap&pause
  • Query params

    • startvote
    • changemap
    • pause
    • cheat
    • private
    • balance
    • chat
    • kick
    • ban
    • config
    • cameraman
    • immune
    • manageserver
    • featuretest
    • reserve
    • demos
    • clientdemos
    • debug
    • teamchange
    • forceteamchange
    • canseeadminchat
  • Example:

    • Query: https://api-url.com/org/{org-name}/{group-uuid}
    • Output: Group={group-uuid}:{query-params} // {group-name}

Data

Users

  • Table Name: USERS

    Key Type Constraints Description
    id Primary Key Steam64
    username String
    password String? Salted Hash, don't allow login if null. Owning tenant can set Password.
    discord_id Int?
    superuser bool

Organizations

  • Table Name: ORGS

    Key Type Constraints Description
    id UUID4
    name String Unique
    owner_id USERS.ID
    discord_server_id Int?

Group Members

  • Table Name: GROUP_MEMBERS

    Key Type Constraints Description
    user ORG_MEMBERS.user_id
    org_id ORGS.ID
    group GROUPS.ID
    nick_name String
    member bool
    owner bool
    perm_manage_mods bool
    perm_manage_perms bool
    perm_manage_users bool
    perm_manage_tags bool
    perm_manage_import bool Allow user to specify a remote admin list to use for the Group

Group Squad Perms

  • Table Name: GROUP_SQUAD_PERMS

    Key Type Constraints Description
    group_id GROUP.ID Primary Key
    perm_changemap bool Allowed to change the current map
    perm_pause bool Allowed to pause server gameplay
    perm_cheat bool Allowed to use server cheat commands
    perm_private bool Allowed to password protect the server
    perm_balance bool Allowed to ignore team balance
    perm_chat bool Allowed to access admin chat and make server broadcasts
    perm_kick bool Allowed to kick players
    perm_ban bool Allowed to ban players
    perm_config bool Allowed to change server config
    perm_cameraman bool Allowed to admin spectate mode
    perm_immune bool Allowed to cannot be kicked / banned
    perm_manageserver bool Allowed to shutdown server
    perm_featuretest bool Allowed to any features added for testing by dev team
    perm_reserve bool Allowed to reserve slot
    perm_demos bool Allowed to record Demos on the server side via admin commands
    perm_clientdemos bool Allowed to record Demos on the client side via commands or the replay UI
    perm_debug bool Allowed to Show admin stats command and other debugging info
    perm_teamchange bool Allowed to no timer limits on team change
    perm_forceteamchange bool Allowed to can issue the ForceTeamChange command
    perm_canseeadminchat bool Allowed to this group can see the admin chat and teamkill/admin-join notifications

TAGS

  • Table Name: TAGS

    Key Type Constraints Description
    id UUID4 Primary Key
    name String Must be unique when combined with org_id
    org_id ORG.ID Must be unique when combined with name
    • Both Org & Name together must be unique, the combo of them is unique

Group Tags

  • Table Name: GROUP_TAGS

    Key Type Constraints Description
    id UUID4 Primary Key
    group_id GROUP.ID Must be unique when combined with tag
    tag_id TAGS.ID Must be unique when combined with group
  • Together both GROUP & TAG create primary key
  • SELECT * FROM GROUP_TAGS WHERE GROUP = "GROUP.ID" AND TAG = "TAG.ID"
  • Org

    • Single Owner
    • Groups

      • Group: whitelist-{group-id}

        • Tags: vanilla
        • Single Owner
        • Perms

          • Group

            • Manage Users (Add or Remove Users)
            • Manage Moderators (Allow other users to manage the group)
            • Manage Remote Import (Allowed to set a remote import)
            • Manage Tags (Allowed to manage tags)
          • Squad

            • Reserve
            • Demos
            • Kick
            • Ban
            • Etc.
  • Accessing URLs https://api-url.com/export/squad-admin-list/org/asgard/groups/group-uuid https://api-url.com/export/squad-admin-list/org/asgard https://api-url.com/export/squad-admin-list/org/asgard?tag=tactical https://api-url.com/export/squad-admin-list/org/asgard?tag=tactical&tag=vanilla