All pastes #1433143 Raw Edit

Unnamed

public text v1 · immutable
#1433143 ·published 2009-05-24 17:12 UTC
rendered paste body
Description

This mIRC script can be used to automatically relay all activity from one channel to another. It has built in anti-flooding and anti-CTCP measures. I noticed renewed interest in it, so I figured I'd put it on here. Thanks to elevator and the CT relayers for helping out when I first wrote it, back in the day. 

Bugs

If you find bugs, I would appreciate it if you could report them to me. I can be found on irc.netgamers.net, find me by using:

/msg P info mz

Licence

I release this (de)script(ion) into the public domain, so do whatever the hell you like.

Script

To make the script work, create a new remote script in mIRC, and copy paste the following script into it:

on *:JOIN:%fromchan: { 
  if ($nick == $me) { 
    set %who $true | .who $chan | .timerwho 1 3 set %who $false 
    resetrelay
  }
  writerelay %tochan Join: $nick - $address($nick,5) 
}
on *:NICK: { if ($newnick ison %fromchan) { writerelay %tochan Nick: $nick -> $newnick - $address($newnick,5) } }
on *:QUIT: { if ($nick ison %fromchan) { writerelay %tochan Quit: $nick - $address($nick,5) } }

on *:PART:%fromchan: { writerelay %tochan Part: $nick - $address($nick,5) }
on *:NOTICE:*:%fromchan: { writerelay %tochan Notice: $nick - $1- }
on *:INPUT:%fromchan: { 
  if (($left($1,1) != $chr(47)) || ($ctrlenter)) { writerelay %tochan < $+ $me $+ > $1- }
  elseif ($1 == /me) { writerelay %tochan * $me $2- } 
}
on *:TEXT:*:%fromchan: { writerelay %tochan < $+ $nick $+ > $1- }
on *:ACTION:*:%fromchan: { writerelay %tochan * $nick $1- }
on *:TOPIC:%fromchan:{ writerelay %tochan Topic: $nick - $1- }
on *:MODE:%fromchan:{ writerelay %tochan Mode: $nick - $1- }
on *:SERVERMODE:%fromchan:{ writerelay %tochan Mode: $nick - $1- }
on *:OP:%fromchan:{ writerelay %tochan Op: $nick - $opnick }
on *:SERVEROP:%fromchan:{ writerelay %tochan Op: $nick - $opnick }
on *:DEOP:%fromchan:{ writerelay %tochan Deop: $nick - $opnick }
on *:VOICE:%fromchan:{ writerelay %tochan Voice: $nick - $vnick }
on *:SERVERVOICE:%fromchan:{ writerelay %tochan Voice: $nick - $vnick }
on *:DEVOICE:%fromchan:{ writerelay %tochan Devoice: $nick - $vnick }
on *:BAN:%fromchan:{ writerelay %tochan Ban: $nick - $banmask }
on *:UNBAN:%fromchan:{ writerelay %tochan Unban: $nick - $banmask }
on *:KICK:%fromchan:{ writerelay %tochan Kick: $nick - $kmask }

ctcp ^*:*:%tochan:{ echo 4 -st * $chan was CTCP'ed by $address($nick,5) $+ ! | halt }

raw ^352:*:{ if (%who) { haltdef } }

alias -l writerelay { 
  echo 3 -sg $timestamp Saving...
  write relay.log $1-
  if (%waiting) {
    set %waiting $false
    relayrelay
  }
}

alias relayrelay {
  if ($lines(relay.log) != 0) {
    set %waiting $false
    var %chantext = $read(relay.log,t,1)
    write -dl1 relay.log
    var %delay = $min(5000,$calc(%prevdelay / 2 + 500 + 2 * $len(%chantext)))
    set %prevdelay %delay
    .notice %chantext
    echo 4 -sg $timestamp Relaying...
    .timerrelay -m 1 %delay relayrelay
  }
  else { 
    set %waiting $true
    set %prevdelay 0
    echo 7 -sg $timestamp Waiting...
  }
}

alias resetrelay {
  echo 3 -sg $timestamp Resetting...
  write -c relay.log
  set %waiting $true
  set %prevdelay 0
}

alias min return $iif($$1 < $$2,$1,$2)


Then go to your variables tab, and paste the following two lines into it:

%fromchan #private
%tochan #public

Change the channel names to get the behaviour you want. The above example relays from #private to #public.