public void DateTimeRange() { var r1 = DateTimeRecognizer.RecognizeDateTime("next week", "en-gb"); Console.WriteLine(JsonConvert.SerializeObject(r1)); var r2 = FuzzyParsing.MomentRange("next week"); Console.WriteLine(JsonConvert.SerializeObject(r2)); var r3 = FuzzyParsing.Moment("monday"); Console.WriteLine(JsonConvert.SerializeObject(r3)); }
private async Task <string> CreateReminder(ICommandContext context, string message) { DateTime triggerMoment; // Parse a moment from message var exactTimeResult = FuzzyParsing.Moment(message); if (exactTimeResult.IsValid) { if (exactTimeResult.Value < DateTime.UtcNow) { return(PastValueErrorMessage.Replace("$moment$", exactTimeResult.Value.ToString(CultureInfo.InvariantCulture))); } triggerMoment = exactTimeResult.Value; } else { // Attempt to parse a time range instead of an exact time (e.g. `next week`) var rangeTimeResult = FuzzyParsing.MomentRange(message); if (!rangeTimeResult.IsValid) { return("That doesn't seem to be a valid moment."); } // Send the reminder just after the start of the range triggerMoment = rangeTimeResult.Value.Item1 + (rangeTimeResult.Value.Item2 - rangeTimeResult.Value.Item1) * 0.05f; } var duration = triggerMoment - DateTime.UtcNow; // Add some context to the message var prelude = $"{context.Message.Author.Mention} Reminder from {DateTime.UtcNow.Humanize(dateToCompareAgainst: triggerMoment, culture: CultureInfo.GetCultureInfo("en-gn"))}..."; var msg = $"remind me {message}"; // Save to database var n = await _reminders.Create(triggerMoment, prelude, msg, context.Message.Channel.Id, context.User.Id); var friendlyId = new BalderHash32(n.ID); return($"I will remind you in {duration.Humanize(2, maxUnit: TimeUnit.Year, minUnit: TimeUnit.Second, toWords: true)} (id: `{friendlyId}`)"); }