//Get Schedule For Day public void GetScheduleForDay(CallbackQueryEventArgs callbackQueryEventArgs) { var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); var directionArg = args.GetValueOrDefault(Commands.Direction); var direction = directionArg == Way.ToCTIR.ToString() ? Way.ToCTIR : Way.ToRzeszow; DateTime selectedDay = DateTime.Parse(args.GetValueOrDefault(Commands.Date)); //Get schedule for date var text = ScheduleHelper.GenerateSchedule(selectedDay, direction, User.GetLanguage); //Send menu to get back var inlineKeyboard = new InlineKeyboardMarkup(new[] { new [] // First row { // Bus stations button InlineKeyboardButton.WithCallbackData(Local.BusStations[User.GetLanguage], Commands.GetBusStation), }, new [] // Second row { // Weather button InlineKeyboardButton.WithCallbackData(Local.Weather[User.GetLanguage], $"{Commands.RefreshWeather}"), // Bus schedule url InlineKeyboardButton.WithUrl(Local.URLSchedule[User.GetLanguage], "https://wsiz.edu.pl/studia/informator/rozklad-jazdy-uczelnianego-autobusu"), }, // Third row TemplateModelsBuilder.WaysForBus() }); SendMessageAsync(ChatId, text, ParseMode.Markdown, replyMarkup: inlineKeyboard); DeleteMessageAsync(ChatId, MessageId); }
//Change language public void ChangeLanguage(CallbackQueryEventArgs callbackQueryEventArgs) { var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); var lang = args.GetValueOrDefault(Commands.Language); LocalLanguage newLanguage = LocalLanguage.English; if (lang == "ua") { newLanguage = LocalLanguage.Ukrainian; } else if (lang == "pl") { newLanguage = LocalLanguage.Polish; } //Save User Language if (User.Language != newLanguage) { User.Language = newLanguage; ApplicationData.SaveUsers(); } string messageText = Local.StartString[User.GetLanguage] + $"Bot version `{ApplicationData.BotVersion}`"; var inlineKeyboard = TemplateModelsBuilder.BuildStartMenuMarkup(); EditMessageTextAsync(ChatId, MessageId, messageText, replyMarkup: inlineKeyboard, parseMode: ParseMode.Markdown); }
//Refresh weather public async Task Info(CallbackQueryEventArgs callbackQueryEventArgs) { //Simulate work await Task.Delay(1000); var weather = "The weather now is: " + "⛈🌧❄️☀️☁️"[new Random().Next(4)].ToString(); //weather = "The weather now is: "; weather += $"\n`{DateTime.Now}`"; weather += "\n@nameYourBot_bot"; //Buttons menu var inlineKeyboard = new InlineKeyboardMarkup(new[] { new [] { InlineKeyboardButton.WithCallbackData("Refresh", $"{Commands.RefreshWeather}?{Commands.IsEdit}=true") //Thats is template how to pack commands with arguments } }); //Check if clicked button "Refresh" var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); bool isEdit = args.ContainsKey(Commands.IsEdit); if (isEdit) { EditMessageTextAsync(ChatId, MessageId, weather, ParseMode.Markdown, replyMarkup: inlineKeyboard); } else { SendMessage(ChatId, weather, ParseMode.Markdown, replyMarkup: inlineKeyboard); } }
//Refresh weather public async void RefreshWeather(CallbackQueryEventArgs callbackQueryEventArgs) { var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); bool isEdit = args.ContainsKey(Commands.IsEdit); var weather = await WeatherHelper.GetWeather(User.GetLanguage); var inlineKeyboard = TemplateModelsBuilder.RefreshWeather(User.GetLanguage); if (isEdit) { EditMessageTextAsync(ChatId, MessageId, weather, ParseMode.Markdown, replyMarkup: inlineKeyboard); } else { SendMessageAsync(ChatId, weather, ParseMode.Markdown, replyMarkup: inlineKeyboard); } }
//Avaliable months public void GetMonths(CallbackQueryEventArgs callbackQueryEventArgs) { var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); var months = ApplicationData.Schedule.avaliableMonths; string directionName = args.GetValueOrDefault(Commands.Direction); var monthsKeyboard = new List <List <InlineKeyboardButton> >(); foreach (var month in months) { monthsKeyboard.Add(new List <InlineKeyboardButton>() { InlineKeyboardButton.WithCallbackData($"{Local.GetMonthNames(User.GetLanguage)[month.Month]}", $"{Commands.GetScheduleForMonth}?{Commands.Direction}={directionName},{Commands.Month}={month.ToShortDateString()}") }); } var inlineKeyboard = new InlineKeyboardMarkup(monthsKeyboard); EditMessageTextAsync(ChatId, MessageId, Local.PickMonth[User.GetLanguage], replyMarkup: inlineKeyboard); }
//Bus stations public void GetBusStation(CallbackQueryEventArgs callbackQueryEventArgs) { var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); var busStation = args.GetValueOrDefault(Commands.BusStation); //List All stations if (busStation == null) { var stationsInline = TemplateModelsBuilder.BusStations(); EditMessageTextAsync(ChatId, MessageId, Local.PickBusStation[User.GetLanguage], ParseMode.Markdown, replyMarkup: stationsInline); } //Get station info else { var stationId = int.Parse(busStation); var station = (Local.PointNames)stationId; var inlineKeyboard = new InlineKeyboardMarkup(new[] { new [] //First row { InlineKeyboardButton.WithCallbackData(Local.BusStations[User.GetLanguage], Commands.GetBusStation), }, new [] { InlineKeyboardButton.WithCallbackData(Local.Menu[User.GetLanguage], Commands.GetStartMenu), }, TemplateModelsBuilder.WaysForBus() }); DeleteMessageAsync(ChatId, MessageId); SendMessageAsync(ChatId, Local.BusPointNames[station], ParseMode.Markdown); SendLocationAsync(ChatId, Local.BusPoints[station][0], Local.BusPoints[station][1]); SendMessageAsync(ChatId, Local.ReturnBack[User.GetLanguage], ParseMode.Markdown, replyMarkup: inlineKeyboard); } }
//Get schedule for month public void GetScheduleForMonth(CallbackQueryEventArgs callbackQueryEventArgs) { var args = ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data); var direction = args.GetValueOrDefault(Commands.Direction); string directionName = direction == Way.ToCTIR.ToString() ? Way.ToCTIR.ToString() : Way.ToRzeszow.ToString(); DateTime activeDate = DateTime.UtcNow; var argDate = args.GetValueOrDefault(Commands.Month); if (argDate != null) { activeDate = DateTime.Parse(argDate); } //Get avaliable days for month var monthName = Local.GetMonthNames(User.Language)[activeDate.Month]; var actualSchedule = ApplicationData.Schedule.Days.Where(d => d.DayDateTime.Month == activeDate.Month && d.DayDateTime.Year == activeDate.Year).ToList(); var calendarKeyboard = new List <List <InlineKeyboardButton> >(); if (actualSchedule.Count > 0) { calendarKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.WithCallbackData(Local.AnotherMonth[User.GetLanguage], $"{Commands.GetMonths}?{Commands.Direction}={directionName}") }); //Today/tomorrow buttons //{ // var todayAndTomorrowRow = new List<InlineKeyboardButton>(); // //Add Today // if (actualSchedule.FirstOrDefault(s => s.DayDateTime.Date == DateTime.Today) != null) // todayAndTomorrowRow.Add(InlineKeyboardButton.WithCallbackData(Local.Today[User.GetLanguage], $"{Commands.GetScheduleForDay}?{Commands.Direction}={directionName},{Commands.Date}={DateTime.Today}")); // //Add Tomorrow // if (actualSchedule.FirstOrDefault(s => s.DayDateTime.Date == DateTime.Today.AddDays(1)) != null) // todayAndTomorrowRow.Add(InlineKeyboardButton.WithCallbackData(Local.Tomorrow[User.GetLanguage], $"{Commands.GetScheduleForDay}?{Commands.Direction}={directionName},{Commands.Date}={DateTime.Today.AddDays(1)}")); // if (todayAndTomorrowRow.Count > 0) // calendarKeyboard.Add(todayAndTomorrowRow); //} for (int i = 0; i < actualSchedule.Count; i++) { if (i == 0 || i % 4 == 0) { calendarKeyboard.Add(new List <InlineKeyboardButton>()); } calendarKeyboard.Last().Add( InlineKeyboardButton.WithCallbackData( $"{actualSchedule[i].DayDateTime.Day}", $"{Commands.GetScheduleForDay}?{Commands.Direction}={directionName},{Commands.Date}={actualSchedule[i].DayDateTime.ToShortDateString()}" )); } var inlineKeyboard = new InlineKeyboardMarkup(calendarKeyboard); var keyboardText = (actualSchedule.Count > 0) ? $"{Local.PickDate[User.GetLanguage]} ({Local.GetMonthNames(User.Language)[activeDate.Month]})" : $"{Local.NoDataForMonth[User.GetLanguage]}(*{Local.GetMonthNames(User.Language)[activeDate.Month]}*) {Local.PickAnother[User.GetLanguage]}"; EditMessageTextAsync(ChatId, MessageId, keyboardText, ParseMode.Markdown, replyMarkup: inlineKeyboard); } //If no data for this month, find other months else { foreach (var month in ApplicationData.Schedule.avaliableMonths) { calendarKeyboard.Add(new List <InlineKeyboardButton>() { InlineKeyboardButton.WithCallbackData($"{Local.GetMonthNames(User.Language)[month.Month]}", $"{Commands.GetScheduleForMonth}?{Commands.Direction}={directionName},{Commands.Month}={month.ToShortDateString()}") }); } var inlineKeyboard = new InlineKeyboardMarkup(calendarKeyboard); var keyboardText = $"{Local.NoDataForMonth[User.GetLanguage]} (*{Local.GetMonthNames(User.Language)[activeDate.Month]}*){Local.PickAnother[User.GetLanguage]}"; EditMessageTextAsync(ChatId, MessageId, keyboardText, ParseMode.Markdown, replyMarkup: inlineKeyboard); } }