かつてあったムスカbotについて
※かつてのはてなダイアリー(ブログに移行)にあった「制作者が解説する@muskabot」を一部編集
※ムスカbotは、株式会社スタジオジブリ、株式会社徳間書店、東宝株式会社、宮崎駿監督などの企業・個人とは一切関係ありません。単なるファンメイドのbotです。
bot解説
「ムスカbot」は、天空の城ラピュタでおなじみ、「ロムスカ・パロ・ウル・ラピュタ」のbotです。
Twitter/Wassr上で稼働していました(IDはmuskabotでした)。
補足
Twitterでの稼働期間は2008/xx/xx(時期不明)~2011/03/12でした。
東日本大震災発生後自粛のため緊急停止、そのまま半年放置の後アカウント閉鎖(2011/09/05以降に実施)。
本当は3/11当日に止めようとしたが発災後にインターネットが不通となったため、翌日なんとか復活した携帯回線から緊急停止させたのは秘密。
基本動作
@bombtterからの爆発情報を元に、「見ろ!○○がゴミのようだ!」などと発言します。
00分/30分に時報動作を行います。
Replyを受けた場合、それに反応することがあります。
既知の不具合など
爆発してから1分以上経つ/Replyに反応する文字列を入れたつもりなのに@muskabotの反応がない気がする。
@muskabotはレンタルサーバー上で動いています。
CRONで1分おきに動かしたいものですが、「ジョブの動作間隔は1時間以上間隔あけろ!」というのが現実です。
そのため管理するWebサイトからimgタグで呼び出して、模擬CRONみたいなことをしています。
なので、仕様です。反応の遅さはWebサイトのアクセス数に影響するかもしれません。
もしかするとレンタルサーバーが落ちている可能性もあります。
またはプログラムのバグか。TwitterのAPIがおかしいか。
自宅サーバーや専用サーバーで動かしてみたいもんです。
反応までまったりお待ちください。
爆発が連続して2回行われる場合があるが、その際最新の1件が優先され、古いものは取りこぼすことがある。
最近bombtterの仕様が変わったのかは知りませんが爆発待ち数が多いと@muskabotが処理する前に次の爆破が実行される場合があります。
@muskabotのプログラムの仕様です。大佐も新しい物しか見ていないようです。
改善はできますがプログラム構造が変わるので面倒→処理が滞っていると連続POSTしまくりだしやりたくない現状…
Replyに反応する文字列が少ない気がする/なんかReplyのつじつまがあわない。
仕様です。
Replyに含まれる文字の中に反応する文字列があるか、部分一致で処理させています。また反応文字列の優先度も独断で設定しています。そのためつじつまが合わないことがあります。
@muskabotからのReplyがうるさい。
TwitterのReply仕様変更に伴い、例えば「. @abyssluke に伝えろ。予定通り @bombtter を爆破したと。」のようなPOSTが投稿された場合、@abysslukeと@bombtterのReplyタブにそのPOSTが入るようになりました。
自分のPOSTの中に「@muskabot」が含まれていると反応する可能性があります。口は災いの(ry
とりあえず、上のような場合、これはTwitterの仕様です。
@muskabotがフォローしている人以外は@を@にするなどしたいですが、プログラム構造が(ry
→(2009/06/25) @は@に置換するようにしました。これで自ら@muskabotに@してReply処理された場合を除きReply飛ばないはず。
それ以外はムスカの仕様です。
ただし、確率動作にさせる予定はあります。8回Replyして2回Replyしないなど。
ReTweet等に反応してしまう
上に書かれているTwitterの仕様です。
が、2009/04/29から頭に「RT @」、「ReTweet @」、「RT:」が付くReplyに関しては反応しないようになりました。ただし、バルスを除く。
※「ムスカwwwwww RT @muskabot 〜」等、頭にReTweetの識別子が付いていない場合は今の所反応します。ご注意ください。
@muskabot自体がうるさい。
仕様です。
@muskabotがfollow/remove返ししてこない。
(2009/06/30追記)「@muskabot followして」(「@muskabot followしてください」など、「@muskabot followして」がreplyの最初に来ていればOK。なので「@muskabot followしてこないでください」と言われてもfollowします)とreplyすると自動的に@muskabotからfollowします。removeも同様に「@muskabot removeして」でOKです。
もしかしたらOAuthへの変更以降、follow/remove処理コードを変えていないので正常に動いていない可能性(あとでなおします)。→なおしました。
反応すると「@ユーザーID [R2FR((Reply To Follow/Removeの略))-(F(ollow) or R(emove)))]〜」なReplyを送信します。
protectedな方は使えません。相互フォロー中のみ「@muskabot removeして」は可能ですが、removeされてしまうと「@muskabot followして」をしても反応しませんのでご注意ください。
@abysslukeが不定期的に外人やspamをチェック&ブロックしています。また上のfollowコマンドを行っていない場合のフォロー返しも同時に行っています(このような手動フォロー返しの場合は基準を設けているため、場合によってはフォロー返しを行わない可能性もあります)。
ちなみに、フォロー連絡のメールは切ってあります。
from APIじゃないけど?
2009/07/28から、ほとんどの処理でOAuthに対応させました。そのためクライアント名は「Romuska Paro Ur Laputa」として投稿するようになりました。
2009/08/31に、すべてOAuthに対応しました。
@bombtterと@muskabotの爆発物が一致しない。
どうやら@bombtterの仕様変更により、@bombtter_rawで提供される情報は@bombtter_longで流れる情報も混ざっているようです。
動作解説基本編
PHPで作られたTwitter/Wassr bot。正式名称は「ムスカbot」。
元ネタは「天空の城ラピュタ」の「ロムスカ・パロ・ウル・ラピュタ」である。
Wassr版に関してはおまけみたいなものだった。
@muskabotは4つのプログラムで構成されていた。
メインプログラム(@bombtter_rawからデータを取得し発言するなど)
時報プログラム(Twitter/Wassr版共通)
Reply処理プログラム(Wassr版にはない)
Twitterダウンチェックプログラム(Wassr版のみ)
メインプログラム/Reply処理プログラム/Twitterダウンチェックプログラム<はJSONでタイムラインを取得/解析している関係上PHP5.2.0以降で動作する(json_decodeを使用している)。
時報プログラムはPHP4でも動く。ただしOAuthでPOSTさせる場合はライブラリの関係上PHP4では動作しない。
メインプログラムは某レンタルサーバーで動作していた。
@bombtterの爆発情報を元にPOSTする。
Webサイトからのimgタグなどでの呼び出しで動作する疑似cron。
動作間隔(TL取得間隔)は指定してあるので1分間で10回とかアクセスされても動作は1回のみになるはず。
動作間隔は50秒くらい。
時報プログラムは00分、30分に動作し、それぞれ異なるサーバーのCRONを用いて動作していた。
1回の動作でTwitter/Wassrに同時投稿する。
00時や、朝チュン/昼ぽっぽー、一部のアニメの時間帯はPOSTが変わる。
それ以外は5-6パターンの中から適当に選択し投稿する。
Reply処理プログラムはメインプログラムから呼び出され、メインプログラムとは異なるサーバー上で動作していた。
@muskabotのReplyを取得し、反応させるワードに登録されているワードがあった場合、それに対応するPOSTをReplyする。
Replyによっては通常POSTとし、Reply先のステータスID(in_reply_to_status_id)を付与しない場合がある。
動作間隔は2分。
Twitterダウンチェックプログラムはメインプログラムと同じサーバー、呼び出し方法で動作していた。
約1分ごとにTwitterの@muskabotのTL取得を試み、連続5回以上アクセス不可 or メンテナンスダウンと判断した場合、WassrのTLとTwitterグループのTLにダウンの情報をPOSTする(理由も付ける)。
ダウンが続いている場合、一定確率でその旨をPOSTする。
ダウンカウント中に1回でもアクセスに成功した場合は復旧の旨のPOSTをする。
このダウンカウントはWebサイトでも閲覧できた。
Reply反応キーワード一覧
※一部文字列は自主規制フィルタが掛かっています。
※下に行くにつれて優先順位が高い。バルスは最優先。
乱数
頭
逃
読
ムスカ
大佐
ありがとう
鳩山
小沢
麻生 ※ソースコード上では廃止されている
ち○こ
名前は
何者
王家
核兵器
○ね
○ね
待って
まって
教えて
クッキング
料理
魔神剣
石は隠した
天気
ハガレン
ごみ
ゴミ
よみがえらせるな
よみがえるな
蘇るな
蘇らないで
何の真似だ
うるさい
うるせえ
うるせぇ
うるせー
ウザい
うざい
ウザイ
だまれ
黙れ
黙りな
バカ
馬鹿
@muskabot 爆発しろ
ムスカ爆発しろ
大佐爆発しろ
@muskabot爆発しろ
ムスカbot爆発しろ
ムスカ大佐爆発しろ
ラピュタ王爆発しろ
ラピュタ爆発しろ
nullpo
nurupo
ぬるぽ
ヌルポ
バルス
ばるす
おまけ (これははてなダイアリーにもあまり載せていない設定だがソースを見ればわかる話)
特定ワードの爆発には特別な処理を入れている。
とあるユーザーからの要請により、特定ワードの爆発に関してはゴミ(爆発)扱いにしない。それ以外のワードでゴミ扱いにならないものがあるがそれはbombtter側のNGワード処理によるもの(bombtter_rawに爆発したかしていないかのフラグがある)。
「ソドムとゴモラ」: 原作セリフの「旧約聖書にある、ソドムとゴモラを滅ぼした天の火だよ。 ラーマヤーナではインドラの矢とも伝えているがね。」をtweetする。
「ラピュタ」「らぴゅた」「laputa」「raputa」「rapyuta」: 「ラピュタは亡びぬ。 何度でもよみがえるさ。」と原作字幕準拠の内容をtweetする。
「buzztter」 : 「すばらしい @buzztter だと思わんかね?」
「だうよのミゴ」 : 「見ろ! だうよのミゴがゴミのようだ !ろ見」と回文になる。
「はじけるレモンの香り」 : 「すばらしい! 最高のレモンの香りだと思わんかね?」 ※プリキュア絡み
「打線」 : 「すばらしい! 最強の ◯◯ だと思わんかね?」 (◯◯には爆破対象) ※野球チームの打線がゴミになったら困るのでその配慮である
「ロムスカ」「ムスカ」「muskabot」 : バルス。
低確率で以下のtweetを行う。
「最高のTwitterだと思わんかね?」
「(都道府県) ((地方)) (地点名)の明日の天気は(天気)だ! (by livedoor 天気予報)」
livedoor 天気予報APIからランダムな地点の天気予報を取得している。
「(翌月)月まであとn分(≒n時間≒n日)ですよ、閣下。」
イベント時は低確率で以下のtweetを行うこともあった(ソースに残っている範囲で)。
「11月20日(金) 21時から日本テレビ系列で私やリュシータ、小僧らが登場する。ぜひ見たまえ。 (URL)」
金曜ロードショーで天空の城ラピュタが放送される旨の予告。URLは金曜ロードショーのHPへのリンク。
ちなみに、当日21時に「時間(21時)だ!ぜひ日本テレビ系列で放送される金曜ロードショーで私の活躍を見たまえ! (URL) (明日の0時までreply処理を除く運転を停止します)」をtweetし、24時(「すばらしい! 生きてる…生きてるぞ!! …私は亡びぬ、何度でも蘇るさ。 (通常運転再開。0時です)」)までReply処理と23時30分(「あ、あぁ…目がぁぁ、あぁぁぁぁ、ぁぁぁ!(23時30分をお知らせします)」)以外の処理を抑制していた。
「見ろ! カボチャがゴミのようだ! Trick or Treat! ハッハッハッ!」
「将軍に伝えろ。予定通りお菓子をあげると。」
定時/30分は特定の曜日・時間帯等で特別な処理が入る。 ※キーワードのみ書いてある場合はランダムに選択されるtweetにそのキーワードが入る。
日曜日17:00, 17:30: 「ハガレン」(過去には変数名(geass)から「ギアス」) (末期は無効化)
金曜日02:00, 02:30: 「大正野球娘。」(過去には変数名(kon)から「けいおん!」) (末期は無効化)
日曜日08:30, 09:00: 「プリキュア」
毎日05:00: 「朝チュン」
毎日12:00: 「昼ぽっぽー」
12/24 00:00: 「見ろ! クリスマスイブ(12/24)がゴミのようだ! 」
12/25 00:00: 「クリスマス(12/25)なんて存在しませんよ、閣下。」
01/01 00:00: 「すばらしい新年だと思わんかね? 見ろ! 今年がゴミのようだ!(今年もよろしくお願いします) yyyy年元旦」
04/01 00:00: 「すばらしくない!最低の4/1だと思うかね? 見るな! 4/1がゴミではないようだ!」
エイプリルフールであまのじゃくモード。
月曜日 00:00(1/2の確率で): 「カレンダーを見ろ! 月曜日がゴミのようだ!」
日曜日 00:00(1/2の確率で): 「最高の日曜日だと思わんかね?」
30分の処理において、1/5の確率でlocationを以下の候補のうちランダムで書き換える。
ゴリアテ、ラピュタ(黒い半球体の中)、要塞、ラピュタ、地上
以下のユーザー(bot)からのReplyは特別なreplyを返す。
joymanbot
shigin
meitantei_bot
matayoshi
linux_cafe
LinaCafe
tetsuwo_bot
patchouli__