プロジェクト

全般

プロフィール

RHEL系に藍ちゃんに相乗りでpythonでbot作成

pythonでmisskeyのbotを作成します。
藍ちゃん用のAPIを使って藍ちゃんとして発信する事が可能(勿論分けても良い)
ここでは手順を省くために藍ちゃんに相乗りさせます。

前提

藍ちゃんは導入済みとします。具体的には下記を共有します。

  • 藍ちゃんのアカウント
  • 藍ちゃん用のAPIキー
  • pythonがかなり古い可能性があるので、更新しておきます。
    特に3.10未満では 「case文が使えない」 という、この手の処理と相性が悪いので対応を推奨。(無理なら一応ifやelifで羅列してもいいけど……
    yum install python3.11 python3.11-pip
    
  • python、python3コマンドで使用するバージョンを選択します。
    「python --version」と「python3 --version」が「3.11」でない場合に以下を実施
    
    alternatives --config python
    alternatives --config python3
    
    いずれも「/usr/bin/python3.11」にする
    
    • ディストリビューションによっては対話が立ち上がらない場合は以下のように設定。
      「python --version」と「python3 --version」が「3.11」でない場合に以下を実施
      
      update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1
      update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
      
  • pip、pip3、pip-3コマンドで使用するバージョンを選択します。
    「pip --version」と「pip3 --version」が「3.11」でない場合に以下を実施
    
    update-alternatives --install /usr/bin/pip pip /usr/bin/pip3.11 1
    update-alternatives --install /usr/bin/pip3 pip3 /usr/bin/pip3.11 1
    
    (あれば)
    update-alternatives --install /usr/bin/pip-3 pip-3 /usr/bin/pip3.11 1
    

準備

  • 適当なフォルダを作成します。
    mkdir automatic_note
    cd automatic_note
    
  • python-pipをインストールします。
    yum install python3-pip
    
  • pipの状態を確認します。
    pip3 check
    No broken requirements found.
    
    • 下記のように依存性のエラーなる場合、pipやyum等で依存関係を解決させてあげる。(yumでdevel系が足りない事が多い
      pip3 check
      lib389 1.4.0.1 requires argparse-manpage, which is not installed.
      
      yum install python3-argparse-manpage
      
  • Misskey.pyをインストールする
    pip3 install Misskey.py
    

簡易スクリプト作成

  • スクリプトファイルを作成する
    vi automatic_note.py 
    ------------------------------
    #!/usr/bin/python3
    from misskey import Misskey
    
    api = Misskey('接続先misskey名')
    api.token = "APIキー" 
    
    data = 'BOT投稿です!'
    api.notes_create(text=data)
    
  • 実行権限付与
    chmod a+x automatic_note.py 
    
  • テスト実行
    ./automatic_note.py 
    

以上で藍ちゃんを介して投稿される。

data設定部分をテキストから読み取ったり、時間を取得して時報にしたり応用可能。
またdataを設定して発言させる部分をループさせるなり、cronで定期実行するなりして
ある程度自動実行する事も出来るはず。

応用(ファイルを元に発言する)

下記のようにするとリストファイルを元に喋ってくれる。

  • スクリプトと同じディレクトリにリストファイルの作成
    vi list.txt
    ------------------------------
    発言テスト0
    発言テスト1
    発言テスト2
    発言テスト3
    発言テスト4
    
  • スクリプトの改修
    import os
    import random
    from misskey import Misskey
    
    api = Misskey('サーバ名')
    api.token = "APIキー" 
    
    # スクリプトファイルのパスにカレントディレクトリを変更
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    
    # リストファイルを行数別に配列に読み込む
    with open('./list.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
    
    # 0〜4の5つをランダムに設定
    n= random.randrange(5)
    
    # リストの指定行を本文に設定
    data = lines[n]
    
    # APIの実行
    api.notes_create(text=data)
    

応用(時報)

下記のようにすると時間を元にに喋ってくれる。

  • スクリプトの改修
    import os
    import datetime
    from misskey import Misskey
    
    api = Misskey('サーバ名')
    api.token = "APIキー" 
    
    # 現在時刻の基礎データを取得
    dt_now = datetime.datetime.now()
    
    # 現在時刻から時間を取り出す
    time = dt_now.hour
    
    # 時間を文字列にキャストして本文に設定
    data = str(time) + ' 時になりました!'
    
    # APIの実行
    api.notes_create(text=data)
    
  • cronで毎時0分に実行するとOK
    ※メンテ中とかに実行するとエラー文のメールが飛ぶので、出力は全部/dev/nullに捨てる
    crontab -e
    ------------------------------
    0 * * * * /path/to/automatic_note/automatic_note.py >/dev/null 2>&1