예제 #1
0
        public EvalCommand(TwitchClient twitchClient, Options options, Settings settings)
            : base(twitchClient, options, settings)
        {
            if (settings.Engines.Length == 0)
            {
                throw new Exception("No engines are registered.");
            }

            this.defaultEngine = settings.Engines.FirstOrDefault()?.Names?.FirstOrDefault()?.ToLower().Trim();
            this.engines       = new Dictionary <string, IPositionEvaluator>();
            foreach (var engineSettings in settings.Engines)
            {
                var typeName = $"TcecEvaluationBot.ConsoleUI.Services.{engineSettings.PositionEvaluator}";
                var type     = typeof(IPositionEvaluator).Assembly.GetType(typeName);
                if (Activator.CreateInstance(
                        type,
                        options,
                        engineSettings.Executable,
                        engineSettings.Title,
                        engineSettings.Arguments,
                        engineSettings.CommandLineInputs) is IPositionEvaluator evaluator)
                {
                    foreach (var engineName in engineSettings.Names)
                    {
                        this.engines.Add(engineName.ToLower().Trim(), evaluator);
                    }
                }
            }

            this.currentGameInfoProvider = new CurrentGameInfoProvider(settings.LivePgnUrl);
        }
예제 #2
0
        public Task OutputMovesTask()
        {
            return(Task.Run(
                       () =>
            {
                Thread.Sleep(5000);
                Console.WriteLine("Output moves task is running...");
                var infoProvider = new CurrentGameInfoProvider(this.settings.LivePgnUrl);
                var lastFen = string.Empty;
                while (true)
                {
                    if (this.settings.OutputMoves)
                    {
                        var info = infoProvider.GetInfo();
                        if (!string.IsNullOrWhiteSpace(info.Fen) &&
                            !string.IsNullOrWhiteSpace(info.LastMove) &&
                            info.Fen != lastFen)
                        {
                            lastFen = info.Fen;
                            var message = $"New move: {info.LastMove}";
                            this.twitchClient.SendMessage(
                                this.options.TwitchChannelName,
                                $"/me [{DateTime.UtcNow:HH:mm:ss}] {message}");
                        }
                    }

                    Thread.Sleep(2000);
                }
            }));
        }
예제 #3
0
        public IccfDbCommand(TwitchClient twitchClient, Options options, Settings settings)
            : base(twitchClient, options, settings)
        {
            this.currentGameInfoProvider = new CurrentGameInfoProvider(settings.LivePgnUrl);

            if (string.IsNullOrWhiteSpace(settings.IccfDatabasePath) || string.IsNullOrWhiteSpace(settings.IccfDatabaseIp))
            {
                this.database = null;
            }
            else
            {
                try
                {
                    this.database = new ChessPosDbProxy(settings.IccfDatabaseIp, settings.IccfDatabasePort);
                    this.database.Open(settings.IccfDatabasePath);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    this.database = null;
                }
            }

            if (this.database != null && this.database.IsOpen)
            {
                Console.WriteLine($"Exposing database at: {this.database.Path}");
            }
            else
            {
                Console.WriteLine($"Database at \"{settings.IccfDatabasePath}\" couldn't be opened.");
            }
        }
예제 #4
0
 public StaticCommand(TwitchClient twitchClient, Options options, Settings settings)
     : base(twitchClient, options, settings)
 {
     this.currentGameInfoProvider = new CurrentGameInfoProvider(settings.LivePgnUrl);
 }
예제 #5
0
 public DbCommand(TwitchClient twitchClient, Options options, Settings settings)
     : base(twitchClient, options, settings)
 {
     this.currentGameInfoProvider = new CurrentGameInfoProvider(settings.LivePgnUrl);
     this.lichessApiClient        = new LichessApiClient();
 }
예제 #6
0
 public ChessDbcnCommand(TwitchClient twitchClient, Options options, Settings settings)
     : base(twitchClient, options, settings)
 {
     this.currentGameInfoProvider = new CurrentGameInfoProvider(settings.LivePgnUrl);
     this.chessDbcnScoreProvider  = new ChessDbcnScoreProvider();
 }