changeset 68:e6a411adf464

Anchor datetime regexes so parsing works as expected
author Lewin Bormann <lbo@spheniscida.de>
date Mon, 12 Dec 2016 21:01:25 +0100
parents 775f65a3c897
children 683193cb3194
files handler_remind.go
diffstat 1 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/handler_remind.go	Mon Dec 12 20:51:05 2016 +0100
+++ b/handler_remind.go	Mon Dec 12 21:01:25 2016 +0100
@@ -13,10 +13,10 @@
 )
 
 var (
-	hhmmRE       = regexp.MustCompile(`(\d{1,2}):(\d\d):?(\d\d)?`)
-	durRE        = regexp.MustCompile(`\+?(\d+)([smhd])`)
-	dateRE       = regexp.MustCompile(`(\d{4})-(\d\d)-(\d\d) (\d{1,2}):(\d\d):?(\d\d)?`)
-	dateOfWeekRE = regexp.MustCompile(`(Mo|Di|Mi|Do|Fr|Sa|So) (\d{1,2}):(\d\d):?(\d\d)?`)
+	hhmmRE       = regexp.MustCompile(`^(\d{1,2}):(\d\d):?(\d\d)?`)
+	durRE        = regexp.MustCompile(`^\+?(\d+)([smhd])`)
+	dateRE       = regexp.MustCompile(`^(\d{4})-(\d\d)-(\d\d) (\d{1,2}):(\d\d):?(\d\d)?`)
+	dateOfWeekRE = regexp.MustCompile(`^(Mo|Di|Mi|Do|Fr|Sa|So) (\d{1,2}):(\d\d):?(\d\d)?`)
 
 	dayOfWeekOff = map[string]time.Weekday{
 		"So": time.Sunday,
@@ -156,8 +156,10 @@
 	// restStart is the index of the first character of the remaining text
 	alertTime, restStart := parseReminderString(strings.Trim(msg.Text, " "))
 
-	if alertTime.IsZero() {
+	if alertTime.IsZero() || restStart == 0 {
 		return replyContent{text: formatHelpText}, nil
+	} else if now.Sub(alertTime) > 0 { // alert is in the past
+		return replyContent{text: "*❌* Zeitpunkt liegt in der Vergangenheit!"}, nil
 	}
 
 	db, err := backend.Reminders()