2017-02-13 1 views
-1

Pls help me. 내 코드가 작동하지 않습니다.로봇에 대한 코드 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) 

는 "Страна"표시 누르면 성능 :

형식 오류 : 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를 (를) 선택했습니다"키보드를 만들 수 있습니까? 나는 여러 단계의 메뉴를 만들고 싶다. 예 : 미국 - 주 - 군 -시. 인라인 키 보드가 가능한 것처럼? 도와 주셔서 감사합니다! –

관련 문제