Add World Message/MOTD support for MinecraftServer Integration (#66297)

pull/68458/head
Ben Felton 2022-03-22 12:26:23 -05:00 committed by GitHub
parent 0c6a6c360b
commit 43772b3fa9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 0 deletions

View File

@ -95,6 +95,7 @@ class MinecraftServer:
self.players_online = None self.players_online = None
self.players_max = None self.players_max = None
self.players_list = None self.players_list = None
self.motd = None
# Dispatcher signal name # Dispatcher signal name
self.signal_name = f"{SIGNAL_NAME_PREFIX}_{self.unique_id}" self.signal_name = f"{SIGNAL_NAME_PREFIX}_{self.unique_id}"
@ -179,6 +180,7 @@ class MinecraftServer:
self.players_online = status_response.players.online self.players_online = status_response.players.online
self.players_max = status_response.players.max self.players_max = status_response.players.max
self.latency_time = status_response.latency self.latency_time = status_response.latency
self.motd = (status_response.description).get("text")
self.players_list = [] self.players_list = []
if status_response.players.sample is not None: if status_response.players.sample is not None:
for player in status_response.players.sample: for player in status_response.players.sample:
@ -201,6 +203,7 @@ class MinecraftServer:
self.players_max = None self.players_max = None
self.latency_time = None self.latency_time = None
self.players_list = None self.players_list = None
self.motd = None
# Inform user once about failed update if necessary. # Inform user once about failed update if necessary.
if not self._last_status_request_failed: if not self._last_status_request_failed:

View File

@ -14,6 +14,7 @@ ICON_PLAYERS_ONLINE = "mdi:account-multiple"
ICON_PROTOCOL_VERSION = "mdi:numeric" ICON_PROTOCOL_VERSION = "mdi:numeric"
ICON_STATUS = "mdi:lan" ICON_STATUS = "mdi:lan"
ICON_VERSION = "mdi:numeric" ICON_VERSION = "mdi:numeric"
ICON_MOTD = "mdi:minecraft"
KEY_SERVERS = "servers" KEY_SERVERS = "servers"
@ -25,6 +26,7 @@ NAME_PLAYERS_ONLINE = "Players Online"
NAME_PROTOCOL_VERSION = "Protocol Version" NAME_PROTOCOL_VERSION = "Protocol Version"
NAME_STATUS = "Status" NAME_STATUS = "Status"
NAME_VERSION = "Version" NAME_VERSION = "Version"
NAME_MOTD = "World Message"
SCAN_INTERVAL = 60 SCAN_INTERVAL = 60
@ -36,3 +38,4 @@ UNIT_PLAYERS_MAX = "players"
UNIT_PLAYERS_ONLINE = "players" UNIT_PLAYERS_ONLINE = "players"
UNIT_PROTOCOL_VERSION = None UNIT_PROTOCOL_VERSION = None
UNIT_VERSION = None UNIT_VERSION = None
UNIT_MOTD = None

View File

@ -14,15 +14,18 @@ from .const import (
ATTR_PLAYERS_LIST, ATTR_PLAYERS_LIST,
DOMAIN, DOMAIN,
ICON_LATENCY_TIME, ICON_LATENCY_TIME,
ICON_MOTD,
ICON_PLAYERS_MAX, ICON_PLAYERS_MAX,
ICON_PLAYERS_ONLINE, ICON_PLAYERS_ONLINE,
ICON_PROTOCOL_VERSION, ICON_PROTOCOL_VERSION,
ICON_VERSION, ICON_VERSION,
NAME_LATENCY_TIME, NAME_LATENCY_TIME,
NAME_MOTD,
NAME_PLAYERS_MAX, NAME_PLAYERS_MAX,
NAME_PLAYERS_ONLINE, NAME_PLAYERS_ONLINE,
NAME_PROTOCOL_VERSION, NAME_PROTOCOL_VERSION,
NAME_VERSION, NAME_VERSION,
UNIT_MOTD,
UNIT_PLAYERS_MAX, UNIT_PLAYERS_MAX,
UNIT_PLAYERS_ONLINE, UNIT_PLAYERS_ONLINE,
UNIT_PROTOCOL_VERSION, UNIT_PROTOCOL_VERSION,
@ -45,6 +48,7 @@ async def async_setup_entry(
MinecraftServerLatencyTimeSensor(server), MinecraftServerLatencyTimeSensor(server),
MinecraftServerPlayersOnlineSensor(server), MinecraftServerPlayersOnlineSensor(server),
MinecraftServerPlayersMaxSensor(server), MinecraftServerPlayersMaxSensor(server),
MinecraftServerMOTDSensor(server),
] ]
# Add sensor entities. # Add sensor entities.
@ -176,3 +180,20 @@ class MinecraftServerPlayersMaxSensor(MinecraftServerSensorEntity):
async def async_update(self) -> None: async def async_update(self) -> None:
"""Update maximum number of players.""" """Update maximum number of players."""
self._state = self._server.players_max self._state = self._server.players_max
class MinecraftServerMOTDSensor(MinecraftServerSensorEntity):
"""Representation of a Minecraft Server MOTD sensor."""
def __init__(self, server: MinecraftServer) -> None:
"""Initialize MOTD sensor."""
super().__init__(
server=server,
type_name=NAME_MOTD,
icon=ICON_MOTD,
unit=UNIT_MOTD,
)
async def async_update(self) -> None:
"""Update MOTD."""
self._state = self._server.motd