Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Micropython Inline/Reply keyboard.

Online. Tm Знаток (352), на голосовании 1 месяц назад
Нужна помощь, друзья. Нужно запрограммировать телеграмм бота через ESP32 используя MicroPython. Использовал библиотеку UTelegram для самого бота, однако насколько я понимаю, она не поддерживает инлайн и реплай кнопки, а они нужны.
Пытался дополнительно установить библиотеки Aiogram и Telebot (pyTelegramAPI), они слишком объемные. Опыта программирования у меня мало, я не обладаю знаниями, чтобы редактировать библиотеки.
Голосование за лучший ответ
Татьяна Просветленный (34240) 2 месяца назад
Создание Telegram бота на ESP32 с использованием MicroPython может быть непростой задачей из-за ограниченных ресурсов устройства и ограниченной поддержки библиотек. Тем не менее, можно использовать библиотеку urequests для общения с Telegram API напрямую, чтобы поддерживать инлайн и реплай кнопки.

Убедитесь, что на ESP32 установлен MicroPython и настроено Wi-Fi подключение.
Используйте библиотеку urequests для отправки HTTP-запросов к API Telegram.
 import network 
import urequests
import ujson
import time

# Настройка Wi-Fi
ssid = 'YOUR_SSID'
password = 'YOUR_PASSWORD'

station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)

while not station.isconnected():
pass

print('Connection successful')
print(station.ifconfig())

# Телеграмм токен
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
URL = f'https://api.telegram.org/bot{TOKEN}/'

def get_updates():
response = urequests.get(URL + 'getUpdates')
return response.json()

def send_message(chat_id, text, reply_markup=None):
data = {'chat_id': chat_id, 'text': text}
if reply_markup:
data['reply_markup'] = ujson.dumps(reply_markup)
response = urequests.post(URL + 'sendMessage', json=data)
return response.json()

def main():
last_update_id = None

while True:
updates = get_updates()
if 'result' in updates:
for update in updates['result']:
if last_update_id is not None and update['update_id'] <= last_update_id:
continue

chat_id = update['message']['chat']['id']
text = update['message']['text']

if text == '/start':
buttons = {
'keyboard': [
[{'text': 'Button 1'}, {'text': 'Button 2'}],
[{'text': 'Button 3'}, {'text': 'Button 4'}]
],
'resize_keyboard': True,
'one_time_keyboard': True
}
send_message(chat_id, 'Choose an option:', buttons)

last_update_id = update['update_id']

time.sleep(2)

main()

Объяснение кода:
Настройка Wi-Fi: Подключаемся к Wi-Fi сети.
Телеграмм API: Определяем базовый URL для работы с Telegram API, используя токен вашего бота.
Функции:
get_updates() получает обновления от Telegram.
send_message() отправляет сообщение с возможностью указать кнопки.
Главная функция:
В цикле проверяем новые обновления от Telegram.
Если получено сообщение /start, отправляем сообщение с кнопками.
Используем last_update_id для предотвращения обработки одного и того же сообщения несколько раз.
Настройка кнопок:
Reply-кнопки: Используются в этом примере, создаются с помощью keyboard и опций resize_keyboard, one_time_keyboard.
Inline-кнопки: Можно создать, добавив inline_keyboard в reply_markup.

для инлайн-кнопок:

 buttons = { 
'inline_keyboard': [
[{'text': 'Button 1', 'callback_data': 'btn1'}, {'text': 'Button 2', 'callback_data': 'btn2'}]
]
}
send_message(chat_id, 'Choose an option:', buttons)
Online. TmЗнаток (352) 2 месяца назад
Это почти то, что нужно. Это работа именно с платой, а нужна работа с телеграм ботом. Инлайн и реплай кнопки в самом телеграме должны быть. Но спасибо)
Online. TmЗнаток (352) 2 месяца назад
А, о , спасибо
Щас попробую
Online. TmЗнаток (352) 2 месяца назад
Большое спасибо вам! Не мог понять, что делать, здорово, что вы оказались рядом!
Похожие вопросы