Skip to content

Instantly share code, notes, and snippets.

@foldericon
Created November 24, 2013 14:28
Show Gist options
  • Save foldericon/7627887 to your computer and use it in GitHub Desktop.
Save foldericon/7627887 to your computer and use it in GitHub Desktop.
# stripcolors.pm
use strict;
use warnings;
use feature qw/switch/;
use ZNC;
package stripcolors;
use base 'ZNC::Module';
sub description {
"stripcolors module"
}
sub stripcolors {
my $msg = shift;
$msg =~ s/\x16|\x0f|\x1f|\x02|\x03(?:\d{1,2}(?:,\d{1,2})?)?//g;
return $msg;
}
sub OnRaw {
my ($self, $line) = @_;
my @tokens = split(/ /, $line);
given($tokens[1]) {
when("301") {
my $msg = stripcolors(substr(join(" ", @tokens[4 .. $#tokens]), 1));
$self->PutUser(":".join(" ", @tokens[0..3])." :".$msg);
return $ZNC::HALT;
}
when("311") {
my $msg = stripcolors(substr(join(" ", @tokens[7 .. $#tokens]), 1));
$self->PutUser(":".join(" ", @tokens[0..6])." :".$msg);
return $ZNC::HALT;
}
when("PRIVMSG") {
my $nick = ZNC::CNick->new(substr($tokens[0], 1));
my $msg = stripcolors(substr(join(" ", @tokens[3 .. $#tokens]), 1));
if (substr($msg, 0, 1) eq "\001" && substr($msg, length($msg)-1, 1) eq "\001") {
my $action = substr(substr($msg, 0, length($msg)-1), 1);
if ($tokens[2] eq $self->GetNetwork->GetNick()) {
if ($self->GetNetwork->GetIRCSock->OnPrivCTCP($nick, ZNC::String->new($action))) {
return $ZNC::HALT;
}
if ($self->GetNetwork->IsUserOnline) {
$self->PutUser(":".$nick->GetNickMask." PRIVMSG ".$tokens[2]." :".$msg);
}
} else {
my $chan = $self->GetNetwork->FindChan($tokens[2]);
if ($self->GetNetwork->GetIRCSock->OnChanCTCP($nick, $chan->GetName, ZNC::String->new($action))) {
return $ZNC::HALT;
}
if ($self->GetNetwork->IsUserOnline && !$chan->IsDetached) {
$self->PutUser(":".$nick->GetNickMask." PRIVMSG ".$tokens[2]." :".$msg);
}
}
} else {
if ($tokens[2] eq $self->GetNetwork->GetNick()) {
if ($self->GetNetwork->GetIRCSock->OnPrivMsg($nick, ZNC::String->new($msg))) {
return $ZNC::HALT;
}
if ($self->GetNetwork->IsUserOnline) {
$self->PutUser(":".$nick->GetNickMask." PRIVMSG ".$tokens[2]." :".$msg);
}
} else {
my $chan = $self->GetNetwork->FindChan($tokens[2]);
if($self->GetNetwork->GetIRCSock->OnChanMsg($nick, $chan->GetName, ZNC::String->new($msg))) {
return $ZNC::HALT;
}
if ($self->GetNetwork->IsUserOnline && !$chan->IsDetached) {
$self->PutUser(":".$nick->GetNickMask." PRIVMSG ".$tokens[2]." :".$msg);
}
}
}
return $ZNC::HALT;
}
when("NOTICE") {
my $nick = ZNC::CNick->new(substr($tokens[0], 1));
my $msg = stripcolors(substr(join(" ", @tokens[3 .. $#tokens]), 1));
if ($tokens[2] eq $self->GetNetwork->GetNick()) {
if ($self->GetNetwork->GetIRCSock->OnPrivNotice($nick, ZNC::String->new($msg))) {
return $ZNC::HALT;
}
} else {
if ($self->GetNetwork->GetIRCSock->OnChanNotice($nick, $tokens[2], ZNC::String->new($msg))) {
return $ZNC::HALT;
}
}
if ($self->GetNetwork->IsUserOnline) {
$self->PutUser(":".$nick->GetNickMask." NOTICE ".$tokens[2]." :".$msg);
}
return $ZNC::HALT;
}
when("PART") {
my $nick = ZNC::CNick->new(substr($tokens[0], 1));
my $chan = $self->GetNetwork->FindChan($tokens[2]);
my $msg = stripcolors(substr(join(" ", @tokens[3 .. $#tokens]), 1));
ZNC::Core::CallModFunc($self->GetUser->GetModules, "OnPart", $ZNC::CONTINUE, $nick, $chan, $msg);
ZNC::Core::CallModFunc($self->GetNetwork->GetModules, "OnPart", $ZNC::CONTINUE, $nick, $chan, $msg);
if ($nick->NickEquals($self->GetNetwork->GetNick)) {
$self->GetNetwork->DelChan($chan->GetName);
}
if ($self->GetNetwork->IsUserOnline && !$chan->IsDetached) {
$self->PutUser(":".$nick->GetNickMask." PART ".$chan->GetName." :".$msg);
}
return $ZNC::HALT;
}
when("QUIT") {
my $nick = ZNC::CNick->new(substr($tokens[0], 1));
my $msg = stripcolors(substr(join(" ", @tokens[2 .. $#tokens]), 1));
if ($nick->NickEquals($self->GetNetwork->GetNick())) {
$self->PutStatus("You quit [".$msg."]");
return $ZNC::HALT;
}
my @chans;
foreach my $chan (@{$self->GetNetwork->GetChans}) {
if ($chan->RemNick($nick->GetNick)) {
push @chans, $chan;
}
}
ZNC::Core::CallModFunc($self->GetUser->GetModules, "OnQuit", $ZNC::CONTINUE, $nick, $msg, \@chans);
ZNC::Core::CallModFunc($self->GetNetwork->GetModules, "OnQuit", $ZNC::CONTINUE, $nick, $msg, \@chans);
if ($self->GetNetwork->IsUserOnline) {
$self->PutUser(":".$nick->GetNickMask." QUIT :".$msg);
}
return $ZNC::HALT;
}
}
return $ZNC::CONTINUE;
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment