static async Task CheckNewPosts(VkToTgRelation vkToTgRelationItem) { int lastId = vkToTgRelationItem.LastPostId; string vkGroupName = vkToTgRelationItem.VkGroupName; // Пробуем получить json от vk и распарсить его. try { string responseBody = await GetVkJsonAsync(vkGroupName); // Получаем json ответ. // Парсим json файл и делаем рассылку. if (responseBody != null) { VkJson vkJson = JsonConvert.DeserializeObject <VkJson>(responseBody); SendPostsToTg(vkJson, vkGroupName, ref lastId, vkToTgRelationItem.TgChannels); } } catch (Exception e) { Console.WriteLine(e.Message); } // Записываем новый last id в бд. SqliteHandler.UpdateLastId(vkGroupName, lastId); }
static void SendPostsToTg(VkJson vkJson, string vkGroupName, ref int lastId, List <int> tgChannels) { var posts = vkJson.response.items.ToList(); posts.Reverse(); // Удаляем закрепленный пост. if (posts.Last().is_pinned == 1) { posts.RemoveAt(posts.Count - 1); } // Иницилазируем lastId. if (lastId == 0) { lastId = posts.Last().id; return; } // Если новых постов нет, выходим. int n = posts.Count; if (posts[n - 1].id <= lastId) { return; } // Отправляем новые посты во все tg каналы из списка. for (int i = 0; i < n; i++) { if (posts[i].id > lastId) { int vkGroupId = Math.Abs(posts[i].from_id); // id с минусом, поэтому берем модуль. (id на самом деле string в json) string vkWallUrl = $"https://vk.com/{vkGroupName}?w=wall-{vkGroupId}_{posts[i].id}"; foreach (var tgChannelId in tgChannels) { int attachments = 0; if (posts[i].attachments != null) { attachments = posts[i].attachments.Length; } botClient.SendTextMessageAsync( chatId: long.Parse("-100" + tgChannelId), text: $"<a href=\"{vkWallUrl}\">VK Link</a>\n" + $"Attachments: {attachments} | Comments: {posts[i].comments.count}", parseMode: ParseMode.Html); } lastId = posts[i].id; Thread.Sleep(50); } } }