Как удалить клавиатуру в telegram?
Делаю бота, пока разобрался как пользоваться reply_markup много вариантов перепробовал.
Сейчас у меня проблема в том, что в чате с ботом постоянно показывется старая клавиатура, у меня даже в кода вариантов ответов другие, но он по прежнему показывает старые варианты.
У меня кнопки берутся request с другого сервера и дальше массив кнопок так отображается:
var options = < reply_markup: JSON.stringify(< inline_keyboard: body.data >) >;
Всё! Но бот попрежнему отображает клавиатуру с совершенно другими вариантами ответов. Такое чувство что он просто её запомнил и не зависимо от обстаятельств выводит.
- Вопрос задан более трёх лет назад
- 8040 просмотров
Комментировать
Решения вопроса 1
DimaWeb @DimaWeb Автор вопроса
Глупая ситуация получилась. Я удалил бота и переписку (delete conversation) и добавил его снова в контакты, и проблема исчёзла. Возмоэно сам телеграм клиент хранил старую клавиатуру.
Как удалить клавиатуру?(Python telegram bot, keyboard_remove)
Когда получаете следующее сообщение, добавьте строку:
await message.answer(«Клавиатура скрыта», reply_markup=types.ReplyKeyboardRemove())
Отслеживать
ответ дан 11 авг 2021 в 13:48
128 9 9 бронзовых знаков
Т.к. удалить кнопки так и не вышло, нашел другой подход:
отправляем запрос контакта.
После полученного номера, отправляем другую клавиатуру
а вот такую клавиатуру уже можно и удалить
Отслеживать
ответ дан 12 авг 2021 в 13:44
53 8 8 бронзовых знаков
- python
- telegram-bot
- клавиатура
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Telegram Bot Создание и получение данных с кастомной клавиатуры в Telegram боте на c#
.
Одной из ключевых «фишек» Bot API стало появление кастомных клавиатур. На самом деле, это обычные шаблоны сообщений, не более, поэтому относиться к ним надо осторожно. Давайте просто покажу на примере, как делается такая клавиатура:
from telebot import types markup = types.ReplyKeyboardMarkup() markup.row('a', 'v') markup.row('c', 'd', 'e') bot.send_message(message.chat.id, "Choose one letter:", reply_markup=markup)
Создаем объект типа ReplyKeyboardMarkup(), добавляем построчно элементы (или можно сделать автоматическое разделение на строки при помощи аргумента row_width), передаем полученную разметку в метод send_message(). Если же мы хотим убрать кастомную клавиатуру вообще, заменив её на кнопочку [/], то вместо объекта ReplyKeyboardMarkup()надо создать объект ReplyKeyboardRemove() и просто передать его в send_message().
Последнее редактирование: 22.09.2020
YTreWQ
Member
18.04.2020 7 0
Я делал в Python через библиотека
Ссылка скрыта от гостей
.
Одной из ключевых «фишек» Bot API стало появление кастомных клавиатур. На самом деле, это обычные шаблоны сообщений, не более, поэтому относиться к ним надо осторожно. Давайте просто покажу на примере, как делается такая клавиатура:
from telebot import types markup = types.ReplyKeyboardMarkup() markup.row('a', 'v') markup.row('c', 'd', 'e') bot.send_message(message.chat.id, "Choose one letter:", reply_markup=markup)
Создаем объект типа ReplyKeyboardMarkup(), добавляем построчно элементы (или можно сделать автоматическое разделение на строки при помощи аргумента row_width), передаем полученную разметку в метод send_message(). Если же мы хотим убрать кастомную клавиатуру вообще, заменив её на кнопочку [/], то вместо объекта ReplyKeyboardMarkup()надо создать объект ReplyKeyboardRemove() и просто передать его в send_message().
Прошу прощения я не провильно составил вопрос я пишу бота на c# и хочу узнать как это реализовать на с#
Блог дяди Freemanа

Telegram bot (library pyTelegramBotAPI) / Бот Телеграма (библиотека pyTelegramBotAPI)
Для домашних нужд решил я завести себе бота Telegram, дабы получать оповещения и статусы от домашних устройств и автоматики. Сделать все это я решил на Python, поскольку не хотел слишком углубляться в детали, уровня абстракции этого языка вполне достаточно для этой работы.
Итак, для начала Вам нужно себе бота завести. Писать мануал тут будет излишним, их в интернете полно. Приведу тут ссылку на официальный мануал Телеграма по ботам. Получили token бота? Теперь читаем дальше.
1. Подготовка окружения
Как уже сказал выше, для работы бота я использовал готовую библиотеку pyTelegramBotAPI, а значит нам потребуется python, я писал на версии 3.6 под систему ubuntu 18.04 LTS. Все, что надо установить при такой конфигурации это сам python3, pip3 и, конечно, библиотеку.
apt-get update
apt-get install python3
apt-get install python3-pip
pip3 install pyTelegramBotAPI
Теперь все готово для того, чтобы кодить самого бота.
2. Код бота
Самое главное в коде это обработчики событий, то есть обработка того контента, который будет получать бот в ходе своей работы.
Так как бота мы уже создали, у нас есть токен авторизации.
Важное примечание. Запуская бота, имейте ввиду, что есть определенные нюансы, например, вдруг если он упадет, но сообщения боту будут продолжать поступать от пользователей, они накопятся в серверах Телеграма в течении 24 часов и при выходе бота в сеть, прилетят все разом. Поэтому эту ситуацию в коде не забудьте продумать. Слить все сообщения или обработать, Вам решать.
Итак, начало файла telebot_handler.py выглядит так:
# -*- coding: utf-8 -*- import telebot from telebot import types
Тут я указываю, что использую кодировку utf8 — всегда так делаю в python скриптах, а также ссылаюсь на библиотеку telebot и модуль из нее же, там хранятся типы нужных объектов для бота.
bot = telebot.TeleBot("4xxxxxxx2:Xxxxxxxxxxxx--XXXXxxxxxxxxXXXXXxxXX")
Это инициализация объекта бота как потомка от типа TeleBot, с указанием токена Вашего бота. после этого этим объектом можно манипулировать, отсылать и принимать сообщения.
2.1 Обработчики событий
Мы перешли к самой сути — обработке команд. Можно обрабатывать так называемые специализированные типы данных в Телеграме — команды, это строки с символом / в начале, также можно и обрабатывать простые сообщения, написать, к примеру чат-бота. Ну тут на Вашу фантазию так сказать.
Ниже пример, как обрабатывать команду /start , которая, к слову, обязательна по соглашению политики ботов Телеграма:
@bot.message_handler(commands=['start'])
def handle_start(message):
bot.reply_to(message, 'Hello, ' + message.from_user.first_name)
Вот так вроде бы нехитро, благодаря высокоуровневой обертке из библиотеки. Понятно, что тут можно написать все что угодно, нет каких-то стандартов, какой должен быть ответ на эту команду. Предполагается, что с нее начинается Ваш чат с ботом.
Теперь, если в голове все хорошо улеглось, можно попробовать написать обработчик для текстовых сообщений. Тоже внешне очень просто:
@bot.message_handler(func=lambda message: True, content_types=['text'])
def handle_text(message):
if message.text == "Hi":
bot.send_message(message.from_user.id, "Hello, World!")
elif message.text == "How are you?" or message.text == "How are u?":
bot.send_message(message.from_user.id, "I'm fine, thanks. And you?")
else:
bot.send_message(message.from_user.id, "Sorry, i dont understand you.")
2.2 Плюшечки
Очень удобны на мой взгляд так называемые в жаргоне Телеграма «клавиатуры», которые позволяют избавить пользователей от необходимости знать команды Вашего бота, а просто дают на выбор кнопочки с вариантами. Это упрощает общение с ботом, а также очень его ускоряет. Поэтому, пользуемся:
##Клавиатура главного меню##
markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) #Активация, название, количество кнопок по одной в ряду
itembtn1 = types.KeyboardButton(' Прислать гороскоп на день') #Название кнопки 1
itembtn2 = types.KeyboardButton(' Управление окнами') #Название кнопки 2
itembtn3 = types.KeyboardButton(' Показать состояние дома') #Название кнопки 3
markup.add(itembtn1, itembtn2, itembtn3) #Занесение кнопок в матрицу
##Клавиатура главного меню##
Это мы подготовили клавиатуру для главного меню, теперь мы это прикрутим к нашему первому общению с ботом, то бишь к команде /start :
@bot.message_handler(commands=['start'])
def handle_start(message):
bot.reply_to(message, 'Hello, ' + str(message.from_user.first_name),reply_markup=markup)
Это мы просто добавили reply_markup параметр, который и содержит объект клавиатуры. Кстати, если после очередного сообщения надо удалить клавиатуру, (которая может кстати выставлять флаг, и исчезать после выбора пользователя самостоятельно), то вместо объкта клавиатуры надо отправить объект пустой клавиатуры, а именно:
###Убрать клавиатуру###
menu_remove=types.ReplyKeyboardRemove()
###Убрать клавиатуру###
Теперь после отправки пользователю
bot.reply_to(message, 'Hello, ' + str(message.from_user.first_name),reply_markup=menu_remove)
клавиатура будет удалена.
3. Последние штрихи
Ну, а у нам же задача, чтобы бот не только после запуска обработал все доступные ему сообщения и помер, а жил и служил, поэтому мы ему включим поллинг, чтобы процесс не завершался пока мы не позволим, либо он не отвалится из-за нашего кривого кода
bot.polling(none_stop=True, interval=0)
Это позволит закрыть наш вопрос.
4. Как его запускать то. :))
Да, если вдруг кому то python в новинку, то запускать наш скрипт надо так:
/usr/bin/python3 / /telebot_handler.py
Да, и не забудьте выставить права на запуск Вашему скрипту,
chmod +x / /telebot_handler.py
Тут важное примечание. НЕЛЬЗЯ называть файл .py со скриптом именем, используемым в вызове библиотек, а именно тут, после слов import:
import telebot
поскольку python тогда будет линковать сам файл рекурсивно, а не библиотеку, такая вот вещь.
После запуска таким образом, поскольку жизнь скрипта будет условно вечной, он не вернет вам консоль, пока вы его принудительно не убьете, CTRL+С, это удобно лишь на этапе разработки бота.
5. Ладно, расскажу, как запустить его по человечески.
При условии, что у Вас стоит debian-like система под этим ботом, у меня к слову это lxc контейнер, о которых я еще напишу позже, то ниже я опишу способ сделать из Вашего бота демона), то есть службу, которая будет стартовать при запуске системы автоматически и не занимать консоль.
Я для этого задействовал возможности systemd, достаточно создать файл в директории /lib/systemd/system
# cat /lib/systemd/system/telebot.service
[Unit]
Description=Telegram Bot
[Service]
Type=simple
ExecStart=/usr/bin/python3/ /telebot_handler.py Restart=always
RestartSec=10
StartLimitIntervalSec=0
SyslogIdentifier=telegram_bot_service
[Install]
WantedBy=multi-user.target
После этого, надо systemd перезапустить и разрешить запуск демона:
systemctl daemon-reload
systemctl enable telebot.service
Все, теперь им можно управлять как обычной службой, запуск и остановка:
service telebot stop
service telebot start
