Network: Add docs for new permissions mapping and implement it in CommonClient.py

This commit is contained in:
Fabian Dill 2021-09-28 17:22:23 +02:00
parent 16454dbc33
commit 345d4c58f3
2 changed files with 19 additions and 7 deletions

View File

@ -9,7 +9,7 @@ import websockets
import Utils import Utils
from MultiServer import CommandProcessor from MultiServer import CommandProcessor
from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, color, ClientStatus from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission
from Utils import Version from Utils import Version
from worlds import network_data_package, AutoWorldRegister from worlds import network_data_package, AutoWorldRegister
@ -315,8 +315,9 @@ async def process_server_cmd(ctx: CommonContext, args: dict):
logger.info("Server protocol tags: " + ", ".join(args["tags"])) logger.info("Server protocol tags: " + ", ".join(args["tags"]))
if args['password']: if args['password']:
logger.info('Password required') logger.info('Password required')
logger.info(f"Forfeit setting: {args['forfeit_mode']}") for permission_name, permission_flag in args.get("permissions", {}).items():
logger.info(f"Remaining setting: {args['remaining_mode']}") flag = Permission(permission_flag)
logger.info(f"{permission_name.capitalize()} permission: {flag.name}")
logger.info( logger.info(
f"A !hint costs {args['hint_cost']}% of your total location count as points" f"A !hint costs {args['hint_cost']}% of your total location count as points"
f" and you get {args['location_check_points']}" f" and you get {args['location_check_points']}"

View File

@ -53,8 +53,7 @@ Sent to clients when they connect to an Archipelago server.
| version | NetworkVersion | Object denoting the version of Archipelago which the server is running. See [NetworkVersion](#NetworkVersion) for more details. | | version | NetworkVersion | Object denoting the version of Archipelago which the server is running. See [NetworkVersion](#NetworkVersion) for more details. |
| tags | list\[str\] | Denotes special features or capabilities that the sender is capable of. Example: `WebHost` | | tags | list\[str\] | Denotes special features or capabilities that the sender is capable of. Example: `WebHost` |
| password | bool | Denoted whether a password is required to join this room.| | password | bool | Denoted whether a password is required to join this room.|
| forfeit_mode | str | `auto`, `enabled`, `disabled`, `auto-enabled` or `goal`. | | permissions | dict\[str, Permission\[int\]\] | Mapping of permission name to Permission, known names: "forfeit" and "remaining". |
| remaining_mode | str | `enabled`, `disabled`, `goal` |
| hint_cost | int | The amount of points it costs to receive a hint from the server. | | hint_cost | int | The amount of points it costs to receive a hint from the server. |
| location_check_points | int | The amount of hint points you receive per item/location check completed. || | location_check_points | int | The amount of hint points you receive per item/location check completed. ||
| players | list\[NetworkPlayer\] | Sent only if the client is properly authenticated (see [Archipelago Connection Handshake](#Archipelago-Connection-Handshake)). Information on the players currently connected to the server. See [NetworkPlayer](#NetworkPlayer) for more details. | | players | list\[NetworkPlayer\] | Sent only if the client is properly authenticated (see [Archipelago Connection Handshake](#Archipelago-Connection-Handshake)). Information on the players currently connected to the server. See [NetworkPlayer](#NetworkPlayer) for more details. |
@ -219,7 +218,7 @@ Sent to the server to update on the sender's status. Examples include readiness
#### Arguments #### Arguments
| Name | Type | Notes | | Name | Type | Notes |
| ---- | ---- | ----- | | ---- | ---- | ----- |
| status | int | One of [Client States](#Client-States). Follow the link for more information. | | status | ClientStatus\[int\] | One of [Client States](#Client-States). Send as int. Follow the link for more information. |
### Say ### Say
Basic chat command which sends text to the server to be distributed to other clients. Basic chat command which sends text to the server to be distributed to other clients.
@ -341,7 +340,7 @@ An enumeration containing the possible client states that may be used to inform
```python ```python
import enum import enum
class CLientStatus(enum.IntEnum): class ClientStatus(enum.IntEnum):
CLIENT_UNKNOWN = 0 CLIENT_UNKNOWN = 0
CLIENT_READY = 10 CLIENT_READY = 10
CLIENT_PLAYING = 20 CLIENT_PLAYING = 20
@ -358,6 +357,18 @@ class Version(NamedTuple):
build: int build: int
``` ```
### Permission
An enumeration containing the possible command permission, for commands that may be restricted.
```python
import enum
class Permission(enum.IntEnum):
disabled = 0b000 # 0, completely disables access
enabled = 0b001 # 1, allows manual use
goal = 0b010 # 2, allows manual use after goal completion
auto = 0b110 # 6, forces use after goal completion, only works for forfeit
auto_enabled = 0b111 # 7, forces use after goal completion, allows manual use any time
```
### Data Package Contents ### Data Package Contents
A data package is a JSON object which may contain arbitrary metadata to enable a client to interact with the Archipelago server most easily. Currently, this package is used to send ID to name mappings so that clients need not maintain their own mappings. A data package is a JSON object which may contain arbitrary metadata to enable a client to interact with the Archipelago server most easily. Currently, this package is used to send ID to name mappings so that clients need not maintain their own mappings.