リプライにバリエーションを
たとえば「りんご」に対して反応させたいけど、「りんごは好き?」、「りんごをあげるよ」、「りんごのデザート作って!」など、いろいろとバリエーションがあって「りんご」だけで反応させるとトンチンカンなリプライになってしまいますよね。
また、「おはよう」とリプライされたのが早朝だったり、逆に遅かったりしたら「今日は早起きだね」、「まだ寝てたの?」と返した方が自然です。
そこで、if文にもう一工夫してみましょう。よそからのコピペをちょろっとアレンジしただけですが、知識はどんなに小さいものでも共有するべきだと思うのですよ。私もかなり助けられたので、これが誰かの助けになれば…(`・ω・´)
if文を入れ子にする
キーワードAを含み、なおかつキーワードBを含んでいた時に反応するようにします。一つ例をあげるとするとこんな感じです。
else if(stristr($com, "りんご")){ if(stristr($com, "好き?")){ $key = array_rand($ringosuki); $post = $ringosuki[$key]; $return = $reply_name." ".$post.;} else if(stristr($com, "あげる")){ $key = array_rand($ringoageru); $post = $ringoageru[$key]; $return = $reply_name." ".$post.;} else if(stristr($com, "作って")){ $key = array_rand($ringotabetai); $post = $ringotabetai[$key]; $return = $reply_name." ".$post.;} else{ $key = array_rand($ringo); $post = $ringo[$key]; $return = $reply_name." ".$post.;} } (※ $comは相手からのリプライ内容です) (※ 追記:無駄なダブルクオーテーション("")が入っていたので削除しました。すみません)
「りんご」+「好き?」または「あげる」または「作って」にそれぞれ別の反応を返します。いずれにも当てはまらない場合は「りんご」のみの反応を返します。ちなみに、「あげる」「つ」「あげよう」などのぶれに対応するにはこの記事を参照くだされ。
特定ユーザからのリプライにのみ反応させたい時には$comを$name(私と同じスクリプトを使っている場合。そうでない場合はユーザのスクリーンネームまたはID)にします。本当はIDを指定した方がいいんですが、なぜか私はうまくいかなかったのでこうしてます_ノ乙(、ン、)_ bot同士の連携に使えます。例文はこんな感じ。
else if(stristr($name, "ムサシ")){ if(stristr($com, "なんだかんだと聞かれたら")){ $return = "@Musashi_bot 答えてあげるが世の情け"; } } (※ 例なのでムサシのbotがあるかどうかはわかりません)
これを応用するとスパムアカウントからのリプライを弾いたり、RTにリプライしないようにしたりできます。
時間帯によって反応を変える
リプライスクリプトのどこか(私はif文群の直前に置いてます)にこれを入れます。
//時刻の判定 $now_g = date('G');
そんでもって、if文にこれを加えます。数字はどの時間に来たリプライに反応させるかを指定します。うちのbotのスクリプトまんまで失礼。
else if(stristr($com, "おはよ")){ switch(true){ case ($now_g == '5') or ($now_g == '6') : $key = array_rand($earlymorgen); $post = $earlymorgen[$key]; $return = $reply_name." ".$post.""; break; case ($now_g == '7') or ($now_g == '8') : $key = array_rand($gutenmorgen); $post = $gutenmorgen[$key]; $return = $reply_name." ".$post.""; break; case ($now_g == '9') or ($now_g == '10') or ($now_g == '11'): $key = array_rand($latemorgen); $post = $latemorgen[$key]; $return = $reply_name." ".$post.""; break; default : $key = array_rand($jikangai); $post = $jikangai[$key]; $return = $reply_name." ".$post.""; break; } }
早い(5時〜7時)、普通(7時〜9時)、遅い(9時〜12時)、それ以外の時間に振り分けています。おはようやおやすみ、「お腹すいた」の返事で何を出すか(朝食、昼食、夕食、おやつなど)に使えそうです。