2006-06-06
[Ruby]Nadokaさんでinviteしたい
Nadokaさんのbotで任意のユーザーを任意のチャンネルに招待する処理を書きたくなった。IRCコマンドに次のように使うinviteコマンドがある。
/invite <nickname> <channel name>
Nadokaさんでinviteメソッドかなにか用意されていないかなと思ってソースをgrepすると何も引っかからない。
bot.rbを見てみるとこんな感じでIRCコマンドを実行しているようだ。
send_msg Cmd.nick(nick)
しかしそれっぽいキーワードでgrepしてもメソッド定義が見つからない。Cのほうからやってきた身としては、メソッドはソースのどこかにちゃんと記述されているものだと思いこみがち。昔の自分ならこのへんでくじけているところだ。最近はその限りでないことを知っている。というわけでソースをもう少し見てみる。Cmdをgrepするとこんなものを発見。
Cmd = ::RICE::Command
ふむ。RICEのほうを見てみる。おぉ。
Commands = {} %w(PASS NICK USER OPER MODE SERVICE QUIT SQUIT JOIN PART TOPIC NAMES LIST INVITE KICK PRIVMSG NOTICE MOTD LUSERS VERSION STATS LINKS TIME CONNECT TRACE ADMIN INFO SERVLIST SQUERY WHO WHOIS WHOWAS KILL PING PONG ERROR AWAY REHASH DIE RESTART SUMMON USERS WALLOPS USERHOST ISON ).each do |cmd| self.regist_command cmd end
なるほど。regist_commandの中でevalしているのだ。これじゃあinviteメソッド定義を探しても見つからないわけだ。カラクリはわかったのでbotに以下のメソッドを追加して無事目標達成。
def invite nick, ch send_msg Cmd.invite(nick, ch) end
きっとこれが「ルーク、ソースを使え」ってやつだね。