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

From ZNC
Revision as of 20:08, 23 July 2013 by KindOne (talk | contribs) (Add category)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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;
}