diff --git a/osu.Game/Online/Chat/StandAloneChatDisplay.cs b/osu.Game/Online/Chat/StandAloneChatDisplay.cs index ee8f9d1fad..a37e7eff9d 100644 --- a/osu.Game/Online/Chat/StandAloneChatDisplay.cs +++ b/osu.Game/Online/Chat/StandAloneChatDisplay.cs @@ -711,12 +711,12 @@ private void postMessage(TextBox sender, bool newText) userReq = new GetUserRequest(patchedUsername); userReq.Success += u => { - Logger.Log($@"[addref] Successfully resolved user ${u}"); + Logger.Log($@"[{nameof(StandAloneChatDisplay)}] Successfully resolved user ${u}"); tcs.TrySetResult(u); }; userReq.Failure += e => { - Logger.Log($@"[addref] Could not resolve user {patchedUsername}"); + Logger.Log($@"[{nameof(StandAloneChatDisplay)}] Could not resolve user {patchedUsername}"); tcs.TrySetResult(null); }; @@ -725,25 +725,47 @@ private void postMessage(TextBox sender, bool newText) return await tcs.Task.ConfigureAwait(false); } - // special-case addref. only handle it locally - if (parts.Length == 3 && parts[1] == @"addref") + void printRefsList() => EnqueueBotMessage($@"Match referees: {string.Join(", ", multiplayerRefereeTracker.Referees)}"); + + switch (parts.Length) { - queryUsername(parts[2]).ContinueWith(t => - { - APIUser? user = t.GetResultSafely(); + // special-case addref. only handle it locally + case 3 when parts[1] == @"addref": + queryUsername(parts[2]).ContinueWith(t => + { + APIUser? user = t.GetResultSafely(); + + if (user == null) + { + EnqueueBotMessage($@"Failed to find user {parts[2]}"); + return; + } + + multiplayerRefereeTracker.AddRef(user); + printRefsList(); + }); + break; - if (user == null) + case 3 when parts[1] == @"removeref": + { + if (parts[2].Length == 0 || !multiplayerRefereeTracker.RemoveRef(parts[2])) { - EnqueueBotMessage($@"Failed to find user {parts[2]}"); - return; + EnqueueBotMessage($@"No referee found matching '{parts[2]}'"); + break; } - multiplayerRefereeTracker.AddRef(user); - EnqueueBotMessage($@"Match referees: {string.Join(", ", multiplayerRefereeTracker.Referees)}"); - }); - } + printRefsList(); + break; + } - processChatCommands(parts); + case 2 when parts[1] == @"listrefs": + printRefsList(); + break; + + default: + processChatCommands(parts); + break; + } } } } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs index cdc8fe7e37..dbbb285e40 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs @@ -86,12 +86,24 @@ private void load() client.RoomUpdated += onRoomUpdated; } - public void AddRef(APIUser user) + public bool AddRef(APIUser user) { - if (!Referees.Contains(user)) - { - Referees.Add(user); - } + if (Referees.Contains(user)) + return false; + + Referees.Add(user); + return true; + } + + public bool RemoveRef(string username) + { + var user = Referees.FirstOrDefault(u => u.Username == username); + return user != null && RemoveRef(user); + } + + public bool RemoveRef(APIUser user) + { + return Referees.Remove(user); } private void onRoomUpdated()