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-)
}
}