TIme golang Telegram Bot - PullRequest
       45

TIme golang Telegram Bot

1 голос
/ 28 мая 2020

У меня есть бот для телеграмм, который помогает пользователям уведомлять, если они опаздывают на работу. Итак, они пишут, поскольку я приду в 12:00, и я получаю строку, которую я должен проверить, разрешено ли время, которое они написали.

Например: если они напишут мне, я приду в 12:00, но time.Now() 11:00, поэтому я выдаю им ошибку

Проблема в том, как сравнить их местное время с время, которое они отправили через бота, если они находятся по всему миру, а мой бот-сервер настроен в другой стране. Как узнать их местное время?

У меня есть 2 решения

  1. Получить местоположение пользователя через IP, GPS
  2. использовать if, case

Есть ли у тебя другие идеи? Буду признателен, если вы мне поможете.

Фрагмент кода для сравнения с моим местным временем

func getArrivalTime(text string, status string) (time.Time, error) {
    var arrivalTime time.Time
    rule := regexp.MustCompile(`([0-9]|1[0-9]|2[0-3])((\:)|(\.))[0-5][0-9]`)
    timeStr := rule.FindStringSubmatch(text)
if len(timeStr) == 0 {
    log.Println("ERROR OCCURED")
    return time.Time{}, errors.New("Wrong time format or omitted")
}
timeFormatted := strings.Replace(timeStr[0], ".", ":", 1)
date := fmt.Sprintf("%vT%v:00+00:00", time.Now().Format("2006-01-02"), timeFormatted)
arrivalTime, err := time.Parse(time.RFC3339, date)
if strings.Contains(text, "/завтра") && status == "late" {
    arrivalTime = arrivalTime.Add(time.Hour * 24)
}
arrivalTimeUtc, _ := ConvertToUTC(arrivalTime)

nowUtc, _ := ConvertToUTC(time.Now())
nowUtc = nowUtc.Add(time.Hour * 5)

if arrivalTimeUtc.After(nowUtc) == false && status != "lateButInOffice" {
    log.Println("ERROR OCCURED")
    return time.Time{}, errors.New("Wrong time format or omitted")
}

if err != nil {
    log.Println(err)
}
return arrivalTime, err
}
...