void ActivateScene(SceneDto scene, string displayName, int userLevel) { if (scene.Level > userLevel) { Chat(GetNeedToLevelUpMessage(scene, displayName, userLevel)); return; } string sceneName = GetSceneName(scene); if (sceneName == null) { return; } double minutesSinceLastSceneActivation = GetTimeSinceLastSceneActivation(scene).TotalMinutes; double minutesSinceLastCategoryActivation = GetTimeSinceLastCategoryActivation(scene).TotalMinutes; var adjustedMinutesToSame = GetSpanWaitAdjust(userLevel) * scene.MinMinutesToSame; if (adjustedMinutesToSame > minutesSinceLastSceneActivation && userLevel < 99) { double minutesToWait = scene.MinMinutesToSame - minutesSinceLastSceneActivation; Chat($"I already said that @{displayName}. You'll have to wait another {minutesToWait:0.#} minutes until I can say that again."); return; } ActivatingScene(scene); obsWebsocket.SetCurrentScene(sceneName); }
TimeSpan GetTimeSinceLastCategoryActivation(SceneDto scene) { if (lastCategoryPlayTime.ContainsKey(scene.Category)) { return(DateTime.Now - lastCategoryPlayTime[scene.Category]); } return(TimeSpan.MaxValue); }
TimeSpan GetTimeSinceLastSceneActivation(SceneDto scene) { if (lastScenePlayTime.ContainsKey(scene.SceneName)) { return(DateTime.Now - lastScenePlayTime[scene.SceneName]); } return(TimeSpan.MaxValue); }
private string GetSceneName(SceneDto scene) { string sceneName = scene.SceneName; if (sceneName.EndsWith("*")) { sceneName = SelectRandomScene(sceneName); } return(sceneName); }
private void ActivateSceneIfPermitted(SceneDto scene, string displayName, int userLevel) { if (RestrictedSceneIsActive()) { Chat(GetBreakMessage()); } else { ActivateScene(scene, displayName, userLevel); } }
string GetNeedToLevelUpMessage(SceneDto scene, string displayName, int userLevel) { string learnMore = "You can learn about botcasting levels here: https://github.com/MillerMark/MrAnnouncerBot"; switch (RandomInt(4)) { case 0: return($"{displayName}, that's a level {scene.Level} spell, but alas, you are a level {userLevel} {GetLevelName(userLevel)}. " + learnMore); case 1: return($"Unfortunately {displayName}, there's no way a level {userLevel} {GetLevelName(userLevel)} can botcast level {scene.Level} spell! " + learnMore); case 2: return($"{displayName}, you'll need to level-up to {scene.Level} before you botcast that spell! " + learnMore); default: return($"{displayName} that's a level {scene.Level} spell! You need to level-up first! " + learnMore); } }
void ActivatingScene(SceneDto scene) { DateTime now = DateTime.Now; if (!lastScenePlayTime.ContainsKey(scene.SceneName)) { lastScenePlayTime.Add(scene.SceneName, now); } else { lastScenePlayTime[scene.SceneName] = now; } if (!lastCategoryPlayTime.ContainsKey(scene.Category)) { lastCategoryPlayTime.Add(scene.Category, now); } else { lastCategoryPlayTime[scene.Category] = now; } }
void ActivatingScene(SceneDto scene) { ActivatingSceneByName(scene.SceneName, scene.Category); }