To create new wiki account, please join us on #znc at Libera.Chat and ask admins to create a wiki account for you. You can say thanks to spambots for this inconvenience.
Privmsg/XChat: Difference between revisions
< Privmsg
>Genec Add XChat fixup script for privmsg |
m Add category |
||
(One intermediate revision by one other user not shown) | |||
Line 5: | Line 5: | ||
# Copyright 2012 Gene Cumm | # Copyright 2012 Gene Cumm | ||
Xchat::register('privmsg2rcvr','0. | ## Permission is hereby granted, free of charge, to any person | ||
## obtaining a copy of this software and associated documentation | |||
## files (the "Software"), to deal in the Software without | |||
## restriction, including without limitation the rights to use, | |||
## copy, modify, merge, publish, distribute, sublicense, and/or | |||
## sell copies of the Software, and to permit persons to whom | |||
## the Software is furnished to do so, subject to the following | |||
## conditions: | |||
## | |||
## The above copyright notice and this permission notice shall | |||
## be included in all copies or substantial portions of the Software. | |||
## | |||
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES | |||
## OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||
## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | |||
## HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||
## WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||
## FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |||
## OTHER DEALINGS IN THE SOFTWARE. | |||
Xchat::register('privmsg2rcvr','0.06','Move Privmsg messages to the reciever\'s window'); | |||
# Don't eat the message UNLESS we need to move it and minimize how much logic | # Don't eat the message UNLESS we need to move it and minimize how much logic | ||
# is processed before aborting. | # is processed before aborting. | ||
Line 13: | Line 34: | ||
# DO try to pop open the desired context window when not found | # DO try to pop open the desired context window when not found | ||
use constant PrivMsgToReceiverWinPOP => 1; | use constant PrivMsgToReceiverWinPOP => 1; | ||
sub PrefixToNick { | |||
if (($_[0] =~ s/:([^!@]+)([!@].*)?/$1/) >= 1) { | |||
return $_[0]; | |||
} else { # non-prefix arg | |||
return ""; | |||
} | |||
} | |||
sub PrivMsgToReceiverWin { | sub PrivMsgToReceiverWin { | ||
my @msg = @{$_[0]}; | my @msg = @{$_[0]}; | ||
my @msge = @{$_[1]}; | my @msge = @{$_[1]}; | ||
my $ | my $p1; | ||
if ( (substr($ | if ( (substr($msg[0], 0, 1)) ne ":") { | ||
$p1 = $msg[1]; | |||
} else { | |||
$p1 = $msg[2]; | |||
} | |||
if ( (substr($p1, 0, 1)) ne "#") { | |||
my $nick = Xchat::get_info("nick"); | my $nick = Xchat::get_info("nick"); | ||
if ($ | my $snick = PrefixToNick($msg[0]); | ||
if ($snick eq $nick) { | |||
my $srv = Xchat::get_info("server"); | my $srv = Xchat::get_info("server"); | ||
if (!(Xchat::find_context($ | my $cxt = Xchat::get_context(); | ||
if (!(Xchat::find_context($p1, $srv)) && (PrivMsgToReceiverWinPOP)) { | |||
# Attempt to open the message window first | # Attempt to open the message window first | ||
Xchat::command("QUERY ".$ | Xchat::command("QUERY ".$p1); | ||
} | } | ||
if (Xchat::set_context($ | if (Xchat::set_context($p1, $srv)) { | ||
Xchat::emit_print("Channel Message", $nick, substr($msge[3], 1)); | Xchat::emit_print("Channel Message", $nick, substr($msge[3], 1)); | ||
Xchat::set_context($cxt); | |||
return Xchat::EAT_ALL; | return Xchat::EAT_ALL; | ||
} | } | ||
Line 35: | Line 72: | ||
} | } | ||
</pre> | </pre> | ||
[[Category:Modules/Code]] |
Latest revision as of 20:08, 23 July 2013
This Perl script will take care of moving PRIVMSGs from the module provmsg to the proper window
#!/usr/bin/perl # Copyright 2012 Gene Cumm ## Permission is hereby granted, free of charge, to any person ## obtaining a copy of this software and associated documentation ## files (the "Software"), to deal in the Software without ## restriction, including without limitation the rights to use, ## copy, modify, merge, publish, distribute, sublicense, and/or ## sell copies of the Software, and to permit persons to whom ## the Software is furnished to do so, subject to the following ## conditions: ## ## The above copyright notice and this permission notice shall ## be included in all copies or substantial portions of the Software. ## ## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ## OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ## HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ## WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ## FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ## OTHER DEALINGS IN THE SOFTWARE. Xchat::register('privmsg2rcvr','0.06','Move Privmsg messages to the reciever\'s window'); # Don't eat the message UNLESS we need to move it and minimize how much logic # is processed before aborting. Xchat::hook_server('PRIVMSG',\&PrivMsgToReceiverWin); # DO try to pop open the desired context window when not found use constant PrivMsgToReceiverWinPOP => 1; sub PrefixToNick { if (($_[0] =~ s/:([^!@]+)([!@].*)?/$1/) >= 1) { return $_[0]; } else { # non-prefix arg return ""; } } sub PrivMsgToReceiverWin { my @msg = @{$_[0]}; my @msge = @{$_[1]}; my $p1; if ( (substr($msg[0], 0, 1)) ne ":") { $p1 = $msg[1]; } else { $p1 = $msg[2]; } if ( (substr($p1, 0, 1)) ne "#") { my $nick = Xchat::get_info("nick"); my $snick = PrefixToNick($msg[0]); if ($snick eq $nick) { my $srv = Xchat::get_info("server"); my $cxt = Xchat::get_context(); if (!(Xchat::find_context($p1, $srv)) && (PrivMsgToReceiverWinPOP)) { # Attempt to open the message window first Xchat::command("QUERY ".$p1); } if (Xchat::set_context($p1, $srv)) { Xchat::emit_print("Channel Message", $nick, substr($msge[3], 1)); Xchat::set_context($cxt); return Xchat::EAT_ALL; } } } return Xchat::EAT_NONE; }