diff --git a/Pipfile b/Pipfile index 58062e3..b311d68 100644 --- a/Pipfile +++ b/Pipfile @@ -6,7 +6,6 @@ name = "pypi" [dev-packages] [packages] -minecraft = {git = "https://github.com/ammaraskar/pyCraft.git"} requests = "*" cryptography = "*" future = "*" @@ -15,6 +14,7 @@ mcstatus = "*" quarry = "*" discord-py = {git = "https://github.com/Rapptz/discord.py.git", ref = "rewrite"} bidict = "*" +minecraft = {git = "https://github.com/starcraft66/pyCraft.git", ref = "feature/add-player-list-header-and-footer-packet"} [requires] python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock index 442f1f4..b22986a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "92f71d787f478e45589c4939466682bc725279f844ced3c62a92a4b5e21515e1" + "sha256": "21ac16059e4c1c4b6aa022bacaa0d0fdc42c09ea4277129278fc848c52742b46" }, "pipfile-spec": 6, "requires": { @@ -154,10 +154,10 @@ }, "future": { "hashes": [ - "sha256:eb6d4df04f1fb538c99f69c9a28b255d1ee4e825d479b9c62fc38c0cf38065a4" + "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8" ], "index": "pypi", - "version": "==0.17.0" + "version": "==0.17.1" }, "hyperlink": { "hashes": [ @@ -188,8 +188,8 @@ "version": "==2.2" }, "minecraft": { - "git": "https://github.com/ammaraskar/pyCraft.git", - "ref": "527f3d31468dbaf8c1cbfffd0cbf46e987d319a0" + "git": "https://github.com/starcraft66/pyCraft.git", + "ref": "154b3e30d4f3690a53b821f22b8c281c7ac893d5" }, "pyasn1": { "hashes": [ @@ -234,11 +234,11 @@ }, "requests": { "hashes": [ - "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", - "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" + "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54", + "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263" ], "index": "pypi", - "version": "==2.20.0" + "version": "==2.20.1" }, "service-identity": { "hashes": [ @@ -256,10 +256,10 @@ }, "sqlalchemy": { "hashes": [ - "sha256:c5951d9ef1d5404ed04bae5a16b60a0779087378928f997a294d1229c6ca4d3e" + "sha256:84412de3794acee05630e7788f25e80e81f78eb4837e7b71d0499129f660486a" ], "index": "pypi", - "version": "==1.2.12" + "version": "==1.2.13" }, "twisted": { "hashes": [ @@ -269,10 +269,10 @@ }, "urllib3": { "hashes": [ - "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", - "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" ], - "version": "==1.24" + "version": "==1.24.1" }, "zope.interface": { "hashes": [ diff --git a/docker-compose.yml b/docker-compose.yml index 8bddcf3..d0d5e6e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,3 +7,4 @@ services: volumes: - ./:/app:Z - ./:/data:Z + - ../pyCraft:/pyCraft:Z diff --git a/webhook-bridge.py b/webhook-bridge.py index 5f223c2..dc3de5b 100755 --- a/webhook-bridge.py +++ b/webhook-bridge.py @@ -39,7 +39,8 @@ BOT_USERNAME = "" NEXT_MESSAGE_TIME = datetime.now(timezone.utc) PREVIOUS_MESSAGE = "" PLAYER_LIST = bidict() -MOTD = "Not yet implemented" +TAB_HEADER = "" +TAB_FOOTER = "" LAST_CONNECTION_TIME = datetime.now(timezone.utc) @@ -101,6 +102,13 @@ def remove_emoji(string): return emoji_pattern.sub(r'', string) +def strip_colour(string): + colour_pattern = re.compile( + u"\U000000A7" # selection symbol + ".", flags=re.UNICODE) + return colour_pattern.sub(r'', string) + + def setup_logging(level): if level.lower() == "debug": log_level = logging.DEBUG @@ -234,6 +242,18 @@ def main(): connection.register_packet_listener( handle_tab_list, clientbound.play.PlayerListItemPacket) + connection.register_packet_listener( + handle_player_list_header_and_footer_update, clientbound.play.PlayerListHeaderAndFooterPacket) + + def handle_player_list_header_and_footer_update(header_footer_packet): + global TAB_FOOTER, TAB_HEADER + logging.debug("Got Tablist H/F Update: header={}".format(header_footer_packet.header)) + logging.debug("Got Tablist H/F Update: footer={}".format(header_footer_packet.footer)) + # Strip out colour codes + + TAB_HEADER = strip_colour(json.loads(header_footer_packet.header)["text"]) + TAB_FOOTER = strip_colour(json.loads(header_footer_packet.footer)["text"]) + def handle_tab_list(tab_list_packet): logging.debug("Processing tab list packet") for action in tab_list_packet.actions: @@ -514,8 +534,9 @@ def main(): await message.author.create_dm() send_channel = message.author.dm_channel player_list = ", ".join(list(map(lambda x: x[1], PLAYER_LIST.items()))) - msg = "MOTD: {}\n" \ - "Players online: {}".format(MOTD, player_list) + msg = "{}\n" \ + "Players online: {}\n" \ + "{}".format(TAB_HEADER, player_list, TAB_FOOTER) await send_channel.send(msg) except discord.errors.Forbidden: if isinstance(message.author, discord.abc.User):