From 345d4c58f35bf42ce3e90feae32112f0460901e9 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 28 Sep 2021 17:22:23 +0200 Subject: [PATCH] Network: Add docs for new permissions mapping and implement it in CommonClient.py --- CommonClient.py | 7 ++++--- docs/network protocol.md | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index 9187159f..79d73a7e 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -9,7 +9,7 @@ import websockets import Utils 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 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"])) if args['password']: logger.info('Password required') - logger.info(f"Forfeit setting: {args['forfeit_mode']}") - logger.info(f"Remaining setting: {args['remaining_mode']}") + for permission_name, permission_flag in args.get("permissions", {}).items(): + flag = Permission(permission_flag) + logger.info(f"{permission_name.capitalize()} permission: {flag.name}") logger.info( f"A !hint costs {args['hint_cost']}% of your total location count as points" f" and you get {args['location_check_points']}" diff --git a/docs/network protocol.md b/docs/network protocol.md index 2c5e556b..c4326a7c 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -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. | | 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.| -| forfeit_mode | str | `auto`, `enabled`, `disabled`, `auto-enabled` or `goal`. | -| remaining_mode | str | `enabled`, `disabled`, `goal` | +| permissions | dict\[str, Permission\[int\]\] | Mapping of permission name to Permission, known names: "forfeit" and "remaining". | | 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. || | 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 | 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 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 import enum -class CLientStatus(enum.IntEnum): +class ClientStatus(enum.IntEnum): CLIENT_UNKNOWN = 0 CLIENT_READY = 10 CLIENT_PLAYING = 20 @@ -358,6 +357,18 @@ class Version(NamedTuple): 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 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.