//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); }
public void Start(MessageEventArgs messageEventArgs) { string messageText = Local.StartString[0] + $"Bot version `{ApplicationData.BotVersion}`"; var inlineKeyboard = TemplateModelsBuilder.BuildStartMenuMarkup(); SendMessageAsync(ChatId, messageText, ParseMode.Markdown, replyMarkup: inlineKeyboard); }
private async void Invoker(MessageEventArgs messageEventArgs = null, CallbackQueryEventArgs callbackQueryEventArgs = null) { // Get message data var chatId = messageEventArgs != null ? messageEventArgs.Message.Chat.Id : callbackQueryEventArgs.CallbackQuery.Message.Chat.Id; var messageId = messageEventArgs != null ? messageEventArgs.Message.MessageId : callbackQueryEventArgs.CallbackQuery.Message.MessageId; var sender = messageEventArgs != null ? messageEventArgs.Message.From : callbackQueryEventArgs.CallbackQuery.From; var user = ApplicationData.GetUser(sender.Id); // Get controller type Type controllerType = messageEventArgs != null ? typeof(CommandController) : typeof(CallbackController); // Get method name from message string methodName = ""; if (messageEventArgs != null) { methodName = (string)ArgParser.ParseCommand(messageEventArgs.Message.Text).GetValueOrDefault(Commands.MethodName); } else { methodName = (string)ArgParser.ParseCallbackData(callbackQueryEventArgs.CallbackQuery.Data).GetValueOrDefault(Commands.MethodName); } // Find method in controller MethodInfo method = controllerType.GetMethod(methodName); if (method != null) { // Check user access by role if (!BaseController.ValidateAccess(method, user)) { return; } try { // Get and send chatAction from attributes var chatAction = BaseController.GetChatActionAttributes(method); if (chatAction.HasValue) { await Bot.SendChatActionAsync(chatId, chatAction.Value); } // Cast controller object var controller = Activator.CreateInstance(controllerType); // Set params ((BaseController)controller).Bot = Bot; ((BaseController)controller).ChatId = chatId; ((BaseController)controller).MessageId = messageId; ((BaseController)controller).User = user; // Invoke method if (messageEventArgs != null) { method.Invoke(controller, parameters: new object[] { messageEventArgs }); } else { method.Invoke(controller, parameters: new object[] { callbackQueryEventArgs }); } } catch (Exception ex) { Log.Error(ex, "Invoker error"); // Send log to admin long?adminId = ApplicationData.Users.Set().FirstOrDefault(x => x.UserAccess == UserAccess.Admin)?.Id; if (adminId.HasValue) { SendMessageAsync(adminId.Value, ex.ToString()); SendMessageAsync(adminId.Value, callbackQueryEventArgs?.CallbackQuery.Data ?? "F"); } } } else { // Cant method did not exists InfluxDBLiteClient.Query("bots,botname=wsizbusbot,actiontype=backenderror action=true"); // Send log to admin long?adminId = ApplicationData.Users.Set().FirstOrDefault(x => x.UserAccess == UserAccess.Admin)?.Id; if (adminId.HasValue) { SendMessageAsync(adminId.Value, callbackQueryEventArgs != null ? $"Cant find method for: {callbackQueryEventArgs.CallbackQuery.Data}" : $"Cant find method for: {messageEventArgs.Message.Text}"); } SendMessageAsync(chatId, Local.ErrorMessage[user.GetLanguage], ParseMode.Markdown, replyMarkup: TemplateModelsBuilder.BuildStartMenuMarkup()); // todo // delete callback keyboard under the message? } }
//Start menu public void GetStartMenu(CallbackQueryEventArgs callbackQueryEventArgs) { var inlineKeyboard = TemplateModelsBuilder.BuildStartMenuMarkup(); EditMessageTextAsync(ChatId, MessageId, Local.StartString[User.GetLanguage], replyMarkup: inlineKeyboard); }