2017-02-13 4 views
-1

Помогите мне. Мой код не работает.Ошибка в коде для бота Telegram Python 3.5

# -*- 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 необходимых позиционной аргумент: 'Обратный вызов'

Я использую pyTelegramBotAPI.

ответ

0

На самом деле у вас есть две проблемы. Прежде всего, bot.register_next_step_handler принимает два аргумента: функцию сообщения и обратного вызова. Вы можете проверить код библиотеки

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) 
+0

Спасибо =) И как мне сделать переход к следующему меню "обратного вызова"? –

+0

Я не уверен, понимаю ли я, что вы собираетесь делать. Я бы сделал то, что написал в первом сообщении (обновлено на примере) – tomasmor

+0

Очень приятно! 1 вопрос, и можно вместо этого «Вы выбрали% s» сделать клавиатуру? Я хочу сделать меню много уровней. Пример: Америка - государство - графство - город. Как это возможно? Спасибо за помощь! –

 Смежные вопросы

  • Нет связанных вопросов^_^