ReplyKeyboardMarkup 不起作用 python?
ReplyKeyboardMarkup doesn't work python?
我写了一个电报机器人。一切顺利,运作良好。但是当我想使用document中提到的ReplyKeyboardMarkup
时,它不起作用!我的意思是键盘没有出现。
这个 JSON 对象有一个键 keyboard
,根据它的文档,它的值是:
type: Array of Array of String.
description: Array of button rows, each represented by an Array of Strings
这是我发送请求的代码:
reply_markup = {'keyboard': [['1'],['2']], 'resize_keyboard': True, 'one_time_keyboard': True}
params = urllib.urlencode({
'chat_id': str(chat_id),
'text': msg.encode('utf-8'),
'reply_markup': reply_markup,
'disable_web_page_preview': 'true',
# 'reply_to_message_id': str(message_id),
})
resp = urllib2.urlopen(BASE_URL + 'sendMessage', params).read()
您必须分别将 reply_markup 序列化为 JSON 字符串,就像这个答案
因为即使在阅读了 Kostya 链接到的 PHP 答案后,我仍然需要反复试验才能正确进入 Python,这里是经过改编的 Python 有效的代码(您只需要添加机器人的令牌和聊天 ID 即可将消息发送到)。
请注意,我还必须将我的 Telegram 客户端更新到最新版本(当前为 3.1)才能看到结果。
import urllib
import urllib2
import json
TOKEN = "<your bot token>"
chat_id = <your chat id>
msg = "some string"
BASE_URL = "https://api.telegram.org/bot{}/".format(TOKEN)
reply_markup = {'keyboard': [['1'],['2']], 'resize_keyboard': True, 'one_time_keyboard': True}
reply_markup = json.dumps(reply_markup)
params = urllib.urlencode({
'chat_id': str(chat_id),
'text': msg.encode('utf-8'),
'reply_markup': reply_markup,
'disable_web_page_preview': 'true',
# 'reply_to_message_id': str(message_id),
})
resp = urllib2.urlopen(BASE_URL + 'sendMessage', params).read()
喜欢的可以试试这个方法
import telegram
from telegram.ext import Updater
updater = Updater(token='BOT_TOKEN')
dispatcher = updater.dispatcher
updater.start_polling()
def test(bot, update):
results = bot.sendMessage(chat_id=update.message.chat_id, text="Test", reply_markup={"keyboard":[["Test1"], ["Test2"], ["Test3"], ["Test4"]})
print results
dispatcher.addTelegramCommandHandler('test', test)
这个导入让事情变得更短,我今天才开始使用它python-telegram-bot 3.4
以下代码段将起作用:
reply_markup = {
"keyboard": [[{"text":"1"}], [{"text":"2"}]],
"resize_keyboard": True,
"one_time_keyboard": True
}
我写了一个电报机器人。一切顺利,运作良好。但是当我想使用document中提到的ReplyKeyboardMarkup
时,它不起作用!我的意思是键盘没有出现。
这个 JSON 对象有一个键 keyboard
,根据它的文档,它的值是:
type: Array of Array of String.
description: Array of button rows, each represented by an Array of Strings
这是我发送请求的代码:
reply_markup = {'keyboard': [['1'],['2']], 'resize_keyboard': True, 'one_time_keyboard': True}
params = urllib.urlencode({
'chat_id': str(chat_id),
'text': msg.encode('utf-8'),
'reply_markup': reply_markup,
'disable_web_page_preview': 'true',
# 'reply_to_message_id': str(message_id),
})
resp = urllib2.urlopen(BASE_URL + 'sendMessage', params).read()
您必须分别将 reply_markup 序列化为 JSON 字符串,就像这个答案
因为即使在阅读了 Kostya 链接到的 PHP 答案后,我仍然需要反复试验才能正确进入 Python,这里是经过改编的 Python 有效的代码(您只需要添加机器人的令牌和聊天 ID 即可将消息发送到)。
请注意,我还必须将我的 Telegram 客户端更新到最新版本(当前为 3.1)才能看到结果。
import urllib
import urllib2
import json
TOKEN = "<your bot token>"
chat_id = <your chat id>
msg = "some string"
BASE_URL = "https://api.telegram.org/bot{}/".format(TOKEN)
reply_markup = {'keyboard': [['1'],['2']], 'resize_keyboard': True, 'one_time_keyboard': True}
reply_markup = json.dumps(reply_markup)
params = urllib.urlencode({
'chat_id': str(chat_id),
'text': msg.encode('utf-8'),
'reply_markup': reply_markup,
'disable_web_page_preview': 'true',
# 'reply_to_message_id': str(message_id),
})
resp = urllib2.urlopen(BASE_URL + 'sendMessage', params).read()
喜欢的可以试试这个方法
import telegram
from telegram.ext import Updater
updater = Updater(token='BOT_TOKEN')
dispatcher = updater.dispatcher
updater.start_polling()
def test(bot, update):
results = bot.sendMessage(chat_id=update.message.chat_id, text="Test", reply_markup={"keyboard":[["Test1"], ["Test2"], ["Test3"], ["Test4"]})
print results
dispatcher.addTelegramCommandHandler('test', test)
这个导入让事情变得更短,我今天才开始使用它python-telegram-bot 3.4
以下代码段将起作用:
reply_markup = {
"keyboard": [[{"text":"1"}], [{"text":"2"}]],
"resize_keyboard": True,
"one_time_keyboard": True
}