From 800c74d4b695f520d1831c51109c4a466b6b75a6 Mon Sep 17 00:00:00 2001 From: Isaiah Billingsley Date: Tue, 28 Jul 2026 21:34:57 -0400 Subject: [PATCH 1/5] Fix stale !link url when custom level not found (ost, wip, etc) --- Modules/BeatSaberPlus_ChatRequest/ChatRequest.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modules/BeatSaberPlus_ChatRequest/ChatRequest.cs b/Modules/BeatSaberPlus_ChatRequest/ChatRequest.cs index 55932d8..39f536c 100644 --- a/Modules/BeatSaberPlus_ChatRequest/ChatRequest.cs +++ b/Modules/BeatSaberPlus_ChatRequest/ChatRequest.cs @@ -231,6 +231,8 @@ private void OnSceneChange(CP_SDK_BS.Game.Logic.ESceneType p_Scene) else m_LastPlayingLevelResponse = $"{l_CurrentMap.songName} by {l_Mapper}"; + m_LastPlayingLevelResponseLink = ""; + if (CP_SDK_BS.Game.Levels.LevelID_IsCustom(l_CurrentMap.levelID) && CP_SDK_BS.Game.Levels.TryGetHashFromLevelID(l_CurrentMap.levelID, out var l_Hash)) { var l_CachedEntry = null as Models.SongEntry; From 2f958497844221614a84917d68c35c0b1996bc3d Mon Sep 17 00:00:00 2001 From: Isaiah Billingsley Date: Wed, 29 Jul 2026 04:56:00 -0400 Subject: [PATCH 2/5] Fix default !remove message --- Modules/BeatSaberPlus_ChatRequest/CRConfig.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs b/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs index 38f5056..365ae43 100644 --- a/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs +++ b/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs @@ -166,7 +166,7 @@ internal enum EPermission internal EPermission RemoveCommandPermissions = EPermission.Moderators; [JsonProperty] internal bool RemoveCommandEnabled = true; [JsonProperty] internal string RemoveCommand = "remove"; - [JsonProperty] internal string RemoveCommand_OK = $"@$UserName (bsr $BSRKey) $SongName / $LevelAuthorName request by @RequesterName is removed from queue!"; + [JsonProperty] internal string RemoveCommand_OK = $"@$UserName (bsr $BSRKey) $SongName / $LevelAuthorName request by @$RequesterName is removed from queue!"; [JsonProperty] internal string RemoveCommand_NotFound = $"@$UserName No song in queue found with the key or username \"$Subject\"!"; [JsonProperty, JsonConverter(typeof(StringEnumConverter))] From d1517d4e926ba6ed5e8e61591ce09662d770c459 Mon Sep 17 00:00:00 2001 From: Isaiah Billingsley Date: Wed, 29 Jul 2026 23:52:02 -0400 Subject: [PATCH 3/5] Update queue open/closed text in main panel --- Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs b/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs index f771e8a..2245206 100644 --- a/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs +++ b/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs @@ -576,6 +576,8 @@ public void ToggleQueueStatus() if (UI.ManagerLeftView.CanBeUpdated) UI.ManagerLeftView.Instance.UpdateQueueStatus(); + if (UI.ManagerMainView.CanBeUpdated) + UI.ManagerMainView.Instance.RebuiltTitle(); }); } /// From 3c64ca00af28dd97ebec288ee774e1e14de8fe3d Mon Sep 17 00:00:00 2001 From: Isaiah Billingsley Date: Thu, 30 Jul 2026 03:03:08 -0400 Subject: [PATCH 4/5] Check if request is already in queue before already requested this session --- .../ChatRequest_Logic.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs b/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs index 2245206..90cf01d 100644 --- a/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs +++ b/Modules/BeatSaberPlus_ChatRequest/ChatRequest_Logic.cs @@ -91,13 +91,6 @@ public void AddToQueueFromBSRKey( l_ForceAllow = true; } - /// Check if already requested - if (!asModAdd && m_RequestedThisSessionID.Contains(bsrKey.ToLower())) - { - callback?.Invoke(new Models.AddToQueueResult(Models.EAddToQueueResult.AlreadyRequestedThisSession, bsrKey)); - return; - } - /// Check if allow listed or blocklisted if (!asModAdd && !l_ForceAllow) { @@ -128,6 +121,13 @@ public void AddToQueueFromBSRKey( l_RateLimit.CurrentRequestCount = SongQueue.Where(x => x.RequesterName == requester.UserName).Count(); } + /// Check if already requested + if (!asModAdd && m_RequestedThisSessionID.Contains(bsrKey.ToLower())) + { + callback?.Invoke(new Models.AddToQueueResult(Models.EAddToQueueResult.AlreadyRequestedThisSession, bsrKey)); + return; + } + /// Handle limits and title prefix if (requester != null) { @@ -203,13 +203,6 @@ public void AddToQueueFromBeatmapLevel( l_ForceAllow = true; } - /// Check if already requested - if (!asModAdd && m_RequestedThisSessionHash.Contains(l_LevelHash)) - { - callback?.Invoke(new Models.AddToQueueResult(Models.EAddToQueueResult.AlreadyRequestedThisSession, l_LevelHash)); - return; - } - /// Check if allow listed or blocklisted if (!asModAdd && !l_ForceAllow) { @@ -240,6 +233,13 @@ public void AddToQueueFromBeatmapLevel( l_RateLimit.CurrentRequestCount = SongQueue.Where(x => x.RequesterName == requester.UserName).Count(); } + /// Check if already requested + if (!asModAdd && m_RequestedThisSessionHash.Contains(l_LevelHash)) + { + callback?.Invoke(new Models.AddToQueueResult(Models.EAddToQueueResult.AlreadyRequestedThisSession, l_LevelHash)); + return; + } + /// Handle limits and title prefix if (requester != null) { From 040d563d59784ad699e4f523474af18b0cea2a35 Mon Sep 17 00:00:00 2001 From: Isaiah Billingsley Date: Fri, 31 Jul 2026 15:43:14 -0400 Subject: [PATCH 5/5] Migrate !remove message RequesterName fix --- Modules/BeatSaberPlus_ChatRequest/CRConfig.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs b/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs index 365ae43..bee874d 100644 --- a/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs +++ b/Modules/BeatSaberPlus_ChatRequest/CRConfig.cs @@ -279,6 +279,9 @@ protected override void OnInit(bool p_OnCreation) if (Commands != null && !Commands.LinkCommand_CurrentSong.Contains("$SongLink")) Commands.LinkCommand_CurrentSong += " $SongLink"; + + if (Commands != null && Commands.RemoveCommand_OK.Contains("@RequesterName")) + Commands.RemoveCommand_OK = Commands.RemoveCommand_OK.Replace("@RequesterName", "@$RequesterName"); } } }