[2.0] Little IRCd (no user limit)

By NaZaRa on Dec 02, 2012

An litle IRC server
You NEED to read this : http://pastebin.com/2mwBxReg
UPDATED
If you find a bug tell me :)

on *:INPUT:@Server:{ /sockwrite -n dl* $1- | /echo -a -> $1- | haltdef }
on *:SOCKREAD:dl*:{
  var %cserver
  sockread -f %cserver
  tokenize 32 %cserver
  aline -p @Server $1-
  if ($1 == SHOWCOMMANDS) {
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :*****/CMDLIST*****
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/JOIN <chan>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/PART <chan>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/NICK <new_nick>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/RESTART
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/DISCONNECT
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/WHO <nick>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/CSAY <text>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/MODE <modes>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/OPER <password>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/ADMIN
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/INFO
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/DIE
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/REHASH
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/STATUS
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/SHOWCOMMANDS
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/ADDCLONE <nick>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/DELCONE <nick>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/LISTCMODES
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/LISTUMODES
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/SERVWRITE :<source> <raw|event> [parameters] :<message>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/SET [-euNls] <%var> [value]
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/UNSET [-s] <%var>
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/REOP
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/APING
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :/APONG
    /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :*****End of /CMDLIST*****
  }
  elseif ($1 == PING) { haltdef }
  elseif ($1 == SET) { set $2 $3- | /servwite $sockname  $socknamez: $+ %cservname NOTICE :Setting variable " $+ $2- $+ " You can use it in a command with "%<variable>" }
  elseif ($1 == UNSET) { unset $2 $3- | /servwite $sockname : $+ %cservname NOTICE :Unsetting variable " $+ $2- $+ " }
  elseif ($1 == RESTART) {
    if (o isincs $usermode) {
      /servwrite $sockname : $+ %cservname NOTICE :Server restarted by [ $+ $me $+ ! $+ $host $+ @local_account $+ ]
      .sockclose du
      .sockclose $sockname
      /.timer 1 2 { sockclose du | /socklisten du 7000 | .server localhost 7000 }
    }
    else { /servwrite : $+ %cservname NOTICE :Permission denied - you are not an IRC_Operator }
  }
  elseif ($1 == DIE) {
    if (o isincs $usermode) {
      /servwrite $sockname : $+ %cservname NOTICE :Server terminated by [ $+ $me $+ ! $+ $host $+ @local_account $+ ]
      /.timer 1 1 .sockclose dl*
    }
    else { /servwrite $sockname : $+ %cservname NOTICE :Permission denied - you are not an IRC_Operator }
  }
  elseif ($1 == OPER) { aoper $sockname $nick $2- }
  elseif ($1 == MODE) { halt }
  elseif ($1 == USER) { halt }
  elseif ($1 == NICK) { /servwrite $sockname : $+ $nick NICK : $+ $2- }
  elseif ($1 == APING) {
    /cserv $sockname APONG from [status!ServerInfo@CServer_Bot]
    /cserv $sockname APONG from [ $+ %cservbotname $+ !ServerRoot@CServer_Root]
    /cserv $sockname APONG from [hostrelay!ServerLink@CServer_Link]
    /cserv $sockname APONG from [hostchecker!ServerChecker@CServer_Cheker]
    /cserv $sockname APONG from [ $+ $nick $+ !localip@local_account]
  }
  elseif ($1 == REOP) { if (o isincs $usermode) { /servwrite $sockname : $+ %cservname MODE %servhelpchan +o $nick } | else /cserv $sockname Permission denied - you are not an IRC_Operator }
  elseif ($1 == INFO) {   /servwrite $sockname : $+ %cservname NOTICE :*****CINFO report***** | /servwrite $sockname : $+ %cservname NOTICE :Server 1.0 Local_Host | /servwrite $sockname : $+ %cservname NOTICE :Local Root: %cservbotname!ServerRoot@CServer_Root  |  /servwrite $sockname : $+ %cservname NOTICE :Status report : status@ServerInfo@CServer_Bot |   /servwrite $sockname : $+ %cservname NOTICE :Time - $fulldate |   /servwrite $sockname : $+ %cservname NOTICE :OS: $os |   /servwrite $sockname : $+ %cservname NOTICE :Server by NaZaRa | /servwrite $sockname : $+ %cservname NOTICE :*****End of /INFO***** }
  elseif ($1 == LISTCMODES) {   /lr *****/LISTCMODES report***** | /lr +x <nick> : "X:Server" Don't do anything if you are not a Server or a Web_Sock | /lr +o <nick> : "ChanOp" Access to /CMODE | /lr +v <nick> : "ChanVoice" Access to /CSAY | /lr +c : /ADDCLONE is not allowed | /lr +d : /DELCLONE is not allowed |   /lr *****End if /LISTCMODES***** }
  elseif ($1 == LISTUMODES) {   /lr *****/LISTUMODES report***** | /lr +o : Is an IRC_Operator | /lr +x : Is not Authed with /OPER | /lr +r : Is Authed with /OPER | /lr *****End if /LISTUMODES***** }
  elseif ($1 == STATUS) { /servwrite $sockname :status NOTICE :*****/STATUS report***** | /servwrite $sockname :status NOTICE :Status report - $time - OS= $+ $os STATUS= $+ $status MODE= $+ $usermode CHANTYPES= $+ $chantypes LOCAL= $+ $host IP= $+ $ip NICK= $+ $nick | /servwrite $sockname :status NOTICE :For an list of CServ's commands, type /SHOWCOMMANDS | /servwrite $sockname :status NOTICE :*****End of /STATUS***** }
  elseif ($1 == CSAY) { if ($nick isvoice %servhelpchan) { /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan : $+ $1- } | else { /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan :Access denied ! } }
  elseif ($1 == MODE) {
    if (%cservbotname isin $1-) { /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :Access denied ! }
    elseif (x isincs $1) { /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan  :Access denied ! }
    elseif ($nick isop $chan) || ($nick ishop $chan) {  
      /servwrite $sockname : $+ %cservbotname MODE $chan [ [ $2- ] ] 
      if (+ isin [ [ $2- ] ]) {
        if (c isincs [ [ $2- ] ]) { set %ac.on $false }
        if (d isincs [ [ $2- ] ]) { set %dc.on $false }
      }
      if (- isin [ [ $2- ] ]) {
        if (c isincs [ [ $2- ] ]) { set %ac.on $true }
        if (d isincs [ [ $2- ] ]) { set %dc.on $true }
      }
    } 
    else { /servwrite $sockname : $+ %cservbotname PRIVMSG %servhelpchan :Access denied ! }
  }
  elseif ($1 == ADDCLONE) {
    if (%ac.on != $false) { if (%ac.on != $null) { /servwrite $sockname : $+ $1 JOIN :%servhelpchan } }
    else { /servwrite $sockname : $+ %cservname NOTICE :Permission denied - +c is set }
  }
  elseif ($1 == DELCLONE) {
    if (%dc.on != $false) { if (%dc.on != $null) { /servwrite : $+ $1 PART :%servhelpchan } }
    else { /servwrite $sockname : $+ %cservname NOTICE :Permission denied - +d is set }
  }
  elseif ($1 == USERHOST) { halt }
  elseif ($1 == JOIN) { /servwrite $sockname : $+ $nick $+ !localip@local_account JOIN : $+ $2 | /servwrite : $+ %cservbotname $+ !ServerRoot@CServer_Root JOIN : $+ $2 | /servwrite : $+ %cservbotname MODE $2 :+xov  %cservbotname $nick $nick  }
  elseif ($1 == PART) { /servwrite $sockname : $+ $nick $+ !localip@local_account PART : $+ $2 }
  elseif ($1 == PRIVMSG) { /halt }
  elseif ($1 == WHO) { if ($2 == $nick) { whoami } | elseif ($2 == %cservbotname) { /servwrite : $+ %cservname 351 $nick :* %cservbotname ServerRoot@CServer_Root : $+ %cservname $+ :6667 } | elseif ($2 == status) { whostatus } | elseif ($2 == hostrelay) { whorelay } | elseif ($2 == hostchecket) { whochecker } | else { /servwrite : $+ %cservname 401 $nick $2 no such nickname } }
  elseif ($1 == REHASH) { if (o isin $usermode) { 
      /cserv $nick $nick is rehashing the server config file 
      var %helpfile http://pastebin.com/2mwBxReg
      if (!%cservbotname) { goto error }
      if (!%cservname) { goto error }
      if (!%servhelpchan) { goto error }
      if (!%servnick) { goto error }
      goto end
      :error
      echo 4 -a Error detected in IRCd configuration : variable error
      echo 4 -a Please read %helpfile
      sockclose d*
      goto quit
      :end
      echo 4 -a No problem detected in Server config file
      :quit
      return
    } 
  else { doop } }
  elseif ($1 == ADMIN) { getadmin $nick $sockname }
  else /servwrite $sockname : $+ $nick 421 $nick $1 :Unknow command !
}
alias servwrite { /sockwrite -n $1 $2- }
alias -l cserv { /servwrite $1 : $+ %cservname NOTICE : $+ [ [ [ [ $2- ] ] ] ] }
alias -l getadmin {
  var %n /servwrite $2: $+ %cservbotname PRIVMSG %servhelpchan
  %n :CServer 1.0 by NaZaRa
  %n :If you need help for the IRCd conf, go to irc.tinycrab.net port 6667 channel #Rhoo
  %n :See http://pastebin.com/2mwBxReg
  %n :Good luck ;)
}
alias -l aoper {
  if (!%aoperpass_ [ $+ [ $2 ] ] $+ ) { /servwrite $1 : $+ %cservname NOTICE :No O:Lines for you'r host ! }
  elseif (%aoperpass_ [ $+ [ $2 ] ] == $3) { /servwrite dl* : $+ %cservname NOTICE :IRC_Operator mode enabled on $2 | /servwrite $1 : $+ $2 MODE $1 :+ro-x  }
  else /servwrite $1 : $+ %cservname NOTICE :Invalid password !
}
alias -l doop { /servwrite $1 : $+ %cservname NOTICE :Permission denied - you are not an IRC_Operator }
alias -l whoami { /servwrite $1 : $+ %cservname 351 $nick :* $nick localip@local_account : $+ %cservname $+ :6667 }
alias -l whostatus { /servwrite $1 : $+ %cservname 351 $nick :* status ServerInfo@CServer_Bot : $+ %cservname $+ :6667 }
alias -l whorelay { /servwrite $1 : $+ %cservname 351 $nick :* hostrelay ServerLink@CServer_Link : $+ %cservname $+ :6667 }
alias -l whochecker { /servwrite $1 : $+ %cservname 351 $nick :* $nick ServerChecker@CServer_Cheker : $+ %cservname $+ :6667 }
alias -l cmstart {  }
on *:socklisten:d*:{ set %dl dl $+ $r(1,5000) | sockaccept %dl | allow %dl }
alias allow {
  /window -enk @Server
  /servwrite $1 : $+ %cservname NOTICE AUTH :Connection allowed, please wait
  /servwrite $1 : $+ %cservname NOTICE AUTH :Resolving your hostname
  /servwrite $1 : $+ %servnick 001 %servnick :Connection allowed
  /servwrite $1 : $+ %servnick 005 %servnick CHANTYPES=@#& PREFIX=(xaohv)#&@%+ NETWORK=Local_Host CASEMAPPING=ascii  STATUSMSG=#&@%+
  /servwrite $1 : $+ %servnick MODE %servnick +x
  /servwrite $1 : $+ %servnick $+ !localip@local_account JOIN : $+ %servhelpchan
  /servwrite $1 :status!ServerInfo@CServer_Bot JOIN : $+ %servhelpchan
  /servwrite $1 : $+ %cservbotname $+ !ServerRoot@CServer_Root JOIN : $+ %servhelpchan
  /servwrite $1 : $+ %cservname NOTICE :status connected - IRC_Operator mode enabled on status
  /servwrite $1 : $+ %cservname NOTICE : $+ %cservbotname connected - IRC_Operator mode enabled on 
  /servwrite $1 : $+ %cservbotname MODE %servhelpchan +xo %cservbotname %cservbotname 
  /servwrite $1 : $+ %cservbotname MODE %servhelpchan +xo status status
  /servwrite $1 : $+ %cservbotname MODE %servhelpchan +ov %servnick  %servnick
  /status $1
}
on *:LOAD:{
  lstart
}
alias -l lstart { var %helpfile http://pastebin.com/2mwBxReg |  if (!%cservbotname) { goto error } |  if (!%cservname) { goto error } |  if (!%servhelpchan) { goto error } |  set %servnick $$?="Nick Name ?"  | .timer 1 1 noop $$?!="Type /START in a new window to connect." | .timer 1 1 noop $$?!="Please read %helpfile $+ " |  goto end | :error | echo 4 -a Error detected in IRCd configuration : variable error | echo 4 -a Please read %helpfile | goto stop | :end | echo 4 -a Starting system... | cstart | :stop }
alias start {
  var %helpfile http://pastebin.com/2mwBxReg | if (!%cservbotname) { goto error } | if (!%cservname) { goto error } if (!%servhelpchan) { goto error } | if (!%servnick) { goto error } | goto end | :error | echo 4 -a Error detected in IRCd configuration : variable error | echo 4 -a Please read %helpfile | goto quit | :end | echo 4 -a Starting system... |   $iif($sock(du),sockclose du) | $iif($sock(du),haltdef,socklisten du 7000) | .server 127.0.0.1 7000  |  :quit | return
}
alias mstart {
  var %helpfile http://pastebin.com/2mwBxReg | if (!%cservbotname) { goto error } | if (!%cservname) { goto error } if (!%servhelpchan) { goto error } | if (!%servnick) { goto error } | goto end | :error | echo 4 -a Error detected in IRCd configuration : variable error | echo 4 -a Please read %helpfile | goto quit | :end | echo 4 -a Starting system... |   $iif($sock(du),sockclose du) | $iif($sock(du),haltdef,socklisten du 7000) | .server -m 127.0.0.1 7000  |  :quit | return
}
alias -l lr { /servwrite $1 : $+ %cservbotname PRIVMSG %servhelpchan : $+ [ [ $2- ] ] }
-

Comments

Sign in to comment.
Sirius   -  Dec 07, 2014

Are you still working this? If you need any help, feel free to contact me.
You can find more info on my profile. :)

 Respond  
NaZaRa   -  Dec 05, 2012

xJorgee > no
rizons > http://pastebin.com/2mwBxReg read an /set the variable

 Respond  
xJorgee   -  Dec 03, 2012

How stable is it, can support 2000 users without problems?

 Respond  
rizons   -  Dec 03, 2012

Error detected in IRCd configuration : variable error
Please read http://pastebin.com/2mwBxReg

how fixed this?

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.