Python 使用内联键盘的电报机器人的上一页和下一页

Python 使用内联键盘的电报机器人的上一页和下一页,python,python-3.x,telegram,telegram-bot,python-telegram-bot,Python,Python 3.x,Telegram,Telegram Bot,Python Telegram Bot,如何简化bot中页面的实现?我在@bot.callback\u query\u handler中有三个块-“fire”,“right\u arrow\u fire”,“left\u arrow\u fire”,其中一个显然是多余的。我在这个网站上研究了类似的问题,我意识到我可以使用bot.edit\u message\u reply\u markup,但我不知道怎么做 以及,如何在每次按下页面按钮时不显示文本“?”(在bot.edit_message_text行中) 谢谢你。 完整代码: # -

如何简化bot中页面的实现?我在
@bot.callback\u query\u handler
中有三个块-
“fire”
“right\u arrow\u fire”
“left\u arrow\u fire”
,其中一个显然是多余的。我在这个网站上研究了类似的问题,我意识到我可以使用bot.edit\u message\u reply\u markup,但我不知道怎么做

以及,如何在每次按下页面按钮时不显示文本“?”(在
bot.edit_message_text
行中)

谢谢你。 完整代码:

# -*- coding: utf-8 -*-
import telebot
from telebot import types
from telegram import (ReplyKeyboardMarkup, ReplyKeyboardRemove)
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, Message

bot = telebot.TeleBot('********************************');

@bot.message_handler(commands=['start'])
def welcome(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)

    item1 = types.KeyboardButton("Spell")    
    markup.add(item1)

    bot.send_message(message.chat.id, "Hi", parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def value_search(message):

        if message.text == "Spell":

            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("Fire", callback_data='fire')
            markup.add(item1)

            bot.send_message(message.chat.id, 'Select element', reply_markup=markup)
        else:
            bot.send_message(message.chat.id, "Error")


@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:                         
            if call.data == 'fire':
                markup = types.InlineKeyboardMarkup(row_width=2)
                item1 = types.InlineKeyboardButton("Fireball", callback_data='fireball')
                item2 = types.InlineKeyboardButton("Fire Wall", callback_data='firewall')
                item3 = types.InlineKeyboardButton("Fire Arrow", callback_data='firearrow')
                item4 = types.InlineKeyboardButton("Fire Explosion", callback_data='fireexplosion')
                item5 = types.InlineKeyboardButton("Next Page --->", callback_data='right_arrow_fire')

                markup.add(item1, item2, item3, item4, item5)
                bot.send_message(call.message.chat.id, 'Select spell', reply_markup=markup)                  

            elif call.data == 'right_arrow_fire':
                markup = types.InlineKeyboardMarkup(row_width=2)
                item6 = types.InlineKeyboardButton("Fire Circle", callback_data='firecircle')
                item7 = types.InlineKeyboardButton("Fire Elemental", callback_data='fireelemental')
                item8 = types.InlineKeyboardButton("Fire Power", callback_data='firepower')
                item9 = types.InlineKeyboardButton("Fire Storm", callback_data='firestorm')
                item10 = types.InlineKeyboardButton("<--- Previous Page", callback_data='left_arrow_fire')

                markup.add(item6, item7, item8, item9, item10)
                bot.send_message(call.message.chat.id, 'Select spell', reply_markup=markup)                  

            elif call.data == 'left_arrow_fire':
                markup = types.InlineKeyboardMarkup(row_width=2)
                item1 = types.InlineKeyboardButton("Fireball", callback_data='fireball')
                item2 = types.InlineKeyboardButton("Fire Wall", callback_data='firewall')
                item3 = types.InlineKeyboardButton("Fire Arrow", callback_data='firearrow')
                item4 = types.InlineKeyboardButton("Fire Explosion", callback_data='fireexplosion')
                item5 = types.InlineKeyboardButton("Next Page --->", callback_data='right_arrow_fire')

                markup.add(item1, item2, item3, item4, item5)
                bot.send_message(call.message.chat.id, 'Select spell', reply_markup=markup)                  

            elif call.data == "fireball":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+1 damage")
            elif call.data == "firewall":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+2 damage")
            elif call.data == "firearrow":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+3 damage")
            elif call.data == "fireexplosion":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+4 damage")
            elif call.data == "firecircle":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+5 damage")
            elif call.data == "fireelemental":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+6 damage")
            elif call.data == "firepower":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+7 damage")
            elif call.data == "firestorm":
                bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text="+8 damage")

            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='???', reply_markup=None)

    except Exception as e:
        print(repr(e))


bot.polling(none_stop=True)
#-*-编码:utf-8-*-
进口遥控机器人
从telebot导入类型
从电报导入(ReplyKeyboardMarkup,ReplyKeyboardRemove)
从telebot.types导入InlineKeyboardMarkup、InlineKeyboardButton、Message
bot=telebot.telebot(“***********************************”);
@消息处理程序(命令=['start'])
欢迎(留言):
markup=types.ReplyKeyboardMarkup(resize\u keyboard=True,one\u time\u keyboard=True)
item1=类型。键盘按钮(“拼写”)
markup.add(item1)
bot.send_message(message.chat.id,“Hi”,parse_mode='html',reply_markup=markup)
@消息处理程序(内容类型=['text'])
def值搜索(消息):
如果message.text==“拼写”:
标记=类型。InlineKeyboardMarkup(行宽度=2)
item1=types.InlineKeyboardButton(“Fire”,callback\u data='Fire')
markup.add(item1)
bot.send_message(message.chat.id,'Select element',reply_markup=markup)
其他:
bot.send_消息(message.chat.id,“错误”)
@bot.callback\u query\u处理程序(func=lambda调用:True)
def回调_内联(调用):
尝试:
如果是call.message:
如果call.data=='fire':
标记=类型。InlineKeyboardMarkup(行宽度=2)
item1=types.InlineKeyboardButton(“Fireball”,callback_data='Fireball'))
item2=types.InlineKeyboardButton(“防火墙”,回调\u data='firewall'))
item3=types.InlineKeyboardButton(“firearrow”,callback_data='firearrow'))
item4=types.InlineKeyboardButton(“火灾爆炸”,callback_data='fireexplosion'))
item5=types.InlineKeyboardButton(“下一页-->”,回调\u data='right\u arrow\u fire')
添加(项目1、项目2、项目3、项目4、项目5)
bot.send_message(call.message.chat.id,'Select spell',reply_markup=markup)
elif call.data==“右箭头\开火”:
标记=类型。InlineKeyboardMarkup(行宽度=2)
item6=types.InlineKeyboardButton(“火圈”,callback\u data='firecircle'))
item7=types.InlineKeyboardButton(“fireelemental”,callback_data='fireelemental'))
item8=types.InlineKeyboardButton(“火力”,callback_data='firefower'))
item9=types.InlineKeyboardButton(“firestorm”,callback_data='firestorm'))
item10=types.InlineKeyboardButton(“,回调\u data='right\u arrow\u fire')
添加(项目1、项目2、项目3、项目4、项目5)
bot.send_message(call.message.chat.id,'Select spell',reply_markup=markup)
elif call.data==“火球”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+1伤害”)
elif call.data==“防火墙”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+2伤害”)
elif call.data==“firearrow”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+3伤害”)
elif call.data==“火灾爆炸”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+4伤害”)
elif call.data==“firecircle”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+5伤害”)
elif call.data==“fireelemental”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+6伤害”)
elif call.data==“火力”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+7伤害”)
elif call.data==“firestorm”:
bot.answer\u callback\u query(callback\u query\u id=call.id,show\u alert=True,text=“+8伤害”)
bot.edit_message_text(chat_id=call.message.chat.id,message_id=call.message.message_id,text='???',reply_markup=None)
例外情况除外,如e:
打印(报告(e))
bot.polling(none\u stop=True)

来自
机器人的telebot文档。编辑消息\u回复\u标记

       """
        Use this method to edit only the reply markup of messages.
        :param chat_id:
        :param message_id:
        :param inline_message_id:
        :param reply_markup:
        :return:
       """
在你的情况下,你可以通过

bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup = markup)
而不是

bot.send_message(call.message.chat.id, 'Select spell', reply_markup=markup)

只有InlineKeyboard按钮将被编辑/更新,文本保持原样。

来自telebot文档中的
bot.edit\u message\u reply\u markup

       """
        Use this method to edit only the reply markup of messages.
        :param chat_id:
        :param message_id:
        :param inline_message_id:
        :param reply_markup:
        :return:
       """
在你的情况下,你可以通过

bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup = markup)
而不是

bot.send_message(call.message.chat.id, 'Select spell', reply_markup=markup)
只有InlineKeyboardButtons将被编辑/更新,文本保持原样