Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 11
1
Telegram Bot

Получить ответ от бота

17.07.2020, 11:30. Просмотров 1442. Ответов 7
Метки нет (Все метки)

помогите пожалуйста, решил переписать бота чтоб взаимодействовал с юзером через кнопки.
кнопки создались, но как ловить ответ что пользователь нажал?

вот код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
         private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;
            
            if (message == null || message.Type != MessageType.Text) return;
 
            if (message.Text == "/start")
            {
                await client.SendTextMessageAsync(message.Chat.Id, "Wellcome to GammaVPN bot . Select your language ⭐️");
                var keyboard = new ReplyKeyboardMarkup(new[]
                {
 
                    new []
                    {
                        new KeyboardButton(" English"),
                        new KeyboardButton(" Russian"),
                    },
 
                });
                var answer = keyboard;
 
                // ниже код не работает. хочу примерно так организовать, подскажите как?
                if(answer.ToString()== " Russian")
                {
                    await client.SendTextMessageAsync(message.Chat.Id, "Привет!", replyMarkup: keyboard);
                }
                else
                {
                    await client.SendTextMessageAsync(message.Chat.Id, "Hello!", replyMarkup: keyboard);
                }
               
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2020, 11:30
Ответы с готовыми решениями:

Как сохранить ответ от пользователя Телеграмм бота
Здравствуйте, создал команду в @BotFather, при вызове этой команды в телеграмм боте, бот отвечает...

Не могу получить ответ от телеграмм бота
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters updater =...

Ответ от бота в телеграмм.
Подскажите идею, вот я пишу бота который отправляет заказ, в группу исполнителей. Далее какой то...

Ответ бота на сообщение которое переслали с командой
Есть бот, он в чате отвечает на команду Обнять(отправляет картинку). Как сделать так, чтобы когда...

7
608 / 437 / 158
Регистрация: 21.02.2019
Сообщений: 1,597
17.07.2020, 13:13 2
Как обработать кнопки

Добавлено через 2 минуты
..в варианте с SendTextMessageAsync будет выглядеть примерно вот так
C#
1
2
3
4
await _botService.Client.SendTextMessageAsync(
                        callbackQuery.Message.Chat.Id,
                        $"Received {callbackQuery.Data}"
                    );
0
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 11
17.07.2020, 13:52  [ТС] 3
carrotik, я не понял ответа. по той ссылке какой-то огрызок нерабочего кода.
0
608 / 437 / 158
Регистрация: 21.02.2019
Сообщений: 1,597
17.07.2020, 14:29 4
Цитата Сообщение от g0mtech Посмотреть сообщение
огрызок нерабочего кода.
... не знаю, у меня он работает ... смысл в том, что ответ от кнопок надо ловить не на Message, а на CallBackQuery (который приходит от бота) и соответственно этот ответ и обрабатывать и отправлять назад либо как AnswerCallbackQueryAsync - он появится на клиенте в виде всплывающего окошка - не сообщение), либо через SendTextMessageAsync, как выше ...
0
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 11
17.07.2020, 16:04  [ТС] 5
carrotik, я посмотрел, получилось прикрутить события.
но теперь проблема в том что бот не корректно реагирует на нажатие.
когда 1-ый раз нажимаю на кнопку не происходит вообще ничего. далее он увеличивает кол-во присылаемых сообщений равное кол-ву нажатий на кнопку. почему?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public static TelegramBotClient Bot;
        static string chatID = string.Empty; 
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            Message message = messageEventArgs.Message;
            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            if (message.Text == "/start")
            {
                InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(new[]
                 {
                    // first row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("������������ English", "Eng"),
                        InlineKeyboardButton.WithCallbackData("������������ Russian", "Rus"),
                    },
                });
                //await Bot.SendTextMessageAsync(chatId: message.Chat.Id, text: "Choose", replyMarkup: inlineKeyboard);
                await Bot.SendTextMessageAsync(message.Chat.Id, "Wellcome to GammaVPN bot ������. Select your language ⭐️", replyMarkup: inlineKeyboard);
            }
        }

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  private static void Bot_OnCallbackQuery(object sender, CallbackQueryEventArgs e)
        {
            // Callback'и от кнопок
            Bot.OnCallbackQuery += async (object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) =>
            {
                var message = ev.CallbackQuery.Message;
                if (ev.CallbackQuery.Data == "Eng")
                {
                    //await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "You hav choosen " + ev.CallbackQuery.Data, true); //это как messagebox
                    await Bot.SendTextMessageAsync(message.Chat.Id, "Hello");
                }
                else if (ev.CallbackQuery.Data == "Rus")
                {
                    //await Bot.SendTextMessageAsync(message.Chat.Id, "тест", replyToMessageId: message.MessageId);
                    //await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "частики" на кнопке
                    await Bot.SendTextMessageAsync(message.Chat.Id, "Привет");
                }
            };
 
        }
C#
1
2
3
4
5
6
7
8
9
10
11
  static void Main(string[] args)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            Bot = new TelegramBotClient("");
            Bot.OnMessage += BotOnMessageReceived;
            Bot.OnCallbackQuery += Bot_OnCallbackQuery;
 
            Bot.StartReceiving();
            Console.ReadLine();
            Bot.StopReceiving();
        }
Добавлено через 7 минут
я нажал на кнопку 3 раза - и получил 6 ответов. если нажму ещё 1 раз - он напишет поверх этих 8 сообщений дополнительных "Привет".

https:// i.im gur.com/MUFwiLL.png (убери пробелы)
0
608 / 437 / 158
Регистрация: 21.02.2019
Сообщений: 1,597
17.07.2020, 16:36 6
g0mtech,
.. вот как развести сообщения для варианта polling - тут я подсказать не могу, поскольку у меня бот работает на webhook, а там немного другая схема ... возможно, нужно проверять свойство UpdateType при приеме, т.е. Message или CallbackQuery, или File и т.д. .. Но как это делается в вашем варианте с опросом сервера (а не WebAPI, как у меня) - тут читать надо ...
0
2411 / 1866 / 337
Регистрация: 22.07.2011
Сообщений: 7,164
20.07.2020, 22:54 7
g0mtech, а зачем ты Bot_OnCallbackQuery делаешь еще одну подписку , в итоге у тебя будет вызвано несколько обработчиков на одно сообщение. , притом что ты не отписываешься. число вызовов будет увеличиваться с каждым разом.
0
-3 / 0 / 0
Регистрация: 31.07.2020
Сообщений: 3
31.07.2020, 11:24 8
не работает код же, бред какой-то
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2020, 11:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Получить данные от бота в телеграмм
Всем привет, пытаюсь получить данные от бота телеграмм Для начала зарегистрировал бота тут:...

Как получить данные с сайта и пройти проверку на бота?
Здравствуйте! Прошу подсказать, может кто сталкивался. Пытаюсь извлечь данные с сайта, чтобы...

Получить ответ от сервера
Попробовал отправить запрос с помощью QNetworkAccessManager и QNetworkRequest, а с помощью сигнала...

Получить ответ от сервера
Что за команда в HttpWebRequest, при помощи которой можно узнать код ответа от сервера. По...

Получить ответ от сервера
Добрый день! У меня возник еще один вопрос. Пишу программу которая авторизовывается на одном...

Получить ответ xNet
отправляю пост запрос (скрин 1), в браузере ответ такой (скрин 2 или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.