simplify join/leave alert
All checks were successful
Build and Push Docker Image / build (push) Successful in 16s
All checks were successful
Build and Push Docker Image / build (push) Successful in 16s
This commit is contained in:
parent
67bb52c767
commit
d495ffc0fa
@ -46,14 +46,6 @@ class ConsoleCog(commands.Cog):
|
|||||||
if "CheckModsNeedUpdate: Mods need update" in line:
|
if "CheckModsNeedUpdate: Mods need update" in line:
|
||||||
await self.handle_mod_needs_update(line)
|
await self.handle_mod_needs_update(line)
|
||||||
|
|
||||||
# elif "ConnectionManager: [fully-connected]" in line:
|
|
||||||
# cog = self.bot.get_cog("PlayersCog")
|
|
||||||
# await cog.handle_player_connected(line)
|
|
||||||
|
|
||||||
# elif "ConnectionManager: [disconnect]" in line:
|
|
||||||
# cog = self.bot.get_cog("PlayersCog")
|
|
||||||
# await cog.handle_player_disconnected(line)
|
|
||||||
|
|
||||||
async def alert_and_wait_for_restart(self, intervals_ms: list[int], reason: str):
|
async def alert_and_wait_for_restart(self, intervals_ms: list[int], reason: str):
|
||||||
for interval_ms in intervals_ms:
|
for interval_ms in intervals_ms:
|
||||||
seconds_remaining = interval_ms / 1000
|
seconds_remaining = interval_ms / 1000
|
||||||
|
141
cogs/players.py
141
cogs/players.py
@ -28,64 +28,6 @@ for path in LOGS_FOLDER_PATH.iterdir():
|
|||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
# @dataclass(slots=True)
|
|
||||||
# class SteamProfileSummary:
|
|
||||||
# steam_id: int
|
|
||||||
# profile_name: str
|
|
||||||
# url: str
|
|
||||||
# avatar_url: str
|
|
||||||
|
|
||||||
|
|
||||||
# @dataclass(slots=True)
|
|
||||||
# class ZomboidUser:
|
|
||||||
# guid: str
|
|
||||||
# ip: str
|
|
||||||
# steam_id: str
|
|
||||||
# access: str
|
|
||||||
# username: str
|
|
||||||
# connection_type: str
|
|
||||||
# steam_profile_summary: SteamProfileSummary | None = None
|
|
||||||
|
|
||||||
# async def fetch_steam_profile(self, steam_api_key: str):
|
|
||||||
# if not steam_api_key:
|
|
||||||
# log.warning("No steam API key, can't get profile summary.")
|
|
||||||
# return
|
|
||||||
|
|
||||||
# async with httpx.AsyncClient() as client:
|
|
||||||
# response = await client.get(url=f"https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key={steam_api_key}&steamids={self.steam_id}")
|
|
||||||
# response.raise_for_status()
|
|
||||||
|
|
||||||
# all_data = response.json()
|
|
||||||
# user_data = all_data["response"]["players"][0]
|
|
||||||
|
|
||||||
# log.debug("fetched user data for: %s", self.steam_id)
|
|
||||||
|
|
||||||
# self.steam_profile_summary = SteamProfileSummary(
|
|
||||||
# steam_id=user_data["steamid"],
|
|
||||||
# profile_name=user_data["personaname"],
|
|
||||||
# url=user_data["profileurl"],
|
|
||||||
# avatar_url=user_data["avatarfull"]
|
|
||||||
# )
|
|
||||||
|
|
||||||
# log.debug("successfully parsed steam profile summary for: %s", self.steam_id)
|
|
||||||
|
|
||||||
# @property
|
|
||||||
# def embed(self) -> Embed:
|
|
||||||
# if not self.steam_profile_summary:
|
|
||||||
# raise ValueError("You must fetch the steam_profile_summary before creating an embed.")
|
|
||||||
|
|
||||||
# embed = Embed(
|
|
||||||
# title="Player",
|
|
||||||
# description=(
|
|
||||||
# f"{self.username} ([{self.steam_profile_summary.profile_name}]({self.steam_profile_summary.url}))\n"
|
|
||||||
# "Deaths: ???\n"
|
|
||||||
# "Playtime: ???"
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
# embed.set_thumbnail(url=self.steam_profile_summary.avatar_url)
|
|
||||||
# return embed
|
|
||||||
|
|
||||||
|
|
||||||
class PlayersCog(commands.Cog):
|
class PlayersCog(commands.Cog):
|
||||||
"""
|
"""
|
||||||
Handles tasks related to in-game players.
|
Handles tasks related to in-game players.
|
||||||
@ -139,10 +81,9 @@ class PlayersCog(commands.Cog):
|
|||||||
|
|
||||||
log.debug("successfully registered player death to %s", re_match.group("username"))
|
log.debug("successfully registered player death to %s", re_match.group("username"))
|
||||||
|
|
||||||
async def process_connected_player(self, line: str):
|
async def show_player_join_leave_alert(self, line: str, re_pattern: str, embed_title: str):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
re_pattern = r'\[(?P<timestamp>.*?)\] (?P<steam_id>/*?) "(?P<username>.*?)" fully connected \((?P<coordinates>.*?)\)'
|
|
||||||
re_match = re.search(re_pattern, line)
|
re_match = re.search(re_pattern, line)
|
||||||
|
|
||||||
if not re_match:
|
if not re_match:
|
||||||
@ -156,77 +97,29 @@ class PlayersCog(commands.Cog):
|
|||||||
channel = channel or await self.bot.fetch_channel(self.bot.in_game_channel_id)
|
channel = channel or await self.bot.fetch_channel(self.bot.in_game_channel_id)
|
||||||
|
|
||||||
embed = await player.get_embed()
|
embed = await player.get_embed()
|
||||||
embed.title = "Player Has Connected"
|
embed.title = embed_title
|
||||||
|
|
||||||
await channel.send(embed=embed)
|
await channel.send(embed=embed)
|
||||||
|
|
||||||
|
async def process_connected_player(self, line: str):
|
||||||
|
"""
|
||||||
|
"""
|
||||||
|
await self.show_player_join_leave_alert(
|
||||||
|
line=line,
|
||||||
|
re_pattern=r'\[(?P<timestamp>.*?)\] (?P<steam_id>/*?) "(?P<username>.*?)" fully connected \((?P<coordinates>.*?)\)',
|
||||||
|
embed_title="Player Has Connected"
|
||||||
|
)
|
||||||
|
|
||||||
async def process_disconnected_player(self, line: str):
|
async def process_disconnected_player(self, line: str):
|
||||||
pass
|
"""
|
||||||
|
"""
|
||||||
|
await self.show_player_join_leave_alert(
|
||||||
|
line=line,
|
||||||
|
re_pattern=r'\[(?P<timestamp>.*?)\] (?P<steam_id>/*?) "(?P<username>.*?)" disconnected player \((?P<coordinates>.*?)\)',
|
||||||
|
embed_title="Player Has Disconnected"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# async def handle_player_connected(self, line: str):
|
|
||||||
# """
|
|
||||||
# Report when a user has joined the server into a specified Discord channel.
|
|
||||||
# Example of line:
|
|
||||||
# ConnectionManager: [fully-connected] "" connection: guid=*** ip=*** steam-id=*** access=admin username="corbz" connection-type="UDPRakNet"
|
|
||||||
# """
|
|
||||||
# re_pattern = r"guid=(\d+)\s+ip=([\d\.]+)\s+steam-id=(\d+)\s+access=(\w*)\s+username=\"([^\"]+)\"\s+connection-type=\"([^\"]+)\""
|
|
||||||
# re_match = re.search(re_pattern, line)
|
|
||||||
# if not re_match:
|
|
||||||
# log.warning("failed to parse player data: %s", line)
|
|
||||||
# return
|
|
||||||
|
|
||||||
# user = ZomboidUser(
|
|
||||||
# guid=re_match.group(1),
|
|
||||||
# ip=re_match.group(2),
|
|
||||||
# steam_id=re_match.group(3),
|
|
||||||
# access=re_match.group(4),
|
|
||||||
# username=re_match.group(5),
|
|
||||||
# connection_type=re_match.group(6)
|
|
||||||
# )
|
|
||||||
# await user.fetch_steam_profile(self.bot.steam_api_key)
|
|
||||||
|
|
||||||
# channel = self.bot.get_channel(self.bot.in_game_channel_id)
|
|
||||||
# channel = await self.bot.fetch_channel(self.bot.in_game_channel_id) if not channel else channel
|
|
||||||
|
|
||||||
# embed = user.embed
|
|
||||||
# embed.title = "Player Has Connected"
|
|
||||||
# embed.colour = Colour.brand_green()
|
|
||||||
|
|
||||||
# await channel.send(embed=embed)
|
|
||||||
|
|
||||||
# async def handle_player_disconnected(self, line: str):
|
|
||||||
# """
|
|
||||||
# Report when a user has left the server into a specified Discord channel.
|
|
||||||
# Example of line:
|
|
||||||
# ConnectionManager: [disconnect] "receive-disconnect" connection: guid=*** ip=*** steam-id=*** access=admin username="corbz" connection-type="Disconnected"
|
|
||||||
# """
|
|
||||||
# re_pattern = r"guid=(\d+)\s+ip=([\d\.]+)\s+steam-id=(\d+)\s+access=(\w*)\s+username=\"([^\"]+)\"\s+connection-type=\"([^\"]+)\""
|
|
||||||
# re_match = re.search(re_pattern, line)
|
|
||||||
# if not re_match:
|
|
||||||
# log.warning("failed to parse player data: %s", line)
|
|
||||||
# return
|
|
||||||
|
|
||||||
# user = ZomboidUser(
|
|
||||||
# guid=re_match.group(1),
|
|
||||||
# ip=re_match.group(2),
|
|
||||||
# steam_id=re_match.group(3),
|
|
||||||
# access=re_match.group(4),
|
|
||||||
# username=re_match.group(5),
|
|
||||||
# connection_type=re_match.group(6)
|
|
||||||
# )
|
|
||||||
# await user.fetch_steam_profile(self.bot.steam_api_key)
|
|
||||||
|
|
||||||
# channel = self.bot.get_channel(self.bot.in_game_channel_id)
|
|
||||||
# channel = await self.bot.fetch_channel(self.bot.in_game_channel_id) if not channel else channel
|
|
||||||
|
|
||||||
# embed = user.embed
|
|
||||||
# embed.title = "Player Has Disconnected"
|
|
||||||
# embed.colour = Colour.brand_red()
|
|
||||||
|
|
||||||
# await channel.send(embed=embed)
|
|
||||||
|
|
||||||
async def setup(bot: commands.Bot):
|
async def setup(bot: commands.Bot):
|
||||||
cog = PlayersCog(bot)
|
cog = PlayersCog(bot)
|
||||||
await bot.add_cog(cog)
|
await bot.add_cog(cog)
|
||||||
|
Reference in New Issue
Block a user