rendered paste bodyon *:input:@:{
var %window $+(@,$hget(config,nickname))
if ($target == %window) && $left($1,1) != / {
if $sock($+(PugBot_,$hget(config,nickname))).status == Active {
sockwrite -n $+(PugBot_,$hget(config,nickname)) $1-
aline -p %window $timestamp Sent: $1-
}
else aline %window $timestamp Not Connected.
}
}
alias cpanel {
dialog -m cpanel cpanel
var %sockname $+(PugBot_,$hget(config,nickname))
if ($sock(%sockname)) did -b cpanel 2
else did -b cpanel 1
}
dialog cpanel {
title "PugBot Control Panel"
size -1 -1 147 81
option dbu
button "Start Bot", 2, 6 29 40 10
button "Stop Bot", 1, 6 41 40 10
button "Edit Config.ini", 3, 6 53 40 11
button "Edit Servers.ini", 4, 6 66 40 11
button "Reload main.mrc", 5, 4 12 44 13
;icon 6, 53 7 88 68, c:\PugBot\PugBot\logo.bmp, 0
}
on *:dialog:cpanel:sclick:5:{ reload -rs $qt($script) }
on *:dialog:cpanel:sclick:1:{
var %me $hget(config,nickname)
.sockclose $+(PugBot_,%me) | did -b $dname 1 | did -e $dname 2
if ($window(@ $+ %me)) {
aline $v1 $timestamp - Stopped $+(',%me,') -
}
}
on *:dialog:cpanel:sclick:2:{
var %me $hget(config,nickname)
if (%cfg.error) { dialog -m cfg.error cfg.error | unset %cfg.error | halt }
StartBot | did -b $dname 2 | did -e $dname 1
}
on *:dialog:cpanel:sclick:3:{ editcfg }
on *:dialog:cpanel:sclick:4:{ editservs }
dialog cfg.error {
title "Error"
size -1 -1 98 39
option dbu
text "Error: Config not setup properly.", 1, 10 8 87 16
button "OK", 2, 30 21 37 12
}
on *:dialog:cfg.error:sclick:2:{
dialog -c $dname
}
dialog editcfg {
title "Edit Config.ini"
size -1 -1 246 90
option dbu
edit "", 1, 19 9 205 57, multi return autovs
button "Save", 2, 104 72 37 12
}
alias editcfg {
dialog -m editcfg editcfg
var %x 1
while (%x <= $lines($scriptdirconfig.ini)) {
did -a editcfg 1 $read($scriptdirconfig.ini,nt,%x) $+ $crlf
inc %x
}
}
alias editservs {
dialog -m editservs editservs
var %x 1
while (%x <= $lines($scriptdirservers.ini)) {
did -a editservs 1 $read($scriptdirservers.ini,nt,%x) $+ $crlf
inc %x
}
}
dialog editservs {
title "Edit Servers.ini"
size -1 -1 246 90
option dbu
edit "", 1, 19 9 205 57, multi return autovs vsbar
button "Save", 2, 104 72 37 12
}
on *:dialog:editcfg:sclick:2:{
.remove $scriptdirconfig.ini
var %x 1
while $did($dname,1,%x) {
write $scriptdirconfig.ini $v1
inc %x
}
dialog -c $dname
}
on *:dialog:editservs:sclick:2:{
.remove $scriptdirservers.ini
var %x 1
while %x <= $did($dname,1,0).lines {
if $regex($did($dname,1,%x),^\[.*\]$) && %x != 1 { write $scriptdirservers.ini $crlf }
write $scriptdirservers.ini $did($dname,1,%x)
inc %x
}
dialog -c $dname
}
on *:start:{
unset %cfg.error
.timerrefreshcfg 0 1 check_cfg
.timercpanel 1 1 cpanel
startbot
}
alias startbot {
if ($check_cfg) {
var %nickname $hget(config,nickname), %server = $hget(config,server)
var %authserv $hget(config,authserv), %botmaster = $hget(config,botmaster)
var %trigger $hget(config,trigger), %skin = $hget(config,trigger)
var %sockname PugBot_ $+ %nickname
.sockopen %sockname $replace(%server,:,$chr(32))
.sockmark %sockname 1
if (!$window(@ $+ %nickname)) .window -e @ $+ %nickname
else clear @ $+ %nickname
aline @ $+ %nickname $timestamp - Starting $+(',%nickname,') -
}
}
alias check_cfg {
var %cfg $scriptdirconfig.ini, %x
if ($read(%cfg,r,/^nickname=(.*)$/i)) .hadd -m config nickname $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'nickname' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^server=(.*)$/i)) .hadd -m config server $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'server' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^authserv=(.*)$/i)) .hadd -m config authserv $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'authserv' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^botmaster=(.*)$/i)) .hadd -m config botmaster $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'botmaster' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^channels=(.*)$/i)) .hadd -m config channels $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'channels' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^trigger=(.*)$/i)) .hadd -m config trigger $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'trigger' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^skin=(.*)$/i)) .hadd -m config skin $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'skin' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if ($read(%cfg,r,/^rconport=(.*)$/i)) .hadd -m config rconport $regml(1)
else {
if (%cfg.error) halt
var %error Config Error: could not find 'rconport' in $qt($+($scriptdir,config.ini))
echo -a %error | inc %x
}
if (!%x) { unset %cfg.error | return 1 }
else {
set %cfg.error 1
}
}
on *:sockopen:PugBot_*:{
if ($sockerr) return
var %me $hget(config,nickname), %user = $lower($regsubex(%me,/\W/g,)), %sw = sockwrite -n $sockname
%sw NICK %me
%sw USER %user $qt(%user) $qt($ip) : $+ %user
}
on *:sockwrite:PugBot_*:{
if (!$1) halt
var %window $+(@,$hget(config,nickname))
if ($window(%window)) aline -p $v1 $timestamp Sent: $1-
}
on *:sockread:PugBot_*:{
var %data, %me = $hget(config,nickname), %skin $hget(config,skin), %sw = rawsend $sockname
var %trigger $hget(config,trigger), %botmaster = $hget(config,botmaster)
sockread %data | tokenize 32 %data
var %window @ $+ %me
if (!$window(%window)) window -e %window
aline -p %window $timestamp Received: $1-
if $1 == PING {
if $sock($sockname).mark {
if $hget(config,authserv) { .timer 1 1 %sw mode %me +x | .timer 1 1 %sw as AUTH $v1 }
if ($hget(config,channels)) { .timer 1 2 %sw JOIN $v1 }
if ($timer($sockname)) { .timer $+ $sockname off }
.sockmark %sockname *
}
%sw Pong $2
}
;Raw Numeric events.
elseif $regex($1,:.+) && $2 isnum {
;Catch nicks
if $2 == 353 {
var %chan $5, %nicks $regsubex($6-,/^:/g,)
var %x 1
while $gettok(%nicks,%x,32) {
var %nick $remove($v1,+,@,&)
if ($left($v1,1) == @) { hadd -m $+(%chan,_nickmodes) %nick op }
elseif ($left($v1,1) == +) { hadd -m $+(%chan,_nickmodes) %nick voice }
inc %x
}
}
elseif $2 == 330 {
if $hget($sockname,getauthname) {
var %authname $5
.hadd -m $sockname gotauthname $5
.hdel -sw $sockname getauthname
}
}
}
;On Text
elseif $regex($1-,^:(.*)!.*@(.*) PRIVMSG (.*) :(.*)$) {
var %nick $regml(1), %address = $+(*!*@,$regml(2)), %target = $regml(3), %text = $regml(4)
var %botmaster $hget(config,botmaster)
if (!$hget(Authname,%address)) .hadd -m Authname %address $iif($authname($sockname,%nick),$v1,0)
if ($hget(Authname,%address)) var %authname $v1
if (%authname) && ($read($scriptdirusers.db,w,%authname $+ :*)) var %userlevel $iif($gettok($v1,2,58),$v1,1)
if ($left(%target,1) == $(#,0)) var %chan %target
if $regex(%address,^(.*)\..*\.gamesurge$) { var %gsauth $regml(1) }
tokenize 32 %text
if $1- == %trigger $+ version {
var %msg Hi %nick $+ , im running %me v1.0.
sendcmd %nick notice %nick : $+ $skin(%skin,Version,%msg)
}
elseif $1- == %trigger $+ commands || $1- == %trigger $+ help {
sendcmd %nick notice %nick : $+ $skin(%skin,Admin-Commands,%trigger $+ Pug %trigger $+ EndPug - %trigger $+ Bind %trigger $+ Set %trigger $+ Unbind %trigger $+ Binds - %trigger $+ Adduser %trigger $+ Deluser %trigger $+ Users - %trigger $+ help Levels)
sendcmd %nick notice %nick : $+ $skin(%skin,Commands,%trigger $+ Help <CmdName> - %trigger $+ Access %trigger $+ Version %trigger $+ Commands %trigger $+ Add)
if ($mybot_binds(%me)) sendcmd %nick notice %nick : $+ $skin(%skin,Binds,$showbinds($v1))
}
elseif $1 == %trigger $+ help {
if $2- == %trigger $+ bind || $2- == bind {
sendcmd %nick notice %nick : $+ $skin(%skin,Bind,Syntax: %trigger $+ bind <Name> <Text>)
}
elseif $2- == %trigger $+ unbind || $2- == unbind {
sendcmd %nick notice %nick : $+ $skin(%skin,Unbind,Syntax: %trigger $+ unbind <Name>)
}
elseif $2- == %trigger $+ set || $2- == set {
sendcmd %nick notice %nick : $+ $skin(%skin,Set,Syntax: %trigger $+ set <BindName> <Text>)
}
elseif $2- == %trigger $+ add || $2- == add {
sendcmd %nick notice %nick : $+ $skin(%skin,Add,This adds you to a pug $+ $chr(44) an admin needs to type %trigger $+ startpug before you can add your self to it.)
}
elseif $2- == %trigger $+ adduser || $2- == adduser {
sendcmd %nick notice %nick : $+ $skin(%skin,Adduser,Syntax: %trigger $+ adduser <Nick|*AuthName> <AccessLevel>)
}
elseif $2- == %trigger $+ deluser || $2- == deluser {
sendcmd %nick notice %nick : $+ $skin(%skin,Deluser,Syntax: %trigger $+ deluser <Nick|*AuthName> <AccessLevel>)
}
elseif $2 == %trigger $+ pug || $2- == pug {
sendcmd %nick notice %nick : $+ $skin(%skin,StartPug,Syntax: %trigger $+ startpug <ip:port|ServerName> <Map>)
}
elseif ($2- == %trigger $+ access || $2- == access || $2- == %trigger $+ a || $2- == a) {
sendcmd %nick notice %nick : $+ $skin(%skin,Access,Syntax: $+(%trigger,access|,%trigger,a) [Nick])
}
elseif $2 == levels {
sendcmd %nick notice %nick : $+ $skin(%skin,Access Levels,[100=Channel-Peon] [200=Channel-Op] [300=StartPug/StopPug] [400=AddBind/Set/DelBind/Binds] [500=AddUser/Deluser/Users])
}
else sendcmd %nick notice %nick : $+ $skin(%skin,Error,There isnt any help for that command.)
}
elseif $1 == %trigger $+ a || $1 == %trigger $+ access {
if (!$2) sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%userlevel,$v1,0) Address: %address)
else {
var %authname $authname($sockname,$2)
if (!%authname) { sendcmd %nick notice %nick : $+ $skin(%skin,Error,That user isnt authenticated.) | halt }
set -u0 %tmp.authname $read($scriptdirusers.db,w,%authname $+ :*)
var %targ_level $gettok(%tmp.authname,2,58)
sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%targ_level,$v1,0))
}
}
elseif $1 == %trigger $+ adduser {
if %address != %botmaster && $iif(%userlevel,$v1,1) < 300 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
elseif !$3 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid Syntax $+ $chr(44) use like this %trigger $+ adduser <nick|*authname> <level>)
halt
}
elseif $read($scriptdirusers.db,w,$2 $+ :*) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,That user is already on my userlist.)
halt
}
if $left($2,1) != * {
var %targ_name $authname($sockname,$2)
if (!%targ_name) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,$2 needs to authenticate with AuthServ.)
halt
}
}
else {
if !$accountexists($sockname,$2) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,That account doesnt exist.)
halt
}
var %targ_name $remove($2,*)
}
write $scriptdirusers.db $+(%targ_name,:,$3)
sendcmd %nick notice %nick : $+ $skin(%skin,Adduser,Successfully added user.)
}
elseif $1- == %trigger $+ users {
if %address != %botmaster && $iif(%userlevel,$v1,1) < 100 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
elseif !$lines($scriptdirusers.db) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,No users exist.)
halt
}
elseif $lines($scriptdirusers.db) < 20 {
var %x 1 | while $read($scriptdirusers.db,%x) { var %y = %y $v1 | inc %x }
sendcmd %nick notice %nick : $+ $skin(%skin,Users,%y)
}
else {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,To many users to list.)
halt
}
}
elseif $1 == %trigger $+ deluser {
if %address != %botmaster && $iif(%userlevel,$v1,1) < 300 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
elseif $hget(Authname,%address) == 0 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.)
halt
}
elseif !$2 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid Syntax $+ $chr(44) use like this %trigger $+ adduser <nick|*authname>)
halt
}
if ($left($2,1) != *) {
var %targ_name $authname($sockname,$2)
if (!%targ_name) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,$2 is either offline or needs to authenticate with AuthServ.)
halt
}
}
elseif ($left($2,1) == *) {
var %nick2 $remove($2,*)
if ($read($scriptdirusers.db,w,%nick2 $+ :*)) var %targ_name %nick2
elseif (!$accountexists($sockname,$2)) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,That account doesnt exist.)
halt
}
}
if (!$read($scriptdirusers.db,w,%targ_name $+ :*)) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,%targ_name isnt on my userlist.)
halt
}
write -dl $+ $readn $scriptdirusers.db
sendcmd %nick notice %nick : $+ $skin(%skin,Deluser,Successfully removed user.)
}
elseif $1 == %trigger $+ bind {
if %address != %botmaster && $iif(%userlevel,$v1,1) < 400 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
elseif $hget(Authname,%address) == 0 { sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.) }
var %binds $+(%me,_binds)
if !$3 || $regex($2,\W) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid syntax $+ $chr(44) use like this %trigger $+ bind <Name> <Text>)
}
else {
if !$hget(%binds,$2) {
hadd -m %binds $2 $3-
sendcmd %nick notice %nick : $+ $skin(%skin,Bind,Successfully bound $qt($2) to $qt($3-))
.hsave %binds $+($scriptdir,%binds,.db)
}
else sendcmd %nick notice %nick : $+ $skin(%skin,Bind,That bind already exists)
}
}
elseif $1 == %trigger $+ set {
var %binds $+(%me,_binds)
if !$3 { sendcmd %nick notice $nick : $+ $skin(%skin,Error,Invalid syntax $+ $chr(44) use like this %trigger $+ set <bindname> <newvalue>) | halt }
elseif !$hget(%binds,$remove($2,%trigger)) { sendcmd %nick notice $nick : $+ $skin(%skin,Error,No bind by that name exists.) | halt }
hadd -m %binds $2 $3- | .hsave %binds $+($scriptdir,%binds,.db)
sendcmd %nick notice %nick : $+ $skin(%skin,Set,Successfully set $qt($2) to $qt($3-))
}
elseif $1 == %trigger $+ unbind {
if %address != %botmaster && $iif(%userlevel,$v1,1) < 300 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
elseif $hget(Authname,%address) == 0 { sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.) }
var %me $hget(config,nickname), %binds = %me $+ _binds
if $1 && !$2 {
var %msg Invalid syntax, use like this %trigger $+ unbind <Name>
sendcmd %nick notice %nick : $+ $skin(%skin,Error,%msg)
}
else {
if $hget(%binds,$2) {
.hdel -sw %binds $2
sendcmd %nick notice %nick : $+ $skin(%skin,Unbind,Successfully unbound $qt($2))
.hsave %binds $+($scriptdir,%binds,.db)
if $lines($+($scriptdir,%binds,.db)) < 1) .remove $+($scriptdir,%binds,.db)
}
else sendcmd %nick notice %nick : $+ $skin(%skin,Error,There is no command named $qt($2))
}
}
elseif $1- == %trigger $+ binds {
if %address != %botmaster && $iif(%userlevel,$v1,1) < 300 {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
elseif $hget(Authname,%address) == 0 { sendcmd %nick notice %nick : $+ $skin(%skin,Error,You need to authenticate with AuthServ.) }
sendcmd %nick notice %nick : $+ $iif($mybinds(%me),$skin(%skin,Binds,$v1),$skin(%skin,Binds,No binds exist.))
}
elseif $1 == %trigger $+ eval {
if %address != %botmaster {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,You dont have access to that command.)
halt
}
var %ticks $ticks, %str = $2- == $($2-,2) $+([,$calc($ticks - %ticks),ms])
sendcmd %nick privmsg %chan : $+ $skin(%skin,Eval,%str)
}
elseif $1 == %trigger $+ a || $1 == %trigger $+ access {
if (!$2) sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%userlevel,$v1,0) Address: %address)
else {
var %authname $authname($sockname,$2)
if (!%authname) { sendcmd %nick notice %nick : $+ $skin(%skin,Error,That user isnt authenticated.) | halt }
set -u0 %tmp.authname $read($scriptdirusers.db,w,%authname $+ :*)
var %targ_level $gettok(%tmp.authname,2,58)
sendcmd %nick notice %nick : $+ $skin(%skin,Access,Authname: $iif(%authname,$v1,not authed) Userlevel: $iif(%targ_level,$v1,0))
}
}
elseif $1 == %trigger $+ pug {
if (!%authname) {
sendcmd %nick notice %nick : $+ $skin(%skin,Pug,You need to authenticate to use this.)
}
elseif ($hget(Pug-Starter)) {
sendcmd %nick notice %nick : $+ $skin(%skin,Pug,A Pug is already in progress.)
}
elseif (!$2) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,Invalid syntax $+ $chr(44) use like this: %trigger $+ Pug <map>)
}
elseif (!$read($scriptdirmaps.txt,w,$2 $+ .bsp)) {
sendcmd %nick notice %nick : $+ $skin(%skin,Error,Map not found.)
}
else {
var %randpass $regsubex(*****,/\*/g,$iif($r(1,5) > 2,$iif($r(1,2) > 1,$r(a,z),$r(A,Z)),$r(1,9)))
sockwrite -n $sockname privmsg %chan : $+ $skin(%skin,$hget(config,nickname),%nick Started a Pug $+ $chr(44) to play type %trigger $+ addme)
sockwrite -n $sockname privmsg %nick : $+ $skin(%skin,Pug,Pug Started $+ $chr(44) Waiting for players..)
sockwrite -n $sockname privmsg %nick : $+ $skin(%skin,Pug,When you are in game type %trigger $+ login %randpass)
hadd -m Pug-Players %address %nick
hadd -m Pug-Starter %address %nick
var %file $scriptdirservers.ini
var %serv $ini(%file,1), %rconpass = $readini(%file,%serv,rconpass), %maxplayers = $readini(%file,%serv,maxplayers)
rcon %serv %rconpass logaddress_add $netip 1337
}
}
elseif $hget(%me $+ _binds,$remove($1,%trigger)) {
var %value $v1
sendcmd %nick notice %nick : $+ $skin(%skin,$remove($1,%trigger),%value)
}
}
elseif $regex($1-,/:(.+)\!.+@.+ MODE (#[^\s]+) ([^\s]+) (.+)/g) {
var %nick $regml(1), %chan = $regml(2), %modes = $regml(3), %nicks = $regml(4)
if +* iswm %modes { var %+modes $mid(%modes,2-) }
if -* iswm %modes { var %-modes $mid(%modes,2-) }
if (%+modes) || (%-modes) {
var %x 1, %tmpmodes = $remove(%modes,-,+)
while (%x <= $len(%tmpmodes)) {
if ($mid(%tmpmodes,%x,1) == o) {
if (%+modes) var %opnicks = %opnicks $gettok(%nicks,%x,32)
if (%-modes) var %dopnicks = %dopnicks $gettok(%nicks,%x,32)
}
elseif ($mid(%tmpmodes,%x,1) == v) {
if (%+modes) var %vnicks = %vnicks $gettok(%nicks,%x,32)
if (%-modes) var %dvnicks = %dvnicks $gettok(%nicks,%x,32)
}
inc %x
}
if %opnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hadd -m $+(%chan,_nickmodes) $v1 op | inc %x } }
if %vnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hadd -m $+(%chan,_nickmodes) $v1 voiced | inc %x } }
if %dopnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hdel -m $+(%chan,_nickmodes) $v1 | inc %x } }
if %dvnicks { var %x = 1 | while ($gettok($v1,%x,32)) { .hdel -m $+(%chan,_nickmodes) $v1 | inc %x } }
}
}
;On Notice
elseif $regex($1-,^:(.+)\!.*\@.* NOTICE .* :(.*)$) {
var %nick $regml(1), %text = $regml(2)
tokenize 32 %text
if %nick == AuthServ {
if $hget($sockname,accountexists) == 0 {
if ($regex($1-,^Account information for .+:$)) { .hadd -m $sockname accountexists 1 }
else .hdel -sw $sockname accountexits
}
}
}
;On Join
elseif $regex($1-,^:(.+)\!.+\@.+ JOIN (.+)) {
var %nick $regml(1), %chan = $regml(2), %hostmask = *!*@ $+ $gettok($1,2,64)
if (%nick != %me) {
if (!$hget(Authname,%hostmask)) .hadd -m Authname %address $iif($authname($sockname,%nick),$v1,0)
if ($hget(Authname,%hostmask)) var %authname $v1
if (%authname) && ($read($scriptdirusers.db,w,%authname $+ :*)) var %userlevel $gettok($v1,2,58)
if (%userlevel >= 100) && (%userlevel < 200) || (%botmaster iswm %hostmask) %sw mode %chan +v %nick
elseif (%userlevel >= 200) || (%botmaster iswm %hostmask) %sw mode %chan +o %nick
}
}
;On Part
elseif $regex($1-,^:(.+)\!.+\@.+ PART (.+)) {
var %nick $regml(1), %chan = $regml(2)
;Remove all names from list when you part
if (%nick == %me) { .hfree -sw $+(%chan,_nickmodes) }
else .hdel -sw $+(%chan,_nickmodes) %nick
}
;On Quit
elseif $regex($1-,^:(.+)\!.+\@.+ QUIT) {
;Remove persons name when they quit.
var %x 1
while $hget(%x) {
var %y 1
while ($hfind($v1,*,%y,w)) { .hdel -sw $hget(%x) $v1 | inc %y }
inc %x
}
}
}
on *:socklisten:test:{ sockaccept test2 }
on *:udpread:rcon.logs:{
sockread %data
echo -s $bvar(%data,1-).text
}
on *:sockclose:PugBot_*:{
.timer $+ $sockname 0 30 sopen $sockname
}
alias -l sopen {
if (!$sock($1)) {
sockopen $1 $replace($hget(config,server),:,$chr(32))
sockmark $1 1
}
}
alias rawsend {
var %window $+(@,$hget(config,nickname))
if ($sock($1).status != Active) halt
sockwrite -n $1 $2-
if ($window(%window)) aline -p $v1 $timestamp Sent: $1-
}
alias rcon { var %sockname $+(rcon,$r(1,1000)) | sockudp -k %sockname $replace($1,:,$chr(32)) ÿÿÿÿchallenge rcon | sockmark %sockname $1- }
on *:udpread:rcon*:{
var %data | sockread %data | tokenize 32 %data
if ($1-2 == ÿÿÿÿchallenge rcon) {
var %challenge $3
if ($sock($sockname).mark) {
var %serv $gettok($v1,1,32), %rconpass = $gettok($v1,2,32), %cmd = $gettok($v1,3-,32)
sockudp $sockname $replace(%serv,:,$chr(32)) ÿÿÿÿrcon $qt(%challenge) %rconpass %cmd
}
}
sockclose $sockname
}
alias queryserv {
var %serv $gettok($1,1,58), %port = $gettok($1,2,58)
sockudp -k queryserv %serv %port ÿÿÿÿTSource Engine Query
sockmark queryserv %serv %port
set %beginticks $ticks
pause ms 150
if ($hget(queryserv,result)) { .hfree -sw queryserv | return $v1 }
}
on *:udpread:queryserv:{
var %ping = $calc($ticks - %beginticks)
sockread &data
breplace &data 0 254 32 160 | var %data $bvar(&data,1,$bvar(&data,0)).text
if %data {
var %hostname = $gettok(%data,2,254), %map = $gettok(%data,3,254), %gamedir = $gettok(%data,4,254)
var %mod = $gettok(%data,5,254)
if (!%pos) var %pos = 1
var %posn = $pos(%data,$gettok(%data,5,254),%pos), %gamechars = $len($gettok(%data,5,254))
var %chrclc = $calc(%posn + %gamechars), %bots = $iif($asc($right(%data,1)) == 254,0,$ifmatch)
var %tmpplayers = $mid(%data,%chrclc,3), %players = $iif($asc($mid(%tmpplayers,2,1)) == 254,0,$ifmatch)
var %maxplayers = $asc($right(%tmpplayers,1))
if (%maxplayers == 160) var %maxplayers = 32
var %string = $gettok(%data,6,254)
var %players2 = $iif($asc($mid(%players,2,1)) == 254,0,$ifmatch)
var %pwpos = $calc(%chrclc + $pos(%string,5,1) + 1)
var %password = $iif($right($mid(%data,%pwpos,6),1) == $chr(254),no,yes)
var %protocol = $asc($mid(%string,$iif(%players2 == 0,2,3),1))
if (!%protocol) var %protocol = 0
var %servertype = $iif($mid(%string,$iif(%players == 0,3,4),1) == d,Dedicated,Listen)
var %serveros = $iif($mid(%string,$iif(%players == 0,4,5),1) == l,Linux,Windows)
var %secure = $iif($mid($calc($len(%data) - 1),1) == $chr(254),no,yes)
.hadd -m $sockname result $gettok($sock($sockname).mark,1,32) ¶ %map ¶ %players ¶ %hostname ¶ %password
unset %beginticks | sockclose $sockname
}
}
alias -l mybinds {
var %x 1
while $hfind($+($1,_binds),*,%x,w) {
if (!$hget($sockname,tmpb)) hadd -mu1 $sockname tmpb $hget(config,trigger) $+ $hfind($+($1,_binds),*,%x,w)
else hadd -mu1 $sockname tmpb $hget($sockname,tmpb) $hget(config,trigger) $+ $hfind($+($1,_binds),*,%x,w)
inc %x
}
.hfree -sw $1 trigger
if $hget($sockname,tmpb) { .hfree -sw $sockname tmpb | return $v1 }
}
alias pause {
if ($version < 5.91) halt
elseif (!$regex(pause,$1-,/^m?s \d+$/Si)) halt
elseif ($1 == ms) && ($istok(95 98 ME,$os,32)) halt
elseif ($2 !isnum 1-) halt
var %wsh = wsh $+ $ticks, %cmd
if ($1 == s) %cmd = ping.exe -n $int($calc($2 + 1)) 127.0.0.1
else %cmd = pathping.exe -n -w 1 -q 1 -h 1 -p $iif($2 > 40,$calc($2 - 40),$2) 127.0.0.1
.comopen %wsh wscript.shell | .comclose %wsh $com(%wsh,run,1,bstr*,% $+ comspec% /c %cmd >nul,uint,0,bool,true)
}
alias -l sendcmd {
var %sw sockwrite -n $sockname, %nick = $1, %skin = $hget(config,skin)
if (!$sockname) echo -a Error, not connected.
elseif !$hget(%nick,ignored) {
var %lines 5, %secs = 4, %time = 30
.hinc $+(-mu,%secs) %nick floodcount
if $hget($1,floodcount) >= %lines {
%sw notice %nick : $+ $skin(%skin,Error,You are sending commands to quickly $+ $chr(44) you will be ignored for 30 secs)
.hadd $+(-mu,%time) %nick ignored 1
}
%sw $2-
}
}
alias authname {
if (!$2) || (!$sock($1)) halt
.hadd -m $1 getauthname $2
sockwrite -n $1 whois $2
pause ms 600
if ($hget($1,gotauthname)) { .hdel -sw $1 gotauthname | return $v1 }
}
;$skin(<SkinNumber>,<bindname>,<text>)
alias skin {
if ($1 == 1) { return 15,1[14,1«0,1»15,1 9 $+ $2 0,1«14,1»15,1]: 4,1 $+ $3- $+ }
elseif ($1 == 2) { return 15,1[14,1«0,1»15,1 4 $+ $2 0,1«14,1»15,1]: 9,1 $+ $3- $+ }
elseif ($1 == 3) {
var %color1 9,1, %color2 = 7,1, %color3 = 3,1
return 15,1[14,1«0,1»15,1 9 $+ $2 0,1«14,1»15,1]: %color1 $replace($3-,IP:,%color2 $+ IP: $+ %color1,PW:,%color3 $+ PW: $+ %color1,Map:,%color2 $+ Map:)
}
else return $3-
}
alias netip {
if ($1) || (!$isid) halt
elseif !$ip {
if ($hget(mIRC,ip)) return $v1
else {
var %sock getip
.sockclose %sock | .sockopen %sock whatismyip.com 80
pause s 1
if $hget(%sock,ip) { .hadd -m mIRC ip $v1 | .hfree -sw %sock | return $hget(mIRC,ip) }
}
}
else return $ip
}
on *:sockopen:getip:{
var %sw sockwrite -n $sockname
%sw GET / HTTP/1.1
%sw Host: whatismyip.com
%sw Connection: Close
%sw
}
on *:sockread:getip:{
var %data | sockread %data
if ($regex(%data,/<TITLE>WhatIsMyIP\.com - (.+)<\/TITLE>/i)) { .hadd -m $sockname ip $regml(1) }
}