Ejemplo n.º 1
0
        /// <summary>
        /// Bot
        /// </summary>
        /// <param name="settings">Настройки бота</param>
        /// <param name="unknownCommand">Команда, которая вызывается, когда ядро не смогло найти в Ваших командах нужную, если пусто - используется встроенная.</param>
        /// <param name="updaterServices">Сервивы получения сообщений, если пусто используются встроенные</param>
        /// <param name="senders">Сервивы отправки сообщений, если пусто используются встроенные</param>
        /// <param name="processor">Экзепляр класса обработки полученных сообщений, если пусто используется встроенный</param>
        /// <param name="logger">Экзепляр класса логгера, если пусто используется встроенный.</param>
        public Bot(IBotSettings settings, INucleusCommand unknownCommand = null, List <IGetUpdateService> updaterServices = null, List <IMessageSenderService> senders = null, IProcessor processor = null, ILoggerService logger = null)
        {
            Console.WriteLine("Fooxboy.NucleusBot Core. 2019. Версия: 0.1 alpha");
            Console.WriteLine("Инициалиация NucleusBot...");
            IKernel kernel = new StandardKernel(new NinjectConfigModule());

            _logger      = logger ?? new LoggerService();
            _botServices = new List <INucleusService>();
            _settings    = settings;
            if (updaterServices == null)
            {
                var list = new List <IGetUpdateService>();
                if (_settings.Messenger == Enums.MessengerPlatform.Telegam)
                {
                    list.Add(new Services.TgMessagesService(_settings, _logger));
                }
                else if (_settings.Messenger == Enums.MessengerPlatform.Vkontakte)
                {
                    list.Add(new Services.LongPollService(_settings, _logger));
                }
                else if (_settings.Messenger == Enums.MessengerPlatform.VkontakteAndTelegram)
                {
                    list.Add(new LongPollService(_settings, _logger));
                    list.Add(new TgMessagesService(_settings, _logger));
                }
                _updaters = list;
            }
            else
            {
                _updaters = updaterServices;
            }
            if (senders == null)
            {
                var list = new List <IMessageSenderService>();
                if (_settings.Messenger == Enums.MessengerPlatform.Telegam)
                {
                    list.Add(new Services.TgMessageSenderService(_settings, _logger));
                }
                else if (_settings.Messenger == Enums.MessengerPlatform.Vkontakte)
                {
                    list.Add(new Services.VkMessageSenderService(_settings, _logger));
                }
                else if (_settings.Messenger == Enums.MessengerPlatform.VkontakteAndTelegram)
                {
                    list.Add(new TgMessageSenderService(_settings, _logger));
                    list.Add(new VkMessageSenderService(_settings, _logger));
                }
                SenderServices = list;
            }
            else
            {
                SenderServices = senders;
            }

            AliasesCommand = new Dictionary <string, PayloadNucleusBot>();
            UnknownCommand = unknownCommand ?? new UnknownCommand();
            _processor     = processor ?? new Processor(_logger, this, kernel);
        }
Ejemplo n.º 2
0
        private void ExecuteCommand(INucleusCommand command, Message msg)
        {
            var sw = new System.Diagnostics.Stopwatch();

            sw.Start();
            IMessageSenderService sender = _bot.SenderServices.Single(s => s.Platform == msg.Platform);

            try
            {
                msg.Trigger = command.Command;
                command.Execute(msg, sender, _bot);
            }catch (Exception e)
            {
                _logger.Error($"Произошла ошибка в команде {command.Command}: \n {e}");
            }

            sw.Stop();
            _logger.Trace($"Команда {command.Command} выполнялась {sw.ElapsedMilliseconds} ms");
        }