2016-07-03 16 views
1

私はPythonで書かれたGitHubからopen-source codeをダウンロードしました。(これはかなり新しいですが)私はボットにカスタムキーボードを持たせたいユーザーは何でも望んでいると言います。たとえば、ユーザーがボットを使ってチャットを開始すると、自動的に/startが送信されます。ボットにこれらのオプションのいずれかを選択すると、ボットに2〜3つのオプションを与えることができます。['Option One'], [Option Two], (例えば、['Plan A'], ['Plan B'],)。また、それらの1つを選択すると、キーボードでさまざまなオプションが表示されます。電報ボット:カスタムキーボード[Python]

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がお手伝いします。

さて、あなたはそれを使用すると仮定すると、次の2つのオプションがあります:あなたはオプションがコマンドであるキーボードを作成することができます

  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. テキストオプションを作成し、それらをフィルタリングするためにregexを使用します。

    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) 
    

しかし、あなたは彼が望んでいる他のメッセージを送信してからユーザーを防ぐことはできません。メッセージを無視して、コマンドまたはキーボード応答に対してのみ応答することができます。

関連する問題