2016-07-03 3 views
1

파이썬으로 작성된 GitHub에서이 open-source code을 다운로드했습니다. (꽤 새로 습득 한 것입니다.) 봇에 맞춤 키보드가 있어야합니다. 사용자는 원하는대로 말합니다. 예를 들어 사용자가 내 봇과 채팅을 시작하면 자동으로 /start을 보내고이 경우 봇에서 2 ~ 3 개의 옵션을 키보드에 입력하면 키보드에서 해당 옵션 중 하나를 선택할 때 완전히 다른 옵션을 원합니다. (예 : ['Plan A'], ['Plan B'],). 그리고 다시 한 명을 선택하면 키보드에서 다른 옵션을 얻습니다.전보 봇 : 맞춤 키보드 [파이썬]

class WebhookHandler(webapp2.RequestHandler): 
def post(self): 
    urlfetch.set_default_fetch_deadline(60) 
    body = json.loads(self.request.body) 
    logging.info('request body:') 
    logging.info(body) 
    self.response.write(json.dumps(body)) 

    update_id = body['update_id'] 
    try: 
     message = body['message'] 
    except: 
     message = body['edited_message'] 
    message_id = message.get('message_id') 
    date = message.get('date') 
    text = message.get('text') 
    fr = message.get('from') 
    chat = message['chat'] 
    chat_id = chat['id'] 

    if not text: 
     logging.info('no text') 
     return 

    def reply(msg=None, img=None): 
     if msg: 
      resp = urllib2.urlopen(BASE_URL + 'sendMessage', urllib.urlencode({ 
       'chat_id': str(chat_id), 
       'text': msg.encode('utf-8'), 
       'disable_web_page_preview': 'true', 
      })).read() 

     else: 
      logging.error('no msg or img specified') 
      resp = None 

     logging.info('send response:') 
     logging.info(resp) 

    if text.startswith('/'): 
     if text == '/start': 
      reply('Bot enabled') 
      setEnabled(chat_id, True) 
     elif text == '/stop': 
      reply('Bot disabled') 
      setEnabled(chat_id, False) 

     else: 
      reply('That ain\'t been coded yet.') 

나는 Pyhton에 처녀 해요, 당신 대신 내가 방법을 모르는 것이다 (나에게 아이디어를주는,이 텍스트 위에있는 코드에 코드를 적용하면 내가 너무 감사 할 것 말했듯 그들을 사용하고, 일을 끝내라!).

답변

2

먼저 모듈을 사용하여 작업하는 것이 좋습니다. 새 소식을 전하기 때문에 python-telegram-bot이 도움이됩니다.

  1. 당신은 옵션 명령입니다 키보드를 만들 수 있습니다 : 당신이 그것을 사용하는 가정

    글쎄, 당신은 두 가지 옵션이 있습니다.

    def start(bot, update): 
        kb = [[telegram.KeyboardButton('/command1')], 
          [telegram.KeyboardButton('/command2')]] 
        kb_markup = telegram.ReplyKeyboardMarkup(kb) 
        bot.send_message(chat_id=update.message.chat_id, 
            text="your message", 
            reply_markup=kb_markup) 
    
    start_handler = CommandHandler('start', start) 
    dispatcher.add_handler(start_handler) 
    
  2. 텍스트 옵션을 만들고 정규식을 사용하여 필터링합니다.

    def start(bot, update): 
        kb = [[telegram.KeyboardButton("Option 1")], 
          [telegram.KeyboardButton("Option 2")]] 
        kb_markup = telegram(chat_id=update.message.chat_id, 
             text="your message", 
             reply_markup=kb_markup) 
    
    start_handler = RegexHandler('some-regex-here', start) 
    dispatcher.add_handler(start_handler) 
    

그러나, 당신은 그가 원하는 다른 메시지를 전송에서 사용자를 막을 수 없습니다. 메시지를 무시하고 명령 또는 키보드 응답에만 응답 할 수 있습니다.

관련 문제