あひるの勉強部屋

つらつらつら~と不定期にカキコするブログ

あひる焼くなプラグインの構造

前置き

本記事はmikutterのあひる焼くなプラグインの大枠を使って, いろんなておくれに使ってもらうことを目的としている.
あひる焼くなプラグインにコミットしていただいた方々に感謝します.
ちなみに本投稿を書いている時はOSC明けで脳みそがておくれてる状態であるため, いつもに増して読解力が試される日本語である可能性が高いことに注意していただきたい.
なお自分に対する覚書でもあるので, 見ればわかるようなことまで言葉にしていますが悪しからず.


あひる焼き #とは

わからん
あひる焼きエバンジェリストに聞いてくれ -> しまだぁ氏 & しか焼き氏


あひる焼くなプラグインとは

「あひる焼き」「Ahiruyaki」「扒家鸭」に反応して, 様々なリプライをランダムに返すmikutterプラグインです. 最近では時間帯によって飯テロ画像を返す場合があるようです.
ソースコードGitHubで管理されています. github.com


プラグインの構造

plugin
└── ahiru_yakuna
    ├── README.md
    ├── ahiru240.jpg
    ├── ahiru_yakuna.rb
    └── replydic
        ├── chinese.yml
        ├── default.yml
        ├── joya.yml
        ├── meshitero.yml
        ├── stein.yml
        └── yakiome.yml


  • .mikutter.yml
    このファイルはプラグインの基本的な設定ファイルになります.
    ファイル内の plugin: に設定している [streaming] によって, CLIモードでもストリーミングに対して反応できるようになります.
    CLIモードに関しては後ほど書きますが, これがないとCLIモードのmikutterを起動すると直後に終了してしまいます.

  • ahiru_yakuna.rb
    これが本体のソースになります.

  • その他の .yml ファイル
    リプライ辞書です. ahiru_yakuna.rb はこれらのリプライ辞書を起動時にロードし, yml内からランダムに選んでリプライを取得します.


実行ファイル(.rb)の内容

YAML.load_file でリプライ辞書の読み込みを行っています. この際に読み込み対象の辞書(ymlファイル)が存在しなかった場合は終了するようになっています.

on_appear やら ms.each やらは飛ばします.
さて, ms.each do |m| のループ内では何をしているかを簡単に説明します.

if m.message.to_s =~ /あひる焼き|Ahiruyaki|扒家鸭/ \
   and m[:created] > DEFINED_TIME \
   and !m.retweet?

ここではまずメッセージに反応するかを判定しています.
上記のコードではメッセージに「あひる焼き」等が含まれているか, アプリ起動後に受信したメッセージであるか, リツイートでないかをそれぞれ見ています.
それ以下の条件分岐に関しては, それぞれ時間を見て飯テロ辞書に切り替えたり, 受信したワードによって辞書を変えたりしています.
reply = default.sample のように最初に読み込んだymlに対して sample というものをつけていますが, これは読み込んだymlの中からランダムに一つ取得するというものです.

最後に,

Service.primary.post(:message => "@#{m.user.idname} #{reply}", :replyto => m)
m.message.favorite(true)

でリプライを返してファボって終わりです.

なお, 本プログラムでは自分のツイートにも反応するようになっていますが, 自分には反応して欲しくない場合は, 上記のifに and !m.user.is_me? でも追記すればいいのではないでしょうか.


CLIで動かしたい場合

現在あひる焼くなプラグインWindows 10で動いていますが, 自分もTLを見たいということでGUIであひる焼くなを起動しています.
ただし今後は検証をしつつ, botプラグインはサーバ上でCLIで実行に移行していきたいと思います.
プラグインCLIで動かすには以下のコマンドを叩けば動きます(動いて). (ただし本プログラムが ~/.mikutter/plugin/ に設置されている前提です)

$ ruby mikutter.rb --plugin=ahiru_yakuna

--plugin=プラグインのスラグ で, そのプラグインのみをロードしてmikutterが起動してくれるため, GUIに依存していない限りCLIでの実行が可能なようです. 本プラグインstreaming が必要なので, プラグイン.mikutter.yml 内にすでに streaming を指定していますが, もしymlに書いていない場合は,

$ ruby mikutter.rb --plugin=ahiru_yakuna,streaming

でも動きます.
なお, ymlにも実行オプションにも streaming を指定しない場合は, mikutterの実行直後に終了します. ておくれ作者曰く, streamingなどのイベント取得系のものを読み込んでやらないと, イベントが発生しないので終了していいよね〜ってことで終了するらしい(うろ覚え)


以上のような仕組みであひる焼くなプラグインは日々焼いてくる者共に報復をしているわけであります.
残念なのは飯テロのつもりで実装した時間限定の飯テロモードが, 本日の飯占いとやらに使われており, 本来の役目を果たせていないことでしょうか. 訓練された焼き勢ほど厄介かつヤバイものはいないということですね. (怖い)
本プログラムはmikutterのプラグインとして初めて作ったものであると同時に, 作成にあたって多くのておくれに力を貸していただきました.
ありがとうございます.

さて, あひる焼くなの仕組みを参考にbotを作りたいというヤバイ話を聞いたので, あひる焼きにチューニングされた部分を削ぎ落としたものをサンプルとして作成し, GitHubに公開しました. 自分もmikutterでbot運用したいという方は参考にしてみてください.(参考になるとは言っていない)

github.com

May The Teokure Be With You…