コード例 #1
0
        //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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: CoreBot.cs プロジェクト: awitwicki/wsizBus_bot
        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?
            }
        }
コード例 #4
0
        //Start menu
        public void GetStartMenu(CallbackQueryEventArgs callbackQueryEventArgs)
        {
            var inlineKeyboard = TemplateModelsBuilder.BuildStartMenuMarkup();

            EditMessageTextAsync(ChatId, MessageId, Local.StartString[User.GetLanguage], replyMarkup: inlineKeyboard);
        }