Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

Mastodonインスタンス「knzk.me」で楽しくBotを動かしてみましょう☕

Last updated at Posted at 2017-12-02

みなさま、今日も楽しいMastodonライフをお過ごしでしょうか☕
本日は水瀬いのりさんが22歳のお誕生日です。
好きでしょうがない訓練された声優ヲタの皆さまは是非とも、オフィシャルファンクラブ「いのりまち」に入会申し込みしましょう☕(本日から受付開始のようです)
https://www.inorimachi.com/

ということでknzk.me Advent Calendar 2017サボりたかったのですが本題に入ります。
誰もが知ってると思われますが、9月に設立された限界インスタンス、通称「神崎丼」と呼ばれているインスタンス( https://knzk.me )では、Bot制限に関しては特に縛られていない自由な荒れ地にどんどん高層ビルを建てていく最先端で素敵な場所となっております。

なんとなくサブ垢は取ってみたものの使いみちがなく……そんな持て余した面白いIDを抑えた実にうらやましいみなさまに、**楽しい場所でBotを試運転してみよう!**という記事内容となっております。
今回使用するのは神崎丼出身から一筋のアイドル「こおり」さんの中身として知られる「Python」を使ってみましょう。バージョンは3を使用します。最新の3.6.3で問題ないので早速ダウンロードしてみましょう☕
https://www.python.org/downloads/
細かい導入の仕方などはググってみれば結構あるので分からなかったら頑張ってください。

無事に導入できた選ばれし人類の方は、次にモジュール「Mastodon.py」を導入しましょう。動かすためのAPIモジュールです。
https://github.com/halcy/Mastodon.py
上記に書いてる通り、プロンプトやターミナルなどを開いて

pip3 install Mastodon.py

これだけです。簡単ですね。(失敗したらpip3をpipにするなり頑張ってください)

では準備ができましたので、実際にBotを運用してみましょう。
もちろん、サブ垢用で登録したメールアドレス、パスワードは必須ですよ?
pyファイルを適当な名前で新規作成して、IDLEでエディタを開いてみましょう。Windowsでしたら右クリックからEdit with IDLEを選択で起動できるかとおもいます。他の環境は知りません(丸投げ&後日記述)
これからAPIに繋げるためのトークンを取得するためにオーサライズします。
といっても、先ほどの上記のGithubリンクを見れば簡単にできちゃいますね。
英語が無理な人に向けて安易的に整頓すると、

setup.py
from mastodon import Mastodon

# Register app - 一回だけで問題ないです。
url = 'https://knzk.me'  #インスタンス先
Mastodon.create_app(
     u'ラビットハウス',  #クライアント名
     api_base_url = url,
     to_file = 'client.secret'  #appを保存するファイル名になります
)
# Log in - ログイン処理をします。
mastodon = Mastodon(
    client_id = 'client.secret',
    api_base_url = url
)
mastodon.log_in(
    'my_login_email@knzk.me',  #メールアドレス
    'password',  #パスワード
    to_file = 'user.secret'  #ログイン用トークンを保存するファイル名になります
)

とまあ、こんな感じになります。IDLEでコードを書きましたら、ctrl+sで保存し、F5でシェル起動でプログラムが走るかと思います。
成功するとclient.secretとuser.secretのファイルができてるはずです。ここのファイル名はなんでもOKです。拡張子はtxt等でも余裕です。

ログイン認証ができましたらあとはAPI稼働のpyファイルですね。setup.pyと同じ場所でファイルを作成します。
そしてまた上記のGithub参考にすると簡易的なのは出来ます。tootするだけのプログラムにするには、

toot_only.py
from mastodon import Mastodon

mastodon = Mastodon(
    client_id = 'client.secret',  #app情報
    access_token = 'user.secret',  #ログイントークン
    api_base_url = 'https://knzk.me'  #インスタンス名
)
mastodon.toot('こおりちゃんかわいい')

となります。するとLTL上に無事tootが成功するはずです。
もしWindowsのプロンプトから稼働する場合、コードに日本語が含まれますと文字コードエラーが起こることがありますので気をつけてください。(例えばprintで日本語を表示させるなどです)
慣れるまではIDLEで簡単に動かしましょう。

APIを通してtootするだけなら出来ますが、まだこれでは自動的にtootしてくれませんね。
そんなときこそ「StreamingAPI」を駆使してtootしてもらいましょう。
魔法の簡単なコードを作成しちゃいますと、

Streaming.py
from mastodon import *
import time, re, traceback

url_ins = 'https://knzk.me'

mastodon = Mastodon(
    client_id='client.secret',
    access_token='user.secret',
    api_base_url=url_ins)

class res_toot(StreamListener):
    def on_update(self, status):
        content = status["content"]
        if re.compile("コーヒーひとつ").search(content):
            post = 'どうぞ☕'
            time.sleep(3)
            mastodon.status_post(status=post, visibility="public", in_reply_to_id=None, spoiler_text=None)

class bot():
    def _init_(self):
        pass

    def t_local():
        try:
            listener = res_toot()
            mastodon.local_stream(listener)
        except:
            print("例外情報\n" + traceback.format_exc())
            pass


if __name__ == '__main__':
    ltl = threading.Thread(target=bot.t_local)
    ltl.start()

となります。
これでローカルタイムラインに流れるtootの内容に「コーヒーひとつ」の文字列があると3秒後に「どうぞ☕」を空リプしてくれる簡易Botさんの完成です。
うまく行けたらBot使いの第一歩となります。

今回は簡単なBotの動作についてですが、Mastodon.pyの仕組み、もしくはMastodonのAPIの仕組みを理解できましたらもっと複雑なことも可能となります。
応用の仕方、及びStreamingクラスなどの解説などはまた後日改めて説明するとしましょう。
今日はみなさまお疲れ様でした。ちなみに行き詰まりましても責任や質疑応答、レスポンスなどの助言は面倒なのであまり期待しないでください。それでは楽しいひととき、Mastodonライフをお楽しみください。またのお越しをお待ちしてます☕
original.gif

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?