1

Python で書かれたこのオープンソース コードを GitHub からダウンロードしました(これはかなり新しいものです)。ボットにカスタム キーボードを持たせたいと思っていました。たとえば、ユーザーがボットとチャットを開始すると、自動的に送信されます/start。これが発生した場合、ボットにキーボードで 2 ~ 3 つのオプションを提供して['Option One'], [Option Two],もらいたいのですが、それらのオプションの 1 つを選択すると、まったく異なるオプションが必要になります (インスタンス['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 の処女です。私にアイデアを与えるのではなく、このテキストの上にあるコードにあなたのコードを適用していただければ、とても感謝しています。作業完了!)。

4

1 に答える 1

9

まず、いくつかのモジュールを使用して作業することをお勧めします。あなたは初心者なので、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. テキスト オプションを作成し、正規表現を使用してそれらをフィルタリングします。

    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)
    

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

于 2016-08-05T22:47:41.210 に答える