* 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~