Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Slackbotでファイルの読み書きをしよう〜PythonでのBot開発〜

More than 1 year has passed since last update.

本記事では、Pythonで作成したSlackbotでファイルの読み書きにする処理について説明します。

Pythonでファイルの読み書きを制御する」にて実装した論理をSlackbotから呼び出せるようにしていきます。

ファイルを読み書きする基本論理は「Pythonでファイルの読み書きを制御する」で作成した以下のモジュールを使用します。

import codecs

class FileReadWrite:

    # ファイルを読み込むメソッド
    def file_read(self, path):
        try:
            # ファイルを開く
            target_file = codecs.open(path, "r", "utf_8")
            # ファイルを読み込む
            text = target_file.read()
            target_file.close()
        except:
            # エラーが出た時の例外処理
            text = "ng"

        return text

    # ファイルを書き込むメソッド
    def file_write(self, path, text):
        try:
            target_file = codecs.open(path, "a", "utf_8")
            target_file.write(text)
            result = "ok"
            target_file.close()
        except:
            # エラーが出た時の例外処理
            result = "ng"
        return result

PythonでのSlackbot実装の基本については「SlackbotをPythonで作成しよう」をお読みください。

Slackbotの書き込み処理の実装

◆動作仕様
上記のモジュールから書き込みメソッドを呼び出して結果によってリアクションを返します。
書き込みが成功した場合は「:ok:」、書き込みに失敗した場合は「:ng:」のリアクションを返すようにします。

from slackbot.bot import respond_to
from slackbot.bot import listen_to
from filereadwrite import FileReadWrite

@respond_to('^ファイル書き込みテスト$')
def write_test(message):
    # クラスのインスタンスを生成
    f = FileReadWrite()
    # ファイルに書き込む
    action = f.file_write("./test1.txt", "あいうえお\n")
    # 結果をリアクションする
    message.react(action)

◆実行結果
ファイルの書き込み

Slackbotの読み込み処理の実装

◆動作仕様
上記のモジュールから読み込みメソッドを呼び出して結果によってテキストまたはリアクションを返します。
読み込みに成功した場合はファイルの内容を出力します。読み込みに失敗した場合は「:ng:」のリアクションを返すようにします。

◆botmodule.pyに記述する内容
読み込みの論理を追記します。

@respond_to('^ファイル読み込みテスト$')
def read_test(message):
    # クラスのインスタンスを生成
    f = FileReadWrite()
    # ファイルからテキストを読み込む
    text = f.file_read("./test1.txt")

    # 失敗した時はNGをリアクションで返す
    if text == "ng":
        message.react(text)
    else:
        # 成功した場合はテキストを返す
        message.reply(text)

◆実行結果
実行結果

以上、Slackbotでのファイルの読み書き論理の実装でした。

Slackbot+PythonまとめTOP>>Slackbotの作り方マニュアル〜Python編〜

◆サンプルコード
Python Slackbot読み書きサンプルコード

miyabikno
SIer系業務7年、Web系業務を3年やってきたプログラミング系ブロガーです。 Pythonの記事をメインで書いています。
https://se.miyabikno-jobs.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away