Skip to content

Commit e195d87

Browse files
authored
Fix error when editing blacklist record (#1169)
* Fix error when editing blacklist record Signed-off-by: Tim Raaymakers <43066279+timraay@users.noreply.github.com> * Update blacklist player fetch --------- Signed-off-by: Tim Raaymakers <43066279+timraay@users.noreply.github.com>
1 parent 177e45d commit e195d87

File tree

4 files changed

+25
-12
lines changed

4 files changed

+25
-12
lines changed

rcon/blacklist.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -398,10 +398,14 @@ def synchronize_ban(
398398
return
399399

400400
# Check whether the player is online (and grab their name)
401-
player_name = next(
402-
(p_name for p_name, p_id in rcon.get_player_ids() if p_id == player_id), None
403-
)
404-
is_online = player_name is not None
401+
try:
402+
player_info = rcon.get_detailed_player_info(player_id=player_id)
403+
except HLLCommandFailedError:
404+
player_name = None
405+
is_online = False
406+
else:
407+
player_name = player_info["name"]
408+
is_online = True
405409

406410
if (
407411
new_record.blacklist.sync != BlacklistSyncMethod.BAN_IMMEDIATELY
@@ -1060,7 +1064,10 @@ def handle_edit_record(self, payload: BlacklistEditRecordCommand):
10601064

10611065
# Check whether the old or new record had or has priority
10621066
elif new_record.id == old_record["id"] or (
1063-
SERVER_NUMBER in old_record["blacklist"]["servers"]
1067+
(
1068+
old_record["blacklist"]["servers"] is None
1069+
or SERVER_NUMBER in old_record["blacklist"]["servers"]
1070+
)
10641071
and _is_higher_priority_record(
10651072
old_record["created_at"],
10661073
old_record["expires_at"],

rcon/commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def get_all_player_info(self) -> list[dict[str, Any]]:
317317
# TODO: Updated function signatures
318318
return self.exchange("GetServerInformation", 2, {"Name": "players", "Value": ""}).content_dict["players"]
319319

320-
def get_player_info(self, player_id: str, can_fail=True) -> dict[str, Any] | None:
320+
def get_player_info(self, player_id: str) -> dict[str, Any] | None:
321321
# TODO: Updated function signatures
322322
return self.exchange("GetServerInformation", 2, {"Name": "player", "Value": player_id}).content_dict
323323

rcon/hooks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,8 @@ def handle_on_connect(
501501
):
502502
try:
503503
rcon.get_players.cache_clear()
504-
rcon.get_player_info.clear_for(player=struct_log["player_id_1"])
504+
rcon.get_player_info.clear_for(player_id=struct_log["player_id_1"])
505+
rcon.get_detailed_player_info.clear_for(player_id=struct_log["player_id_1"])
505506
except Exception:
506507
logger.exception("Unable to clear cache for %s", player_id)
507508

rcon/rcon.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from dateutil import parser
1313

14+
from rcon.connection import HLLCommandError
1415
import rcon.steam_utils
1516
from rcon.cache_utils import get_redis_client, invalidates, ttl_cache
1617
from rcon.commands import HLLCommandFailedError, ServerCtl, VipId
@@ -432,13 +433,16 @@ def _has_leader(self, squad) -> bool:
432433
@ttl_cache(ttl=60 * 60 * 24, cache_falsy=False)
433434
def get_player_info(self, player_id: str, can_fail=False):
434435
try:
435-
player = super().get_player_info(player_id, can_fail=can_fail)
436-
if not player:
436+
try:
437+
player = super().get_player_info(player_id)
438+
except HLLCommandError:
437439
return {}
438440

439441
profile = rcon.steam_utils.get_steam_profile(steam_id_64=player_id)
440442

441443
except (HLLCommandFailedError, ValueError):
444+
# TODO: What's going on here? Why do we have the `can_fail` arg even?
445+
442446
# Making that debug instead of exception as it's way to spammy
443447
logger.exception("Can't get player info for %s", player_id)
444448
# logger.exception("Can't get player info for %s", player)
@@ -461,9 +465,10 @@ def get_player_info(self, player_id: str, can_fail=False):
461465

462466
@ttl_cache(ttl=2, cache_falsy=False)
463467
def get_detailed_player_info(self, player_id: str, player: GetPlayersType | None = None) -> GetDetailedPlayer:
464-
raw = super().get_player_info(player_id, can_fail=False)
465-
if not raw:
466-
raise HLLCommandFailedError("Got bad data")
468+
try:
469+
raw = super().get_player_info(player_id)
470+
except HLLCommandError:
471+
raise HLLCommandFailedError("Player is not online")
467472
return self._get_detailed_player_info(player_id, raw, player)
468473

469474
def _get_detailed_player_info(self, player_id: str, raw: dict[str, Any],

0 commit comments

Comments
 (0)