Exemple #1
0
        public override async Task<bool> Execute(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;

            switch (_typeRequest)
            {
                case TypeRequest.Start:
                    _typeRequest = TypeRequest.Resource;
                    await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, Base.DEFAULT_MSG);
                    break;

                case TypeRequest.Resource:
                    var ret = ApiExplorer.Usage(PveHelper.GetClassApiRoot(PveHelper.GetClient()),
                                                message.Text.Trim(),
                                                ApiExplorer.OutputType.Html,
                                                true,
                                                null,
                                                true);

                    await botClient.SendDocumentAsyncFromText(message.Chat.Id, ret, "Usage.html");
                    endCommand = true;
                    break;

                default: break;
            }

            return await Task.FromResult(endCommand);
        }
        public override async Task <bool> Execute(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;

            switch (_typeRequest)
            {
            case TypeRequest.Start:
                _typeRequest = TypeRequest.Resource;
                await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id,
                                                               "Insert <b>resource</b> (eg nodes)");

                break;

            case TypeRequest.Resource:
                var ret = ApiExplorer.Usage(PveHelper.GetClassApiRoot(),
                                            message.Text.Trim(),
                                            true,
                                            null,
                                            true);

                await botClient.SendDocumentAsyncFromText(message.Chat.Id, ret, "Usage.txt");

                endCommand = true;
                break;

            default: break;
            }

            return(await Task.FromResult(endCommand));
        }
Exemple #3
0
        public override async Task <bool> Execute(Message message, TelegramBotClient botClient)
        {
            await botClient.ChooseVmInlineKeyboard(message.Chat.Id,
                                                   PveHelper.GetClient(),
                                                   (StatusRequestVM == StatusEnum.Stop));

            return(await Task.FromResult(false));
        }
        public override async Task <bool> Execute(Message message,
                                                  CallbackQuery callbackQuery,
                                                  TelegramBotClient botClient)
        {
            var action = (ForReboot ? "reboot" : "shutdown");

            PveHelper.GetClient().Nodes[callbackQuery.Data].Status.NodeCmd(action);

            await botClient.SendTextMessageAsyncNoKeyboard(callbackQuery.Message.Chat.Id,
                                                           $"Node {callbackQuery.Data} action {action}!");

            return(await Task.FromResult(true));
        }
Exemple #5
0
        public override async Task <bool> Execute(Message message,
                                                  CallbackQuery callbackQuery,
                                                  TelegramBotClient botClient)
        {
            var vm = PveHelper.GetClient().GetVM(callbackQuery.Data);

            vm.SetStatus(StatusRequestVM, 0);

            await botClient.SendTextMessageAsyncNoKeyboard(callbackQuery.Message.Chat.Id,
                                                           $"VM/CT {vm.Id} on node {vm.Node} {StatusRequestVM}!");

            return(await Task.FromResult(true));
        }
        public override async Task <bool> Execute(Message message, TelegramBotClient botClient)
        {
            await botClient.ChooseNodeInlineKeyboard(message.Chat.Id, PveHelper.GetClient(), true);

            return(await Task.FromResult(false));
        }
Exemple #7
0
        private async Task <bool> ExecuteOrChoose(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;
            var cmdArgs    = ParserExtensions.Parse(new Parser(), _messageText).Tokens.Select(a => a.Value).ToList();

            if (cmdArgs.Count == 0)
            {
                //request resource
                _typeRequest = TypeRequest.Resource;
                await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, DEFAULT_MSG);
            }
            else
            {
                var resource = cmdArgs[0];
                if (!resource.StartsWith("/"))
                {
                    resource = "/" + resource;
                }
                var requestArgs    = StringHelper.GetArgumentTags(resource);
                var parameters     = cmdArgs.Skip(1).ToArray();
                var parametersArgs = parameters.SelectMany(a => StringHelper.GetArgumentTags(a)).ToList();

                if (requestArgs.Count() > 0)
                {
                    //fix request
                    resource = resource.Substring(0, resource.IndexOf(StringHelper.CreateArgumentTag(requestArgs[0])) - 1);

                    var pveClient = PveHelper.GetClient();
                    var(Values, Error) = ApiExplorer.ListValues(pveClient, PveHelper.GetClassApiRoot(pveClient), resource);
                    if (!string.IsNullOrWhiteSpace(Error))
                    {
                        //return error
                        await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, Error);

                        endCommand = true;
                    }
                    else
                    {
                        _typeRequest = TypeRequest.ArgResource;

                        await botClient.ChooseInlineKeyboard(message.Chat.Id,
                                                             $"Choose {requestArgs[0]}",
                                                             Values.Select(a => ("", a.Value, a.Value)));
                    }
                }
                else if (parametersArgs.Count() > 0)
                {
                    //request parameter value
                    _typeRequest = TypeRequest.ArgParameter;

                    await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id,
                                                                   $"Insert value for parmater <b>{parametersArgs[0]}</b>");
                }
                else if (requestArgs.Count() == 0)
                {
                    var pveClient = PveHelper.GetClient();
                    //execute request
                    var(ResultCode, ResultText) = ApiExplorer.Execute(pveClient,
                                                                      PveHelper.GetClassApiRoot(pveClient),
                                                                      resource,
                                                                      MethodType,
                                                                      ApiExplorer.CreateParameterResource(parameters),
                                                                      false,
                                                                      ApiExplorer.OutputType.Html);

                    if (ResultCode != 200)
                    {
                        await botClient.SendTextMessageAsync(message.Chat.Id, $"Error: {ResultText}");
                    }
                    else
                    {
                        var filename = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(resource).Replace("/", "");
                        await botClient.SendDocumentAsyncFromText(message.Chat.Id, ResultText, $"{filename}.html");
                    }

                    endCommand = true;
                }
            }

            if (endCommand)
            {
                _messageText = "";
            }

            return(await Task.FromResult(endCommand));
        }
        public override async Task <bool> Execute(Message message, TelegramBotClient botClient)
        {
            var result           = PveHelper.GetClient().Cluster.Resources.GetRest(Type);
            var returnParameters = PveHelper.GetClassApiReturnParameters(result.RequestResource);

            string GetDisk(IDictionary <string, object> item)
            => $"Disk: <b>{GetValue(item, "disk", returnParameters)}</b>" +
            $" of <b>{GetValue(item, "maxdisk", returnParameters)}</b>";

            string GetMem(IDictionary <string, object> item)
            => $" - Mem: <b>{GetValue(item, "mem", returnParameters)}</b>" +
            $" of <b>{GetValue(item, "maxmem", returnParameters)}</b>";

            string GetStatus(IDictionary <string, object> item)
            => $" - Status: <b>{GetValue(item, "status", returnParameters)}</b> ===";

            string GetCpuUptime(IDictionary <string, object> item)
            => $"Cpu: <b>{GetValue(item, "cpu", returnParameters)}</b>" +
            $" of <b>{GetValue(item, "maxcpu", returnParameters)}</b>" +
            $" - Uptime: <b>{GetValue(item, "uptime", returnParameters)}</b>";

            string GetId(IDictionary <string, object> item) => GetValue(item, "id", returnParameters);

            var text = "";

            foreach (IDictionary <string, object> item in (IList)result.Response.data)
            {
                switch (item["type"] + "")
                {
                case "node":
                    text += $"=== Node: <b>{GetId(item)}</b>" + GetStatus(item) +
                            Environment.NewLine +
                            GetCpuUptime(item) +
                            Environment.NewLine +
                            GetDisk(item) + GetMem(item) +
                            Environment.NewLine;
                    break;

                case "qemu":
                case "lxc":
                    text += $"=== Id : <b>{GetValue(item, "node", returnParameters)}/{GetId(item)}</b>" +
                            GetStatus(item) +
                            Environment.NewLine +
                            GetCpuUptime(item) +
                            Environment.NewLine +
                            GetDisk(item) + GetMem(item) +
                            Environment.NewLine;
                    break;

                case "storage":
                    text += $"=== Id : <b>{GetId(item)}</b>" + GetStatus(item) +
                            Environment.NewLine +
                            GetDisk(item) + Environment.NewLine;
                    break;

                default: break;
                }
            }

            await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, text);

            return(await Task.FromResult(true));
        }