All pastes #922167 Raw Edit

Mine

public text v1 · immutable
#922167 ·published 2008-02-28 16:52 UTC
rendered paste body
;; mIRCd by Hamish

alias mircd {
  hadd -m mircd users 0 
  hadd -m mircd socket 0
  hmake users 100 
  hmake nicks 100
  hmake ircops 100 
  hmake channels 100 
  hmake invite 100 
  hmake gline 100 
  hmake bans 100 
  hmake away 100
  hmake onchans 100
  socklisten mircd 6667
}

alias dmircd {
  hfree mircd
  hfree users 
  hfree nicks
  hfree ircops 
  hfree channels 
  hfree invite 
  hfree gline 
  hfree bans 
  hfree away
  hfree onchans
  sockclose mircd*
}

alias sendx {
  var %chan $1
  var %line $2-
  var %a 1
  tokenize 32 $hget(onchans,%chan)
  while (%a <= $0) {
    sockwrite -nt $ [ $+ [ %a ] ] %line
    inc %a 1
  }
}

alias sendx2 {
  var %chan $2
  var %line $3-
  var %socket $1
  var %a 1
  tokenize 32 $hget(onchans,%chan)
  while (%a <= $0) {
    if ($ [ $+ [ %a ] ] != %socket) {
      sockwrite -nt $ [ $+ [ %a ] ] %line
      inc %a 1
    }
    else {
      inc %a 1
    }
  }
}

on *:socklisten:mircd:{
  hinc mircd users 1 
  hinc mircd socket 1
  hadd -m users mircd. [ $+ [ $hget(mircd,socket) ] ]
  .sockaccept mircd. [ $+ [ $hget(mircd,socket) ] ]
}

on *:sockread:mircd.*:{
  var %var
  sockread %var
  tokenize 32 %var 
  if (USER * iswm %var) {
    if (!$hget(users,$sockname)) {
      if ($hget(nicks,$sockname)) {
        hadd users $sockname $hget(nicks,$sockname) $2 $sock($sockname).ip $replace($right($5-,-1),$chr(32),-)
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** Helo!
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** Nick: $gettok($hget(users, $sockname),1,32)
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** Name: $replace($gettok($hget(users, $sockname),4,32),-,$chr(32))
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** IP: $gettok($hget(users, $sockname),3,32)
        sockwrite -nt $sockname :mircd.Hamish.net 376 $gettok($hget(users, $sockname),1,32) :End of /MOTD command.
      }
      elseif (!$hget(nicks,$sockname)) {
        hadd users $sockname $2 $sock($sockname).ip $replace($left($5-,-1),$chr(32),-)
      }
    }
  }
  if (NICK * iswm %var) {
    if (!$hget(nicks,$sockname)) {
      if ($hget(users,$sockname)) {
        var %a $hget(users,$sockname)
        hdel users $sockname
        hadd users $sockname $2 %a
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** YAH IRL!
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** YER NICK IS: $gettok($hget(users, $sockname),1,32)
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** YER NAME IS: $replace($gettok($hget(users, $sockname),4,32),-,$chr(32))
        sockwrite -nt $sockname :mircd.Hamish.net NOTICE AUTH :*** YER IP IS: $gettok($hget(users, $sockname),3,32)
        sockwrite -nt $sockname :mircd.Hamish.net 376 $gettok($hget(users, $sockname),1,32) :End of /MOTD command.
      }
      elseif (!$hget(users,$sockname)) {
        hadd nicks $sockname $2
      }
    }
  }
  if (JOIN * iswm %var) {
    if ($hget(channels,$2)) {
      var %line $+(:,$gettok($hget(users, $sockname),1,32),!,$gettok($hget(users, $sockname),2,32),@,$gettok($hget(users, $sockname),3,32))
      sockwrite -nt $sockname %line JOIN : $+ $2
      sockwrite -nt $sockname :Services!services@Hamish.net MODE $2 :+o $gettok($hget(users, $sockname),1,32)
      sockwrite -nt $sockname :mircd.Hamish.net 353 $gettok($hget(users, $sockname),1,32) = $2 :@Services @ $+ $gettok($hget(users, $sockname),1,32) $hget(onchans,$+($2,'))
      sendx $2 %line JOIN : $+ $2
      sendx $2 :Services!services@Hamish.net MODE $2 :+o $gettok($hget(users, $sockname),1,32)
      hadd onchans $2 $hget(onchans,$2) $sockname
      hadd onchans $+($2,') $hget(onchans,$+($2,')) $+(@,$gettok($hget(users, $sockname),1,32))
    }
    if (!$hget(channels,$2)) {
      var %line $+(:,$gettok($hget(users, $sockname),1,32),!,$gettok($hget(users, $sockname),2,32),@,$gettok($hget(users, $sockname),3,32))
      hadd channels $2 $2
      sockwrite -nt $sockname %line JOIN : $+ $2
      sockwrite -nt $sockname :Services!services@Hamish.net MODE $2 :+o $gettok($hget(users, $sockname),1,32)
      sockwrite -nt $sockname :mircd.Hamish.net 353 $gettok($hget(users, $sockname),1,32) = $2 :@Services @ $+ $gettok($hget(users, $sockname),1,32)
      hadd onchans $2 $sockname
      hadd onchans $+($2,') $+(@,$gettok($hget(users, $sockname),1,32))
    }
  }
  if (PRIVMSG * iswm %var) {
    if ($hget(channels,$2)) {
      var %line $+(:,$gettok($hget(users, $sockname),1,32),!,$gettok($hget(users, $sockname),2,32),@,$gettok($hget(users, $sockname),3,32))
      sendx2 $sockname $2 %line PRIVMSG $2 $3-
    }
  }
  if (QUIT * iswm %var) {
    var %line $+(:,$gettok($hget(users, $sockname),1,32),!,$gettok($hget(users, $sockname),2,32),@,$gettok($hget(users, $sockname),3,32))
    sockwrite -nt $sockname ERROR :Closing Link: $gettok($hget(users, $sockname),1,32) $+ [ $+ $gettok($hget(users, $sockname),3,32) $+ ] (Client Exited)
    sendx #channel %line QUIT :Client Exited
    sockclose $sockname
  }
}