pythonでスプレッドシートとSlackを連携させてBOTを作ってみる2/2(python+gspread+slackbot)


はじめに

前回の記事では、Slack上でスプレッドシートにあらかじめ登録されている単語をBOTに送信すると、その意味を返してくれるというところまで実装しました。

今回はその続きです。

やりたいこと

  • 単語の登録

  • 登録されている単語の一覧出力

  • 単語の削除

  • これら全てSlack上で完結させる

コードを書いていく

コードを追加するのはmy_mention.pyだけです。

my_mention.py
@respond_to('登録:(.*)')
def mention_func2(message, entry_word):
  entry_list = entry_word.split()
  entry_len = len(entry_list)
  values_list = worksheet.col_values(1)
  if entry_len == 2:
    gyou = len(values_list)  # 選択したワークシートの行数を取得
    worksheet.update_cell(gyou+1, 1, entry_list[0])
    worksheet.update_cell(gyou+1, 2, entry_list[1])
    message.reply('「'+ entry_word +'」'+'を登録しました。')
  else:
    message.reply('単語とその意味を同時に登録してください。例→PC パソコン')  # メンション


@respond_to('一覧')
def mention_func3(message):
  values_list = worksheet.col_values(1)
  message.reply('これまで次のような単語が登録されています。→→→→' + '、'.join(values_list))


@respond_to('削除:(.*)')
def mention_func4(message, delete_word):
  values_list = worksheet.col_values(1)
  tof = delete_word in values_list
  if tof == True:
    cells = worksheet.find(delete_word)  # 入力結果に一致する座標を取得
    worksheet.delete_row(cells.row)  # 選択した行を削除する
    message.reply('「' + delete_word + '」'+'を削除しました。')
  else:
    message.reply('削除しようとしましたが、見つかりませんでした。「一覧」と送信して確認してください。')  # メンション

気を付けたこと

  • 登録

単語と意味を同時に入力して登録したかったので、「登録:○○ △△」と送信したら、○○を単語、△△をその意味としてスプレッドシートに書き込むようにします。
split()を使って、entry_listには○○と△△を分割したリストを渡します。

登録ミスをしてしまったときに片方だけスプレッドシートに入力されるということを避けるため、entry_listに格納されている要素がちゃんと2つあるかどうかをentry_lenで確認します。

しっかりと要素が2つ入っていたら、スプレッドシートの操作を行い、空いている行に格納します。

やはりこのあたりはもう少しスマートに書きたいなとつくづく思うのですが、私のような初心者は実装できただけでも万々歳です...改善案があったら教えてください。

  • 一覧の出力

message.replyはリストそのものの出力には対応していないようなので、join()を使って文字列に変換します。'、'は要素と要素の間を「、」で区切るという意味です。

  • 削除

検索と同じような動作をさせています。特に詰まったところはありませんでした。

さいごに

今回のBOT実装を通して、pythonやその周辺のライブラリについてかなり勉強になりました。Slackとどのように連携するのか気になっていたところがすっきりしたので、また気が向いたら違うものを実装しようと思います。