/// <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); }
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"); }