protected override async void HandleCommand(IChatClient chatClient, CommandReceivedEventArgs eventArgs) { var lookup = eventArgs?.Arguments?.ElementAtOrDefault(0); int offset; string timezoneDisplay; bool useTwentyFourHourTime = false; if (eventArgs?.Arguments?.Count == 0) { offset = 0; useTwentyFourHourTime = true; timezoneDisplay = $"at UTC {offset:+#;-#;+0}"; } else { bool isValidInteger = int.TryParse(lookup, out int chatUserOffset); if (isValidInteger && chatUserOffset < 18 && chatUserOffset > -18) { useTwentyFourHourTime = true; offset = chatUserOffset; timezoneDisplay = $"at UTC {offset:+#;-#;+0}"; } else if (isValidInteger && (chatUserOffset > 18 || chatUserOffset < -18)) { chatClient.SendMessage(Messages.OUT_OF_RANGE); return; } else { var client = new HttpClient(); TimezoneLookupResult lookupResult = await _timezoneLookup.GetTimezoneInfoAsync(client, lookup); if (!lookupResult.Success) { chatClient.SendMessage(lookupResult.Message); return; } offset = lookupResult.Offset; timezoneDisplay = $"in {lookupResult.TimezoneName}"; } } DateTimeZone timeZone = DateTimeZone.ForOffset(Offset.FromHours(offset)); List <Instant> streamTimes = Repository.List(DataItemPolicy <ScheduleEntity> .All()).Select(x => x.Instant).ToList(); string message = $"Our usual schedule ({timezoneDisplay}) is: " + string.Join(", ", streamTimes.Select(x => GetTimeDisplay(x, timeZone, useTwentyFourHourTime))); chatClient.SendMessage(message); }
public TimezoneLookupResult GetOrInsertTimezone( string lookup, Func <TimezoneLookupResult> fallback) { var timezone = _repo.Single(TimezonePolicy.ByLookup(lookup)); if (timezone == null) { TimezoneLookupResult timezoneLookupResult = fallback.Invoke(); timezone = new TimezoneEntity { LookupString = lookup, Offset = timezoneLookupResult.Offset, TimezoneName = timezoneLookupResult.TimezoneName, }; _repo.Create(timezone); } return(timezone.ToTimezoneLookupResult()); }
public async Task <TimezoneLookupResult> GetTimezoneInfoAsync(HttpClient client, string lookup) { var result = new TimezoneLookupResult(); var(latitude, longitude, success) = await GetLatitudeAndLongitude(client, lookup); if (success) { (result.Offset, result.TimezoneName) = await GetTimezoneInfo(client, latitude, longitude); result.Success = true; } else { result.Success = false; result.Message = UNKNOWN_LOCATION; } return(result); }