Cha-tale 自動チャット - オンライン マニュアル
●はじめに
自動お喋りロボットのことを当ソフトでは、RE_ACTORと呼ぶ。
RE_ACTORが、あなたの作った辞書に応じて、自動的に喋る事ができる。
1行目にトリガーワード、2行目にリアクション・センテンスを記述する。
( AutoChatter とRE_ACTOR は同義である。)
〜 以下、辞書と実際のチャットの例を記載する 〜
●例1
辞書:
(1行目)頭いいぞ
(2行目)これもAdminの御尽力のおかげです。
チャット:
誰かが 「頭いいぞ」 と発言すると、RE_ACTOR が
「これもAdminの御尽力のおかげです。」 と発言する。
→以下、「1行目」「2行目」と書くが「奇数行目」「偶数行目」と同義である。
→同じトリガーワード(キーワード)が登録されていた場合、上にある行が優先される。
●例2-1
辞書:
(1行目)そろそろ寝ま[&]
(2行目)そうですね。
チャット:
[&] は任意の文字を表し、誰かが 「そろそろ寝ませんか?」
「そろそろ寝ますか?」 などと発言すると、RE_ACTOR が
「そうですね。」と発言する。
→このように、[ ]で囲まれたものを タグ と呼ぶ。
●例2-2
辞書:
(1行目)[&](謎)
(2行目)ホントにミステリアスですな〜(ーー;)
チャット:
誰かが 「それでも地球は回っている! (謎)」
などと発言すると、RE_ACTOR が
「ホントにミステリアスですな〜(ーー;)」と発言する。
●例2-3
辞書:
(1行目)[&]apple[&]
(2行目)あなたは、Mackerなんだ(謎)
チャット:
誰かが
「pineapple (パイナップル)」 や「apple pie (アップルパイ)」 や
「Macintoshは米国 Apple Computer,Inc.の登録商標です。」
などと発言すると、RE_ACTOR が
「あなたは、Mackerなんだ(謎)」と発言する。
勿論、「 Apple 」と発言しても、反応する。
→キーワードの大文字・小文字は区別されない。
●例2-4
辞書:
(1行目)君[&]でしょ[&]
(2行目)バレた?σ(^◇^;)。。。
チャット:
誰かが「君なんでしょ?」 や「君って、馬鹿でしょ。。。」 などと発言すると、
RE_ACTOR が「バレた?σ(^◇^;)。。。」と発言する。
●例3
辞書:
(1行目)今何時?
(2行目)う〜んと、今[TIME]だよ。
チャット:
誰かが 「今何時?」 と発言すると RE_ACTOR が
「う〜んと、今 12:30 だよ。」 と発言する。
→[TIME]は、現在時刻を表し、実際の時刻が挿入される。
●例4
辞書:
(1行目)はじめまして
(2行目)はじめまして、私は[RE_ACTOR]です。
チャット:
誰かが 「はじめまして」 と発言すると RE_ACTOR が
「はじめまして、私は Shadow です。」 と発言する。
→[RE_ACTOR]は、自動お喋りロボットの名前が挿入される。
●例5
辞書:
(1行目)ねむい
(2行目)[TRIGGER_NICK]さん、がんばって!
チャット:
「ねむい」 と発言した人が ○○ である場合、
RE_ACTOR が「 ○○さん、がんばって!」 と発言する。
→[TRIGGER_NICK]は、トリガーとなる言葉を発言した
人の名前が挿入される。
→これに対して、オンラインユーザの誰かをランダムで
選ぶのが[RANDOM_NICK]である。
●例6
辞書:
(1行目)占って
(2行目)[RANDOM]大吉[|]中吉[|]小吉[|]
チャット:
誰かが 「占って」 と発言すると RE_ACTOR が
「大吉」 or 「中吉」 or 「小吉」 のいずれかを発言する。
→[RANDOM] は、[|] で区切られた言葉をランダムに発言する。
●例7
辞書:
(1行目)[DYNAMIC_TEXT]
(2行目)[TRIGGER_NICK]さん、正解です!!
チャット:
( AutoChat画面 のテキストフィールドに入力した)クイズの答えなどを
○○さんが発言すると RE_ACTOR が「○○さん、正解です!!」 を発言する。
●例8
辞書1(自作タグ):
(1行目)[いつ]
(2行目)[RANDOM]10年前[|]1ヶ月前[|]1時間前[|]1週間前[END]
→ 奇数行目に [ と ] で囲った自作タグを設定可能
辞書2:
(1行目)文章作って
(2行目)[いつ][どこで][だれが][どうした]
チャット:
誰かが 「文章作って」 と発言すると
RE_ACTOR が 他の行の自作タグを検索し、文章を作る。
●例9
辞書1:
(1行目)[RANDOMCHAT]
(2行目)いやぁ〜、チャットって面白いなぁ。
辞書2:
(1行目)[RANDOMCHAT]
(2行目)[RANDOM_NICK] さん、良いキャラしてますね(爆)
チャット:
上のような形式で、複数登録された辞書(の2行目)からランダムに
RE_ACTOR が一定間隔で発言する。辞書2のように既存タグや自作タグ
も使用可能。
●例10
辞書:
(1行目)[StartUpMessage]
(2行目)現在のパーソナリティはCha-tale作成者によって作成されました。
チャット:
AutoChatter Config 画面 の 「スタートアップ メッセージ 送信」 を押すと発言する。
一つだけ登録可能。(なお、2行目は、既存タグや自作タグが使用可能。)
「私は ○○ によって起動された自動お喋りロボットです。」という固定部分に
続いて、発言する文を設定できる。
●例11(拡張機能)
[RANDOM]〜1〜[|]〜2〜[|]〜3〜[|] に加えて、
[RANDOM]〜1〜[|]〜2〜[|]〜3〜[END]という記述方法もある。
→ 1から3までをランダムで選択
[RANDOM] の中に [RANDOM] を組み合わせたい(入れ子にしたい)時に使う。
●例12-1
辞書:
(1行目)名前を変えたい[TRIGGER_NICK=○○]
(2行目)「クライアント」→「初期設定」→「名前」で変えて下さい。
チャット:
○○さんが、「名前を変えたい」と発言すると RE_ACTOR が
『 「クライアント」→「初期設定」→「名前」で変えて下さい。』と発言する。
このように、ユーザ名を条件に付与する時に使う。
2人以上を条件に付与する場合は…
(1行目)名前を変えたい[TRIGGER_NICK=○○][TRIGGER_NICK=××]
…の様に設定する。
●例12-2
辞書:
(1行目)名前を変えたい[TRIGGER_NICK:=○○]
(2行目)「クライアント」→「初期設定」→「名前」で変えて下さい。
アルファベットの大文字と小文字を区別するときには、=の前にコロンをつける。
例 :Unknown と UNKNOWN
Unknown と unknown
(これらは、違う条件として扱われる)
●例13-1
辞書1:
(1行目)[MANUALCHAT]
(2行目)その言葉は私の辞書にありません(≧ω≦)
辞書2:
(1行目)[MANUALCHAT]
(2行目)[TRIGGER_NICK]さん、そんなこと言わないで〜o(><、)o
チャット:
上のような形式で、複数登録された辞書(の2行目)を定型文に登録。
MC( ManualChat ) ボタンを押し、マニュアルチャット画面にて、
プルダウンリストから選択された定型文をRE_ACTOR が発言する。
辞書2のように 既存タグや自作タグ も使用可能。
→ ManualChat画面を開いた時に、最初に「読込」ボタンを押す必要あり。
→ タグ更新 ボタンを押すことにより、 [TRIGGER_NICK]などのタグが
最新の状態に反映される。
※ただし、[TRIGGER_NICK]は、キーワードを発言したユーザーという意味で、
トリガーワードを発言しないと、ユーザー名が入らない。
●例13-2
辞書:
(1行目)[MANUALCHAT]
(2行目)って言ってますけど、[SELECT_NICK]さんはどう思います?
チャット
例13-1 のオプション機能である。
[SELECT_NICK] フレーム内にあるコンボボックスに入力した名前か、
プルダウンリストから選んだニックネームで、[SELECT_NICK]を置き換える。
(1) ALL ボタン
MC_BOXの中にある [SELECT_NICK] をすべて置換
(2) > ボタン
MC_BOXの中にある [SELECT_NICK] を一つ一つ順番に置換
→この他に、「RE_ACTORとして発言」にチェックを入れると通常使用するチャットウィンドウの
テキストフィールドに入力した内容を、RE_ACTOR が発言する。
(ユーザー辞書も使える。)
●例14-1
辞書:
(1行目)挨拶をさせます。
(2行目)[TimeSpan]07:00-11:00,おはようございます。[TS:END]
チャット:
例えば、現在 10:00 の場合、「おはようございます。」と発言する。
書式:
[TimeSpan]開始時刻-終了時刻,○,×[TS:END]
現在の時間が、開始時刻〜終了時刻であるとき、最初のカンマが
ある所から、次のカンマまで、「○」を発言する。
時間外であるときは、「×」を 発言をする。
書式補足:
→ [TimeSpan]開始時刻-終了時刻,True,False[TS:END]
開始時刻-終了時刻 の条件に合致している状態を True (真)、
合致していない状態を False(偽)という。読み方は「フォルス」。
→ 書式は以上の通りで、TrueかFalseのいずれかは省略可。一つ目のカンマは必須。
→ スペースは空けない。時刻は二桁かつ24時間表記の事。
●例14-2
以下のようにも記述可能。
辞書:
(1行目)今7時になりましたか?
(2行目)[TimeSpan]07:00-07:00,7時です,7時ではありません[TS:END]
辞書:
(1行目)今7時になりましたか?
(2行目)[TimeSpan]07:00,7時です,7時ではありません[TS:END]
●例15-1
辞書:
(1行目)今日の予定は?
(2行目)[DateSpan]2009/09/20-2009/09/23,今日はGW休みです,会社です[DS:END]。
チャット:
例えば、今日の日付が、2009/09/21 の場合、「今日はGW休みです。」と発言する。
書式:
[DateSpan]開始日-終了日,○,×[DS:END]
現在の日付が、開始日〜終了日であるとき、最初のカンマが
ある所から、次のカンマまで、「○」を発言する。
範囲外であるときは、「×」を 発言をする。
書式補足:
→ [DateSpan]日付-日付,True,False[DS:END]
書式は以上の通りで、TrueかFalseのいずれかは省略可。一つ目のカンマは必須。
→ スペースは空けない。西暦を省略した場合は、現在の年であると考える。
→ 日付を指定する場合、2桁 表記の事。
※[TimeSpan] と [DateSpan] も、入れ子にできる。
●例15-2
年をまたがる場合は、以下の例のように、注意する。
<正しい例>
(1行目)今は冬ですか?
(2行目)[DateSpan]11/01-12/31,冬です。[DS:END][DateSpan]01/01-03/31,冬です。[DS:END]
<誤った例>
(1行目)今は冬ですか?
(2行目)[DateSpan]11/01-03/31,冬です。[DS:END]
→例えば、今日の日付が 12月16日 でも、False となり該当せず 、何も発言しない。
●例15-3
辞書:
(1行目)今日は金曜日ですね。
(2行目)[DateSpan]Fri, 金曜日だ、仕事終わり、遊ぶぞ〜![DS:END]
チャット:
今日が金曜日 の場合、「金曜日だ、仕事終わり、遊ぶぞ〜!」と発言する。
→ 日付を指定する場合、以下のような記述もできる。
12/16 : 今年の12月16日
2009/12/1stMon : 2009年12月の第一月曜日
12/1stMon : 今年の12月の第一月曜日
1stMon : 今月の第一月曜日
Mon : 月曜日
※ [DateSpan] や [RepeatDate] にも同様の記述ができ、[DateFormat] は後述するが基本は同じ。
※1stMon や 2ndFri や 3rdWed や 4thSun などは、「タグ入力サポート」を利用すると
間違いがない。もし間違っても、エラーが表示される。1th 2th 3th などと表記しても問題ない。
●例15-4
「第○週 の ○曜日」と記述する場合は、以下の例のように、注意する。
<正しい例>
辞書:
(1行目)今は冬ですか?
(2行目)[DateSpan]11/01-9thMon,冬です。[DS:END]
→例えば、今日の日付が 12月16日 でも、「冬です。」と発言する。
ストッパーとして使用可能。
<誤った例>
辞書:
(1行目)今は冬ですか?
(2行目)[DateSpan]2009/11/01-2009/12/9thMon,冬です。[DS:END]
→年および月を指定して、該当日がない場合、何も発言しない。
→上記の 2009/12/9thMon など存在しない日は、処理されない。
今日の日付が 2009年12月16日 でも、何も発言しない。
→例えば、その月の第五週の月曜日が存在しない場合と存在する場合など、
正しく処理するための仕様である。
●例16
辞書:
(1行目)[UserLogin]
(2行目)[LATEST_LOGIN_NICK]さん、ようこそ!
チャット:
ユーザーがログインしてきた時に、RE_ACTOR が話しかける。
・ [LATEST_LOGIN_NICK] は最後にログインしてきたユーザーの名前を表わす。
[UserLogin] が複数登録されている場合は、一番上に記述された辞書を元に、発言する。
・ 2行目には、既存タグや自作タグが使える。
・自分自身や、自分や他人のRE_ACTOR に対しては、発言しない。
・ [UserLogin] が一つも定義されていない場合は、ログイン時は何も発言しない。
・ [LATEST_LOGIN_NICK] の代わりに、 [TRIGGER_NICK] は使えない。
●例17-1
辞書:
(1行目)今日の日付は?
(2行目)[DateFormat]yyyy年mm月dd日[DF:END]です。
チャット:
「2009年10月16日です。」のように発言する。
辞書:
(1行目)今日の日付は?
(2行目)[DateFormat]yyyy/mm/dd[DF:END]です。
チャット:
「2009/10/16です。」のように発言する。
辞書:
(1行目)今日は何曜日?
(2行目)[DateFormat]aaaa[DF:END]です。
チャット:
「○曜日です。」と発言する。
辞書:
(1行目)今年は、平成何年でしたっけ?
(2行目)[DateFormat]ggg e年[DF:END]です。
チャット:
「平成 21年です。」のように発言する。
辞書:
(1行目)今何時ですか?
(2行目)[DateFormat]hh:mm AM/PM[DF:END]です。
チャット:
「07:18 AMです。」のように発言する。
→[TIME] 同様、時刻を発言できる。
<その他のオプション>
書式定義 出力結果
yy/mm/dd 93/01/27
g ee/mm/dd H 05/01/27
ggg e年m月d日 aaaa 平成 5年1月27日 水曜日
m/d/yy 1/27/93
dddd, mmmm dd, yyyy Wednesday, January 27, 1993
d-mmm 27-Jan
mmmm-yy January-93
hh:mm AM/PM 07:18 AM
h:mm:ss a/p 7:18:00 a
d-mmmm h:mm 3-January 7:18
aaa 水曜
aaaa 水曜日
→ [DateFormat] は、入れ子にする必要性がない。
また、書式定義にない文字は、そのまま、表示される。
●例17-2
辞書:
(1行目)今年の大晦日は何曜日ですか?
(2行目)[DateFormat]aaaa,SetDate=12/31[DF:END]です。
チャット
「○曜日です。」と発言する。
→ SetDate= は、省略可、( 2010/12/31 のように )年号を特定する事もできる。
→ 省略した場合は、今日の日付になる事に注意。
●例17-3
辞書:
(1行目)昨日は何日ですか?
(2行目)[DateFormat]yyyy年mm月dd日,Year+0,Month+0,Week+0,Day-1[DF:END]です。
チャット:
「2009年10月15日です。」のように発言する。
→ Year+0, Month+0, Week+0, Day-1 の ように、現在の日付からの日数差を記述できる。
勿論、順不同&省略可能。SetDateとの併用も可能。
●例17-4
カンマを含む言葉を発言したい場合は、以下の例のように、注意する。
<誤った例>
辞書:
(1行目)What day is today's date ?
(2行目)[DateFormat]dddd, mmmm dd, yyyy[DF:END]
チャット:
「Thursday」のように発言する。意図した結果が得られない。
<正しい例:1>
辞書:
(1行目)What day is today's date ?
(2行目)[DateFormat]dddd', mmmm dd', yyyy[DF:END]
チャット:
「Thursday, December 31, 2009」のように発言する。
→偶数行目のリアクションに、, を表示するには、',と記述。
<正しい例:2>
辞書:
(1行目)What day is today's date ?
(2行目)[DateFormat]dddd[DF:END], [DateFormat]mmmm dd[DF:END], [DateFormat]yyyy[DF:END]
チャット:
「Thursday, December 31, 2009」のように発言する。
→同様な結果が得られる。
●例18
辞書:
(1行目)今週の当番は?
(2行目)[RepeatDate]2009/11/01:Week*1,SetDate=2009/11/29,A班です,B班です[RD:END]
チャット:
「A班です」と発言する。
→上記の例では、SetDate=2009/11/29 を省略すると、今日の日付の当番を発言する。
→上記の例では、2009/11/01から一週間を第一週として、2009/11/29が何週に当たるかを
判定し、第一週:A班、 第二週:B班、 第三週:A班、 第四週:B班、 第五週:A班・・・
というように、一週間おきに、A班とB班が入れ替わる。
入れ替わる項目の数は、自由、A班, B班, C班, D班 のようにしてもいい。
→ Day*1(一日おき)、Week*1(一週間おき)、Month*1(一ヶ月おき)、Year*1(一年おき)
→ Day*2(二日おき)のように、*の後の値は 自由、Week*-1など、過去にさかのぼる事も可能。
→ 項目に、既存タグや自作タグを使用することが可能。
<誤った例>
(1行目)今週の当番は?
(2行目)[RepeatDate]2009/11/01:Week*1,SetDate=2009/11/9thSat,A班です,B班です[RD:END]
チャット:
何も発言しない。
→第九週の土曜日など存在しない場合は、エラーメッセージを出さず。常に何も発言しない。
同様に、11/9thSat や 9thSat でもタグ内は空になり、何も発言しない。
●例19-1
辞書:
(1行目)今年は、閏年ですか?
(2行目)[LeapYear]閏年です,閏年ではありません[LY:END]。
チャット:
「閏年ではありません。」のように発言する。
書式:
[LeapYear]○,×[LY:END]
[LeapYear]True,False[LY:END]
今年が、閏年(うるうどし)であるとき、最初のカンマが
ある所まで、「○」を発言する。
閏年ではないときは、「×」を 発言をする。
→TrueかFalseのいずれかは省略可。
辞書:
(1行目)2004年は、閏年ですか?
(2行目)[LeapYear]2004:閏年です,閏年ではありません[LY:END]。
チャット:
「閏年です。」と発言する。
書式:
[LeapYear]指定年:○,×[LY:END]
指定年が、閏年(うるうどし)であるとき、:(コロン)から、最初のカンマが
ある所まで、「○」を発言する。
閏年ではないときは、「×」を 発言をする。
→ [LeapYear]指定年:True,False[LY:END]
→ 指定年は4桁以内、また指定年のあとに、:(コロン)を忘れない事。
→TrueかFalseのいずれかは省略可。
→:(コロン)を文字として扱いたい場合は、「':」とする。
●例19-2
閏年に関する記述の応用例を挙げる。 (以下の二つの例は同じ結果になる。)
辞書:
(1行目)2004年の2月の最終日は何曜日ですか?
(2行目)[DateFormat]yyyy年mm月dd日 aaa曜日です。,SetDate=02/[LeapYear]2004:29,28[LY:END][DF:END]
チャット:
「2004年02月29日 日曜日です。」と発言する。
辞書:
(1行目)2004年の2月の最終日は何曜日ですか?
(2行目)[DateFormat]yyyy年mm月dd日 aaa曜日です。,SetDate=2004/03/01,day-1[DF:END]
チャット:
「2004年02月29日 日曜日です。」と発言する。
●例20-1
辞書:
(1行目)今月の第一金曜日は、何日ですか?
(2行目)[DateFormat]yyyy年mm月dd日 aaa曜日,SetDate=1stFri[DF:END]です。
チャット:
「2009年12月04日 金曜日 です。」ように発言する。
→ SetDate を使う場合、 以下のような記述もできる。
SetDate=12/16 : 今年の12月16日
SetDate=2009/12/1stMon : 2009年12月の第一月曜日
SetDate=12/1stMon : 今年の12月の第一月曜日
SetDate=1stMon : 今月の第一月曜日
SetDate=Mon : 月曜日
●例20-2
辞書:
(1行目)いよいよ金曜日だ!
(2行目)[DateSpan]Fri,金曜日。仕事終わり、遊ぶぞ〜![DS:END]
チャット:
今日が金曜日である場合、「金曜日。仕事終わり、遊ぶぞ〜!」と発言する。
辞書:
(1行目)今日は、第二月曜日ですか?
(2行目)[DateSpan]2ndMon,そうです,違います[DS:END]。
チャット:
「そうです。」または、「違います。」と発言する。
辞書:
(1行目)今日は、第二月曜日ですか?
(2行目)[DateSpan]2ndMon-2ndMon,そうです,違います[DS:END]。
チャット:
「そうです。」または、「違います。」と発言する。
辞書:
(1行目)今日は、第一月曜日以降ですか?
(2行目)[DateSpan]1stMon-8thMon,そうです,違います[DS:END]。
チャット:
「そうです。」または、「違います。」と発言する。
→ 8thMon(第8週月曜日)など その月の最終日をオーバーしている場合も
使用可能。
●例20-3
辞書:
(1行目)開始日より終了日の日付が若い場合は?
(2行目)[DateSpan]2009/11/2ndMon-2008/11/4thThu,○,×[DS:END]
チャット:
何も発言しない。
→ False (×) にも該当しない事に注意!
辞書:
(1行目)開始日がその月の最終日をオーバーしている場合は?
(2行目)[DateSpan]2009/10/9thMon-2009/11/4thThu,○,×[DS:END]
チャット:
何も発言しない。
→ False (×) にも該当しない事に注意!
●例21
RE_ACTOR が、発言する条件となる奇数行目に Time , Date 関連のタグを使用する例
を列挙する。
辞書1:
(1行目)今年は、[LeapYear]閏年ですね,閏年ではありませんね[LY:END]?
(2行目)はい、そうです。
辞書1:
(1行目)今年は、[LeapYear]閏年ではありませんね,閏年ですね[LY:END]?
(2行目)いいえ、違います。
書式:
[LeapYear]○,×[LY:END]
閏年である場合、○を選択し、違う場合、×を選択する。
→ ○と×を入れ替えることで、「いいえ、違います。」と発言させることが可能。
辞書2:
(1行目)今週の当番は[RepeatDate]2006/04/30:week*1,A班,B班[RD:END]?
(2行目)はい、[RepeatDate]2006/04/30:week*1,A班,B班[RD:END]です。
辞書2:
(1行目)今週の当番は[RepeatDate]2006/04/30:week*1,B班,A班[RD:END]?
(2行目)いいえ、[RepeatDate]2006/04/30:week*1,A班,B班[RD:END]です。
→ 同様に[RepeatDate]でも、○と×を入れ替えることで、(例ではA班とB班を
入れ替えたことで、) 「いいえ、違います。」や「いいえ、B班です。」などと
訂正する発言をする。
辞書3:
(1行目)今日は、[DateFormat]aaa曜日[DF:END]ですね。
(2行目)そうですね。
チャット:
誰かが、(○曜日に)「今日は、○曜日ですね。」を発言すると、RE_ACTORが「そうですね。」と発言する。
辞書4:
(1行目)もう、[DateSpan]04/01-06/30,春[DS:END][DateSpan]07/01-09/30,夏[DS:END][DateSpan]10/01-10/31,秋[DS:END][DateSpan]11/01-12/31,冬[DS:END][DateSpan]01/01-03/31,冬[DS:END]ですね。
(2行目)[DateSpan]04/01-06/30,すっかり春めいてきましたね[DS:END][DateSpan]07/01-09/30,暑いですね[DS:END][DateSpan]10/01-10/31,やっと涼しくなってきましたね[DS:END][DateSpan]11/01-12/31,今年ももうすぐ終わりますね[DS:END][DateSpan]01/01-03/31,春が待ち遠しいですね[DS:END]。
→ 誰かが、例えば12月19日に「もう、冬ですね。」と発言すると、
「今年ももうすぐ終わりますね。」とRE_ACTOR が発言する。
→ False が記述されていないため、該当日以外は、スルーする。(何も発言しない。)
辞書5:
(1行目)[TimeSpan]19:00-06:59,お疲れ様です[TS:END][TimeSpan]07:00-11:59,おはようございます[TS:END][TimeSpan]12:00-15:59,こんにちわ[TS:END][TimeSpan]16:00-18:59,こんばんわ[TS:END]。
(2行目)[TimeSpan]19:00-06:59,そろそろ、おやすみになった方が…。[TS:END][TimeSpan]07:00-11:59,今日も一日頑張りましょう![TS:END][TimeSpan]12:00-15:59,後もう一踏ん張り!![TS:END][TimeSpan]16:00-18:59,飲み会でもいってストレス解消といきましょう![TS:END]
→ 誰かが、例えば20:00に「お疲れ様です。」と発言すると、
「そろそろ、おやすみになった方が…。」とRE_ACTOR が発言する。
辞書6:
(1行目)[RANDOMCHAT]
(2行目)[DateSpan]04/01-06/30,すっかり春めいてきましたね[DS:END][DateSpan]07/01-09/30,暑いですね[DS:END][DateSpan]10/01-10/31,やっと涼しくなってきましたね[DS:END][DateSpan]11/01-12/31,今年ももうすぐ終わりますね[DS:END][DateSpan]01/01-03/31,春が待ち遠しいですね[DS:END]。
→ [RANDOMCHAT] の 2行目にも、Time , Date 各種タグが使用可能。
→ 該当する日付に定義された言葉を発言する。
例えば、今日が4月1日である場合、「すっかり春めいてきましたね。」と一定間隔で発言。
辞書7:
(1行目)[RANDOMCHAT]
(2行目)[DateSpan]01/01,[TimeSpan]00:00-01:00,明けましておめでとうございます[TS:END][DS:END]。
チャット:
「明けましておめでとうございます。」と発言する。
→ [RANDOMCHAT] の 2行目にも、Time , Date 各種タグが使用可能。
勿論、入れ子にすることも可能。
→ 上記の例では、1月1日で、現在時刻が、0時〜1時の範囲内である場合、一定間隔で発言。
●例22
<正しい例:1>
辞書:
(1行目)[RANDOM]一等[|]二等[|]二等[|]三等[|]三等[|]三等[|]
(2行目)当たりました。
<正しい例:2>
辞書:
(1行目)[RANDOM]一等[|]二等[|]二等[|]三等[|]三等[|]三等[END]
(2行目)当たりました。
チャット:
6分の1の確率を狙って誰かが、「一等」と発言すると、その確率で「当たりました。」のようにする。
はずれた場合は、何も発言しない。
→最後は前述の通り、[END]でもいい。
<誤った例>
辞書:
(1行目)[RANDOM][RANDOM]特賞[|]一等[END][|]二等[|]二等[|]三等[|]三等[|]三等[END]
(2行目)当たりました。
辞書:
(1行目)一等[|]二等[|]二等[|]三等[|]三等[|]三等[END]
→Cha-taleのなかでは、辞書が上記のように変換される。
チャット:
意図した通り、発言されない。
→奇数行目で[RANDOM]は入れ子にできない。
→ヒットする確率を変えたい場合は、[RANDOM]〜[|]・・・と項目数を増やし、調整する。
● エスケープシーケンスについて
RE_ACTOR の構文を制御するための区切り文字は、通常は使えないが、
エスケープシーケンスの使用により可能になる。
効果 : 奇数行目にエスケープシケーンスを記述した場合は、[ や ] をトリガーワードの対象にでき、
偶数行目に同様に記述した場合は、[ や ] をリアクションに含める事ができる。
定義 : 区切り文字は、 [ と ] や ,で、 エスケープシーケンスは ' (アポストロフィ)である。
例 : 偶数行目のリアクションに、[ を表示するには、'[ と記述し、] を表示するには、'] と記述。
また、偶数行目のリアクションに、, を表示するには、', と記述。
閏年のリアクション (Trueの部分) に : を表示するには、': と記述。
例 : 偶数行目のリアクションに、'[ を表示するには、''[ と記述し、'] を表示するには、''] と記述。
また、偶数行目のリアクションに、', を表示するには、'', と記述。
→ 奇数行目も同様に記述できる。
制約 :
基本的には、日付やパラメーターを区切る前後のカンマ(やスペース)は、エスケープできない。
(リアクションの中にカンマを表現する場合の制約ではない。)
<例1>
',SetDate=2010/01/07
→ [DateFormat]では、通常通り(例では2010/01/07で)処理が行われ、[RepeatDate]では、エラーメッセージが表示される。
<例2>
,□SetDate=2010/01/07
(□はスペース)
→ エラーにならず、SetDateで指定した日付は無効となり、今日の日付がセットされる事に注意!
<例3>
2009/11/01:year*1',, → エラーになる。
●改行や一時停止タグ
[WAIT_TIME]: 一時停止 (500ミリ秒)
※ [RANDOMCHAT] や [MANUALCHAT] では使用不可
[RETURN_KEY]: 改行
※いずれも2行目(偶数行)で使用可能。
●タグ入力サポート
チェックをいれて、オンにすると…タグの入力をサポートするリストを表示。
リストボックス内のタグを選択し、自動チャットロボットの辞書を編集。
Enter キーを押すと、挿入するタグの確定。
※ フォームが読み込まれた時、タグ入力サポートをオンにした時、更新ボタンを押した時に…
奇数行目に定義した自作タグがリスト候補に追加される。
●その他
・一つの文(一つのリアクション)の中で複数のタグが使用可能である。
(アルゴリズムに再帰関数を使っている。)
(Adminメモ:自作タグを循環させないように注意する。警告機能あり。)
・例 の中で使われるタグの前後には、スペースが入っているが、
レイアウトの都合なので、コピーする場合は注意する。
→オンラインマニュアルはスペースが入っていないので、そのまま使える。
また、実行時、 タグ入力サポートを使用するか、AutoChatter EDITの
ヘルプ画面上のタグをコピーすると良い。
(・Chat Intervals は、500ミリ秒〜2000ミリ秒までに自動補正される。)
(→ぼやき機能はさらに45000ミリ秒以下は、45000ミリ秒に補正され、
Chat Intervals の 60倍の間隔で、発言される。)
・リアクション・センテンスの制限文字数 (3000文字) を超えるとエラーメッセージ
を出すようにした。
(自作タグが循環してないか?どうか確かめる。[いつ]の2行目に[いつ]があるなど。)
(→(1行目)[いつ]
(2行目)[RANDOM]10年前[|]1ヶ月前[|]1時間前[|]1週間前[|][いつ][|] )
・[AutoChatter] を自作タグとして作成し、 [RE_ACTOR] と同値にした。
・RE_ACTOR の名前を変えた場合は、「再読込/設定保存」を 押して反映すること。
・自動チャットは、サーバ側で Get IPまたは、オートログインを実行しないと
トリガーワードが二重に表示される。
・奇数行目や偶数行目が空欄がある場合、その行以降は処理されないことに注意。
→同様に[END_DIC]以降も処理されず、その後には、コメントが書ける。
( [END_DIC] は、なくてもいい。)
・タグが入れ子の場合、内側から処理(スタックに退避処理)していく。
これから実装する機能
●例23
奇数行目は、[SELECT]〜[|]〜[|]〜[SL:END]に変更
[RANDOM]とは違い、[SELECT]が2つ以上ある場合、すべてのパターンを展開し、直積を求める。
→ [RANDOM]の区切り文字である[|]とは別の区切り文字を使用するか、
プログラム内の日付などを処理する関数で[RANDOM]も処理する。
●例24-1
辞書:
(1行目)[&1]は[&2]です。
(2行目)なぜ、あなたは[&1]が[&2]だと思うのですか?
チャット:
誰かが「私は幸せです。」と発言すると、
RE_ACTOR が「なぜ、あなたは私が幸せだと思うのですか?」と発言する。
→ トリガーワードに含まれる文字を引用して、質問などを投げかける。
→ [&○○]の形式で、記述する。&は必須。
●例24-2
辞書:
(1行目)[&○○]が[&●●]である。
(2行目)言い切りましたね。本当に[&○○]が[&●●]ですか?
チャット:
誰かが「彼が一番 賢明である。」と発言すると、
RE_ACTOR が「言い切りましたね。本当に彼が一番 賢明ですか?」と発言する。
→ [&○○]の形式で、記述する。&は必須。
→ また○○や●●の部分は、数字以外の文字も使用可能。
●例24-3
辞書:
(1行目)[&○○]が[&●●]である。
(2行目)[REPLACE_PRONOUN]言い切りましたね。本当に[&○○]が[&●●]ですか?[RP:END]
チャット:
誰かが「私が一番 賢明である。」と発言すると、
RE_ACTOR が「言い切りましたね。本当に私が一番 賢明ですか?」と発言する。
→ 一人称代名詞が主語になる時、上記のようになってしまう。
→ 以下(↓)のように記述して、一人称を二人称で置き換える。
(※[REPLACE_PRONOUN]と[RP:END]を囲った部分だけ、置き換える)
辞書1:
(1行目)[FIRST_PERSON_PRONOUN]
(2行目)[SELECT]私[|]わたし[|]わたくし[|]僕[|]自分[|]俺[|]あたし[|]おいら[|]オイラ[SEL:END]
辞書2:
(1行目)[SECOND_PERSON_PRONOUN]
(2行目)[SELECT]貴方[|]あなた[|]君[|]お前さん[|]貴殿[SEL:END]
※定義しなくてもよい。
●例24-4 (改良案)
辞書1:
(1行目)[&○○]
(2行目)[REPLACE_PRONOUN]私[>]貴方[|]わたし[>]あなた[|]わたくし[>]あなた[|]僕[>]君[|]自分[>]君[|]俺[>]君[|]あたし[>]あなた[|]おいら[>]お前さん[|]オイラ[>]お前さん[RP:END]
チャット1:
[&○○]の文中の「私」を「貴方」に置換してリアクションセンテンスをつくる。
→ [&○○]は自作タグと同じ扱い。
→ [>]は置換する方向を示す。
辞書2:
(1行目)[&○○]
(2行目)[REPLACE_PRONOUN]私[<]貴方[|]わたし[<]あなた[|]わたくし[<]あなた[|]僕[<]君[|]自分[<]君[|]俺[<]君[|]あたし[<]あなた[|]おいら[<]お前さん[|]オイラ[<]お前さん[RP:END]
チャット2:
[&○○]の文中「貴方」を「私」に置換してリアクションセンテンスをつくる。
→ [<]も使用できる。
●例25-1
辞書:
(1行目)[HolidaySet]
(2行目)01/01,元旦,01/2noMon,成人の日,02/11,建国記念の日,03/21,春分の日,04/29,昭和の日,05/03,憲法記念日,05/04,みどりの日,05/05,こどもの日,07/3rdMon,海の日,09/3rdMon,敬老の日,09/23,秋分の日,10/2ndMon,体育の日,11/03,文化の日,11/23,勤労感謝の日,12/23,天皇誕生日,05/2ndSun,母の日,06/3rdSun,父の日
→ まずは祝日を定義する。一年間分まとめて定義すること。一番上にある定義のみ採用される。
→ 母の日&父の日、バレンタインデー&ホワイトデーも定義してもよい。
→ 振替休日も考慮する。
→ 最大で357 (+α) 日分、定義できる。
辞書:
(1行目)体育の日は、いつですか?
(2行目)[HolidayFormat]m月d日(aaa),SetHoliday=体育の日[HF:END]
→ [DateFormat]と同様に書式定義が使える 「SetHoliday=」は必須。その際、定義した祝日名を設定する事。
●例25-2
応用例:
(1行目)[RANDOMCHAT]
(2行目)[DateSpan]10/01-10/31,今月の祝日は[HolidayFormat]m月d日(aaa),SetHoliday=体育の日[HF:END](体育の日です)[DS:END]
●例25-3
応用例:
(1行目)[BetweenHolidayAndHoliday=TRUE]
(2行目)[SinceDate]2011/01/01[SD:END]
→ 祝日と祝日に挟まれた日を休日にできる。(日本の祝日のルールに従う。)
→ [SinceDate]以降、(例では2011/01/01以降、)ルールが適用される。
→ [SinceDate]はなくても良い。
何も定義しないと、[BetweenHolidayAndHoliday=FALSE]と同じ意味になる。
●例26-1
辞書:
(1行目)あなたは何歳ですか?
(2行目)[BIRTHDAY]1990/05/09,FLG=OVER,満21歳です[BD:END]
→ 現在の年齢(数え年,満年齢)を返す。
→ FLG=OVERと記述した場合は満年齢を、記述しなかった場合は数え年を返す。
●例26-2
辞書:
(1行目)あなたは何歳ですか?
(2行目)[BIRTHDAY]1990/05/09,FLG=OVER,SetDate=2011/05/09,私は2011年5月9日に満21歳になります。[BD:END]
→ SetDate=Now(省略化)
→ SetDate= を 特定の日に指定できるようにする
●例27
辞書:
(1行目)禁煙つづいてます?
(2行目)禁煙は今日で、[DATE-DIFF]Day,PivotDate=2011/05/09,TargetDate=Now[DD:END]日目になります。つらいですυ
→ Year,Month,Day その年,月,日を(何年,何日)超えたかどうか?
→ Year=2にすると PivotDateを2年×何回超えたかを返す。
→ Year=1 または Year の時は、上記の通り、満年齢を求める場合にも使える [BIRTHDAY] と同じ。
●例28
辞書:
(1行目)[QUESTION]日本で一番高い建物は?[QUESTION:END][ANSWER]東京スカイツリー[ANS:END]
(2行目)[Correct-Answer]正解です![CA:END][Non-Correct-Answer]正解は「東京スカイツリー」です。ちなみに634mです。[NCA:END]
→ ユーザーの質問に対する解答に応じて、正解・不正解を判定し、それぞれに対し、メッセージを返す。
●例29
応用例:
辞書:
(1行目)[&○○]は分かる?
(2行目)う〜ん、[&○○]っなんだろう?教えて下さいm(_ _)m
辞書:
(1行目)[SELECT][&□□]だよ。[|][&□□]という意味です。[SL:END]
(2行目)[RANDOM]なるほど〜[|]そういう意味だったんですね。[|][&□□]だったとは・・・[END]
→ このような自然な会話もできる。[RANDOM]タグや自作タグを使って、バリエーションも持たせられる。
●例30
辞書1:
(1行目)[CountDownTime]5m,2012/01/01 00:00[CD:END]
(2行目)[CountDownTime]5m,カウントダウンします[CD:END][CountDownTime]3m,後3分です[CD:END][CountDownTime]0m,5分が経ちました[CD:END]
→ 辞書1の(1行目)は、2012/01/01 の午前0時まで5分前から、1分(m)毎にカウントする事を意味する。
→ 辞書1の(2行目)は、5分のとき、3分のとき、目標時刻に達したときのメッセージを発言する。
→ 単に、[CountDownTime]あと[&m]分です[CD:END] と書くと、一つひとつ設定する必要はない。
→ また[CountDownTime]0m,○○[CD:END]などカウントダウン完了時の発言が定義されていないで、
0分になったら、RE_ACTOR が「予定の時刻になりました」とデフォルトの発言する。
辞書2:
(1行目)[CountDownTime]3s,2012/01/01 00:00[CD:END]
(2行目)〜〜
→ 同様に 2012/01/01 の午前0時まで3秒前から、1秒(s)毎にカウントダウンする。
辞書3:
(1行目)[CountDownTime]0s,2012/01/01 00:00[CD:END]
(2行目)あけましておめでとうございます。
※ 0sのみを定義する事によって、RE_ACTOR が定時に発言する。
→ 0h や 0m も同様。
→ 他のタグとして[CurrentTime]があるので、後述する。
●例31
辞書1:
(1行目)[DefaultChat]
(2行目)う〜んどうなんでしょう~ヽ('ー`)ノ~
辞書2:
(1行目)[DefaultChat]
(2行目)いや〜、面白い人だな [TRIGGER_NICK]さんは(笑)
チャット:
辞書を上から見ていって、トリガーワードがすべてに該当しない場合に、RE_ACTOR が発言する。
複数設定した場合は、[RANDOMCHAT]と同様にランダムにRE_ACTOR が発言する。
辞書3:
(1行目)[&]
(2行目)いや〜、面白い人だな [TRIGGER_NICK]さんは(笑)
→ 辞書の一番最後の行に、このように書くと、同じような意味になるが、一つしか定義できない。
これを拡張したのが、[DefaultChat]である。
※ [DefaultChat]を使用する際は、辞書3のような記述はしてはいけない。
●例32
応用例:
辞書1:
(1行目)[DefaultChat]
(2行目)う〜んどうなんでしょう~ヽ('ー`)ノ~
辞書1':
(1行目)[DefaultChat]
(2行目)う〜んどうなんでしょう~ヽ('ー`)ノ~
辞書2:
(1行目)[DefaultChat]
(2行目)いや〜、面白い人だな [TRIGGER_NICK]さんは(笑)
このように全く同じ内容を2個書くと、例えば、3分の2の確率で
「う〜んどうなんでしょう~ヽ('ー`)ノ~」と発言する。
→ ランダム処理に偏りがないものというのが前提。
●例33
辞書1:
(1行目)[CurrentTime]
(2行目)[CurrentTime]12:00, ランチの時間です。[CT:END]
チャット:
12:00になったら、、RE_ACTOR が「ランチの時間です。」ですと発言する。
→ 「2011/09/01 12:00」等、日付をつけてもよい。
●例34
辞書1:
(1行目)今日は雨ふるかな?天気予報見ました?
(2行目)うんと確か雨のち晴れでしたよ![LinkID=001]
辞書2:
(1行目)[LinkID=001]
(2行目)そうですか、晴れると気分がいいですね♪[LinkID=002]
辞書3:
(1行目)[LinkID=002]
(2行目)折りたたみのかさでも持っていこうっと(´∀`)
チャット:
会話の順序を[LinkID=□□]で結びつける
→ [LinkID=□□]の□□は、[ や ] 以外の文字、例えば[LinkID=A]でもいい。
→ 前述の通り、辞書は上からスキャンされるので、同じ LinkID だった場合は、上の辞書が優先される。
●その他
[RANDOMCHAT]を複数書く場合も ●例32 の 応用例 と同様に、発言する確率を変えることが出来る。
[RANDOM] と [END] 内の項目に空欄がある場合、リアクションセンテンスが続いたり、続かなかったりと柔軟性を持たせることができる。
●例35
[TRIGGER_NICK]の他に、[TRIGGER_ID]をつくり、Twitterに対応する。
同様に、[MY_NICK]や[MY_ID]には、自分のIDやニックネームが挿入される。
●例36
辞書1:
(1行目)おなか減った[TRIGGER_ID=@who]
(2行目)僕もグーグーなって、牛丼が食べたいです。
チャット:
@who さん が、「おなか減った」と発言した場合、RE_ACTOR が「僕もグーグーなって、牛丼が食べたいです。」と発言する。
→ (辞書1行目)おなか減った。[TRIGGER_ID=@who][TRIGGER_ID=@black][TRIGGER_ID=@white] のように列挙が可能。
この場合、3人の発言に反応する。
●例37
辞書1:
(1行目)[NoReactionTime]
(2行目)19:00-06:59
チャット:
指定された時間内には発言しない。
→ また、以下の書式で、日付を指定することもできる。
[NoReactionTime]yyyy/mm/dd hh:mm:ss-yyyy/mm/dd hh:mm:ss[NRT:END]
→辞書2行目に [DateSpan]や[TimeSpan]を記述することで、より細かな日時の範囲を指定できる(入れ子も可能)。
●例38
辞書1:
(1行目)面白い記事見つけました。bit.ly/hogehoge
(2行目)[DO]Link=ON,Action=RT[DO:END]リツイートさせてもらいました!
チャット:
キーワード があったらリツイート(RT)する。
→ Link=ONを追加すると、URLがある場合にさらに絞る。
●例39
辞書1:
(1行目)はじめまして、私もそれ好きです。相互フォローしましょ!
(2行目)[DO]Action=Follow[DO:END]リフォローさせて貰いました!
チャット:
キーワード があったらフォローする。
→ その他、Twitterでできる動作も実装予定。
●例40
辞書1:
(1行目)こんにちは。
(2行目)おお、お久しぶり元気にしてるかい?[@〇〇=翔太君]!
チャット:
「@〇〇」が「こんにちは。」発言したば場合、RE_ACTOR が「おお、お久しぶり元気にしてるかい?翔太君!」と発言する。
→IDのエイリアス(別名)を該当箇所に挿入する。
●メモ
モードの切り替えで、辞書に合わせて、アプリの負荷を軽減できるようにする。
・メモリー節約モード
・速度優先モード
・機械学習モード
#発言者の特定から処理開始&負荷軽減
忙しい時に電話がかかってきたときに、SMSメールで、オートリプライ (自動返信)。
戻る