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

From ZNC
Jump to navigation Jump to search
>Genec
Add XChat fixup script for privmsg
 
KindOne (talk | contribs)
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.04','Move Privmsg messages to the reciever\'s window');
##  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 $chan = $msg[2];
my $p1;
if ( (substr($chan, 0, 1)) ne "#") {
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 ($chan ne $nick) {
  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($chan, $srv))) {
    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 ".$chan);
Xchat::command("QUERY ".$p1);
    }
    }
    if (Xchat::set_context($chan, $srv)) {
    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;
}