Python Telegram Bot:按钮数据无效
Python Telegram Bot: button data invalid
我正在尝试使用 PTB 制作一个超级简单的电报机器人。机器人有一个按钮,当我单击该按钮时,机器人应该向网络发出 http 请求(无需打开浏览器)。并显示响应数据。这是我正在使用的代码片段:
def get_data():
response = requests.get('https://jsonplaceholder.typicode.com/posts/1').json()
return response['body']
def start(update, context) -> None:
inline_button = [
[
InlineKeyboardButton('test callback', callback_data=get_data())
]
]
reply_markup = InlineKeyboardMarkup(inline_button)
update.message.reply_text("Please choose:", reply_markup=reply_markup)
def button(update, context) -> None:
query = update.callback_query
query.answer()
TEXT = f"<h3>{query.data}</h3>"
query.edit_message_text(text=TEXT, parse_mode=ParseMode.HTML)
# context.bot.send_message(chat_id=update.effective_chat.id, text=f'{query.data}')
它适用于硬编码值和 50 个字符以下的文本,但是当文本大小超过 80 个字符时,我会收到以下错误:
telegram.error.BadRequest: Button_data_invalid
我认为这是由于 64 字节文本的电报限制?但在那种情况下,一些机器人如何在一条消息中显示数千个字符数据?我到底做错了什么?
您正在尝试将从网站获取的 json 数据作为 callback_data
传递给按钮。但是您真正想要的(根据您的描述)是仅在按下按钮时才获取 json 数据。您可以简单地将 callback_data
设置为一些字符串,告诉您是哪个按钮(例如 callback_data='fetch_json'
),以及当您收到 CallbackQuery
时(即在 button
函数中)调用 get_data
并使用结果编辑消息文本。
如果您确实想在发送按钮之前发出请求,则必须将长文本存储在某处并在收到 CallbackQuery
时检索它。 python-telegram-bot
具有用于存储数据的内置功能,请参阅此 wiki page。
免责声明:我目前是 python-telegram-bot
.
的维护者
我正在尝试使用 PTB 制作一个超级简单的电报机器人。机器人有一个按钮,当我单击该按钮时,机器人应该向网络发出 http 请求(无需打开浏览器)。并显示响应数据。这是我正在使用的代码片段:
def get_data():
response = requests.get('https://jsonplaceholder.typicode.com/posts/1').json()
return response['body']
def start(update, context) -> None:
inline_button = [
[
InlineKeyboardButton('test callback', callback_data=get_data())
]
]
reply_markup = InlineKeyboardMarkup(inline_button)
update.message.reply_text("Please choose:", reply_markup=reply_markup)
def button(update, context) -> None:
query = update.callback_query
query.answer()
TEXT = f"<h3>{query.data}</h3>"
query.edit_message_text(text=TEXT, parse_mode=ParseMode.HTML)
# context.bot.send_message(chat_id=update.effective_chat.id, text=f'{query.data}')
它适用于硬编码值和 50 个字符以下的文本,但是当文本大小超过 80 个字符时,我会收到以下错误:
telegram.error.BadRequest: Button_data_invalid
我认为这是由于 64 字节文本的电报限制?但在那种情况下,一些机器人如何在一条消息中显示数千个字符数据?我到底做错了什么?
您正在尝试将从网站获取的 json 数据作为 callback_data
传递给按钮。但是您真正想要的(根据您的描述)是仅在按下按钮时才获取 json 数据。您可以简单地将 callback_data
设置为一些字符串,告诉您是哪个按钮(例如 callback_data='fetch_json'
),以及当您收到 CallbackQuery
时(即在 button
函数中)调用 get_data
并使用结果编辑消息文本。
如果您确实想在发送按钮之前发出请求,则必须将长文本存储在某处并在收到 CallbackQuery
时检索它。 python-telegram-bot
具有用于存储数据的内置功能,请参阅此 wiki page。
免责声明:我目前是 python-telegram-bot
.