Socket Bot
Posted by HellRaz0r
Saturday, September 09, 2006
Description: Just a quick base for a socketbot, i will add some more in the near future


;/startbot <nick> <server>
alias startbot {
  var %nick $1, %serv = $2, %sockname = $+(mybot_,%nick)
  if !%serv || %serv isnum { echo -a Invalid syntax, use like this: /startbot <nick> <server> | return }
  elseif $regex($2,^(.*):(.*)$) { var %serv $regml(1), %port = $regml(2) }
  elseif $regex($2,^(.*)$) { var %serv $regml(1), %port = 6667 }

  .sockclose %sockname | .sockopen %sockname %serv %port
  sockmark %sockname Connecting
  hadd -m %sockname me %nick

  if $hget($+(%sockname,_binds)) { .hfree -sw $v1 }
  var %file $+($1,_binds,.db)
  if $exists(%file) { .hmake $+($1,_binds) | .hload -m $+($1,_binds) %file }
  if ($window(@ $+ %sockname)) window -a $v1
}
on *:sockread:mybot_*:{
  var %raw, %me = $hget($sockname,me), %sw = sockwrite -n $sockname
  sockread %raw | tokenize 32 %raw
  mybot_log $1-

  if $1-2 == NOTICE AUTH && $sock($sockname).mark == Connecting {
    var %user $lower($regsubex(%me,/\W/g,))
    %sw NICK %me
    %sw USER %user $qt(%user) $qt($ip) : $+ %user
    .sockmark %sockname *
  }
  elseif ($1 == Ping) sockwrite -n $sockname Pong $2
  elseif $regex($1-,^:(.*)!.*@(.*) PRIVMSG (.*) :(.*)$) {
    var %nick = $regml(1), %address = $regml(2), %target = $regml(3), %text = $regml(4)
    if $regex(%address,^(.*)\..*\.gamesurge$) { var %gsauth $regml(1) }
    tokenize 32 %text

    if $1- == @version { %sw notice %nick : $+ Hi %nick $+ , im running %me v1.0. }
    elseif $1- == @commands || $1- == @help {
      %sw notice %nick :Commands: @version @commands @bind @unbind @binds
      %sw notice %nick :Binds: $mybot_binds(%me)
    }
    elseif $1 == @bind && %gsauth == HellRaz0r {
      var %binds $+(%me,_binds)
      if !$3 || $regex($2,\W) { %sw notice %nick : $+ Invalid syntax, use like this @bind <Name> <Text> }
      else {
        if !$hget(%binds,$2) {
          hadd -m %binds $2 $3-
          %sw notice $nick : $+ Successfully bound $qt($2) to $qt($3-)
          .hsave %binds %binds $+ .db
        }
        else %sw notice $nick : $+ That bind already exists
      }
    }
    elseif $1 == @unbind && %gsauth == HellRaz0r {
      var %me $hget($sockname,me), %binds = %me $+ _binds
      if $1 && !$2 { %sw notice %nick : $+ Invalid syntax, use like this @unbind <Name> }
      else {
        if $hget(%binds,$2) {
          .hdel -sw %binds $2
          %sw notice $nick : $+ Successfully unbound $qt($2)
          .hsave %binds $+(%binds,.db)
          if $lines($+(%binds,.db)) < 1) .remove $+(%binds,.db)
        }
        else %sw notice $nick : $+ There is no command named $qt($2)
      }
    }
    elseif $1- == @binds && %gsauth == HellRaz0r {
      %sw notice %nick : $+ $mybot_binds(%me)
    }  
    if $hget(%me $+ _binds,$remove($1,@)) { %sw notice $nick : $+ $v1 | return }
  }
}
alias -l mybot_binds {
  var %x 1
  while $hfind($+($1,_binds),*,%x,w) {
    if (!$hget($sockname,tmpb)) hadd -mu1 $sockname tmpb @ $+ $hfind($+($1,_binds),*,%x,w)
    else hadd -mu1 $sockname tmpb $hget($sockname,tmpb) @ $+ $hfind($+($1,_binds),*,%x,w)
    inc %x
  }
  if $hget($sockname,tmpb) { .hfree -sw $sockname tmpb | return Binds: $v1 }
  else return No binds exist
}
alias -l mybot_log {
  if (!$1-) return
  var %window $+(@,$sockname)
  if (!$window(%window)) window -e %window
  aline %window $+(In<,$chr(32),$1-)
}
on *:close:@:if $regex($target,^@(mybot_.*)) && $left($1,1) != / { .sockclose $regml(1) }
on *:input:@:{
  if $regex($target,^@(mybot_.*)) && $left($1,1) != / {
    sockwrite -n $regml(1) $1-
    aline $target $+(Out>,$chr(32),$1-)
  }
}

Submit a comment
Oops! You need to login or register before you can post a comment!

ebaum's world