話題の記事

Pythonで彼女を作ってみた

2021.04.25

みなさんお仕事お疲れ様です。CX事業部でフロントエンドエンジニアやっている片岡です。

いきなりですが、お仕事頑張りすぎて疲れた時に励まして欲しくなる時ってありませんか?

そんな時は大切なパートナーの「頑張れ」の一言で頑張れる気がしますよね?

でも大切なパートナーがいない場合はどうでしょう?

ならばPythonで彼女(Slack Bot)を作ってしまいましょう!

作るに至った経緯

とある日、LGTM画像を探していた時とても見た目が好みな女性を見つけました。自分の中に稲妻が走ったような感覚でした。自分は一目惚れをしました。

でもその人が誰かわかりませんでしたが、社内の特定班が雨○天という人物だと言うことを教えてくれました。

また、仕事で疲れた自分は頑張れって言って欲しいなと感じていました。そこでひらめきました。○宮天に励ましてもらおうと。

こうしてPythonで彼女(Slack Bot)を作ることにしました。

彼女(Slackbot)の作り方

今回はSlack Botを作るにあたってPythonのライブラリをslackbot、ホスティングにHerokuを使用しました。

今回使用したライブラリ「Slackbot」(GitHub)

https://github.com/scrapinghub/slackbot

Heroku

https://jp.heroku.com/

※2021年4月25日現在、SlackのRTM APIが新規で作れないようになっています。新しいAPIに適応した方法の確認が取れ次第更新します。

メッセージ送信機能を追加する

特定のパターンに一致するメッセージが送信された時に反応

@listen_toデコレータをつけるとチャンネル内の特定のキーワードにマッチしたときに反応するようになります

plugins/bot_mention.py

@listen_to('疲れた|つかれた')
def tukareta(message):
  rand = random.randrange(2)
  if rand == 0:
    message.reply('どうしたの?頑張って!')
  else:
    message.reply('頑張り屋さんだね!')

Botに対してメンションをつけてメッセージが送信された時に反応

@respond_toデコレータをつけるとBotに対してメンションをつけたメッセージの特定のキーワードにマッチしたときに反応するようになります

plugins/bot_mention.py

@respond_to('可愛い|かわいい')
def kawaii(message):
  message.react('kissing_heart')
  message.reply('ありがと:kissing_heart:')

このように励ましてくれるようになります。やったね!

みんなでコントリビューション

筋肉に反応するようになる

きっかけは一人の筋肉バカ筋トレ愛好家でした。

すると早速にプルリクが作られましたw

筋肉と言及すると自分の彼女が反応して筋肉を褒めるようになります。自分の彼女に何を教え込んでいるんだ。

面白いこと(?)を言うようになる

プルリクを通じて彼女にオヤジギャグを吹き込まれていきます。自分の彼女に何を教え込んでいるんだ。

ojichatと連携

ojichatとはおじさんが若い女性に対してLINEやメールで送ってきそうな文を生成するものです。

ojichatをサーバレス環境で動くようにして自分の彼女に変なことを吹き込むけしからんやつが現れました。

ojichatをサーバーレスAPI化した

自分だけの特別リアクション

ある日、自分の彼女に対してちょっかいかける輩がいたので、自分以外の人がかわいいって言っても無視するようにしました。

自分以外のユーザーに反応しないデコレータを追加します。ユーザーの判別はSlackのメンバーIDで判別しています。

メンバーIDは下記のようにユーザーをクリックしてプロフィールを表示した後、その他→メンバーIDをコピーで取得できます。

utils/slackbot_utils.py

import os
from os.path import join, dirname
from dotenv import load_dotenv
from slackbot.bot import Bot

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

def only_super_user(func):
  super_user_list = os.environ.get("SUPER_USER")

  def wrapper(*args, **kwargs):
    if args[0]._body['user'] == super_user_list:
      return func(args[0], **kwargs)
    return None

  return wrapper

追加したデコレータを自分にしか反応して欲しくないレスポンスに対して適用します。

plugins/slackbot_utils.py

from slackbot.bot import respond_to
import re
from utils.slackbok_utils import only_super_user

@respond_to('可愛い|かわいい')
@only_super_user
def kawaii(message):
  message.react('kissing_heart')
  message.reply('ありがと:kissing_heart:')

@respond_to('好き|すき|love', re.IGNORECASE)
@only_super_user
def love(message):
  message.react('kissing_heart')
  message.reply('私もだよ!:kissing_heart:')

すると自分だけにしか反応しなくなります。その結果、束縛男と非難轟々でした。

特定のユーザーのみ反応したり、特定ユーザーのみ反応しないようにしたりする時に良さそうですね!

最後に

いかがでしたでしょうか?Slack Botを作って社内のコミュニケーションを活性化させたり、業務を円滑にしたりできます。簡単に作ることができるので興味がある人はぜひ作って見てください!

つづく。