Exemple #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);
        }
Exemple #2
0
        static async Task Main()
        {
            botClient = new TelegramBotClient(tgBotToken);

            sqliteHandler = new SqliteHandler();

            botClient.OnMessage += BotOnMessage;
            botClient.StartReceiving();

            Console.WriteLine("Bot started!");

            while (isBotOn)
            {
                List <SqliteRelationTable> relationTable = SqliteHandler.GetFullSqliteTable();

                if (relationTable.Count == 0)
                {
                    Thread.Sleep(botSleepTime);
                    return;
                }

                // Формируем список групп vk и соответвующих им телеграм каналов для
                // последующей рассылки постов.
                List <VkToTgRelation> VkToTgRelationTable = new List <VkToTgRelation>();
                VkToTgRelationTable.Add(new VkToTgRelation(relationTable[0].VkGroupName, relationTable[0].TgChannelId, relationTable[0].LastPostId));
                for (int i = 1; i < relationTable.Count; i++)
                {
                    // Если текущей vk группы нет, добавить в список.
                    if (relationTable[i].VkGroupName != VkToTgRelationTable.Last().VkGroupName)
                    {
                        VkToTgRelationTable.Add(new VkToTgRelation(relationTable[i].VkGroupName, relationTable[i].TgChannelId, relationTable[i].LastPostId));
                    }
                    // Иначе добавить еще один канал для рассылки к этой vk группе.
                    else
                    {
                        VkToTgRelationTable.Last().AddTgChannelId(relationTable[i].TgChannelId);
                    }
                }

                // Делаем рассылку из всех групп vk, если есть новые посты.
                foreach (var item in VkToTgRelationTable)
                {
                    await CheckNewPosts(item);
                }

                // Спим и ждем новых постов.
                Thread.Sleep(botSleepTime);
            }

            botClient.StopReceiving();
        }
Exemple #3
0
        static async void BotOnMessage(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.Text || message.From.Username != tgRootUser)
            {
                return;
            }

            switch (message.Text.Split(' ').First())
            {
            case "/start":
                await botClient.SendTextMessageAsync(chatId : message.Chat.Id, text :
                                                     "You send me Vk public name and Telegram channel id. " +
                                                     "You should add bot as administrator to your channel before start!\n" +
                                                     "For example: /add meme_ntos 1234567890");

                break;

            case "/add":
            {
                string[] splittedMessage = message.Text.Split(' ');
                if (splittedMessage.Length != 3)
                {
                    return;
                }

                string vkGroupName = splittedMessage[1];
                int    tgChannelId;
                try
                {
                    tgChannelId = int.Parse(splittedMessage[2]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    await botClient.SendTextMessageAsync(chatId : message.Chat.Id,
                                                         text : "Telegram channel id should contain only numbers!");

                    return;
                }

                // Проверка на существование tg канала.
                if (GetChannelName(tgChannelId) == null)
                {
                    await botClient.SendTextMessageAsync(chatId : message.Chat.Id,
                                                         text : "Telegram channel id doesn't exit or bot hasn't been added to channel as administrator!");

                    return;
                }

                SqliteHandler.AddVkToTgRelation(vkGroupName, tgChannelId);

                await botClient.SendTextMessageAsync(chatId : message.Chat.Id,
                                                     text : "Relation list updated.");

                break;
            }

            case "/remove":
            {
                string[] splittedMessage = message.Text.Split(' ');
                if (splittedMessage.Length != 3)
                {
                    return;
                }

                string vkGroupName = splittedMessage[1];
                int    tgChannelId;
                try
                {
                    tgChannelId = int.Parse(splittedMessage[2]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    await botClient.SendTextMessageAsync(chatId : message.Chat.Id, text : "Telegram channel id should contain only numbers!");

                    return;
                }

                SqliteHandler.RemoveVkToTgRelation(vkGroupName, tgChannelId);

                await botClient.SendTextMessageAsync(chatId : message.Chat.Id,
                                                     text : "Relation list updated.");

                break;
            }

            case "/listpc":
            {
                List <SqliteRelationTable> relationTable = SqliteHandler.GetFullSqliteTable();
                if (relationTable.Count == 0)
                {
                    await botClient.SendTextMessageAsync(chatId : message.Chat.Id, text : "Bot doesn't have any Vk, Telegram records!");

                    return;
                }

                var table = new ConsoleTable("Vk", "TgChannel", "TgId", "LastPost");
                foreach (var item in relationTable)
                {
                    string channelName = GetChannelName(item.TgChannelId);
                    if (channelName == null)
                    {
                        channelName = "Channel doesn't exist";
                    }

                    table.AddRow(item.VkGroupName, channelName, item.TgChannelId, item.LastPostId);
                }
                string messageText = table.ToMarkDownString();
                messageText = "```\r" + messageText + "\r```";
                await botClient.SendTextMessageAsync(chatId : message.Chat.Id, text : messageText, parseMode : ParseMode.MarkdownV2);

                break;
            }

            case "/list":
            {
                List <SqliteRelationTable> relationTable = SqliteHandler.GetFullSqliteTable();
                if (relationTable.Count == 0)
                {
                    await botClient.SendTextMessageAsync(chatId : message.Chat.Id, text : "Bot doesn't have any Vk, Telegram records!");

                    return;
                }

                string messageText = "";
                int    i           = 1;
                foreach (var item in relationTable)
                {
                    string channelName = GetChannelName(item.TgChannelId);
                    if (channelName == null)
                    {
                        channelName = "Channel doesn't exist";
                    }

                    messageText +=
                        $"{i}:\n" +
                        $"Vk Group: {item.VkGroupName}\n" +
                        $"Tg Channel Name: {channelName}\n" +
                        $"Tg Channel Id: {item.TgChannelId}\n" +
                        $"Vk Last Post Id: {item.LastPostId}\n\n";
                    i++;
                }

                messageText = "```\r" + messageText + "\r```";
                await botClient.SendTextMessageAsync(chatId : message.Chat.Id, text : messageText, parseMode : ParseMode.MarkdownV2);

                break;
            }

            default:
                break;
            }
        }