Top.Mail.Ru
Ответы
Аватар пользователя
1 год назад
от
Изменено

Micropython Inline/Reply keyboard.

Нужна помощь, друзья. Нужно запрограммировать телеграмм бота через ESP32 используя MicroPython. Использовал библиотеку UTelegram для самого бота, однако насколько я понимаю, она не поддерживает инлайн и реплай кнопки, а они нужны.
Пытался дополнительно установить библиотеки Aiogram и Telebot (pyTelegramAPI), они слишком объемные. Опыта программирования у меня мало, я не обладаю знаниями, чтобы редактировать библиотеки.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Просветленный

Создание Telegram бота на ESP32 с использованием MicroPython может быть непростой задачей из-за ограниченных ресурсов устройства и ограниченной поддержки библиотек. Тем не менее, можно использовать библиотеку urequests для общения с Telegram API напрямую, чтобы поддерживать инлайн и реплай кнопки.

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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
 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.

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

1234567
 buttons = { 
    'inline_keyboard': [ 
        [{'text': 'Button 1', 'callback_data': 'btn1'}, {'text': 'Button 2', 'callback_data': 'btn2'}] 
    ] 
} 
send_message(chat_id, 'Choose an option:', buttons)