【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個前に開いたフォーム」で右クリックをした
カーソル位置に「編集したデータ」を挿入します。
テキストボックス内の文字の書式について・・・
アプリ内では、トリガーワードは青色に、タグは赤色に色分けされます。
それでも、文字の色だけでは分かりづらいので、インターフェースを改良したうえで、アンドロイド版を作成するつもりです。
アンドロイド版では、電池の残量が少なくなった場合にツイートするなど、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します。
|