#python-telegram-bot
#python-telegram-bot
Вопрос:
Я пытаюсь создать бота для управления каналами, а клавиатура (channel_markup в коде) для выбора канала не отображается. Сейчас эта клавиатура жестко запрограммирована, но позже я хочу представить используемую клавиатуру для канала.
из telegram импортируйте ReplyKeyboardMarkup из telegram.импортируйте ext (средство обновления, обработчик команд, обработчик сообщений, фильтры, обработчик регулярных выражений, обработчик разговоров) из Post импортируйте Post
MENU, CHANNEL = range(2)
menu_markup = ReplyKeyboardMarkup([['POST', 'HTML']], one_time_keyboard=True, resize_keyboard=True)
def error(update, context):
"""Log Errors caused by Updates."""
logger.warning('Update "%s" caused error "%s"', update, error)
def start(bot, update, user_data):
reply_text = 'Hi!'
update.message.reply_text(reply_text, reply_markup=menu_markup)
return MENU
def new_post(bot, update, user_data):
user_data['post'] = Post()
channel_markup = ReplyKeyboardMarkup([['Test1', 'Test2']],
one_time_keyboard=True, resize_keyboard=True)
update.message.reply_text(text="Select channel",
replyMarkup=channel_markup)
return CHANNEL
def channel_choice(bot, update, user_data):
channel = update.message.text
user_data['post'].channel = channel
update.message.reply_text('Hi', reply_markup=menu_markup)
return MENU
def test_bot(args):
pass
def main():
updater = Updater("TOKEN")
dp = updater.dispatcher
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start, pass_user_data=True)],
states={
MENU: [RegexHandler('^POST$', new_post, pass_user_data=True)],
CHANNEL: [RegexHandler('^Test1$', channel_choice, pass_user_data=True)]
},
fallbacks=[RegexHandler('^fallbacks$', test_bot)])
dp.add_handler(conv_handler)
# log all errors
dp.add_error_handler(error)
# Start the Bot
updater.start_polling()
# Run the bot until you press Ctrl-C or the process receives SIGINT,
# SIGTERM or SIGABRT. This should be used most of the time, since
# start_polling() is non-blocking and will stop the bot gracefully.
updater.idle()