예제 #1
0
        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));
        }
예제 #2
0
        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}`)");
        }