Esempio n. 1
0
        public async Task <string> Execute(Message msg)
        {
            var split = msg.Text.Split(' ', 2); // [команда, параметры]

            if (split.Length < 2)
            {
                return("Не все параметры указаны!");
            }

            var url = await _provider.GetImagesUrl(split[1], Browser.Yandex);

            if (url.Count == 0)
            {
                _logger.LogCritical($"Неудалось получить картинки через Yandex, пробуем получить через DuckDuckGo");
                url = await _provider.GetImagesUrl(split[1], Browser.DuckDuckGo);

                if (url.Count == 0)
                {
                    _logger.LogCritical($"Неудалось получить картинки через DuckDuckGo");
                }
            }
            else
            {
                _logger.LogCritical($"URL картинок получены, одна из них: {url[0]}");
            }


            // Получить адрес сервера для загрузки картинок в сообщении
            try
            {
                var uploadServer = _vkApi.Photo.GetMessagesUploadServer(0);

                _logger.LogCritical("Адресс для загрузки получен");

                // Загрузить картинки на сервер VK.
                var imagePath = new List <string>();

                foreach (var item in url)
                {
                    imagePath.Add(await UploadFile(uploadServer.UploadUrl,
                                                   item, "jpg"));
                }

                var attachment = new List <IReadOnlyCollection <Photo> >();

                if (imagePath.Count > 0)
                {
                    // Сохранить загруженный файл
                    foreach (var path in imagePath)
                    {
                        attachment.Add(_vkApi.Photo.SaveMessagesPhoto(path));
                    }


                    _vkApi.Messages.Send(new MessagesSendParams
                    {
                        PeerId      = msg.PeerId.Value,
                        Message     = "",
                        Attachments = attachment.SelectMany(x => x), //Вложение
                        RandomId    = new DateTime().Millisecond + Guid.NewGuid().ToByteArray().Sum(x => x)
                    });
                    return($"Картинки по запросу: \"{split[1]}\"");
                }

                return($"Картинок по запросу \"{split[1]}\" не найдено");
            }
            catch (Exception e)
            {
                _logger.LogCritical($"Произошла ошибка: {e.Message}");
                return($"Упс... При поиске картинок по запросу: \"{split[1]}\" что-то пошло не так...");
            }
        }