机器人Telegram Python 3.5的代码出错

时间:2017-02-13 08:51:08

标签: python telegram

请帮助我。我的代码不起作用。

    # -*- coding: utf-8 -*-
import time
import telebot
import config
from telebot import types

bot = telebot.TeleBot(config.token)

@bot.message_handler(content_types=["text"]) # отвечает на любое текстовое сообщение
def home(message):
    keyboard = types.InlineKeyboardMarkup() # 1 кнопка в строке, скрывать клавиатуру после нажатия
    callback_button = types.InlineKeyboardButton(text="Страна", callback_data="country")#Имена кнопок
    keyboard.add(callback_button)
    callback_button = types.InlineKeyboardButton(text="О Проекте", callback_data="about")#data - на какое имя потом ссылаться
    keyboard.add(callback_button)
    bot.send_message(message.chat.id, "Выберите страну или узнайте о проекте если тут впервые", reply_markup=keyboard)

# В большинстве случаев целесообразно разбить этот хэндлер на несколько маленьких
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    # Если сообщение из чата с ботом
    if call.message:
        if call.data == "country":
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выбери страну") #предлагаем страну
            bot.register_next_step_handler(lvl2)#куда переходим на следующий шаг
    if call.message:
        if call.data == "about":
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Проверка") 
def lvl2(call):
    keyboard = types.InlineKeyboardMarkup() # 1 кнопка в строке, скрывать клавиатуру после нажатия
    callback_button = types.InlineKeyboardButton(text="Россия", callback_data="ru")#Имена кнопок
    keyboard.add(callback_button)
    callback_button = types.InlineKeyboardButton(text="Украина", callback_data="ua")#data - на какое имя потом ссылаться
    keyboard.add(callback_button)
    bot.send_message(message.chat.id, "Лвл 2", reply_markup=keyboard)

if __name__ == '__main__':
    bot.polling(none_stop=True)

按下“Страна”显示的表现:

TypeError:register_next_step_handler()缺少1个必需的位置参数:'callback'

我使用pyTelegramBotAPI。

1 个答案:

答案 0 :(得分:0)

其实这里有两个问题。 首先,bot.register_next_step_handler有两个参数:message和callback函数。 您可以查看库代码

 def register_next_step_handler(self, message, callback):
    """
    Registers a callback function to be notified when new message arrives after `message`.
    :param message:     The message for which we want to handle new message after that in same chat.
    :param callback:    The callback function which next new message arrives.
    """

其次,你不应该在这里使用这个功能,因为它会等待用户的回答。 你很可能应该编写不同的回调处理程序。

UPD:

@bot.callback_query_handler(func=lambda call: call.data == "country")
def callback_country(call):
keyboard = types.InlineKeyboardMarkup() # 1 кнопка в строке, скрывать клавиатуру после нажатия
callback_button = types.InlineKeyboardButton(text="Россия", callback_data="ru")#Имена кнопок
keyboard.add(callback_button)
callback_button = types.InlineKeyboardButton(text="Украина", callback_data="ua")
keyboard.add(callback_button)
message = bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выбери страну", reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == "about")
def callback_about(call):
     bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Проверка")

@bot.callback_query_handler(func=lambda call: call.data in ["ru", "ua"])
def callback_country_choice(call):
    bot.send_message(call.message.chat.id, "You have chosen %s" % call.data)