示例#1
0
        //To save files for specific ids like users, channels, server specific configs.
        public static string RetrieveFileForId(ulong id, string filename, BotModule module)
        {
            var fold = Path.Combine(module.directory, "db", id.ToString());

            Directory.CreateDirectory(fold);
            return(Path.Combine(fold, filename));
        }
示例#2
0
        public void ShouldGetAllBots()
        {
            BotModule module;

            Bot[]     results;
            IDatabase database;

            database = Substitute.For <IDatabase>();
            database.Execute <Bot>(Arg.Any <ISelect>()).Returns(new Bot[] { new Bot()
                                                                            {
                                                                                BotID = 1
                                                                            }, new Bot()
                                                                            {
                                                                                BotID = 2
                                                                            }, new Bot()
                                                                            {
                                                                                BotID = 3
                                                                            } });

            module  = new BotModule(NullLogger.Instance, database);
            results = module.GetBots();
            Assert.IsNotNull(results);
            Assert.AreEqual(3, results.Length);
            for (int t = 0; t < 3; t++)
            {
                Assert.IsNotNull(results[t]);
                Assert.AreEqual(t + 1, results[t].BotID);
            }
        }
示例#3
0
 private void InitBotModules()
 {
     try
     {
         var saved = XmlUtil.LoadXML(Application.StartupPath + "/bot_modules.save");
         if (saved != null)
         {
             var cfg = XmlUtil.XmlToObject <BotModulesConfig>(saved);
             foreach (var me in cfg.Modules)
             {
                 var mt = ReflectionUtil.GetType(me.Key);
                 if (mt != null)
                 {
                     BotModule.SetModuleEnable(mt, me.Value);
                 }
             }
         }
     }
     catch (Exception err)
     {
         MessageBox.Show(err.Message);
     }
     foreach (var mt in BotFactory.Instance.GetModuleTypes())
     {
         var enable = BotModule.GetModuleEnable(mt);
         var item   = new ToolStripMenuItem();
         item.CheckOnClick    = true;
         item.Size            = new System.Drawing.Size(152, 22);
         item.Text            = "模块:" + mt.Name;
         item.Tag             = mt;
         item.Checked         = enable;
         item.CheckedChanged += moduleItem_CheckedChanged;
         group_Module.DropDownItems.Add(item);
     }
 }
示例#4
0
        private void moduleItem_CheckedChanged(object sender, EventArgs e)
        {
            var item = sender as ToolStripMenuItem;
            var mt   = item.Tag as Type;

            BotModule.SetModuleEnable(mt, item.Checked);
            SaveBotModules();
        }
示例#5
0
        public void Start()
        {
            var module = new BotModule();

            //var module = new NeuralNetworkModule();
            //var module = new NLPModule();

            module.Start();
        }
示例#6
0
        private void SaveBotModules()
        {
            BotModulesConfig cfg = new BotModulesConfig();

            foreach (var mt in BotFactory.Instance.GetModuleTypes())
            {
                cfg.Modules.Add(mt.FullName, BotModule.GetModuleEnable(mt));
            }
            var save = XmlUtil.ObjectToXml(cfg);

            XmlUtil.SaveXML(Application.StartupPath + "/bot_modules.save", save);
        }
示例#7
0
        public void ShouldDeleteBot()
        {
            BotModule module;
            IDatabase database;
            int       counter = 0;

            database = Substitute.For <IDatabase>();
            database.When(x => x.Execute(Arg.Any <IDelete>())).Do(x => counter++);
            module = new BotModule(NullLogger.Instance, database);
            module.DeleteBot(1);
            Assert.AreEqual(1, counter);
        }
示例#8
0
        public void ShouldNotDeleteBotAndLogError()
        {
            BotModule    module;
            MemoryLogger logger;
            IDatabase    database;


            logger   = new MemoryLogger();
            database = Substitute.For <IDatabase>();
            database.When(x => x.Execute(Arg.Any <IDelete>())).Do(x => throw new Exception());
            module = new BotModule(logger, database);
            Assert.ThrowsException <PIODataException>(() => module.DeleteBot(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }
示例#9
0
        public static T ReturnObjectForId <T>(ulong id, string filename, BotModule module) where T : new()
        {
            var folder = RetrieveFileForId(id, filename, module);

            if (!File.Exists(folder))
            {
                var obj = new T();
                File.WriteAllText(folder, JsonConvert.SerializeObject(obj));
                return(new T());
            }
            else
            {
                return(JsonConvert.DeserializeObject <T>(File.ReadAllText(folder)));
            }
        }
示例#10
0
        public void ShouldNotGetAllBotsAndLogError()
        {
            BotModule    module;
            MemoryLogger logger;
            IDatabase    database;

            logger = new MemoryLogger();

            database = Substitute.For <IDatabase>();
            database.Execute <Bot>(Arg.Any <ISelect>()).Returns((x) => { throw new Exception(); });

            module = new BotModule(logger, database);
            Assert.ThrowsException <PIODataException>(() => module.GetBots());
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }
示例#11
0
        public void ShouldGetBotForWorker()
        {
            BotModule module;
            Bot       result;
            IDatabase database;

            database = Substitute.For <IDatabase>();
            database.Execute <Bot>(Arg.Any <ISelect>()).Returns(new Bot[] { new Bot()
                                                                            {
                                                                                BotID = 1
                                                                            } });

            module = new BotModule(NullLogger.Instance, database);
            result = module.GetBotForWorker(1);
            Assert.IsNotNull(result);
            Assert.AreEqual(1, result.BotID);
        }
示例#12
0
        public void ShouldCreateBot()
        {
            BotModule module;
            Bot       result;
            IDatabase database;
            int       counter = 0;

            database = Substitute.For <IDatabase>();
            database.When(x => x.Execute(Arg.Any <IQuery[]>())).Do(x => counter++);

            module = new BotModule(NullLogger.Instance, database);
            result = module.CreateBot(1);
            Assert.IsNotNull(result);
            Assert.AreEqual(1, result.WorkerID);

            Assert.AreEqual(1, counter);
        }
示例#13
0
        public override void Initialize()
        {
            instance = this;
            dbFolder = Path.Combine(directory, "database.json");
            if (File.Exists(dbFolder))
            {
                database = JsonConvert.DeserializeObject <TF2Database>(File.ReadAllText(dbFolder));
            }
            else
            {
                database = new TF2Database();
            }
            ThreadStart itemThreadStart = new ThreadStart(LoadItems);
            var         itemThread      = new Thread(itemThreadStart);

            itemThread.Start();
            Program.AddCommand("tf2", new TF2Command());
        }
示例#14
0
        public static void StoreObjectForId(ulong id, string filename, BotModule module, object obj)
        {
            var folder = RetrieveFileForId(id, filename, module);

            File.WriteAllText(folder, JsonConvert.SerializeObject(obj));

            /*
             * if (!File.Exists(folder))
             * {
             *  var obj = new T();
             *  File.WriteAllText(folder, JsonConvert.SerializeObject(obj));
             *  return new T();
             * }
             * else
             * {
             *  return JsonConvert.DeserializeObject<T>(folder);
             * }*/
        }
示例#15
0
        static void Main(string[] args)
        {
            List <string> channels = new List <string>()
            {
                "ZeratoR",
                "TehBeardedGamer",
                "Tatshukoo",
                "mirymirv7",
                "FizZoR",
                "A5StarDiningExperience",
                "Areliann",
                "Aero514",
                "Seansstream",
                "LIZERDBITS",
                "Frogsama",
                "Stormless",
                "Telecast3r",
                "demonsgalore_",
                "StarfishprimeX0",
                "DreggmanWhite"
            };

            var twitchinfo         = new TwitchInfo("irc.twitch.tv", 6667);
            var bot                = new Bot(twitchinfo, "your_bot_login", "your_bot_oauth");
            var botModule          = new BotModule(bot);
            var consoleModule      = new OutputConsoleModule();
            var respectPremUsers   = new RespectPremiumUsersModule();
            var respectFriendUsers = new RespectFriendUsersModule();
            var parserModule       = new ParserModule();
            var hunterModule       = new HunterModule("OfficialParagonBot", "", consoleModule);

            var commandModule = new CommandModule(botModule, consoleModule, respectPremUsers, respectFriendUsers);
            var monitormodule = new MonitoringModule(botModule, commandModule, parserModule);

            consoleModule.HiglightMessage(ConsoleColor.Green, "!!!!!!!!!!Стартую наблюдение!!!!!!!!!!!!");
            //monitormodule.StartListenChannel("your_channel");
            monitormodule.StartListenChannels(channels, hunterModule);
        }
示例#16
0
 public BotFactory()
 {
     Instance = this;
     BotModule.InitRunnerModules();
 }
示例#17
0
 protected void Application_Start()
 {
     GlobalConfiguration.Configure(WebApiConfig.Register);
     BotModule.Configure();
 }
示例#18
0
文件: Program.cs 项目: dfgs/PIO
        static void Main(string[] args)
        {
            ILogger logger;
            VersionControlModule versionControlModule;
            //ServiceHostModule serviceHostModule;
            //IBotsService service;
            RESTServer    server;
            IRouteManager routeManager;

            IDatabase          database;
            IConnectionFactory connectionFactory;
            ICommandBuilder    commandBuilder;
            IDatabaseCreator   databaseCreator;

            IBotModule          botModule;
            IOrderModule        orderModule;
            IOrderManagerModule orderManagerModule;
            IProduceOrderModule produceOrderModule;
            IHarvestOrderModule harvestOrderModule;
            IBuildOrderModule   buildOrderModule;

            IBotSchedulerModule botSchedulerModule;

            PIOServiceClient client;


            quitEvent = new AutoResetEvent(false);
            Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);

            //logger = new ConsoleLogger(new DefaultLogFormatter());
            logger = new UnicastLogger(IPAddress.Loopback, Properties.Settings.Default.UnicastPort);
            //logger = new FileLogger(new DefaultLogFormatter(), "PIO.Bots.ServerHost.Log");

            databaseCreator   = new SqlDatabaseCreator(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName);
            connectionFactory = new SqlConnectionFactory(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName);
            commandBuilder    = new SqlCommandBuilder();
            database          = new Database(connectionFactory, commandBuilder);

            versionControlModule = new VersionControlModule(logger, databaseCreator, new BotsVersionControl(database));
            if (!versionControlModule.InitializeDatabase(Properties.Settings.Default.DropDatabase))
            {
                Console.ReadLine();
                return;
            }

            client = new PIOServiceClient(new BasicHttpBinding(), new EndpointAddress($@"http://127.0.0.1:8733/PIO/Service/"));
            client.Open();


            botModule          = new BotModule(logger, database);
            orderModule        = new OrderModule(logger, database);
            produceOrderModule = new ProduceOrderModule(logger, database);
            harvestOrderModule = new HarvestOrderModule(logger, database);
            buildOrderModule   = new BuildOrderModule(logger, database);

            orderManagerModule = new OrderManagerModule(logger, client, orderModule, produceOrderModule, harvestOrderModule, buildOrderModule, 10);

            botSchedulerModule = new BotSchedulerModule(logger, client, botModule, orderManagerModule, 5);
            botSchedulerModule.Start();

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BotRouteHandler(botModule));
            routeManager.AddRouteHandler(new ProduceOrderRouteHandler(produceOrderModule));
            routeManager.AddRouteHandler(new HarvestOrderRouteHandler(harvestOrderModule));
            routeManager.AddRouteHandler(new BuildOrderRouteHandler(buildOrderModule));

            server = new RESTServer(logger, routeManager, "http://127.0.0.1:8734/");

            server.Start();

            WaitHandle.WaitAny(new WaitHandle[] { quitEvent }, -1);

            server.Stop();
            //serviceHostModule.Stop();
            botSchedulerModule.Stop();

            client.Close();
            logger.Dispose();

            Console.CancelKeyPress -= new ConsoleCancelEventHandler(Console_CancelKeyPress);
        }
示例#19
0
        public async Task MainAsync(string token)
        {
            BotModuleLoader bml = new BotModuleLoader();

            bml.Load();

            // You should dispose a service provider created using ASP.NET
            // when you are finished using it, at the end of your app's lifetime.
            // If you use another dependency injection framework, you should inspect
            // its documentation for the best way to do this.
            using (ServiceProvider services = ConfigureServices(bml))
            {
                DiscordSocketClient client = services.GetRequiredService <DiscordSocketClient>();

                client.Log += LogAsync;
                services.GetRequiredService <CommandService>().Log += LogAsync;

                // Here we initialize the logic required to register our commands.
                await services.GetRequiredService <CommandHandlingService>().InitializeAsync(bml);

                Queue <Type> loadModules = new Queue <Type>();
                foreach (Type t in bml.GetServices())
                {
                    loadModules.Enqueue(t);
                }

                HashSet <Type> loadedTypes = new HashSet <Type>();
                int            failLoads   = 0;
                while (loadModules.Count > 0)
                {
                    Type loadType           = loadModules.Dequeue();
                    bool loadThisModule     = true;
                    BotModuleDependency att = (BotModuleDependency)Attribute.GetCustomAttribute(loadType, typeof(BotModuleDependency));
                    if (att != null)
                    {
                        foreach (Type depType in att.dependencies)
                        {
                            if (!loadedTypes.Contains(depType))
                            {
                                loadThisModule = false;
                            }
                        }
                    }
                    if (loadThisModule)
                    {
                        failLoads = 0;
                        loadedTypes.Add(loadType);
                        BotModule bm = services.GetService(loadType) as BotModule;
                        Console.WriteLine($"Loaded {loadType.Name}");
                        await bm.Initialize(services);
                    }
                    else
                    {
                        failLoads++;
                        loadModules.Enqueue(loadType);
                        Console.WriteLine($"Delaying load for {loadType.Name}, dependency not loaded");
                    }
                    if (failLoads > loadModules.Count * 2)
                    {
                        Console.WriteLine("Not all modules loaded, please install missing dependencies");
                        break;
                    }
                }

                // Tokens should be considered secret data and never hard-coded.
                // We can read from the environment variable to avoid hardcoding.
                await client.LoginAsync(TokenType.Bot, token);

                await client.StartAsync();

                await Task.Delay(Timeout.Infinite);
            }
        }