public async Task RollAsync(ICommandContext e) { string rollResult; string args = e.Arguments.Pack.TakeAll(); if (string.IsNullOrWhiteSpace(args)) // No Arguments. { rollResult = MikiRandom.Roll(100).ToString(); } else { if (int.TryParse(args, out int max)) // Simple number argument. { rollResult = MikiRandom.Roll(max).ToString(); } else // Assume the user has entered an advanced expression. { Regex regex = new Regex(@"(\d+)?d(\d+)"); string fullExpression = args; int expressionCount = 0; foreach (Match match in regex.Matches(args)) { GroupCollection groupCollection = match.Groups; int dieCount = groupCollection[1].Success ? int.Parse(groupCollection[1].Value) : 1; int dieSides = int.Parse(groupCollection[2].Value); List <string> partialExpression = new List <string>(); for (int i = 0; i < dieCount; i++) { partialExpression.Add(MikiRandom.Roll(dieSides).ToString()); } fullExpression = regex.Replace(fullExpression, $"({string.Join(" + ", partialExpression)})", 1); expressionCount++; } if (expressionCount > 1) { fullExpression = $"({fullExpression})"; } Expression evaluation = new Expression(fullExpression); rollResult = evaluation.Evaluate().ToString() + $" `{fullExpression}`"; } } if (rollResult == "1" || rollResult.StartsWith("1 ")) { await AchievementManager.Instance.GetContainerById("badluck").CheckAsync(new BasePacket() { discordUser = e.Author, discordChannel = e.Channel }); } e.Channel.QueueMessage(e.Locale.GetString("miki_module_fun_roll_result", e.Author.Username, rollResult)); }
public async Task RollAsync(EventContext e) { string rollResult; if (string.IsNullOrWhiteSpace(e.Arguments.ToString())) // No Arguments. { rollResult = MikiRandom.Roll(100).ToString(); } else { if (int.TryParse(e.Arguments.ToString(), out int max)) // Simple number argument. { rollResult = MikiRandom.Roll(max).ToString(); } else // Assume the user has entered an advanced expression. { Regex regex = new Regex(@"(?<dieCount>\d+)d(?<dieSides>\d+)"); string fullExpression = e.Arguments.ToString(); int expressionCount = 0; foreach (Match match in regex.Matches(e.Arguments.ToString())) { GroupCollection groupCollection = match.Groups; int dieCount = int.Parse(groupCollection["dieCount"].Value); int dieSides = int.Parse(groupCollection["dieSides"].Value); string partialExpression = ""; for (int i = 0; i < dieCount; i++) { partialExpression += MikiRandom.Roll(dieSides).ToString(); if (i + 1 < dieCount) { partialExpression += " + "; } } fullExpression = regex.Replace(fullExpression, $"( {partialExpression} )", 1); expressionCount++; } if (expressionCount > 1) { fullExpression = $"( {fullExpression} )"; } Expression evaluation = new Expression(fullExpression); rollResult = evaluation.Evaluate().ToString() + $" `{fullExpression}`"; } } if (rollResult == "1" || rollResult.StartsWith("1 ")) { await AchievementManager.Instance.GetContainerById("badluck").CheckAsync(new BasePacket() { discordUser = e.Author, discordChannel = e.Channel }); } rollResult = Regex.Replace(rollResult, @"(\s)\s+", "$1"); rollResult = Regex.Replace(rollResult, @"(\S)([^\d\s])", "$1 $2"); e.Channel.QueueMessageAsync(e.GetResource(LocaleTags.RollResult, e.Author.Username, rollResult)); }
public async Task RollAsync(IContext e) { string rollResult; var args = e.GetArgumentPack().Pack.TakeAll(); if (string.IsNullOrWhiteSpace(args)) // No Arguments. { rollResult = MikiRandom.Roll(100).ToString(); } else { if (int.TryParse(args, out var max)) // Simple number argument. { rollResult = MikiRandom.Roll(max).ToString(); } else // Assume the user has entered an advanced expression. { var regex = new Regex(@"(\d+)?d(\d+)"); var fullExpression = args; var expressionCount = 0; var characterLimit = 256; foreach (Match match in regex.Matches(args)) { var groupCollection = match.Groups; var dieCount = groupCollection[1].Success ? int.Parse(groupCollection[1].Value) : 1; var dieSides = int.Parse(groupCollection[2].Value); var partialExpression = new List <string>(); for (var i = 0; i < dieCount; i++) { partialExpression.Add(MikiRandom.Roll(dieSides).ToString()); } fullExpression = regex.Replace(fullExpression, $"({string.Join(" + ", partialExpression)})", 1); expressionCount++; } if (expressionCount > 1) { fullExpression = $"({fullExpression})"; } var evaluation = new Expression(fullExpression); if (fullExpression.Length > characterLimit) { fullExpression = $"(...)"; } rollResult = evaluation.Evaluate() + $" `{fullExpression}`"; } } if (rollResult == "1" || rollResult.StartsWith("1 ")) { var achievements = e.GetService <AchievementService>(); var badLuckAchievement = achievements.GetAchievement(AchievementIds.UnluckyId); await achievements.UnlockAsync(e, badLuckAchievement, e.GetAuthor().Id); } e.GetChannel() .QueueMessage(e, null, e.GetLocale().GetString( "miki_module_fun_roll_result", e.GetAuthor().Username, rollResult)); }