【TeraBot :: 自 動 呟 き 機 能】【説明】【概要】

    TeraBot とは、WindowsマシンやAndroidを搭載したスマホで動く Twitter Bot です。 TeraBotは、アプリと辞書ファイルが完全に分かれている点 や PC・スマホの電源を入れっぱなしに しなくてはならない点 が、通常のボットと異なります。 さっそく、辞書の定義方法を記述したいと思います。 (マニュアルは随時追加していきます。) 辞書の定義方法詳細は、こちらから → http://www 基本的に、HTMLと同じで、タグを使用して、要素を囲み、囲まれた要素を適宜変換しながら、TeraBotに自動で喋らせます。 (※タグの中にタグが入っている(入れ子)の場合、内側のタグから順に処理します) その際、喋らせる内容は、辞書としてテキストファイルに定義します。 具体的には、奇数行目の言葉をきっかけに、偶然行目にある言葉をTeraBotに喋らせます。  例)   1行目:今何時ですか?   2行目:[Time]です! 誰かが「今何時ですか?」と呟くと「23:55です!」など、現在時刻を[Time]に挿入して呟きます。  ※例では「1行目」「2行目」と書きますが「奇数行目」「偶数行目」と同義です。   また、奇数行目を「トリガーワード」、偶数行目を「リアクション・センテンス」という場合もあります。 タグには、通常のタグ[○○] と 引用タグ[&●●] 、Optionタグ[?□□]、呼び名タグ[@◆◆]、自作タグ[△△]があります。 自作タグは複数設定可能で、必ず自作タグを奇数行目に、自作タグの内容を偶数行目に記述します。 また上記タグはアプリ予約 タグとなるので、自作タグ内 [ の次に & , ? , ! , @ は使えません。また自作タグは[]で囲まれていなければいけません。 [[だれ]]のように、[]がダブってはいけません。 詳細は、先程、紹介したWebページを見てください。  例)   1行目:[だれが]   2行目:[Random]わたし[|][RandomName]さん[|]おじさん[|]息子[|]元彼[|]宇多田ヒカル[|]浜崎あゆみ[|]明石家さんま[|]タモリ[|]ダウンタウン[END][|]は、各タグで要素を複数列挙する際の区切り文字です。 [RandomName]は、フォロワーの中からランダムに名前を入れることなどができます。 → [Random] は、[|] で区切られた言葉をランダムに発言します。 → [だれが]は自作タグで、辞書内の他の行でも、使用できます(同じ定義をしなくてすみ、コンパクトに書けます)。 上記例のように、(先程挙げた5種類の)タグを奇数行目複数行目にも記述可能にしたことにより、柔軟な受け答えができるようになっています。 タグは入れ子にもできます。 実際の使用例は・・・  例)   1行目:文章作[&]   2行目:[いつ][だれが][どこで][どうした] 「文章作成お願い!」や「文章作って」などと発言したユーザーに対して、他の行で定義された[いつ][だれが][どこで][どうした] という自作タグ定義文からボットが文章を作って呟きます。 また、[&]は、以下のように…  例)   1行目:今何時[&]   2行目:[Time]です! …任意の文字が来ても反応できるようになります。 ※この例では「今何時?」「今何時なの?」「今何時ですか?」等など、すべての文字に反応します。 [&]は、1文字以上の文字を表わします。合わせて[?]も使用でき、一般的なパターンマッチングを行う事ができます。 [?]は、1文字の文字を表わします。 自作タグの応用例として・・・  例)   1行目:[次の内、いずれか]   2行目:[Random]  例)   1行目:[ランダム終わり]   2行目:[END] タグ名は入力支援フォームやメニューから選択し、入力する事が可能ですが、自作機能を使って日本語に置き換えたり、 自分の好きなタグ名にすることができます。(これを自作タグといいます。)  例)   1行目:おみくじ   2行目:今日の運勢は[次の内、いずれか]大吉[|]中吉[|]小吉[|]末吉[ランダム終わり]です という様に、書けるようになります。 引用タグの使い方・・・  例)   1行目:[&☆☆]はそう思う   2行目:[ReplaceWord][&☆☆][>]貴方[|]わたし[>]あなた[RW:END]は、なぜそう思う? 引用タグを使って、指定範囲の文字を置き換える事が可能です。[<] のように、どちら向きの括弧でも使用可能です。 また、[<>]で2つの項目を入れ替えるように、記述する事も可能です。 → 誰かが、「はそう思う」と呟くと、「貴方は、なぜそう思う?」と答えます。  例)   1行目:[&☆☆][&★★]だ!   2行目:[ReplaceWord][&☆☆][>]貴方[|]わたし[>]あなた[RW:END]ってさ、[&★★]なの? また、この例の様に、文字を置き換えないで、単に引用だけすることも出来ます。 引用タグは、[&□□]でも好きな名前で大丈夫です。 奇数行目と複数行目で、対応したタグ名をつける事が重要です。 → 誰かが、「実は小心者だ!」と呟くと、「貴方ってさ、実は小心者なの?」と答えます。 ※プログラム内では、「[&][&]だ!」でパターンマッチングして、引用する部分の文字と位置を対応づけています。 家のパソコンからTeraBotを動かしている場合、外出時などにボットのアカウントから次の言葉を呟く事で、 遠隔操作でTeraBot終了したり、起動したりすることができます。 終了は [-TeraBot] 起動は [+TeraBot] です。(起動や終了を行うユーザー名を指定しておきます。)  例)   1行目:お疲れTeraBot、ゆっくり休んで!   2行目:[-TeraBot]了解しました('◇')ゞ  例)   1行目:TeraBot起動!   2行目:[+TeraBot]起動します! → [-TeraBot]や[+TeraBot]の前後にあるリアクションセンテンスを呟いてから、起動したり終了したりします。   各種タグも2行目に書けます。 規制アカについて・・・ [BotPriority]@TeraBot_jp @TeraBot_jpn @TeraBot_ja[BP:END] いわゆる規制アカの設定ができます。 左に記述したアカウントが、API制限で発言できなくなり次第、1個右のアカウントから発言できます。 定期ポストの設定方法・・・ 複数記述された[RandomTweet]の次の行の内容を、一定時間ごとにランダムに呟く事ができます。 同じ内容でダブっても大丈夫です。その際は、ダブった内容を呟く確率が高くなります。 オプションで、ダブり無しとする事も可能です。  例)   1行目:[RandomTweet]   2行目:いや~ツイッターって面白いな~   3行目:[RandomTweet]   4行目:いや~ツイッターって面白いな~   5行目:[RandomTweet]   6行目:お昼ご飯 何食べよう?   ・・・ 辞書をコンパクトにまとめたい時・・・  例)   1行目:[SelectAllCases]○○○○[|]△△[|]□□□[SEL:END] ツイートに「○○○○」「△△」「□□□」のいずれかが含まれる場合、2行目に定義した内容を呟きます。 [SelectAllCases]は、コンパクトに記述できます。勿論、複数個、[SelectAllCases]を使ったり、入れ子にしたり出来ます。 じゃんけんの例  例)   1行目:ぐー   2行目:[Random]ぐー[|]ちょき[|]ぱー[END]  例)   1行目:ちょき   2行目:[Random]ぐー[|]ちょき[|]ぱー[END]  例)   1行目:ぱー   2行目:[Random]ぐー[|]ちょき[|]ぱー[END] 「ぐー」「ちょき」「ぱー」と定義することにより、じゃんけんをさせる事ができます。 また、「グー」と出すかもしれないので・・・  例)   1行目:[SelectAllCases]ぐー[|]グー[|]ぐ~[|]グ~[SEL:END]   2行目:[Random]ぐー[|]ちょき[|]ぱー[END] ・・・同様に、、「ちょき」と「ぱー」を定義します。 これで、「グー」等、カタカナで打ってきても、じゃんけんできます。 → コンパクトに1行で定義できます。 → [SelectAllCases]は、いずれかの項目、一つでもマッチすれば、反応します。奇数行目に定義可能です。 トリガーワードを[SelectAllCases]で定義する例・・・  例)   1行目:[SelectAllCases]0[|]1[|]2[|]3[|]4[|]5[|]6[|]7[|]8[|]9[SEL:END] 2行目:一桁の数字です → 0~9のいずれかを発言すると、「一桁の数字です」と呟きます。  例)   1行目:[一桁の数字] 2行目:[SelectAllCases]0[|]1[|]2[|]3[|]4[|]5[|]6[|]7[|]8[|]9[SEL:END] → 自作タグの場合に限り、[SelectAllCases]を偶然行目にも記述できます。  例)   1行目:[三桁の数字] 2行目:[一桁の数字][一桁の数字][一桁の数字] → 自作タグを自作タグで定義できます。 この場合、正規表現で書いた方がスマートに記述できます。  例)   1行目:[RegularExpression]^\d{3}$[RE:END]   2行目:半角数値3桁にマッチしました 【補足】  例)   1行目:[0~9] 2行目:[SelectAllCases]0[|]1[|]2[|]3[|]4[|]5[|]6[|]7[|]8[|]9[SEL:END]  例)   1行目:[00~99] 2行目:[0~9][0~9] → ただし、2桁の以上の数字で1桁目や2桁目に0を表示しないのは、少し面倒です。 → [SelectAllCases]を極端に多用すると、処理速度が落ちます。   デバッグモードで試して下さい。できれば、正規表現を使う事をお勧めします。 占いの例1  例)   1行目:星座運勢ランキング、占って!   2行目:[Rank][x][|]おひつじ座[|]おうし座[|]ふたご座[|]かに座[|]しし座[|]おとめ座[|]てんびん座[|]さそり座[|]いて座[|]やぎ座[|]みずがめ座[|]うお座[RNK:END] 実行結果の例    第1位 いて座 第2位 てんびん座 第3位 みずがめ座 第4位 やぎ座 第5位 しし座 第6位 おひつじ座 第7位 おうし座 第8位 かに座 第9位 ふたご座 第10位 さそり座 第11位 おとめ座 第12位 うお座 → [Rank]タグの1つ目の項目に、[x]入れると、順位を表わすヘッダーが付きます。  '[x']とすると、[x]という文字列として扱われて、ヘッダーは付きません。 占いの例2  例)   1行目:占って!   2行目:金運:[五つ星] 恋愛運:[五つ星] 仕事運:[五つ星] 健康運:[五つ星]  例)   1行目:[五つ星]   2行目:[Random]★★★★★[|]★★★★☆[|]★★★☆☆[|]★★☆☆☆[|]★☆☆☆☆[END] → [五つ星]という自作タグを作っておけば、同じ定義を何度もしなくてよくなります。 入れ子処理について、分かりにくいので、簡単に説明しておくと・・・  例1)   [Random]おはようございます[|]こん[Random]にちは[|]ばんわ[END][END]  例2)   [Random]おはようございます[|]こんにちは[|]こんばんわ[END] 例1と例2は、意味的には同じです。 まず、最初にタグを内側から処理します。 例1にある通り、[Random]にちは[|]ばんわ[END] 「にちは」と「ばんわ」のどちらか?が選ばれます。その次に「こん」がその言葉の前に付きます。 最後に、例2のようになり、「おはようございます」「こんにちは」「こんばんわ」のいずれか?が選択されます。 [WAIT_TIME]の使用例  例)   1行目:ぐー   2行目:[Random]ぐー[WAIT_TIME]あいこ[|]ちょき[WAIT_TIME]負けた[|]ぱー[WAIT_TIME]勝った[END] [WAIT_TIME]は、1秒間スリープします。よって、この例ではツイートは2つに分けて呟かれます。 通常は、何か話の続きをツイートしたい時などに使えます。 [WAIT_TIME]を2個以上続けて、記述する事ができます。2個連続で記述した場合、2秒間スリープします。 RTなどの実行例  例)   1行目:[&]#拡散希望[&]   2行目:[DO]Link=ON,Action=RT[DO:END] → 「#拡散希望」に反応して、リンクURLがついている(Link=ONと定義)ツイートをリツイート(RT)します。 NGワードの設定  例)   1行目:今日も1日、[&][TriggerName=@Becky_bekiko]   2行目:[DO]NGWORD=@Becky_bekiko,Action=RT[DO:END] → ベッキー♪♯(@Becky_bekiko)さんが発言した「今日も1日、思いやりを大切に。」などのツイートをRTします。   また、NGワードに、「@Becky_bekiko」を指定しているので、非公式RT(引用RT)をベッキー♪♯さんが行って、   ツイート内に「@Becky_bekiko」がある場合、RTしません。 ※単にNGWORD=@と書いたら、ベッキー♪♯さんのリプライ全般をRTしないようになります。 ファボなどの実行例  例)   1行目:[&][TriggerName=@Becky_bekiko]   2行目:[DO]NGWORD=@,Action=Fav[DO:END] → ベッキー♪♯(@Becky_bekiko)さんが発言したリプライ以外のツイートを全てFavします。 フォローの設定  例)   1行目:フォローしました!宜しくお願いしますm(_ _)m   2行目:[DO]Action=Follow[DO:END]フォロバしました!こちらこそ宜しく(^O^)/ NGWORD など、オプションを必要としない場合は、単に [Follow] と書いて基本的な動作をすることが可能です。 同様に、 [RT][Fav] と書くことができます。 、 ※偶数行目であれば、どの文字位置に書いても動作します。 NGWORDについて [DO]NGWORD=A[|]B[|]C,Action=Fav[DO:END] → Aを含まないかつ、Bを含まないかつ、Cを含まない場合には、お気に入りに登録しません。   区切り文字は、他と同じように[|]です。 ツイートを分断するタグについて  例)   1行目:フォローしました!宜しくお願いしますm(_ _)m   2行目:ありがとう![Follow][WAIT_TIME]フォロバしました!こちらこそ宜しく(^O^)/ [Follow][RT][Fav]、Action付き[DO]タグは、ツイートを分断します。 分断されたツイートは別々にツイートされ、そのツイートは分断前のツイートへのリプとして、関連付けられます。 → 上の例では「ありがとう」と呟いた直後フォローし、1秒間スリープ、その後  「フォロバしました!こちらこそ宜しく(^O^)/」と呟きます。 タグ入力サポートについて・・・  各テキストボックス内で、[をタイプした瞬間、タグ一覧がポップアップメニューで表示され、選択するだけで、入力がサポートされます。 タグ入力支援フォームについて・・・  また、タグ入力をフォームで簡略化する事も可能です。まず入力したい位置にカーソルを合わせ、右クリックをすると表示されます。    フォーム上のボタンを押したり、プルダウンメニューから選んだりして、各タグに合わせた書式で、先程 右クリックしたカーソル位置に  挿入します。  ↓ 只今開発中のスクリーンショットです。 ■日付入力支援 タグ入力支援フォーム ■ランダムタグ入力支援 タグ入力支援フォーム 「+」を押すと、テキストボックスが生成され、ランダムの項目が1個ずつ追加されます。 「-」は一つ項目を減らします。ただし、項目数は最低でも1個は記述しなければなりません。 「キャンセル」何も記述しないのなら、キャンセルを押してください。 「確定」を押すと、TeraBotの辞書の書式に合わせて、右クリックをした位置に挿入されます。 → 各テキストボックスは、右クリックメニューやUNDOなどショートカットの使用が可能です。   「各項目のテキストボックス内」や「上部の編集箇所確認ボックス内」で、右クリックして、再帰的に「タグ入力支援フォーム」   を呼び出せます。     具体的には、「後で開いたタグ入力支援フォーム」から先に処理し、「1個前に開いたフォーム」で右クリックをした   カーソル位置に「編集したデータ」を挿入します。 テキストボックス内の文字の書式について・・・ アプリ内では、トリガーワードは青色に、タグは赤色に色分けされます。 それでも、文字の色だけでは分かりづらいので、インターフェースを改良したうえで、アンドロイド版を作成するつもりです。 TeraBot辞書編集画面 アンドロイド版では、電池の残量が少なくなった場合にツイートするなど、Windows版とは違った機能も追加します。 【画像投稿】 画像投稿を投稿する場合、タイマーによる待ちが発生します。 [WAIT_TIME]を1つ記述するごとに、1秒ツイートを停止します。 [NEWLINE]で改行できます。 各種タグのパラメータ(引数)に、「全角スペース」「半角スペース」が含まれていた場合は、引数左右のスペースを削除します。 オプションタグ以外は、辞書を上行から下行へと、トリガーワードと一致または、パターン一致するまで、サーチします。 もし、複数一致する行があっても、上の行が優先されます。 このことから・・・ ◆通常のツイート ◆ライク演算子[&][?]を使った ツイート ◆引用ツイート(&リプレース) ツイート ◆デフォルトツイート ・・・の順序で定義すると、バリエーションが多くなり、より自然な反応が出来ます。 デフォルトツイートについて・・・ デフォルトツイートは、最終行に[&]を定義して、 [Random]の項目に「空文字」を記述しても実現できます。  例)   1行目:[&]   2行目:[Random][|][|][RandomName]さんに聞いてみましょう![|]そのような言葉は、私の辞書には定義されていません...[END] 空文字はツイートされないので、たまにデフォルトの返答をするといった事が出来ます。 [Random]の空の項目を増やせば増やすほど、気まぐれにしか呟かなくなります。 → 1行目の[&]は、前述の通り、誰かのツイート全てに該当します。  よって、必ず2行目を返します。 → [|][|][Random][END]の中に入れると空の項目が定義されます。 → [DefaultTweet]で定義すれば、最後の行に定義しなくてもすみ、任意の行に記述可能です。  例)   1行目:[DefaultTweet]   2行目:[RandomName]さんに聞いてみましょう!  例)   1行目:[DefaultTweet]   2行目:そのような言葉は、私の辞書には定義されていません... ・・・のように、一つひとつ書く事を推奨します。同じ定義文を書くと、そのツイートを呟く確率が高くなります。  例)   1行目:[DefaultTweet]   2行目:[Random][|][|][RandomName]さんに聞いてみましょう![|]そのような言葉は、私の辞書には定義されていません...[END] ・・・のように書く事もできます。 → リプを貰ったのに、辞書にヒットしなかった場合に、複数記述された[DefaultTweet]の次の行の内容を、呟く事ができます。   [RandomTweet]と同様に、同じ内容でダブっても大丈夫です。その際は、ダブった内容を呟く確率が高くなります。 特定のユーザーだけに呟きたいときは・・・  例)   1行目:おはよう[TriggerName=@○○][TriggerName=@××]   2行目:おはよう\(^∇^)/ と、奇数行目に[TriggerName=@○○]や[TriggerName=@××]などといくらでも追加可能です。  例)   1行目:[ユーザリストA]   2行目:[TriggerName=@○○][TriggerName=@××] と書けば、  例)   1行目:おはよう[ユーザリストA]   2行目:おはよう\(^∇^)/ 例によって、自作タグで定義すれば、何度も同じ事を書かないで済みます。  例)   1行目:[RegularExpression]^今日も1日、..*[RE:END]   2行目:[RT] [RegularExpression][RE:END] で、囲んだ部分に正規表現を記述すると、 正規表現を使って、トリガーワードを判定し、マッチすれば2行目が呟かれます。 何も指定しないと 正規表現で意味を持つワードは、エスケープされ、また、 ワイルドカード [&] や 任意の一文字 [?] を使い、簡易的なLike演算が実行されます。 正規表現 や Like演算 において、トリガーワードとのマッチング処理は、全角・半角文字、及び 大文字・小文字の区別はしません。 → 正規表現を使う - Javaちょこっとリファレンス などを参考にして、記述して下さい。 TeraBot辞書公開機能は、一般のクラウドとは違うので、バックアップ用途で使わないで下さい。 悪意を持ったユーザーにファイルを上書き、又は消失させられる可能性があります。 また、プライベート辞書保護機能を使ってフィルタリングするか、アップロード用辞書は別にして下さい。 オプションについて・・・ → オプションは、入力支援フォームで設定できます。命令文を全て覚えておく必要はありません。  例)   1行目:[?Option]   2行目:[Header]【自動】[H:END] [Footer] #寺簿[F:END] [Reply=True] [Confirm=False] [RandomTweet=Distinct] [DivideTweets=True] [NoTweetTime]yyyy/mm/dd hh:mm - hh:mm[NTT:END] [@〇〇=マー君] [PassiveReply=True] [RandomTweetInterval=10m] 設定は偶数行目にまとめて設定します。他の行にも同じ設定項目があった場合は、一番下の設定を採用します。 項目自体がない場合は、デフォルトの設定を採用します。TrueとFalseのいずれかで明示的に設定することもできます。 [Reply=True]は、反応したトリガーツイートに「@ユーザー名」を付けて、返信します。 [Confirm=True]は、ツイート内容を確認してから、投稿します。 [RandomTweet=Distinct]は、RandomTweetを重複して投稿しないという意味です。 [DivideTweets=True]は、140文字を超えるツイートを分割し、全文を呟く という意味です。 [NoTweetTime]は、指定された時間(または日付)にはツイートしません。 [PassiveReply=True]は、話しかけられた時だけ反応します。 また、[Header][Footer]が無い場合は、ツイートの先頭部分、または末尾に、何も呟かれません。 [Header]【自動】投稿時刻:[Time][H:END] のように、ヘッダーやフッターの中に、タグが使用可能です。ただし、[&○○]引用タグは使えません。 [@〇〇=マー君]では、ユーザーIDにニックネームが付けられます。辞書にある全ての[@〇〇][マー君]に置き換えます。 [RandomTweetInterval=10m]は、RandomTweetを10分に1回呟くという意味です。単位は分で、1分以上でなければいけません。 フォロワーなどからDMで話かけられた場合は、DMで返します。特に設定は要りません。 ============================メモ============================ ※ヤフーから名詞を取得できるようにします。 呼び名タグ も同様に、[?Option]の次の行に書きます。 [@〇〇=マー君] [Yesterday][Today][Tomorrow] [一昨日][昨日][今日][明日][明後日] 自作タグ 改行コードを指定できるオプションも? [NewLine:CR][Newline:LF] ※Cha-tale の「これから実装する機能」、TeraBotに  実装&オンラインマニュアルにも書く ※実際の辞書をサーチする一例をムービーにして  イメージしやすくする ============================================================ ※その他は、2000年に作った VB 6.0 版の Cha-tale と互換性があります。機能を追加次第、タグ名や説明、スクリーンショットをUPします。