mail-ru-im / bot-python

Bot API for Python
https://teams.vk.com/botapi/
MIT License
83 stars 33 forks source link

inlineKeyboardMarkup не отправляется #7

Open eremeevdev opened 4 years ago

eremeevdev commented 4 years ago

пробую отправить клавиатуру, как показано в примере:

if __name__ == "__main__":
    bot = Bot(token=TOKEN, name=NAME, version=VERSION, api_url_base=API_URL)
    bot.send_text(chat_id='746691278',
                text=U"helo\n\rworld<a href='aaa'>aaa</a>",
                inline_keyboard_markup="[{}]".format(json.dumps([
                    {"text": "Action 1", "url": "http://mail.ru"},
                    {"text": "Action 2", "callbackData": "call_back_id_2"},
                    {"text": "Action 3", "callbackData": "call_back_id_3"}
                ])))
    bot.dispatcher.add_handler(BotButtonCommandHandler(callback=buttons_answer_cb))
    bot.idle()

сообщение отправляется, а клавиатуры нет.

Duiesel commented 4 years ago

inline_keyboard_markup="[{}]".format(json.dumps([ {"text": "Action 1", "url": "http://mail.ru"}, {"text": "Action 2", "callbackData": "call_back_id_2"}, {"text": "Action 3", "callbackData": "call_back_id_3"} ])))

Поправь вот на такой вариант: inline_keyboard_markup="{}".format(json.dumps([[ {"text": "Action 1", "url": "http://mail.ru"}, {"text": "Action 2", "callbackData": "call_back_id_2"}, {"text": "Action 3", "callbackData": "call_back_id_3"} ]])))

Olegt0rr commented 4 years ago

Если для пользователя библиотеки сделать вот такой интерфейс

from icq import InlineKeyboardMarkup, InlineKeyboardButton
markup = InlineKeyboardMarkup()
makup.add(InlineKeyboardButton('text', data='action')
makup.add(InlineKeyboardButton('some url', url='https://t.me/')
bot.send_text(chat_id=746691278, text="Text", inline_keyboard_markup=markup)

То вопросы по формированию клавиатур в стиле [[{},{}],[],{}{}{}{][]} возникать не будут. Всю магию сериализации можно спрятать, т.к. она у всех пользователей библиотеки будет одинаковой (+ поддержку ujson можно в коробку положить)

dasshit commented 3 years ago

Если для пользователя библиотеки сделать вот такой интерфейс


from icq import InlineKeyboardMarkup, InlineKeyboardButton

markup = InlineKeyboardMarkup()

makup.add(InlineKeyboardButton('text', data='action')

makup.add(InlineKeyboardButton('some url', url='https://t.me/')

bot.send_text(chat_id=746691278, text="Text", inline_keyboard_markup=markup)

То вопросы по формированию клавиатур в стиле [[{},{}],[],{}{}{}{][]} возникать не будут.

Всю магию сериализации можно спрятать, т.к. она у всех пользователей библиотеки будет одинаковой (+ поддержку ujson можно в коробку положить)

Добрый день,

Недавно смерджил в мастер ветку этого репозитория, принцип работы так же как у pyTelegramBotAPI.)