Pull to refresh
9
0

User

Send message

У меня несколько ботов на подобном функционале работают. Им пользуется две организации. В каждой несколько десятков сотрудников постоянно онлайн. Заказывали для своих внутренних коммерческих целей. Ещё на одном, уже собственном, помимо технического функционала ещё и финансовая. Зарегистрировано 700+ юзеров. Серв был в Харькове, его разбомбили, света нет, проект перенесу, кину ссыль на бот. Оповещение о новых объявлениях на Колесах по подписке. И тот и другой и третий бот работают хорошо, не жалуются. Хотя там не 3, а 5 их уже. Возможно я наткнусь на какой-то технический потолок. Но пока все норм.

Может быть чуть позже )

Я начал работу над статьей и видеороликом когда у меня была установлена Visual Studio 2019.

Даже не знаю... Попробуйте нажать F5

Спасибо за дополнение!

Пользуйтесь на здоровье!

Спасибо за дополнение!

Таким образом, никакого периодического опроса сервера нет...

Long polling... Запрос на сервер телеги, ожидание ответа, получение ответа, обработка. Снова запрос, снова ожидание ответа, снова получение ответа, еще одна обработка... Кажется это цикл, в каждой итерации которого мы опрашиваем сервер?

По моему скромному мнению, с момента поддержки long polling не стало самого главного преимущества вебхуков (моментальности), а инфраструктурных недостатков и неудобств сильно больше. В наших проектах перешли на long polling и очень довольны, удобно.

В красоте Ваших слов потерял смысл если честно ) Наверное Вы имели ввиду, что теперь технологии long polling == вебхукам по продуктивности? С этим, пожалуй, соглашусь.

Одно и то же действие можно сделать миллионом разных способов. Особенно в программировании. Netonsoft.Json мне просто нравится, я к ней привык и работаю с ней. К тому же я планировал показать в будущем не только элементарный вывод объекта в консольку.

Привет!

CallbackData вполне достаточно с моей точки зрения. На эти данные ты можешь ориентироваться и строить логику программы.

Попробуй так.

Hidden text
using System;
using System.Threading;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Extensions.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.ReplyMarkups;

namespace TelegramTestProject
{

    class Program
    {
        static ITelegramBotClient bot = new TelegramBotClient("524584647:AAH8gg9L6Xsfc0ecJN7KrTVOeuimNZJMBKc");
        public static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
        {
            // Некоторые действия
            Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(update));
            if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)
            {
                var message = update.Message;
                if (message.Text.ToLower() == "/test")
                {
                    SendInline(botClient: botClient, chatId: message.Chat.Id, cancellationToken: cancellationToken);
                    return;
                }
            }
            if (update.Type == Telegram.Bot.Types.Enums.UpdateType.CallbackQuery)
            {
                string codeOfButton = update.CallbackQuery.Data;
                if (codeOfButton == "post")
                {
                    Console.WriteLine("Нажата Кнопка 1");
                    string telegramMessage = "Вы нажали Кнопку 1";
                    await botClient.SendTextMessageAsync(chatId: update.CallbackQuery.Message.Chat.Id, telegramMessage, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
                }
                if (codeOfButton == "12")
                {
                    Console.WriteLine("Нажата Кнопка 2");
                    string telegramMessage = "Вы нажали Кнопку 2";
                    // await botClient.SendTextMessageAsync(chatId: update.CallbackQuery.Message.Chat.Id, telegramMessage, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);

                    InlineKeyboardMarkup inlineKeyBoard = new InlineKeyboardMarkup(
                        new[]
                        {
                            // first row
                            new[]
                            {
                                // first button in row
                                InlineKeyboardButton.WithCallbackData(text: "Кнопка 3", callbackData: "post3"),
                                // second button in row
                                InlineKeyboardButton.WithCallbackData(text: "Кнопка 4", callbackData: "post4"),
                            },

                        });

                    // await botClient.EditMessageCaptionAsync(chatId: update.CallbackQuery.Message.Chat.Id, caption: telegramMessage, messageId: update.CallbackQuery.Message.MessageId);
                    await bot.EditMessageTextAsync(update.CallbackQuery.Message.Chat.Id, update.CallbackQuery.Message.MessageId, telegramMessage, replyMarkup: inlineKeyBoard, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
                }
            }
        }

        public static async Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
        {
            // Некоторые действия
            Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(exception));
        }


        static void Main(string[] args)
        {
            Console.WriteLine("Запущен бот " + bot.GetMeAsync().Result.FirstName);

            var cts = new CancellationTokenSource();
            var cancellationToken = cts.Token;
            var receiverOptions = new ReceiverOptions
            {
                AllowedUpdates = { }, // receive all update types
            };
            bot.StartReceiving(
                HandleUpdateAsync,
                HandleErrorAsync,
                receiverOptions,
                cancellationToken
            );
            Console.ReadLine();
        }

        public static async void SendInline(ITelegramBotClient botClient, long chatId, CancellationToken cancellationToken)
        {
            InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(
                // keyboard
                new[]
                {
                    // first row
                    new[]
                    {
                        // first button in row
                        InlineKeyboardButton.WithCallbackData(text: "Кнопка 1", callbackData: "post"),
                        // second button in row
                        InlineKeyboardButton.WithCallbackData(text: "Кнопка 2", callbackData: "12"),
                    },
                    // second row
                    new[]
                    {
                        // first button in row
                        InlineKeyboardButton.WithUrl(text: "Ссылка", url: "https://google.com"),
                        InlineKeyboardButton.WithCallbackData("CallbackData кнопка")
                    },

                });

            Message sentMessage = await botClient.SendTextMessageAsync(
                chatId: chatId,
                text: "за что мне это??",
                replyMarkup: inlineKeyboard,
                cancellationToken: cancellationToken);
        }
    }
}

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity

Specialization

Backend Developer, ZennoPoster разработчик
From 2,000 $
C#
Visual C#
Software development
Visual Studio
Database design