//Обработчик новых сообщений private void handleNewMessage(JToken obj) { var message = ""; var userId = Convert.ToInt32(obj["message"]?["peer_id"]); var date = Convert.ToInt32(obj["message"]?["date"]); try { var ownerIdGroupRAP = -28905875; if (userId == 0) { message = "Не удалось получить информацию об отправителе"; throw new Exception("Не удалось получить информацию об отправителе"); } if (date == 0) { date = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; } // Тело сообщения var body = obj["message"]?["text"]?.ToString().Trim().ToLower(); if (body == null) { message = "Не удалось получить текст сообщения"; throw new Exception("Не удалось получить тело запроса"); } // Новые треки if (body.Contains("новые треки")) { var query = "#премьераТрека@rhymes"; var isSended = false; var musicCountStr = Regex.Match(body, @"[0-9]+").ToString(); if (!int.TryParse(musicCountStr, out var musicCount)) { musicCount = 4; } if (musicCount > 15) { VkHelper.SendMessage(userId, "Количество треков не должно превышать 15", date); return; } var posts = VkHelper.SearchWall(ownerIdGroupRAP, query, musicCount); foreach (var post in posts.WallPosts) { if (post.Attachments == null) { continue; } message = post.Text; var attachments = new List <Audio>(); foreach (var attachment in post.Attachments) { if (attachment.Instance is Audio) { attachments.Add(attachment.Instance as Audio); } } // Отправка каждой новой песни пользователю VkHelper.SendMessage(userId, message, date, attachments); isSended = true; } // Конец foreach для posts if (!isSended) { VkHelper.SendMessage(userId, "Не удалось найти новые треки", date); } } // Случайные треки else if (body.Contains("случайные треки")) { int countAudios; int randOffset; var audios = new List <Audio>(); var audiosByAuthor = new List <Audio>(); var match = Regex.Match(body, @"(случайные треки)\s*([0-9]*)\s*(\w*)", RegexOptions.IgnoreCase); var musicCountStr = match.Groups[2].Value; var author = match.Groups[3].Value; if (!int.TryParse(musicCountStr, out var musicCount)) { musicCount = 1; } if (musicCount > 10) { musicCount = 10; } if (author == "") { countAudios = VkHelper.GetCountAudio(ownerIdGroupRAP); if (countAudios > 0) { if (countAudios < musicCount) { musicCount = countAudios > 10 ? 10 : countAudios; } randOffset = new Random().Next(0, countAudios - musicCount); audios = VkHelper.GetAudios(ownerIdGroupRAP, musicCount, randOffset).ToList(); } else { message = "Не удалось найти песни по указанному запросу"; } } else { audios = VkHelper.SearchAudios(author, true).ToList(); countAudios = audios.Count; if (countAudios > 0) { if (countAudios < musicCount) { musicCount = countAudios; } randOffset = new Random().Next(0, countAudios - musicCount); audiosByAuthor = audios.ToList().GetRange(randOffset, musicCount); } else { message = "Не удалось найти песни по указанному запросу"; } } VkHelper.SendMessage(userId, message, date, author == "" ? audios : audiosByAuthor); } //Помощь else if (body.Contains("функции")) { message = "--------" + Environment.NewLine + "Новые треки N" + Environment.NewLine + "• Данная функция позволяет получить последние новые песни из группы \"Рифмы и Панчи\"" + Environment.NewLine + "• N - количество песен для получения. Если не указывать, то по умолчанию вернется 4 песни" + Environment.NewLine + "• Примеры: Новые треки 10 или Новые треки" + Environment.NewLine + "--------" + Environment.NewLine + "Случайные треки N Автор" + Environment.NewLine + "• Данная функция позволяет получать случайные песни" + Environment.NewLine + "• N - количество песен для получения. Если не указывать, то по умолчанию вернется 1 песня" + Environment.NewLine + "• Автор - автор песен, у которого необходимо получить случайные треки. Если не указывать, будет происходить поиск случайных песен из группы \"Рифмы и Панчи\"" + Environment.NewLine + "• Примеры: Случайные треки 10 Нервы, или Случайные треки 5, или Случайные треки Нервы, или Случайные треки" + Environment.NewLine + "--------" + Environment.NewLine + "Функции" + Environment.NewLine + "• Сообщает о доступных функциях"; VkHelper.SendMessage(userId, message, date); } else { message = "Неизвестная функция. " + Environment.NewLine + "Попробуйте воспользоваться запросом \"Функции\""; VkHelper.SendMessage(userId, message, date); } } catch (Exception e) { if (message == "") { message = "Что-то пошло не так, не удалось обработать запрос"; } if (userId != 0 && date != 0) { VkHelper.SendMessage(userId, message, date); } _logger.Log(LogLevel.Error, e.Message); } }