Skip to content

Instantly share code, notes, and snippets.

@foxiepaws
Created February 27, 2017 10:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save foxiepaws/32acf344eed59b4684fe56f4a96f97be to your computer and use it in GitHub Desktop.
Save foxiepaws/32acf344eed59b4684fe56f4a96f97be to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
########################################################################
# Filename: quickrelay.pl
# Description: A relay bot we wrote when anthrochat broke badly and
# wasn't fixed for days (still not fixed as of writing
# this!)
# Version: 1.0.0
# Created: Mon Feb 27 01:52:10 2017
# Revision: None
# Author: Rachel Fae Fox (foxiepaws)
########################################################################
use strict;
use warnings;
use utf8;
use Irssi;
use vars qw($VERSION %IRSSI);
use feature "switch";
$VERSION = '1.0.0';
%IRSSI = (
authors => 'Rachel Fae Fox (foxiepaws)',
contact => 'Rachel @ irc.entropynet.net #lounge',
name => 'quickrelay',
description => 'relays between servers',
);
my @targets = (""); # list of channels to relay.
my @servers = ("",""); # list of irssi server tags to relay to, at least two needed
sub msg_forward {
my ($server,$target,$text) = @_;
map { Irssi::server_find_tag($_)->send_message($target,$text,0) }
grep { $server->{tag} ne $_ }
@servers;
}
sub forward {
my ($server,$target,$nick,$type,$msg) = @_;
given ($type) {
do {
msg_forward($server,$target,sprintf("<%s> %s",$nick,$msg));
} when /msg/;
do {
msg_forward($server,$target,sprintf("* %s %s",$nick, $msg));
} when /action/;
do {
msg_forward($server,$target,sprintf("%s JOINS", $nick));
} when /join/;
do {
msg_forward($server,$target,sprintf("%s PARTS (%s)", $nick, $msg));
} when /part/;
}
}
# irssi doesn't seem to pass the event that called with this... so...
sub event_wrapper {
my ($event,$server,$msg,$nick,$nick_addr,$target) = @_;
foreach my $f (@targets) {
if ($target =~ /$f/i) {
forward($server,$target,$nick,$event,$msg);
} else {
print "didn't match target $target to $f";
}
}
}
sub message_public {
my ($server, $msg, $nick, $nick_addr, $target) = @_;
event_wrapper('msg',$server,$msg,$nick,$nick_addr,$target);
}
sub message_action {
my ($server, $msg, $nick, $nick_addr, $target) = @_;
event_wrapper('action',$server,$msg,$nick,$nick_addr,$target);
}
sub message_join {
my ($server,$target,$nick,$nick_addr) = @_;
event_wrapper('join',$server,'',$nick,$nick_addr,$target);
}
sub message_part {
my ($server,$target,$nick,$nick_addr, $msg) = @_;
event_wrapper('part',$server,$msg,$nick,$nick_addr,$target);
}
Irssi::signal_add('message public', 'message_public');
Irssi::signal_add('message irc action', 'message_action');
Irssi::signal_add('message join', 'message_join');
Irssi::signal_add('message part', 'message_part');
# Irssi::signal_add('message quit', 'message_quit'); todo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment