A feature-rich, modular AOL Instant Messenger client written chiefly by Bill Atkins and Dan Chokola in their high school days.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

227 lines
18 KiB

Milkbone.pm:25:our @EXPORT = qw( hook is_running abort queued_hook register_hook option path data %ARGS slurp
Milkbone.pm:26: deregister_hook strip_html user_file set_option MOSLoop set_interval);
Milkbone.pm:31:our (%hooks, %options, %data);
Milkbone.pm:56: register_hook("load_options", \&load_options);
Milkbone.pm:57: register_hook("load_plugins", \&load_plugins);
Milkbone.pm:58: register_hook("post_mainloop", \&post_mainloop);
Milkbone.pm:59: register_hook("pre_mainloop", \&pre_mainloop);
Milkbone.pm:60: register_hook("save_options", \&save_options);
Milkbone.pm:61: register_hook("error", \&error);
Milkbone.pm:187:sub hook
Milkbone.pm:189: my ($hook, %args) = @_;
Milkbone.pm:193: warn "Unregistered hook called: $hook" . ' ' . join(' ', caller) . "\n" if !exists($hooks{$hook});
Milkbone.pm:197: for $hook (@{$hooks{$hook}})
Milkbone.pm:201: $ARGS{$_} = $hook->{args}->{$_} for %{$hook->{args}};
Milkbone.pm:202: $res = $hook->call;
Milkbone.pm:210:sub register_hook
Milkbone.pm:212: my ($hook, $coderef, $args) = @_;
Milkbone.pm:214: my $entry = new Milkbone::HookEntry($hook, $coderef, $args, $package);
Milkbone.pm:216: push @{$hooks{$hook}}, $entry;
Milkbone.pm:219:sub deregister_hook
Milkbone.pm:221: my ($hook) = @_;
Milkbone.pm:223: my @temp = @{$hooks{$hook}};
Milkbone.pm:225: die "Required hook missing" if !exists($hooks{$hook}) and $hook eq "tick";
Milkbone.pm:226: warn "Unregistered hook deleted: $hook" if !exists($hooks{$hook});
Milkbone.pm:228: @temp = grep { ($_->{package} ne $package) && ($_->{hook_name} ne $hook) } @temp;
Milkbone.pm:230: @{$hooks{$hook}} = @temp;
Milkbone.pm:238: hook("tick");
Milkbone.pm:249: hook("save_options");
Milkbone.pm:336: hook("error", -short => join(' ', @_), -long => longmess(join(' ', @_)), -fatal => 1);
Milkbone.pm:342: hook("error", -short => join(' ', @_), -long => longmess(join(' ', @_)));
mos.pl:35: hook("load_options");
mos.pl:36: hook("load_plugins");
mos.pl:42: hook("load_options");
mos.pl:43: hook("load_plugins");
mos.pl:44: hook("pre_mainloop");
mos.pl:46: hook("create_logon_prompt");
mos.pl:51: hook("post_mainloop");
plugins/Milkbot.pl:21:register_hook("signed_in", \&init);
plugins/Milkbot.pl:24: hook("protocol_get_realname", -user => $me = $ARGS{-me});
plugins/Milkbot.pl:26: register_hook("milkbot_set_command", sub {
plugins/Milkbot.pl:29: hook("milkbot_get_commands");
plugins/Milkbot.pl:30: register_hook("msg_in", \&on_im);
plugins/Milkbot.pl:41: hook("milkbot_command", -cmd => $cmd);
plugins/Milkbot.pl:42: hook("milkbot_command_$cmd", -user => $from, -msg => $msg);
plugins/Milkbot.pl:51: hook("protocol_send_im", -dest => $to, -msg => $msg, -away => $away);
plugins/Forum-Check/Forum-Check.pl:12:register_hook("pre_mainloop", sub {
plugins/Forum-Check/Forum-Check.pl:17: my $mw = hook("tk_getmain");
plugins/Forum-Check/Forum-Check.pl:24: hook("error", -short => "New posts in the BATKINS forum.");
plugins/Forum-Check/Speak.pl:20:register_hook("msg_in", sub { say("You have a message from $ARGS{-user}"); });
plugins/Win32X.pl:13:register_hook("flash_window", sub {
plugins/XAMP.pl:17:register_hook "signed_in", sub {
plugins/XAMP.pl:19: hook("protocol_commit_info");
plugins/XAMP.pl:21: hook("tk_getmain")->repeat(5000, sub {
plugins/XAMP.pl:24: hook("protocol_commit_info") if $commit;
plugins/XAMP.pl:28: register_hook("request_mod", sub {
plugins/XAMP.pl:44: hook("protocol_mod_prof", -name => "%a", -value => $artist);
plugins/XAMP.pl:45: hook("protocol_mod_away", -name => "%a", -value => $artist);
plugins/XAMP.pl:56: hook("protocol_mod_prof", -name => "%s", -value => $song);
plugins/XAMP.pl:57: hook("protocol_mod_away", -name => "%s", -value => $song);
plugins/Net-OSCAR/Net/OSCAR.pm:2154:Added hooks to allow client do MD5 digestion for authentication (auth_challenge
plugins/Net-OSCAR/Net/OSCAR.pm:2612:Rocco Caputo for helping to work out the hooks that let use be used with
plugins/Net-OSCAR/Net-OSCAR.pl:28:register_hook("protocol_add_buddy", sub { $oscar->add_buddy($ARGS{-group}, $ARGS{-buddy}); } );
plugins/Net-OSCAR/Net-OSCAR.pl:29:register_hook("protocol_away_status", sub { $is_away; } );
plugins/Net-OSCAR/Net-OSCAR.pl:30:register_hook("protocol_commit_blist", sub { $oscar->commit_buddylist; } );
plugins/Net-OSCAR/Net-OSCAR.pl:31:register_hook("protocol_commit_info", sub { $oscar->set_away($away) if $is_away; $oscar->set_info($prof); } );
plugins/Net-OSCAR/Net-OSCAR.pl:32:register_hook("protocol_get_away", sub { $oscar->{away}; } );
plugins/Net-OSCAR/Net-OSCAR.pl:33:register_hook("protocol_get_groups", sub { [ $oscar->groups ]; } );
plugins/Net-OSCAR/Net-OSCAR.pl:34:register_hook("protocol_get_prof", sub { $oscar->{profile} } );
plugins/Net-OSCAR/Net-OSCAR.pl:35:register_hook("protocol_get_realname", sub { $oscar->buddy($ARGS{-user})->{screenname} or $ARGS{-user}; } );
plugins/Net-OSCAR/Net-OSCAR.pl:36:register_hook("protocol_go_away", sub { $is_away = 1; hook("protocol_commit_info"); } );
plugins/Net-OSCAR/Net-OSCAR.pl:37:register_hook("protocol_idle_since", sub { $oscar->buddy($ARGS{-who})->{idle}; } );
plugins/Net-OSCAR/Net-OSCAR.pl:38:register_hook("protocol_is_away", sub { return $oscar->buddy($ARGS{-user})->{away}; } );
plugins/Net-OSCAR/Net-OSCAR.pl:39:register_hook("protocol_is_on", sub { $oscar->buddy($ARGS{-who})->{online} } );
plugins/Net-OSCAR/Net-OSCAR.pl:40:register_hook("protocol_mod_away", \&mod_away );
plugins/Net-OSCAR/Net-OSCAR.pl:41:register_hook("protocol_mod_prof", \&mod_prof );
plugins/Net-OSCAR/Net-OSCAR.pl:42:register_hook("protocol_on_since", sub { $oscar->buddy($ARGS{-who})->{onsince}; } );
plugins/Net-OSCAR/Net-OSCAR.pl:43:register_hook("protocol_remove_buddy", sub { $oscar->remove_buddy($ARGS{-group}, $oscar->buddy($ARGS{-buddy})->{screenname}); } );
plugins/Net-OSCAR/Net-OSCAR.pl:44:register_hook("protocol_request_info", sub { request_info($ARGS{-user}); });
plugins/Net-OSCAR/Net-OSCAR.pl:45:register_hook("protocol_return", sub { $oscar->set_away(''); %away_sent = (); $is_away = 0; } );
plugins/Net-OSCAR/Net-OSCAR.pl:46:register_hook("protocol_send_im", \&send_im );
plugins/Net-OSCAR/Net-OSCAR.pl:47:register_hook("protocol_set_away", \&set_away );
plugins/Net-OSCAR/Net-OSCAR.pl:48:register_hook("protocol_set_prof", \&set_prof );
plugins/Net-OSCAR/Net-OSCAR.pl:49:register_hook("protocol_signon", \&signon);
plugins/Net-OSCAR/Net-OSCAR.pl:50:register_hook("protocol_signed_in", sub { $signed_in; } );
plugins/Net-OSCAR/Net-OSCAR.pl:51:register_hook("protocol_signoff", sub { $oscar->signoff; } );
plugins/Net-OSCAR/Net-OSCAR.pl:64: hook("error", -short => $desc, -long => longmess($desc), -fatal => $fatal);
plugins/Net-OSCAR/Net-OSCAR.pl:69: hook("buddy_in", -buddy => $_[1], -group => $_[2]);
plugins/Net-OSCAR/Net-OSCAR.pl:74: hook("buddy_out", -buddy => $_[1], -group => $_[2]);
plugins/Net-OSCAR/Net-OSCAR.pl:79: hook("msg_in", -user => $_[1], -msg => $_[2], -away => $_[3]) if $_[1];
plugins/Net-OSCAR/Net-OSCAR.pl:80: hook("msg_in_$_[1]", -user => $_[1], -msg => $_[2], -away => $_[3]);
plugins/Net-OSCAR/Net-OSCAR.pl:86: hook("signed_in", -me => $user);
plugins/Net-OSCAR/Net-OSCAR.pl:92: hook("error",
plugins/Net-OSCAR/Net-OSCAR.pl:95: hook("rate_alert") if $_[1] == RATE_LIMIT;
plugins/Net-OSCAR/Net-OSCAR.pl:104: hook("protocol_info_received_$_[1]", -profile => $prof, -away => $_[2]->{awaymsg});
plugins/Net-OSCAR/Net-OSCAR.pl:115: hook("tk_getmain")->after(30, \&tick);
plugins/Net-OSCAR/Net-OSCAR.pl:130: hook("tk_getmain")->after(30, \&tick);
plugins/Net-OSCAR/Net-OSCAR.pl:141: hook("after", -time => 50, -code => [\&request_info, $other_user]);
plugins/Net-OSCAR/Net-OSCAR.pl:168: register_hook("request_mod", sub{} ); # for when those hooks just arent yet registered, use register_hook(tm)
plugins/Net-OSCAR/Net-OSCAR.pl:169: hook("request_mod");
plugins/Net-OSCAR/Net-OSCAR.pl:178: register_hook("request_mod", sub{} ); # ditto, can't wait till hook priorities!
plugins/Net-OSCAR/Net-OSCAR.pl:179: hook("request_mod");
plugins/Sound/Sound.pl:7:register_hook("signed_in", sub { play_sound("signed_in"); });
plugins/Sound/Sound.pl:8:register_hook("protocol_go_away", sub { play_sound("go_away"); });
plugins/Sound/Sound.pl:9:register_hook("protocol_return", sub { play_sound("return"); });
plugins/Sound/Sound.pl:10:register_hook("msg_in", sub { play_sound("msg_in"); });
plugins/Sound/Sound.pl:11:register_hook("protocol_send_im", sub { play_sound("send_im"); });
plugins/Sound/Sound.pl:12:register_hook("buddy_in", sub { play_sound("buddy_in"); });
plugins/Sound/Sound.pl:13:register_hook("buddy_out", sub { play_sound("buddy_out"); });
plugins/Sound/Sound.pl:14:register_hook("error", sub { play_sound("error"); });
plugins/Sound/Sound.pl:15:register_hook("protocol_signoff", sub { play_sound("signoff"); });
plugins/Sound/Sound.pl:19: return if hook("protocol_away_status") and !option("SoundsWhileAway") and $_[0] ne "go_away";
plugins/Tk-About/Tk-About.pl:6:my $mw = hook("tk_getmain");
plugins/Tk-About/Tk-About.pl:8:register_hook "show_about", sub { $mw->MBAbout->focus; };
plugins/Tk-AddBuddy/Milkbone/AddBuddy.pm:32: hook("protocol_add_buddy", -group => $group, -buddy => $name);
plugins/Tk-AddBuddy/Milkbone/AddBuddy.pm:33: hook("protocol_commit_blist");
plugins/Tk-AddBuddy/Milkbone/AddBuddy.pm:41: my $groups = hook("protocol_get_groups");
plugins/Tk-AddBuddy/Milkbone/AddBuddy.pm:63: hook("tk_seticon", -wnd => $self);
plugins/Tk-AddBuddy/Tk-AddBuddy.pl:9:register_hook("dlg_add_buddy", sub {
plugins/Tk-BList/Tk-BList.pl:12:my $mw = hook("tk_getmain");
plugins/Tk-BList/Tk-BList.pl:14:register_hook("signed_in", sub {
plugins/Tk-BList/Tk-BList.pl:20: register_hook("buddy_in", sub { Milkbone::BList::on_buddy_in } , {-self => $blist});
plugins/Tk-BList/Tk-BList.pl:21: register_hook("buddy_out", \&Milkbone::BList::on_buddy_out, {-self => $blist});
plugins/Tk-BList/Tk-BList.pl:22: register_hook("add_blist_menu_item", \&Milkbone::BList::add_blist_menu_item, {-self => $blist});
plugins/Tk-BList/Tk-BList.pl:24: register_hook("protocol_go_away", sub {
plugins/Tk-BList/Tk-BList.pl:30: register_hook("protocol_return", sub {
plugins/Tk-BList/Tk-BList.pl:37: register_hook("error_fatal", sub {
plugins/Tk-BList/Tk-BList.pl:41: register_hook("msg_in", sub {
plugins/Tk-BList/Tk-BList.pl:50:sub reg_change_hook
plugins/Tk-BList/Tk-BList.pl:54: register_hook("get_profile", sub {
plugins/Tk-BList/Milkbone/BList.pm:51: hook("create_convo", -user => hook("protocol_get_realname", -user => $name), -fabricated => 1);
plugins/Tk-BList/Milkbone/BList.pm:62: my $groups = hook("protocol_get_groups");
plugins/Tk-BList/Milkbone/BList.pm:77: if(hook("protocol_is_away", -user => $realname))
plugins/Tk-BList/Milkbone/BList.pm:89: if(hook("protocol_is_away", -user => $realname))
plugins/Tk-BList/Milkbone/BList.pm:123: hook("protocol_go_away");
plugins/Tk-BList/Milkbone/BList.pm:130: hook("protocol_return");
plugins/Tk-BList/Milkbone/BList.pm:142: hook("protocol_set_info", -info => $info);
plugins/Tk-BList/Milkbone/BList.pm:199: hook("dlg_add_buddy", -parent => shift);
plugins/Tk-BList/Milkbone/BList.pm:209: hook("get_profile", -user => $buddy, -group => $group);
plugins/Tk-BList/Milkbone/BList.pm:221: hook("protocol_remove_buddy", -group => $group, -buddy => $name);
plugins/Tk-BList/Milkbone/BList.pm:222: hook("protocol_commit_blist");
plugins/Tk-BList/Milkbone/BList.pm:223: hook("buddy_out", -buddy => $name, -group => $group);
plugins/Tk-BList/Milkbone/BList.pm:246: $self->{menu_file}->command(-label => "Set Away...", -command => sub { hook("on_set_away");} );
plugins/Tk-BList/Milkbone/BList.pm:247: $self->{menu_file}->command(-label => "Set Profile...", -command => sub { hook("on_set_profile");} );
plugins/Tk-BList/Milkbone/BList.pm:250: $self->{menu_file}->command(-label => "Goodbye and Exit", -command => sub { hook("goodbye") });
plugins/Tk-BList/Milkbone/BList.pm:258: $self->{menu_help}->command(-label => "About...", -command => sub { hook("show_about") });
plugins/Tk-BList/Milkbone/BList.pm:288: hook("tk_seticon", -wnd => $self);
plugins/Tk-BList/Milkbone/BList.pm:316: return unless hook("protocol_away_status");
plugins/Tk-Convo/Milkbone/Convo.pm:53: hook("protocol_send_im", -dest => $self->{buddy}, -msg => $msg, -away => 0);
plugins/Tk-Convo/Milkbone/Convo.pm:69: hook("remove_convo", -user => shift->{buddy});
plugins/Tk-Convo/Milkbone/Convo.pm:74: hook("get_profile", -user => shift->{buddy});
plugins/Tk-Convo/Milkbone/Convo.pm:154: hook("tk_seticon", -wnd => $self);
plugins/Tk-Convo/Tk-Convo.pl:10:my $mw = hook("tk_getmain");
plugins/Tk-Convo/Tk-Convo.pl:13:register_hook("create_convo", sub {
plugins/Tk-Convo/Tk-Convo.pl:24: register_hook("msg_in_$buddy", sub {
plugins/Tk-Convo/Tk-Convo.pl:27: hook("create_convo", -user => hook("protocol_get_realname", -user => $ARGS{-user}));
plugins/Tk-Convo/Tk-Convo.pl:30: hook("flash_window", -wnd => $convo);
plugins/Tk-Convo/Tk-Convo.pl:33: register_hook("buddy_in_$buddy", sub {
plugins/Tk-Convo/Tk-Convo.pl:37: register_hook("buddy_out_$buddy", sub {
plugins/Tk-Convo/Tk-Convo.pl:44: $convo->withdraw if hook("protocol_away_status") != 0;
plugins/Tk-Convo/Tk-Convo.pl:46: hook("flash_window", -wnd => $convo) unless $ARGS{-fabricated};
plugins/Tk-Convo/Tk-Convo.pl:49:register_hook("remove_convo", sub {
plugins/Tk-Convo/Tk-Convo.pl:50: deregister_hook("msg_in_$ARGS{-user}");
plugins/Tk-Convo/Tk-Convo.pl:51: deregister_hook("buddy_in_$ARGS{-user}");
plugins/Tk-Convo/Tk-Convo.pl:52: deregister_hook("buddy_out_$ARGS{-user}");
plugins/Tk-Convo/Tk-Convo.pl:58:register_hook("msg_in", sub {
plugins/Tk-Convo/Tk-Convo.pl:59: hook("create_convo", -user => hook("protocol_get_realname", -user => $ARGS{-user}));
plugins/Tk-Convo/Tk-Convo.pl:62:register_hook("get_convo", sub {
plugins/Tk-Convo/Tk-Convo.pl:66:register_hook("protocol_go_away", sub {
plugins/Tk-Convo/Tk-Convo.pl:70:register_hook("protocol_return", sub {
plugins/Tk-Convo/Tk-Convo.pl:74:register_hook("goodbye", sub {
plugins/Tk-Convo/Tk-Convo.pl:77: hook("protocol_send_im", -dest => $_, -msg => $goodbye, -away => 0) for(keys(%convos));
plugins/Tk-Convo/Tk-Convo.pl:80:register_hook("buddy_in", sub {
plugins/Tk-Convo/Tk-Convo.pl:81: hook("buddy_in_$ARGS{-buddy}", -group => $ARGS{-group}) if $convos{$ARGS{-buddy}};
plugins/Tk-Convo/Tk-Convo.pl:84:register_hook("buddy_out", sub {
plugins/Tk-Convo/Tk-Convo.pl:85: hook("buddy_out_$ARGS{-buddy}", -group => $ARGS{-group}) if $convos{$ARGS{-buddy}};
plugins/Tk-File/Milkbone/File.pm:51: hook("tk_seticon", -wnd => $self);
plugins/Tk-File/Milkbone/File.pm:67: hook("protocol_set_prof", -data => $text);
plugins/Tk-File/Milkbone/File.pm:71: hook("protocol_set_away", -data => $text);
plugins/Tk-File/Tk-File.pl:10:my $mw = hook("tk_getmain");
plugins/Tk-File/Tk-File.pl:12:register_hook "edit_file", sub {
plugins/Tk-File/Tk-File.pl:29:register_hook "on_set_profile", sub {
plugins/Tk-File/Tk-File.pl:30: hook("edit_file", -type => "profile");
plugins/Tk-File/Tk-File.pl:33:register_hook "on_set_away", sub {
plugins/Tk-File/Tk-File.pl:34: hook("edit_file", -type => "away");
plugins/Tk-File/Tk-File.pl:37:register_hook "signed_in", sub {
plugins/Tk-File/Tk-File.pl:57: hook("protocol_set_prof", -data => $prof);
plugins/Tk-File/Tk-File.pl:58: hook("protocol_set_away", -data => $away);
plugins/Tk-GUI/Tk-GUI.pl:38:register_hook("tk_seticon", sub { $ARGS{-wnd}->Icon(-image => $icon); });
plugins/Tk-GUI/Tk-GUI.pl:40:register_hook("tick", \&tick);
plugins/Tk-GUI/Tk-GUI.pl:41:register_hook("tk_getmain", sub {
plugins/Tk-GUI/Tk-GUI.pl:45:register_hook("after", sub {
plugins/Tk-GUI/Tk-GUI.pl:61:register_hook("error", sub {
plugins/Tk-GUI/Tk-GUI.pl:64: hook("tk_seticon", -wnd => $error_box);
plugins/Tk-GUI/Tk-GUI.pl:72: hook("protocol_signoff") if $fatal;
plugins/Tk-GUI/Tk-GUI.pl:73: exit if $fatal and hook("protocol_signed_in");
plugins/Tk-Logon/Milkbone/Logon.pm:14:my $mw = hook("tk_getmain");
plugins/Tk-Logon/Milkbone/Logon.pm:45: hook("protocol_signoff") if $self->{signed_on};
plugins/Tk-Logon/Milkbone/Logon.pm:59: hook("protocol_signon", -user => $self->{sname}, -pass => $self->{pass});
plugins/Tk-Logon/Milkbone/Logon.pm:72: hook("protocol_signoff");
plugins/Tk-Logon/Milkbone/Logon.pm:128: $self->{controls}->Button(-text => 'about', -command => sub { hook("show_about") },
plugins/Tk-Logon/Milkbone/Logon.pm:140: hook("tk_seticon", -wnd => $self);
plugins/Tk-Logon/Tk-Logon.pl:9:my $mw = hook("tk_getmain");
plugins/Tk-Logon/Tk-Logon.pl:12:register_hook("create_logon_prompt", sub {
plugins/Tk-Logon/Tk-Logon.pl:16: register_hook("signed_in", sub {
plugins/Tk-Logon/Tk-Logon.pl:21: register_hook("error", sub {
plugins/Tk-PluginsConf/Milkbone/PluginsConf.pm:72: hook("tk_seticon", -wnd => $self);
plugins/Tk-PluginsConf/Tk-PluginsConf.pl:9:register_hook("dlg_plugins", sub {
plugins/Tk-Profile/Milkbone/Profile.pm:57: hook("remove_profile", -who => $self->{who});
plugins/Tk-Profile/Milkbone/Profile.pm:82: my $on_time = time - hook("protocol_on_since", -who => $who);
plugins/Tk-Profile/Milkbone/Profile.pm:88: if(hook("protocol_idle_since", -who => $who))
plugins/Tk-Profile/Milkbone/Profile.pm:90: my $idle_time = hook("protocol_idle_since", -who => $who);
plugins/Tk-Profile/Milkbone/Profile.pm:110: hook("tk_seticon", -wnd => $self);
plugins/Tk-Profile/Tk-Profile.pl:9:my $mw = hook("tk_getmain");
plugins/Tk-Profile/Tk-Profile.pl:11:register_hook("get_profile", sub {
plugins/Tk-Profile/Tk-Profile.pl:20: hook("protocol_request_info", -user => $who);
plugins/Tk-Profile/Tk-Profile.pl:24: register_hook("protocol_info_received_$who", sub {
plugins/Tk-Profile/Tk-Profile.pl:41:register_hook("remove_profile", sub {
plugins/Tk-Profile/Tk-Profile.pl:42: deregister_hook("protocol_info_received_" . $ARGS{-who});
plugins/Win32-Tray/Win32-Tray.pl:12:register_hook("signed_in", sub {
plugins/Win32-Tray/Win32-Tray.pl:24: hook("tk_getmain")->repeat(500, sub {
plugins/Win32-Tray/Win32-Tray.pl:28: register_hook("post_mainloop", sub {
plugins/Milkbot-Xmms/Milkbot-Xmms.pl:27:register_hook("milkbot_get_commands", \&init);
plugins/Milkbot-Xmms/Milkbot-Xmms.pl:70: hook("milkbot_set_command", -name => $_, -desc => $commands{$_}[1]);
plugins/Milkbot-Xmms/Milkbot-Xmms.pl:72: register_hook("milkbot_command", sub { $cmd = $ARGS{-cmd};
plugins/Milkbot-Xmms/Milkbot-Xmms.pl:73: register_hook("milkbot_command_$cmd", sub {
plugins/Milkbot-Xmms/Milkbot-Xmms.pl:75: deregister_hook("milkbot_command_$cmd") if $cmd;
plugins/Milkbot-Xmms/Milkbot-Xmms.pl:82: hook("protocol_send_im", -dest => $to, -msg => $msg, -away => $away);