public override Result <Session> PerformCommand(Session session, string line) { if (!session.Sub.Kinks.Contains(Kink.CockTorture)) { return(Result.Ok(session)); } var workingSession = session.Clone(); var getTaskData = _lineService.GetParenData(line, Keyword.CustomTask); if (getTaskData.IsFailure) { return(Result.Fail <Session>(getTaskData.Error)); } var fileName = getTaskData.Value[0] + (workingSession.Sub.BallsTortureCount == 0 ? "_First" : string.Empty) + ".txt"; var waitTime = _randomNumberService.Roll(workingSession.MinimumTaskTime, workingSession.MaximumTaskTime); if (getTaskData.Value.Count > 1) { int.TryParse(getTaskData.Value[1], out waitTime); } var filePath = _pathsAccessor.GetPersonalityFolder(workingSession.Domme.PersonalityName) + Path.DirectorySeparatorChar + "Custom" + Path.DirectorySeparatorChar + "Tasks" + Path.DirectorySeparatorChar + fileName; var lines = File.ReadAllLines(filePath); var message = lines[_randomNumberService.Roll(0, lines.Count())]; var smd = new Script(new ScriptMetaData { Info = "Custom Task Interrupt", IsEnabled = true, Key = "CBT", Name = "Ball Torture" + workingSession.Sub.BallsTortureCount.ToString() }, new List <string> { message, Keyword.Wait + waitTime.ToString() + ")", Keyword.End, }); workingSession.Scripts.Push(smd); OnCommandProcessed(workingSession, null); return(Result.Ok(workingSession)); }
public override Result <Session> PerformCommand(Session session, string line) { var personalityFolder = _pathsAccessor.GetPersonalityFolder(session.Domme.PersonalityName); return(_lineService.GetParenData(line, _keyword) .Ensure(pData => pData.Count == 1, "@TauntFromFile(...) must have only one option") .OnSuccess(pData => pData[0]) .OnSuccess(fileArg => personalityFolder + Path.DirectorySeparatorChar + fileArg) .Ensure(file => File.Exists(file), "Unable to find the file specified in " + personalityFolder) .OnSuccess(file => _lineCollectionFilter.FilterLines(session, file)) .OnSuccess(lines => lines[_randomNumberService.Roll(0, lines.Count() - 1)]) .OnSuccess(l => OnCommandProcessed(session, l)) .Map(l => session)); }
public Result <List <ScriptMetaData> > GetAllScripts(string dommePersonalityName) { var checkList = new List <ScriptMetaData>(); var personalityDir = _pathsAccessor.GetPersonalityFolder(dommePersonalityName); var scriptDatas = new List <Tuple <string, SessionPhase> > { Tuple.Create("stroke", SessionPhase.Start), Tuple.Create("Modules", SessionPhase.Modules), Tuple.Create("stroke", SessionPhase.Link), Tuple.Create("stroke", SessionPhase.End), }; foreach (var scriptData in scriptDatas) { var cldFile = _pathsAccessor.GetScriptCld(dommePersonalityName, scriptData.Item2); var scriptDir = _pathsAccessor.GetScriptDir(dommePersonalityName, scriptData.Item1, scriptData.Item2); var getScripts = _cldAccessor.ReadCld(scriptDir, cldFile) .OnSuccess(clData => { clData.ForEach(cld => { cld.SessionPhase = scriptData.Item2; cld.Info = GetScriptInfo(cld.Key); }); checkList.AddRange(clData); }); if (getScripts.IsFailure) { return(getScripts); } } return(Result.Ok(checkList)); }
protected override Result ParseCommandSpecific(Script script, string personalityName, string line) { var cbtFolder = _pathsAccessor.GetPersonalityFolder(personalityName) + Path.DirectorySeparatorChar + "cbt" + Path.DirectorySeparatorChar; return(Result.Ok() .Ensure(() => File.Exists(cbtFolder + "cbtball.txt"), "Ball torture script does not exist at " + cbtFolder + "cbtball.txt") .Ensure(() => File.Exists(cbtFolder + "cbtball_first.txt"), "First ball torture script does not exist at " + cbtFolder + "cbtball_first.txt")); }