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
- 下記のように依存性のエラーなる場合、pipやyum等で依存関係を解決させてあげる。(yumでdevel系が足りない事が多い
- 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