//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)); }
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); } }
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); } }
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(); }
public void Start() { var module = new BotModule(); //var module = new NeuralNetworkModule(); //var module = new NLPModule(); module.Start(); }
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); }
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); }
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))); }
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))); } }
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))); }
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); }
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); }
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()); }
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); * }*/ }
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); }
public BotFactory() { Instance = this; BotModule.InitRunnerModules(); }
protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); BotModule.Configure(); }
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); }
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); } }