【お遊び用】湯婆婆をLINE Bot にしてみる(Python)


はじめに

@NemesisさんのJavaで湯婆婆を実装してみるを見て、自分の名前を入れて湯婆婆に遊ばれてみたいと思った方もいるでは??と思いBot化しました。
以下のQRコードからBotの友達追加が可能です。
ぜひ、遊んでみてください。

エンジニア界隈でこんなこと流行ってるよって、世間にも知らせたいのでぜひLGMTをよろしくお願いします。

 実装について

言語はPythonを使用しました。
"契約書だよ。そこに名前を書きな。"」を発動するにはユーザーからのリクエストが必要なのは少し困りましたが、めんどくさいので「働かせて」くらいの言葉を言えば反応するようにしました。

基本的には、文字削りのところのみ遊んでみてください。

コード

main.py
from flask import Flask, request, abort
import random

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)

from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage)
import os

app = Flask(__name__)

YOUR_CHANNEL_ACCESS_TOKEN = 'XXXXXXXXXXX'
YOUR_CHANNEL_SECRET = 'XXXXXXXXXXX'

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)


@app.route("/callback", methods=['POST'])
def callback():

    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    word = event.message.text
    if '働かせて' in word:
        reply_word = "契約書だよ。そこに名前を書きな。"
    else:
        newName = random.choice(word)
        reply_word = f"フン。{word}というのかい。贅沢な名だねぇ。 今からお前の名前は{newName}だ。いいかい、{newName}だよ。分かったら返事をするんだ、{newName}!!"

    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=reply_word))


if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

実行結果

良い感じに切り出してくれてますね。

感想

空文字が送ることができないが故にお決まりのエラーが吐けないのは勘弁してください。

なぜ一文字切り出しが流行っているのか謎。
ランダムで文字数も切り出したい。

LINE botは便利すぎるので、もっと機能知りたい。

以上。