Exemple #1
0
 public void TestStreamParamDivider()
 {
     for (int i = 0; i < Count; i++)
     {
         CommandAnalyzer ca = new CommandAnalyzer(new StreamParamDivider());
         ca.Analyze(FullCmd);
     }
 }
Exemple #2
0
        public void Response(string command)
        {
            CommandAnalyzer ca = new CommandAnalyzer(new ParamDividerV2());

            ca.Analyze(command);

            try
            {
                switch (ca.CommandName)
                {
                case "stop":
                    Logger.Raw("Application is shutting down... ");
                    Environment.Exit(0);
                    break;

                case "console":
                {
                    if (ca.Args.ContainsKey("cut-count"))
                    {
                        if (ca.Switches.ContainsKey("set"))
                        {
                            SocketLogger.CutCount = int.Parse(ca.Args["cut-count"]);
                            Logger.Raw(ca.CommandName + ": set: oparation succeed");
                        }
                        else
                        {
                            Logger.Raw(ca.CommandName + ": parameter mismatch");
                        }
                    }
                    else if (ca.Switches.ContainsKey("get"))
                    {
                        if (ca.Switches.ContainsKey("cut-count"))
                        {
                            Logger.Raw(SocketLogger.CutCount.ToString());
                        }
                    }
                    else
                    {
                        Logger.Raw(ca.CommandName + ": parameter mismatch");
                    }
                    break;
                }

                default:
                    Logger.Raw(ca.CommandName + ": command not found");
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.Raw(ex.Message);
            }
        }
Exemple #3
0
        private static Node <ICommand> GoFurther(string mathFormula)
        {
            Node <ICommand> thisNode = new Node <ICommand>();

            string[] partOfMathFormulaArray;

            try
            {
                // +(25,33)
                // +(+(2,2),1)
                // +(s(12),33)
                //return if its command or not
                //if command send two params (char of the command and stuff betweeen brakets)

                // we take the command here
                ICommand currentCommand = CommandAnalyzer.Analyze(mathFormula);
                thisNode.Value = currentCommand;
                // we remove the command sign and parentheses here
                string partOfMathFormula = RemoveCommandAndParentheses(mathFormula);

                if (partOfMathFormula != "NOTHING HERE")
                {
                    partOfMathFormulaArray = partOfMathFormula.Split(new string[] { "," }, StringSplitOptions.None);

                    //thisNode = new Node<ICommand>(currentCommand);

                    foreach (var formula in partOfMathFormulaArray)
                    {
                        Node <ICommand> tempNode = GoFurther(formula);
                        tempNode.addRootNode(thisNode);
                        thisNode.addChildNode(tempNode);
                    }
                }


                // add to current command the objects from recursion
                // add it to node and return node

                // int command = CommandAnalyzer.IsCommand(ReturnFirstChar(partOfMathFormulaArray[0]));
                // if (command ==1)
                // {
                //     MessageBox.Show("ITS COMMAND");
                //     //GoFurther();
                // }
            }
            catch (NotCommandExeption e)
            {
            }



            return(thisNode);
        }
Exemple #4
0
        private static void HandleMessageCmd(CommonMessage cm)
        {
            string          fullCmd = cm.FullCommand;
            CommandAnalyzer ca      = new CommandAnalyzer(new ParamDividerV2());

            ca.Analyze(fullCmd, cm);
            CommonMessageResponse replyObj = null;

            if (!PluginManager.CommandMap.ContainsKey(cm.Command))
            {
                return;
            }

            Type t = PluginManager.CommandMap[cm.Command];

            if (ValidateDisabled(cm, t))
            {
                SendMessage(new CommonMessageResponse("本群已禁用此命令...", cm));
                return;
            }

            CommandPlugin plugin = t == typeof(ExtendPlugin) ? PluginManager.CommandMapStatic[cm.Command] : GetInstance(t);

            if (!CommandHot.Keys.Contains(cm.Command))
            {
                CommandHot.TryAdd(cm.Command, 1);
            }
            else
            {
                CommandHot[cm.Command]++;
            }

            Settings.SaveSettings(CommandHot, "CommandHot");
            Task.Run(() =>
            {
                try
                {
                    SetValues(cm, t, plugin);
                    replyObj = plugin.Message_Received(cm);
                }
                catch (Exception ex)
                {
                    Exception(ex, fullCmd, plugin?.Name ?? "Unknown plugin");
                }

                if (replyObj == null)
                {
                    return;
                }
                SendMessage(replyObj);
            }
                     );
        }
        public void RunIntegrationTest(string filename)
        {
            ILookup <string, object> expectations = GetExpectedFields(filename);

            Assert.IsTrue(expectations.Count() > 0);

            AnalysisResult result = CommandAnalyzer.AnalyzeFile(filename);

            AssertSingle(expectations["ParseErrors"], () => result.ParseErrors.Count);
            AssertSingle(expectations["UnsupportedErrors"], () => result.UnsupportedErrors.Count);
            AssertSingle(expectations["LocalCommands"], () => result.LocalCommands.Count);
            AssertSingle(expectations["ValidationErrors"], () => result.ValidationErrors.Count);
            AssertMultiple(expectations["Message"], () => result.ValidationErrors.Select(e => e.Message));
        }
Exemple #6
0
        static void Main(string[] args)
        {
            var result = CommandAnalyzer.AnalyzeFile("./Input/Input.ps1");

            PrintErrors("Parse error found:", result.ParseErrors);
            PrintErrors("Issues Found:", result.ValidationErrors);
            PrintErrors("This tool does not support 100% of powershell syntax. Please check the following areas manually:", result.UnsupportedErrors);

            Console.WriteLine("Complete");
            // prevent console window close when running from an IDE
            if (Debugger.IsAttached)
            {
                Console.ReadKey();
            }
        }
        public static void Main(string[] args)
        {
            Canvas canvas  = null;
            String command = string.Empty;

            Console.WriteLine("***************************************************");
            Console.WriteLine("****************Simple Canvas App******************");
            Console.WriteLine("***************************************************");
            while (!command.ToUpper().Equals("Q"))
            {
                Console.WriteLine("Enter command:");
                command = Console.ReadLine();
                canvas  = CommandAnalyzer.Analyzer(command, canvas);
            }
            Console.WriteLine("Shutting down");
        }
Exemple #8
0
        public void TestScenario()
        {
            try
            {
                char[,] expectedResult = new char[6, 22] {
                    { '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' },
                    { '|', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'X', 'X', 'X', 'X', 'X', 'o', 'o', '|' },
                    { '|', 'X', 'X', 'X', 'X', 'X', 'X', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'X', '\0', '\0', '\0', 'X', 'o', 'o', '|' },
                    { '|', '\0', '\0', '\0', '\0', '\0', 'X', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'X', 'X', 'X', 'X', 'X', 'o', 'o', '|' },
                    { '|', '\0', '\0', '\0', '\0', '\0', 'X', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', '|' },
                    { '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' },
                };

                //This can be also came from a file
                string[] commands = new string[] { "C 20 4",
                                                   "L 1 2 6 2",
                                                   "L 6 3 6 4",
                                                   "R 14 1 18 3",
                                                   "B 10 3 o",
                                                   "help" };
                Canvas canvas = null;

                foreach (string command in commands)
                {
                    canvas = CommandAnalyzer.Analyzer(command, canvas);
                }

                char[,] _createdCanvas = canvas.CanvasBody;
                for (int i = 0; i < canvas.Height; i++)
                {
                    for (int j = 0; j < canvas.Width; j++)
                    {
                        //Check if the expected result correct
                        Assert.True(_createdCanvas[i, j] == expectedResult[i, j]);
                    }
                }
            }
            catch (Exception e)
            {
                Assert.True(false);
            }
        }
Exemple #9
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (string.IsNullOrEmpty(routeMsg.FullCommand))
            {
                return(null);
            }
            string fullCmd = routeMsg.FullCommand;
            var    ca      = new CommandAnalyzer <StreamParamDivider>();

            ca.Analyze(fullCmd, routeMsg);

            if (!DaylilyCore.Current.PluginManager.ContainsPlugin(routeMsg.CommandName))
            {
                return(null);
            }

            return(null);
        }
Exemple #10
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var    routeMsg = scope.RouteMessage;
            string fullCmd  = routeMsg.FullCommand ?? routeMsg.RawMessage;
            var    ca       = new CommandAnalyzer <StreamParamDivider>();
            var    cmd      = ca.Analyze(fullCmd);

            if (cmd.CommandName == "keyword" && routeMsg.CurrentAuthority == Authority.Root)
            {
                if (cmd.Switches.Contains("key-list"))
                {
                    var list  = _triggerObjects.Select(k => (string.Join(",", k.Words), k.ChancePercent, k.Pictures.Count));
                    var list2 = list.Select(k => $"{k.Item1}: \r\n  {k.ChancePercent}% {k.Count} Pics");
                    return(routeMsg.ToSource(string.Join("\r\n", list2)));
                }

                if (cmd.Args.ContainsKey("key-edit"))
                {
                    var arg           = cmd.Args["key-edit"];
                    var triggerObject = _triggerObjects.FirstOrDefault(k => k.Words.Contains(arg));
                    if (triggerObject == null)
                    {
                        return(routeMsg.ToSource("不存在该关键词(组)哦"));
                    }

                    if (cmd.Args.ContainsKey("addkeys"))
                    {
                        var value  = cmd.Args["addkeys"];
                        var values = value.Split('|').Where(k => !string.IsNullOrEmpty(k)).ToArray();
                        if (!values.Any())
                        {
                            return(routeMsg.ToSource("请填写触发关键词"));
                        }

                        foreach (var val in values)
                        {
                            if (!triggerObject.Words.Contains(val))
                            {
                                triggerObject.Words.Add(val);
                            }
                        }

                        return(SaveAndReply(routeMsg));
                    }

                    if (cmd.Args.ContainsKey("removekeys"))
                    {
                        var value  = cmd.Args["removekeys"];
                        var values = value.Split('|').Where(k => !string.IsNullOrEmpty(k)).ToArray();
                        if (!values.Any())
                        {
                            return(routeMsg.ToSource("请填写触发关键词"));
                        }

                        foreach (var val in values)
                        {
                            if (triggerObject.Words.Contains(val))
                            {
                                triggerObject.Words.Remove(val);
                            }
                        }

                        return(SaveAndReply(routeMsg));
                    }

                    if (cmd.Switches.Contains("addpics"))
                    {
                        throw new NotImplementedException();
                        return(SaveAndReply(routeMsg));
                    }

                    if (cmd.Args.ContainsKey("removepics"))
                    {
                        var value  = cmd.Args["removepics"];
                        var values = value.Split('|').Where(k => !string.IsNullOrEmpty(k)).ToArray();
                        if (!values.Any())
                        {
                            return(routeMsg.ToSource("请填写需要删除的图片"));
                        }

                        foreach (var val in values)
                        {
                            if (triggerObject.Pictures.Contains(val))
                            {
                                triggerObject.Pictures.Remove(val);
                            }
                        }

                        return(SaveAndReply(routeMsg));
                    }

                    return(routeMsg.ToSource("请执行-addkeys, -removekeys, -addpics或-removepics操作"));
                }

                if (cmd.Args.ContainsKey("key-detail"))
                {
                    var arg           = cmd.Args["key-detail"];
                    var triggerObject = _triggerObjects.FirstOrDefault(k => k.Words.Contains(arg));
                    if (triggerObject == null)
                    {
                        return(routeMsg.ToSource("不存在该关键词(组)哦"));
                    }

                    return(routeMsg.ToSource(string.Join(", ", triggerObject.Pictures)));
                }

                if (cmd.Args.ContainsKey("key-del"))
                {
                    var arg           = cmd.Args["key-del"];
                    var triggerObject = _triggerObjects.FirstOrDefault(k => k.Words.Contains(arg));
                    if (triggerObject == null)
                    {
                        return(routeMsg.ToSource("不存在该关键词(组)哦"));
                    }

                    using (Bot.Session.Session session = new Bot.Session.Session(10000, routeMsg.CoolQIdentity, routeMsg.UserId))
                    {
                        SendMessage(routeMsg.ToSource(
                                        $"即将删除:{string.Join(", ", triggerObject.Words)} 一组触发,确定请回复 \"确定\""
                                        )
                                    );
                        if (session.TryGetMessage(out var msgObj))
                        {
                            if (msgObj.RawMessage == "确定")
                            {
                                return(SaveAndReply(routeMsg));
                            }
                            else
                            {
                                return(routeMsg.ToSource("操作已取消。"));
                            }
                        }
                    }
                }
                return(null);
            }

            string msg = routeMsg.RawMessage;

            foreach (var item in _triggerObjects)
            {
                if (Trig(msg, item.Words, item.Pictures, out string img, item.ChancePercent))
                {
                    return(routeMsg.ToSource(new FileImage(Path.Combine(PandaDir, img)).ToString()));
                }
            }

            return(null);
        }