From 225719607d4b7e8b1b56307dc724649388830534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 13:56:33 +0100 Subject: [PATCH 1/7] remove unused imports --- cogs/mogi/calculations.py | 1 - cogs/mogi/leave_mogi.py | 1 - cogs/mogi/start.py | 1 - cogs/mogi/stop.py | 3 --- 4 files changed, 6 deletions(-) diff --git a/cogs/mogi/calculations.py b/cogs/mogi/calculations.py index e91d6d7..e1b9f58 100644 --- a/cogs/mogi/calculations.py +++ b/cogs/mogi/calculations.py @@ -15,7 +15,6 @@ is_mogi_in_progress, is_mogi_manager, ) -from utils.command_helpers.confirm import confirmation from utils.command_helpers.apply_update_roles import update_roles from utils.command_helpers.wait_for import get_awaited_message diff --git a/cogs/mogi/leave_mogi.py b/cogs/mogi/leave_mogi.py index f8eded7..2550ed6 100644 --- a/cogs/mogi/leave_mogi.py +++ b/cogs/mogi/leave_mogi.py @@ -1,5 +1,4 @@ from discord import slash_command -from discord.utils import get from discord.ext import commands from models.CustomMogiContext import MogiApplicationContext diff --git a/cogs/mogi/start.py b/cogs/mogi/start.py index c896388..ba7d963 100644 --- a/cogs/mogi/start.py +++ b/cogs/mogi/start.py @@ -1,5 +1,4 @@ from discord import SlashCommandGroup, Option -from discord.utils import get from discord.ext import commands from models.CustomMogiContext import MogiApplicationContext diff --git a/cogs/mogi/stop.py b/cogs/mogi/stop.py index 8aa0733..d2fb664 100644 --- a/cogs/mogi/stop.py +++ b/cogs/mogi/stop.py @@ -1,12 +1,9 @@ from discord import slash_command, Message -from discord.utils import get from discord.ext import commands from models.CustomMogiContext import MogiApplicationContext from utils.command_helpers.checks import is_mogi_in_progress -from config import GUILD_IDS - class stop(commands.Cog): def __init__(self, bot): From 363a1ed0ca3616364a14da5641fc517143cbd444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 13:56:48 +0100 Subject: [PATCH 2/7] swap inmogi roles when subbing --- cogs/mogi/sub_manager.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cogs/mogi/sub_manager.py b/cogs/mogi/sub_manager.py index 2113ed7..c45768d 100644 --- a/cogs/mogi/sub_manager.py +++ b/cogs/mogi/sub_manager.py @@ -62,6 +62,13 @@ async def sub( ctx.mogi.subs.append(replacement_profile) + await (await ctx.guild.fetch_member(player_profile.discord_id)).remove_roles( + ctx.inmogi_role + ) + await (await ctx.guild.fetch_member(replacement_profile.discord_id)).add_roles( + ctx.inmogi_role + ) + await ctx.respond( f"<@{player_profile.discord_id}> has been subbed out for <@{replacement_profile.discord_id}>" ) From 06218db9c814dae6f2291a1fc9158d6e2064bf93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 14:01:36 +0100 Subject: [PATCH 3/7] use enum for get_room_info --- utils/data/roombrowser.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/utils/data/roombrowser.py b/utils/data/roombrowser.py index 74b0a6b..ad02e3a 100644 --- a/utils/data/roombrowser.py +++ b/utils/data/roombrowser.py @@ -1,11 +1,17 @@ import requests -from typing import Literal +from enum import Enum from models.RoomModel import Room from config import YUZU_API_URL, YUZU_SERVER_IP, SERVER_MAIN_PORT, SERVER_LOUNGE_PORT -def get_room_info(server: str = Literal["main", "lounge"]) -> Room: +class ServerType(Enum): + MAIN = "main" + LOUNGE = "lounge" + + +def get_room_info(server: ServerType) -> Room: + try: data: dict = (requests.get(f"http://{YUZU_API_URL}/lobby")).json() servers: list[dict] = data.get("rooms", []) @@ -17,7 +23,7 @@ def get_room_info(server: str = Literal["main", "lounge"]) -> Room: if room["address"] == YUZU_SERVER_IP and ( room["port"] == SERVER_MAIN_PORT - if server == "main" + if server == ServerType.MAIN else room["port"] == SERVER_LOUNGE_PORT ) ][0] From 1b88a05527318f056f3577e3823a4427cb3cf6df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 14:04:49 +0100 Subject: [PATCH 4/7] improve docstring on CustomMogiCOntext --- models/CustomMogiContext.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/models/CustomMogiContext.py b/models/CustomMogiContext.py index 9b5d673..655ba98 100644 --- a/models/CustomMogiContext.py +++ b/models/CustomMogiContext.py @@ -8,7 +8,11 @@ class MogiApplicationContext(discord.ApplicationContext): - """## `discord.ApplicationContext` but with the `mogi` attribute: + """## `discord.ApplicationContext` with custom Lounge attributes: + - `mogi`: `Mogi` object of the channel + - `main_guild`: `discord.Guild` object of the main guild + - `inmogi_role`: `discord.Role` object of the InMogi role + - `get_lounge_role(name: str)`: method to get a role by name Represents a Discord application command interaction context. From f3ce6d716025ec3e5f48321678b29f599a5df505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 14:09:47 +0100 Subject: [PATCH 5/7] rename vote_factory --- cogs/mogi/start.py | 2 +- utils/command_helpers/{btn_factory.py => vote_factory.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename utils/command_helpers/{btn_factory.py => vote_factory.py} (100%) diff --git a/cogs/mogi/start.py b/cogs/mogi/start.py index ba7d963..eae4859 100644 --- a/cogs/mogi/start.py +++ b/cogs/mogi/start.py @@ -2,7 +2,7 @@ from discord.ext import commands from models.CustomMogiContext import MogiApplicationContext -from utils.command_helpers.btn_factory import create_button_view +from utils.command_helpers.vote_factory import create_button_view from utils.command_helpers.checks import ( is_mogi_not_in_progress, is_mogi_manager, diff --git a/utils/command_helpers/btn_factory.py b/utils/command_helpers/vote_factory.py similarity index 100% rename from utils/command_helpers/btn_factory.py rename to utils/command_helpers/vote_factory.py From d38aaad01e468b9a0e458f03cced8ba5eb92090c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 14:30:32 +0100 Subject: [PATCH 6/7] reworked ranks with Enum --- cogs/profiles/leaderboard.py | 4 +- cogs/profiles/player.py | 6 +-- models/RankModel.py | 44 +++++++++++++-------- utils/command_helpers/apply_update_roles.py | 8 ++-- utils/maths/ranks.py | 19 --------- 5 files changed, 35 insertions(+), 46 deletions(-) delete mode 100644 utils/maths/ranks.py diff --git a/cogs/profiles/leaderboard.py b/cogs/profiles/leaderboard.py index bd0d000..a06d210 100644 --- a/cogs/profiles/leaderboard.py +++ b/cogs/profiles/leaderboard.py @@ -8,7 +8,7 @@ from models.CustomMogiContext import MogiApplicationContext from utils.data.database import db_players -from utils.maths.ranks import getRankByMMR +from models.RankModel import Rank class leaderboard(commands.Cog): @@ -63,7 +63,7 @@ async def leaderboard( losses = len([delta for delta in player["history"] if delta < 0]) tabledata["Player"].append(player["name"]) - tabledata["Rank"].append(getRankByMMR(player["mmr"]).name) + tabledata["Rank"].append(Rank.getRankByMMR(player["mmr"]).rankname) tabledata["MMR"].append(player["mmr"]) tabledata["Wins"].append(wins) tabledata["Losses"].append(losses) diff --git a/cogs/profiles/player.py b/cogs/profiles/player.py index 87082a9..3b035c9 100644 --- a/cogs/profiles/player.py +++ b/cogs/profiles/player.py @@ -11,9 +11,7 @@ from models.CustomMogiContext import MogiApplicationContext from models.RankModel import Rank from models.PlayerModel import PlayerProfile - from utils.command_helpers.find_player import search_player -from utils.maths.ranks import getRankByMMR from datetime import datetime from bson.int64 import Int64 @@ -63,8 +61,8 @@ def __init__(self): value=f"{datetime.fromtimestamp(player.joined).strftime('%b %d %Y')}", ) - player_rank: Rank = getRankByMMR(player.mmr) - embed.add_field(name="Rank", value=f"{player_rank.name}") + player_rank: Rank = Rank.getRankByMMR(player.mmr) + embed.add_field(name="Rank", value=f"{player_rank.rankname}") player_wins = len([delta for delta in player.history if delta >= 0]) player_losses = len([delta for delta in player.history if delta < 0]) diff --git a/models/RankModel.py b/models/RankModel.py index 8c1458b..05ea213 100644 --- a/models/RankModel.py +++ b/models/RankModel.py @@ -1,8 +1,11 @@ +import math from dataclasses import dataclass +from enum import Enum +from typing import Union, Tuple @dataclass -class Rank: +class Rank(Enum): """ ### A class to represent a rank a player has depending on their MMR. #### Attributes: @@ -10,20 +13,27 @@ class Rank: range (tuple): A tuple representing the range of values for the rank. """ - name: str - range: tuple[int | float, int | float] + WOOD = ("Wood", (-math.inf, 1)) + BRONZE = ("Bronze", (2, 1499)) + SILVER = ("Silver", (1400, 2999)) + GOLD = ("Gold", (3000, 5099)) + PLATINUM = ("Platinum", (5100, 6999)) + DIAMOND = ("Diamond", (7000, 9499)) + MASTER = ("Master", (9500, math.inf)) - def __post_init__(self): - valid_names = { - "Wood", - "Bronze", - "Silver", - "Gold", - "Platinum", - "Diamond", - "Master", - } - if self.name not in valid_names: - raise ValueError( - f"Invalid rank name: {self.name}. Must be one of {valid_names}." - ) + def __init__( + self, rankname: str, mmrrange: Tuple[Union[int, float], Union[int, float]] + ): + self.rankname = rankname + self.mmrrange = mmrrange + + def __str__(self): + return self.rankname + + @classmethod + def getRankByMMR(cls, mmr: int) -> "Rank": + for rank in cls.__members__.values(): + start, end = rank.mmrrange + if start <= mmr <= end: + return rank + return None diff --git a/utils/command_helpers/apply_update_roles.py b/utils/command_helpers/apply_update_roles.py index 893bdc8..a18d0ad 100644 --- a/utils/command_helpers/apply_update_roles.py +++ b/utils/command_helpers/apply_update_roles.py @@ -3,7 +3,7 @@ from models.CustomMogiContext import MogiApplicationContext from models.MogiModel import Mogi -from utils.maths.ranks import getRankByMMR +from models.RankModel import Rank async def update_roles( @@ -26,14 +26,14 @@ async def update_roles( await ctx.send(f"Excluded {discord_member.mention} because they subbed") continue - current_rank = getRankByMMR(player.mmr) - new_rank = getRankByMMR( + current_rank = Rank.getRankByMMR(player.mmr) + new_rank = Rank.getRankByMMR( player.mmr + mogi.mmr_results_by_group[mogi.players.index(player)] ) if current_rank != new_rank: - await ctx.send(f"{discord_member.mention} is now in {new_rank.name}") + await ctx.send(f"{discord_member.mention} is now in {new_rank.rankname}") await discord_member.remove_roles( ctx.get_lounge_role(f"Lounge - {current_rank}") diff --git a/utils/maths/ranks.py b/utils/maths/ranks.py deleted file mode 100644 index b05635b..0000000 --- a/utils/maths/ranks.py +++ /dev/null @@ -1,19 +0,0 @@ -import math -from models.RankModel import Rank - -ranks = [ - Rank("Wood", (-math.inf, 1)), - Rank("Bronze", (2, 1499)), - Rank("Silver", (1400, 2999)), - Rank("Gold", (3000, 5099)), - Rank("Platinum", (5100, 6999)), - Rank("Diamond", (7000, 9499)), - Rank("Master", (9500, math.inf)), -] - -def getRankByMMR(mmr: int) -> Rank: - for rank in ranks: - start, end = rank.range[0], rank.range[1] - if start <= mmr <= end: - return rank - return "---" From c870367818831eeeee2ec7cf4176284e09c35d79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4ssin=20Aouani?= Date: Mon, 4 Nov 2024 14:32:17 +0100 Subject: [PATCH 7/7] small improvement --- cogs/profiles/player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cogs/profiles/player.py b/cogs/profiles/player.py index 3b035c9..64d0ece 100644 --- a/cogs/profiles/player.py +++ b/cogs/profiles/player.py @@ -62,7 +62,7 @@ def __init__(self): ) player_rank: Rank = Rank.getRankByMMR(player.mmr) - embed.add_field(name="Rank", value=f"{player_rank.rankname}") + embed.add_field(name="Rank", value=player_rank.rankname) player_wins = len([delta for delta in player.history if delta >= 0]) player_losses = len([delta for delta in player.history if delta < 0])