############################################################################## # # mh_invite.pl v1.02 (20160305) # # Copyright (c) 2016 Michael Hansen # # Permission to use, copy, modify, and distribute this software # for any purpose with or without fee is hereby granted, provided # that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL # THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # ############################################################################## # # print invites in server, channel, query and active window # # invites are printet in the following format: # # [] invites you to / # # settings: # # mh_invite_show_network (default ON): enable/disable showing the # / part of the printet line # # mh_invite_show_host (default ON): enable/disable showing the # [] part of the printet line # # mh_invite_server (default ON): enable/disable printing the line # in the relevant server window # # mh_invite_channel (default ON): enable/disable printing the line # in all shared channels of the inviter if they exist # # mh_invite_query (default ON): enable/disable printing the line # in queries with the inviter if they exist # # mh_invite_active (default ON): enable/disable printing the line # in the active window (however, we will always print in the active # window if we didnt print to a server, query or channel, even if this # is disabled) # # mh_invite_no_act_server (default OFF): enable/disable not setting # window activity when printing in a server window # # mh_invite_no_act_channel (default OFF): enable/disable not # setting window activity when printing in a channel window # # mh_invite_no_act_query (default OFF): enable/disable not setting # window activity when printing in a query window # # history: # # v1.02 (20160305) # added scripts.irssi.org to url # v1.01 (20160213) # edited comment whitespace # v1.00 (20160104) # initial release # use v5.14.2; use strict; ############################################################################## # # irssi head # ############################################################################## use Irssi 20100403; { package Irssi::Nick } our $VERSION = '1.02'; our %IRSSI = ( 'name' => 'mh_invite', 'description' => 'print invites in server, channel, query and active window', 'license' => 'BSD', 'authors' => 'Michael Hansen', 'contact' => 'mh on IRCnet #help', 'url' => 'http://scripts.irssi.org / https://github.com/mh-source/irssi-scripts', 'changed' => 'Sat Mar 5 15:23:47 CET 2016', ); ############################################################################## # # irssi signal handlers # ############################################################################## sub signal_message_invite_last { my ($server, $channelname, $nickname, $userhost) = @_; my $msglevel = Irssi::MSGLEVEL_CRAP; my $printactive = 1; my $printed = 0; my $format = 'mh_invite_line_'; if (Irssi::settings_get_bool('mh_invite_show_host')) { $format = $format . 'h'; } if (Irssi::settings_get_bool('mh_invite_show_network')) { $format = $format . 'n'; } if (Irssi::settings_get_bool('mh_invite_server')) { if (Irssi::settings_get_bool('mh_invite_no_act_server')) { $server->printformat('(status)', $msglevel | Irssi::MSGLEVEL_NO_ACT, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } else { $server->printformat('(status)', $msglevel, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } $printed = 1; if (Irssi::active_win()->{'name'} eq '(status)') { $printactive = 0; } } if (Irssi::settings_get_bool('mh_invite_channel')) { for my $channel ($server->channels()) { if ($channel->nick_find($nickname)) { if (Irssi::settings_get_bool('mh_invite_no_act_channel')) { $channel->printformat($msglevel | Irssi::MSGLEVEL_NO_ACT, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } else { $channel->printformat($msglevel, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } $printed = 1; if (ref(Irssi::active_win()->{'active'}) eq 'Irssi::Irc::Channel') { if (Irssi::active_win()->{'active'}->{'name'} eq $channel->{'name'}) { $printactive = 0; } } } } } if (Irssi::settings_get_bool('mh_invite_query')) { for my $query ($server->queries()) { if ($query->{'name'} eq $nickname) { if (Irssi::settings_get_bool('mh_invite_no_act_query')) { $query->printformat($msglevel | Irssi::MSGLEVEL_NO_ACT, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } else { $query->printformat($msglevel, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } $printed = 1; if (ref(Irssi::active_win()->{'active'}) eq 'Irssi::Irc::Query') { if (Irssi::active_win()->{'active'}->{'name'} eq $query->{'name'}) { $printactive = 0; } } } } } if (($printactive and Irssi::settings_get_bool('mh_invite_active')) or (not $printed)) { Irssi::active_win->printformat($msglevel, $format, $nickname, $userhost, $channelname, $server->{'tag'}); } Irssi::signal_stop(); } ############################################################################## # # script on load # ############################################################################## Irssi::theme_register([ 'mh_invite_line_', '{nick $0} invites you to {channel $2}', 'mh_invite_line_h', '{nick $0} {nickhost $1} invites you to {channel $2}', 'mh_invite_line_n', '{nick $0} invites you to {server $3}/{channel $2}', 'mh_invite_line_hn', '{nick $0} {nickhost $1} invites you to {server $3}/{channel $2}', ]); Irssi::settings_add_bool('mh_invite', 'mh_invite_show_network', 1); Irssi::settings_add_bool('mh_invite', 'mh_invite_show_host', 1); Irssi::settings_add_bool('mh_invite', 'mh_invite_server', 1); Irssi::settings_add_bool('mh_invite', 'mh_invite_channel', 1); Irssi::settings_add_bool('mh_invite', 'mh_invite_query', 1); Irssi::settings_add_bool('mh_invite', 'mh_invite_active', 1); Irssi::settings_add_bool('mh_invite', 'mh_invite_no_act_server', 0); Irssi::settings_add_bool('mh_invite', 'mh_invite_no_act_channel', 0); Irssi::settings_add_bool('mh_invite', 'mh_invite_no_act_query', 0); Irssi::signal_add_last('message invite', 'signal_message_invite_last'); 1; ############################################################################## # # eof mh_invite.pl # ##############################################################################