コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                }
            }
        }