<< Topに戻る
< チョコアスクリプトだ! いろんな対応を考えよう >


言葉に反応させてみよう
 


■おはよう

update 1999/12/25
「おはよう!」と言われたら「おはようございます!」と、 言い返すものを作ってみましょう。まずサンプルを見てください。
(ここからの説明のサンプルは、変更前後を抽出して、且、 追加変更部分以外は薄くなっています。適宜判断してください。)

/Function
{
	;おはよう ==================================================
	/ohayo
	{
		/privmsg $chan "おはようございます!"
	}
}
/Event
{
	on * : TEXT : おはよう! : * : /ohayo
}

では、ひとつずつ説明してきましょう。

まず、Event部です。
ここで、どういった言葉(イベント)に反応させるかを 記述することは、もう説明しましたね。
on * : TEXT : おはよう! : * : /ohayo
これは、TEXTが、「おはよう!」なら、「 /ohayo 」を実行しろ! と言うことを表しています。ここでは詳しい説明は省いて次にいきましょう。

ではFunction部です。実態をここに記述していきます。
;おはよう ====================・・・
「 ; (セミコロン)」のある行はコメント(見だし)です。スクリプトの実行には関与しませんが、 分かりやすく見やすいスクリプトを書くために、適宜コメントをいれる癖をつける事が 望ましいです。「 ; 」を行頭につけるとその一行はコメントになります。
/ohayo
{
}
「 /ohayo 」は、これが「 ohayo 」関数であることを表しています。関数名は、 「 / 」の後に書くことにより、関数とみなされます。関数の実態は、 「 { 」と「 } 」に挟まれた中に記述します。
/privmsg $chan "おはようございます!"
これが今回の要です。Event部で、「おはよう!」と言う言葉により、 「 ohayo 」関数が呼び出され、これが実行されることになります。

「 /privmsg 」とはメッセージを送るコマンドです。コマンドとは、 IRC自体が実装しているものです。自分で作った関数と、IRCが実装しているコマンドの 両方に 「 / 」がつくので、こんがらがる部分ですが、 今は、そういうものだと覚えておいてください。
privmsg <ChannelName> <Message>
privmsgの書式はこうなります。半角スペースで区切り、メッセージを送りたい チャンネル名、メッセージをそれぞれ記述します。今回はチャンネル名の所に、 「 $chan 」と書きましたね?「 $chan 」の実態は、このイベントを発生させた 文章が、発言されたチャンネル名が入っています。つまり、#sinkahoチャンネルで、 「おはよう!」と発言されて「 ohayo 」関数が実行されたなら、 「 $chan 」の実態は「 #sinkaho 」と言う文字列です。

メッセージは「 " 」でくくるのが望ましいでしょう。
以上で、「おはよう!」と発言されたなら「おはようございます!」と、 そのチャンネルに発言するものが出来あがりました。

では、どのようにして、スクリプトを実行させるのでしょうか?
 


■スクリプトの実行

update 1999/12/25
では、説明したものを実行させて見ましょう。 まず、編集作成した上記のスクリプトを、エディターで(上書き)保存します。 次に、チョコアを起動し、[ メニュー >設定 > スクリプト設定 ] と選択し、 サービスリストの編集ダイアログにサービス名が表示されていたなら、 チェックがついていることを確認し、OKボタンを押します。 サービス名が表示されていなければ、追加ボタンを押し、 スクリプトを追加させて、OKボタンを押します。

つまり、ここにスクリプトが表示されていて、スクリプトを更新したなら、 スクリプト設定で、サービス名のダイアログを出しOKボタンを押すことにより、 更新されたファイルが再び読みこまれることになるのです。

では、もうひとつチョコアを起動してください。テストをする場合は、 チョコアを2つ以上多重起動しなければなりません。スクリプトを実装したものと、 発言をするためのものです。

発言するために起動したチョコアの方で「おはよう!」と一字一句違わず 発言してみてください。その時、スクリプトを実装したものが、 「おはようございます!」と言い帰してきたら、ここまでは成功です。 もし、変な発言をしたり、言い返してこなかったら、 スクリプトを確認し、且つ、今作成したスクリプトが、 チョコアのサービスダイアログに登録されているかも確認してみてください。

実行が確認できたなら次へ進みましょう。 しかし、「おはよう!良い天気だね。」や、「やぁ!おはよう!」 と言った言葉には、反応しないはずです。さて、何故でしょう?
 


■おはよう!の応用

update 1999/12/25
ここまでで説明したスクリプトでは、「おはよう!」といった言葉には反応しますが、 「おはよう!」という言葉の前後に余分な言葉が含まれていると、 反応しないことが確認できたと思います。では、それに対応してみましょう。

Event部に少し変更を加えます。
;変更前
on * : TEXT : おはよう! : * : /ohayo
;変更後
on * : TEXT : *おはよう!* : * : /ohayo
「おはよう!」の前後に「 * 」(一般的に、ワイルドカードと呼ばれます)を付けました。 これで、文章内に「おはよう!」が含まれていれば、 どんな文章でも返事をするようになります。 (アスタリスクは半角を使用してください。)

では、もう少し詳しく説明してみましょう。「 *おはよう! 」と記述した場合、 「おはよう!」と言う言葉の前に、どんな言葉が有ってもよいと言う意味になります。 しかし、「おはよう!」は、文章の最後でなければいけません。 反対に、「おはよう!* 」と記述すれば、「おはよう!」のあとに文章が続いていても 反応するようになりますが、「おはよう!」と言う言葉はは先頭でなければなりません。 つまり、「 *おはよう!* 」と記述すれば、文章のどこに存在しようと 反応するようになるのです。

ワイルドカード( * )は、うまく利用するととても役に立ちます。 ここまでは理解できたでしょうか?では、他の言葉にも対応できるように スクリプトを変更してみましょう。
 


■おはよう!の応用2

update 1999/12/25
では、Event部を、次の様に変更、追加してください。

/Event
{
	on * : TEXT : *おはよう* : * : /ohayo
	on * : TEXT : *おはよっ* : * : /ohayo
	on * : TEXT : *おはおは* : * : /ohayo
}

この様に記述すると、「おはよう」、「おはよっ」、「おはおは」の3つの言葉に対して 「 ohayo 」関数が呼び出されるようになります。

さて、ここまでは理解できましたか? では、今度は誰に返事をしたのか分かるようにしましょう。
 


■誰への返事?

update 1999/12/25
さて、スクリプトが発言したのは、誰に対してだったのでしょうか? では、privmsgコマンドの、メッセージの内容を変更して、 誰に発言したかを明示させて見ましょう。
例 1
/privmsg $chan "おはようございます! $+ $nick $+ さん。"
例 2
/privmsg $chan "$nick $+ さん。おはよう!"
では、少し説明しましょう。スクリプトが呼び出された時、 呼び出したチャンネルの名前は、「 $chan 」に入っていることは説明しました。 同様に、スクリプトを呼び出した人のニックは「 $nick 」に入っているのです。 つまり、s|nkahoが、「おはよう」と言えば、「おはようございます!s|nkahoさん。」 と発言する様になるのです。

さて、「 $+ 」とはなんでしょう?privmsgコマンドなどのメッセージ記述部分では、 変数や定数を扱う場合(変数については後に説明します。定数とは、$chan、$nick などです)、その前後には半角スペースを記述するという決まりがあります。 つまり、最低でも、
/privmsg $chan "おはようございます! $nick さん。"
この様に記述しなければいけません。しかしこのままでは、 「おはようございます! s|nkaho さん。」と表示されてしまい、半角スペースが メッセージの中に残ってしまうのです。その半角スペースをなくしてしまうものが 「 $+ 」なのです。メッセージの中の「 $+ 」の前後にも 半角スペースを空けてください。「 $+ 」は、それが記述された前後の 半角スペースを消去する働きがあります。
/privmsg $chan "おはようございます!$nickさん。"
ためしに、この様に記述してみてください。「 $nickさん」とそのまま表示されて しまうことが確認できるはずです。

ここまで説明して完成したスクリプトを、完成版として載せておきました。 確認してみてください。

/Service note001 (←ここにサービス名が入る)
{
/Function
{
;おはよう ==================================================
	/ohayo
	{
		/privmsg $chan "おはようございます! $+ $nick $+ さん。"
	}
}
/Event
{
	on * : TEXT : *おはよう* : * : /ohayo
	on * : TEXT : *おはよっ* : * : /ohayo
	on * : TEXT : *おはおは* : * : /ohayo
}
/Access
{
}
/PopupMain
{
}
/PopupUser
{
}
/PopupChannel
{
}
}
/Var
{
}

もうそろそろ疲れてきた頃でしょうが、頑張りましょう。 「おはようございます」って返事するだけじゃつまらないですよね? 次章では、いろんな言葉に対して、いろんな返事をするようにしてみましょう。

<< Topに戻る
< チョコアスクリプトだ! いろんな対応を考えよう >