prefixオブジェクトのaddressについてlm - No.1452 [返信]
こんにちは。
サンプルスクリプト見よう見まねで発言者のIPを表示するものを作ろうとしたのですが、
send(channel, prefix.address);
これで表示させてもホスト名しか表示されず、肝心のIP部分が表示されません。
リファレンスにはホスト名、IPアドレスを返します。と書いてあるのですが……どのようにすれば良いのでしょうか。
Psychs - No.1453
ホスト名か(逆引きされていなければ)IPアドレスを返すということです。
いまのところ、スクリプトから DNS を引いてホスト名をIPアドレスに
解決する方法は提供していません。
逆に、どうしてもホスト名ではなくIPアドレスが必要なケースって
何かあるのでしょうか?
lm - No.1454
返答ありがとうございます。
仕様だったのですね、理解しました。

>逆に、どうしてもホスト名ではなくIPアドレスが必要なケースって
何かあるのでしょうか?
ネット対戦ゲーム等のチャンネルでキーワードに反応してIPアドレスを表示させることが出来れば接続の補助になりえると思ったのです。
Psychs - No.1455
それは、実はホスト名でも問題ないけど、慣例的にIPアドレスを使っているということですよね。
lm - No.1458
いえ、IPアドレスでないと接続に使えません。
サーバーを持たないネット対戦ゲームのほとんどはIPアドレスを利用すると思うのですが……
aheena - No.1460
lmさんの問題を含めて、自分も困っています。

一応IPアドレスに関しては
executeCommand("nslookup " + prefix.address);
のように逃げてはいますが。。。


whoisの結果として得られる情報で
- IPアドレス
- チャンネル
- サーバ
- アイドル時間
- ログイン時刻
に関しては現在、スクリプトから扱う方法が無いようなので、
IRC-BOTなんかを書こうとして不便しています。
Psychs - No.1462
まず前提ですが、それらの情報は LimeChat は常時保持して
いるわけではありません。
Whois ダイアログを出す度に Whois コマンドを発行して、
そのリプライから表示しているわけです。

それらの情報のうち、IP アドレス以外については、
311、312、317 リプライにすべて含まれているので、
onNumericReply イベントでそれらのリプライを拾えば
いいでしょう。
B - No.1499
まだ需要あるかわかりませんが、一応ネットゲーム関係の対戦募集に使えそうなスクリプトを…

function event::onChannelText(prefix, channel, text)
{
var aaa;
aaa = executeCommand("nslookup " + prefix.address); //nslookupでホストからIPを逆引き
var bbb;
bbb = aaa.replace(/192\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/,""); //経由されたローカルIPも返ってくるのでそれを取り除く
var ccc;
ccc = bbb.match(/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/); //残った文字列からIPアドレスに当たるものを正規表現で抽出。
var ddd;
ddd = ccc.toString(); //文字列に変換
var eee;
eee = ddd.replace(/\,([0-9]{1,3})\,([0-9]{1,3})\,([0-9]{1,3})\,([0-9]{1,3})/,""); //なぜかカンマ区切りのIPアドレスも返されるのでそれを取り除く
if (text.match(/対戦募集/)){
var zzz = text.replace("対戦募集","");
send(channel, prefix.nick + 'さんが、' + eee + ':' + zzz + 'で対戦募集中'); //表示部分
}
}


粗だらけですが、参考になれば幸いです。