ircN for mIRC — File Browser

ircNformIRCv6.0 / ircNformIRCv6.0 / ircn / SYSTEM / Fserve.mrc

Fserve.mrc — 27.12 KB — Download this file

;%%%%%%%%%%%%%%%%%%%%%%%%
;script iServer
;version 2.4ß
;author icN, J03
;email jpal@baraboo.com
;url None
;%%%%%%%%%%%%%%%%%%%%%%%%
on 1:JOIN:# {
  if ((%fserve == on) && ($nick != $me)) { 
    if (($fs.add.typ.chk($chan) == join) || ($fs.add.typ.chk($chan) == both)) {
      if ($readini -n mirc.ini ircN fservmsg) .quote notice $nick : $+ $readini mirc.ini ircN fservmsg
      else .quote notice $nick :Welcome to $chan $+ ! To join my file server, type  $+ %fcomnd $+  in the channel
    }  
  }
}
on 1:TEXT:%fcomnd:# {
  if ($ulevel == 10) halt
  else {
    if ($check.chan($nick,$chan) == yes) {
      if ($fserv(0) < %maxfsrv) {
        set $fs.add.var($nick) $address($nick,3)
        .fserve $nick %maxdl %fservedir $td(welcome.txt)
        .quote notice $nick :Your request has been accepted.  Starting DCC.
      }
      else .quote notice $nick :Sorry, too many users logged in ( $+ %maxfsrv $+ ).  Please try again later.
    }
  }
}  
on 1:TEXT:%fcomnd:? {
  if ($ulevel == 10) halt
  else {
    if ($msg.chk($nick) == yes) {
      if ($fserv(0) < %maxfsrv) {
        set $fs.add.var($nick) $mask( [ [ $nick ] $+ ! $+ [ $address ] ] ,3)         
        .fserve $nick %maxdl %fservedir $td(welcome.txt)
        .quote notice $nick :Your request has been accepted.  Starting DCC.
      }
      else .quote notice $nick :Sorry, too many users logged in ( $+ %maxfsrv $+ ).  Please try again later.
    }
  }
}  
on 1:SERVOPEN {
  writeini $td(fsnames.txt) UsersUsers $rb($nick) no
  set $fs.last.var($nick) No input
  if ($fschk($fserv($nick).ip) == 0) {
    msg =$nick You already have an existing connection from IP $fserv($nick).ip $+ .
    msg =$nick Only one connection per IP allowed. Closing connection.
    msg =$nick  
    .timer 1 5 close -f $nick
    writeini $td(fsnames.txt) UsersUsers $rb($nick) no
  }
  elseif (%fpass == on) {
    if (($fs-credit($rb($nick))) && ($fs.addy($nick) != $nick)) {
      .timer 1 3 msg =$nick Sorry there is a user with that nick already, please use another nick unless you know the password
      .timer 1 3 msg =$nick Type 'pass <your pass>' to login... you have 1 minute to log in
      .timer 1 3 .timer 1 60 check.fserve $nick
      writeini $td(fsnames.txt) realnicks $nick $nick
    }
    elseif (($fs-credit($rb($nick)) == $null) && ($fs.addy($nick) == $null)) {
      .timer 1 3 msg =$nick Since this is your first visit, please type 'setpass <your password>' to create your account.
      writeini $td(fsnames.txt) realnicks $nick $nick
    }
    elseif ($nick == $fs.addy($nick)) {
      .timer 1 3 msg =$nick Welcome back  $+ $nick $+  $+ ! Type 'pass <your pass>' to login.
      writeini $td(fsnames.txt) realnicks $nick $nick
    }
    elseif (($fs.add.chk($fs.addy.var($nick))) && ($nick != $fs.addy.var($nick)) && ($fs.addy.var($nick) == $fs.hostmask($fs.addy($nick)))) {
      .timer 1 3 msg =$nick Welcome back  $+ $nick $+  (aka: $+ $fs.addy($nick) $+ ) $+ ! Type 'pass <your pass>' to login.
      writeini $td(fsnames.txt) realnicks $nick $fs.addy($nick)
    }
  }
  elseif (%fpass == off) {
    if (($fs-credit($rb($nick))) && ($fs.addy($nick) != $nick)) {
      .timer 1 3 msg =$nick There is a user with that nick already, please use another nick
      .timer 1 3 msg =$nick $nick is not $nick $+ , so closing...
      close -f $nick
      halt
    }
    elseif ($nick == $fs.addy($nick)) {
      .timer 1 3 msg =$nick Welcome back  $+ $nick $+  $+ !
      writeini $td(fsnames.txt) UsersUsers $rb($nick) yes
      writeini $td(fsnames.txt) realnicks $nick $nick
    }
    elseif (($fs.add.chk($fs.addy.var($nick))) && ($nick != $fs.addy.var($nick)) && ($fs.addy.var($nick) == $fs.hostmask($fs.addy($nick)))) {
      .timer 1 3 msg =$nick Welcome back  $+ $nick $+  (aka: $+ $fs.addy($nick) $+ ) $+ !
      writeini $td(fsnames.txt) UsersUsers $rb($nick) yes
      writeini $td(fsnames.txt) realnicks $nick $fs.addy($nick)
    }
    else {
      if ($fs-credit($rb($nick)) == $null) && ($fs.addy($nick) == $null) {
        writeini $td(fsnames.txt) realnicks $nick $nick
        writeini $td(fsnames.txt) UsersUsers $rb($nick) yes
        writeini $td(fsnames.txt)  address $fs.addy.var($nick) $rb($nick)
        writeini $td(fsnames.txt) $rb($nick) hostmask $fs.addy.var($nick)
        writeini $td(fsnames.txt) $rb($nick) credit %scredits
        writeini $td(fsnames.txt) $rb($nick) password nopass
        writeini $td(fsnames.txt) $rb($nick) upload 0
        writeini $td(fsnames.txt) $rb($nick) group none
        writeini $td(fsnames.txt) $rb($nick) download 0
        writeini $td(fsnames.txt) $rb($nick) info none
        writeini $td(fsnames.txt) $rb($nick) fileup 0
        writeini $td(fsnames.txt) $rb($nick) filedown 0
        writeini $td(fsnames.txt) $rb($nick) ratio %ratio
        write -ds $+ $rn($rb($nick)) $td(fusers.txt)
        write $td(fusers.txt) $rn($rb($nick))
        msg =$nick  $+ $nick $+  $+ ( $+ $fs.addy.var($nick) $+ )
        msg =$nick $totals($rn($rb($nick)))
      }
    }
  }
  .timer 1 3 msg =$nick Help is available, type 'help'.
  if (%filetypes != all) .timer 1 3 msg =$nick I accept these file types: %filetypes 
  start.timer $nick
  if (%fstatus == on) && ($window(@fstatus) == $null) fstatus on
  elseif (%fstatus == on) && (%fstatus.timer == $null) { .timer 0 3 f.stat -u | set %fstatus.timer $ltimer }
}
on 1:SERVCLOSE {
  remini $td(fsnames.txt) usersusers $rb($nick)
  remini $td(fsnames.txt) realnicks $rb($nick)
  fs.time.unset $nick
  if ($fserve.chat($nick)) fserve.chat.off $nick
  fs.add.del $nick
  fs.last.unset $nick
}
on 1:INPUT {
  if ($left($1,1) != /) {
    if ((= isin $active) && ($1 == chat) && ($2 == on) && ($fserve.chat($remove($active,=)) == $null) && ($valid($remove($active,=)) == 1)) {
      fserve.chat.on $remove($active,=)
      msg $active Chat mode enabled.
    }
    elseif ($fserve.chat($remove($active,=)) && (= isin $active) && ($1 == chat) && ($2 == off)) {
      fserve.chat.off $remove($active,=)
      msg $active Chat mode disabled.
    }
    else return
    halt
  }
}
on 1:SERV:* {
  if ($fserve.chat($nick)) halt
  set $fs.last.var($nick) $1- 
  if ($1 == pass) {
    if ($2) {
      if ($valid($nick) == 1) msg =$nick You have already logged in.
      elseif (($readini $td(fsnames.txt) $rn($nick) password == nopass) || ($readini $td(fsnames.txt) passwords $2 == $rn($rb($nick)))) {
        writeini $td(fsnames.txt) UsersUsers $rb($nick) yes
        msg =$nick User %fstnick logged in. Access restrictions apply.
        msg =$nick $totals($rn($rb($nick)))
      }
      else { msg =$nick Password not accepted. Logon failure, so quiting. | close -f $nick }
    }
    else msg =$nick Please enter a password.
  }
  elseif ($1 == setpass) {
    if ($2) {
      if ($readini $td(fsnames.txt) $rn($rb($nick)) password) msg =$nick You already have an account on this system.
      elseif (($readini $td(fsnames.txt) passwords $2) || ($2 == nopass)) msg =$nick Invalid password. Please try again.
      else {
        writeini $td(fsnames.txt) address $fs.addy.var($nick) $rb($nick)
        writeini $td(fsnames.txt) $rb($nick) hostmask $fs.addy.var($nick)
        writeini $td(fsnames.txt) passwords $2 $rb($nick)
        writeini $td(fsnames.txt) $rb($nick) password $2
        writeini $td(fsnames.txt) UsersUsers $rb($nick) yes
        writeini $td(fsnames.txt) $rb($nick) credit %scredits
        writeini $td(fsnames.txt) $rb($nick) upload 0
        writeini $td(fsnames.txt) $rb($nick) group none
        writeini $td(fsnames.txt) $rb($nick) download 0
        writeini $td(fsnames.txt) $rb($nick) info none
        writeini $td(fsnames.txt) $rb($nick) fileup 0
        writeini $td(fsnames.txt) $rb($nick) filedown 0
        writeini $td(fsnames.txt) $rb($nick) ratio %ratio
        write $td(fusers.txt) $rn($rb($nick))
        msg =$nick  
        msg =$nick Login Name:  $+ $rb($nick) $+  $+ ( $+ $fs.addy.var($nick) $+ )
        msg =$nick Password  : $2
        msg =$nick   
        msg =$nick $totals($rn($rb($nick)))
      }
    }
    else msg =$nick Please enter a password.
  }
  elseif ($1 == exit) { remini $td(fsnames.txt) usersusers $rb($nick) | close -f $nick }
  elseif ($1 == bye) { remini $td(fsnames.txt) usersusers $rb($nick) | close -f $nick }
  elseif ($valid($nick) == 2) msg =$nick Not logged in.
  elseif ($1 == dir) return
  elseif ($1 == ls) return
  elseif ($1 == cd..) return
  elseif ($1 == cd) {
    unset %checkdiz
    if ($2 != ..) %checkdiz = $cd $+ \ $+ $2 $+ \ $+ %dirchange
    if (($exists(%checkdiz)) && (%showdiz == on) && (%dirchange != dirinfo.srv)) .play =$nick %checkdiz 0
    else return
  }
  elseif (($1 == read) && ($exists( [ [ $cd ] $+ \ $+ [ $2 ] ] )) && ($right($2,3) == txt)) { .play =$nick [ [ $cd ] $+ \ $+ [ $2 ] ] 0 }
  elseif ($1 == chpass) {
    if (($readini $td(fsnames.txt) passwords $3 == $null) && ($readini $td(fsnames.txt) $rn($rb($nick)) password == $2) && ($3 != nopass)) {
      writeini $td(fsnames.txt) $rn($rb($nick)) password $3
      remini $td(fsnames.txt) passwords $2
      writeini $td(fsnames.txt) passwords $3 $rn($rb($nick))
      msg =$nick Password changed to ' $+ $3 $+ '.
    }
    else msg =$nick Password did not match or invalid pass, password left unchanged.
  }
  elseif ($1 == mystats) msg =$nick $totals($rn($rb($nick)))
  elseif ($1 == get) {
    if ((../ isin $2) || (..\ isin $2)) { msg =$nick Nice try. | close -f $nick }
    elseif ($2) {
      if (($2 == .) || (.. isin $2)) msg =$nick No such file.
      else {
        if (*.* !iswm $2) { msg =$nick No such file. | halt }
        set %getname $cd $+ \ $+ $2
        if ($exists(%getname) == $false) { msg =$nick No such file. | halt }
        elseif ($sends($nick) < %maxdl) {
          if ($abortfiles($rn($rb($nick)))) {
            if ($nopath(%getname) isin $abortfiles($rn($rb($nick)))) { 
              msg =$nick Resending " $+ $dcd($cd) $+ $2 $+ " ( $+ $lof(%getname) bytes)
              if ($remove($abortfiles($rn($rb($nick))),$nopath(%getname))) writeini $td(fsnames.txt) $rn($rb($nick)) aborted $remove($abortfiles($rn($rb($nick))),$nopath(%getname))
              else remini $td(fsnames.txt) $rn($rb($nick)) aborted
              %newupl = $pls($download($rn($rb($nick))),$lof(%getname))
              writeini $td(fsnames.txt) $rn($rb($nick)) download %newupl
              %newfup = $pls($downfile($rn($rb($nick))),1)
              writeini $td(fsnames.txt) $rn($rb($nick)) filedown %newfup
              unset %new* %fincred
              dcc send $nick %getname
            }
          }
          elseif (($ratio($rn($rb($nick))) == leech) || ($fs-credit($rn($rb($nick))) >= $lof(%getname))) {
            msg =$nick Sending " $+ $dcd($cd) $+ $2 $+ " ( $+ $lof(%getname) bytes)
            %newupl = $pls($download($rn($rb($nick))),$lof(%getname))
            writeini $td(fsnames.txt) $rn($rb($nick)) download %newupl
            %fincred = $sub($fs-credit($rn($rb($nick))),$lof(%getname))
            if (%fincred < 0) { set %fincred 0 }
            writeini $td(fsnames.txt) $rn($rb($nick)) credit %fincred
            %newfup = $pls($downfile($rn($rb($nick))),1)
            writeini $td(fsnames.txt) $rn($rb($nick)) filedown %newfup
            unset %new* %fincred
            dcc send $nick %getname
          }
          else {
            msg =$nick You do not have enough credits to download ' $+ $2 $+ ' ( $+ $lof(%getname) bytes)
            msg =$nick Please upload something first.
            msg =$nick $totals($rb($nick))
          }
        }
        else msg =$nick You are only allowed  $+ %maxdl $+  download(s) at a time, please wait.   
      }
    }
    else msg =$nick Please enter a file name.
  }
  elseif ($1 == help) .play -thelp =$nick $td(util.txt) 0
  elseif ($1 == fstats) {
    msg =$nick $center(44,$bd( [ %fservename ] Statistics))
    msg =$nick ============================================
    msg =$nick $center(44,Total users [ $+ [ $+ [ $lines($td(fusers.txt)) ] $+ ] $+ ] )
    msg =$nick 0.
    msg =$nick $center(44,$view.all.dl)
    msg =$nick 0.
    msg =$nick $center(44,$view.all.ul)
    msg =$nick 0.
    if (%total.files) msg =$nick $center(44,Total files in fserve: [ [ %total.files ] $+  counted  $+ [ %tot.date ] $+  ] )
    else msg =$nick $center(44,Total files in fserve: Never counted.)
    msg =$nick ============================================
  }
  elseif ($1 == who) {
    msg =$nick Current users on %fservename at $atime $+ .
    set %fsnicks ""
    set %i 0
    :start
    inc %i
    if ($fserv(%i)) { %fsnicks = %fsnicks $fserv(%i) | goto start }
    msg =$nick %fsnicks
  }
  elseif (($1 == msg) && ($2)) {
    set %i 0
    :start
    inc %i
    if (($fserv(%i)) && ($fserv(%i) == $2)) { msg =$nick Message sent to $2 $+ ... | msg = $+ $2 Message from  $+ $nick $+  $+ : $3- }
    elseif ($fserv(%i)) msg =$nick No such nick  $+ $2 
  }
  elseif (($1 == unfo) && ($2)) { writeini $td(fsnames.txt) $rn($rb($nick)) info $remove($remove($2-,|),/) | msg =$nick Your info: $2- }
  elseif (($1 == group) && ($2)) { writeini $td(fsnames.txt) $rn($rb($nick)) group $remove($remove($2,|),/) | msg =$nick Your group: $2 }
  elseif (($1 == fileinfo) && ($2)) {
    if $exists($td(files.txt)) {
      set %fdfd $read -ns $+ $2 $td(files.txt)
      if (%fdfd) { msg =$nick %fdfd }
      else msg =$nick No file information available for ' $+ $2 $+ '
    }
    if $exists($td(dfiles.txt)) {
      set %fsfs $read -ns [ $+ [ $2 ] ] $td(dfiles.txt)
      if (%fsfs) msg =$nick Description: %fsfs
      else msg =$nick No file description available for ' $+ $2- $+ '
      unset %fsfs %fdfd
    }
    else msg =$nick No file description available for ' $+ $2- $+ '
  }
  elseif (($1 == filedesc) && ($3)) {
    set %fdfd $read -ns [ $+ [ $2 ] ] $td(files.txt)
    if (%fdfd == $null) msg =$nick No such file.
    elseif ($rn($rb($nick)) !isin %fdfd) { msg =$nick You did not upload this file. | unset %fdfd }
    else {
      write -ds [ $+ [ $2 ] ] $td(dfiles.txt)
      write $td(dfiles.txt) $2 $3-
      msg =$nick Description ( $+ $2 $+ ): $3-
      unset %fdfd
    }
  }
  elseif (($1 == user) && ($2 == $null)) {
    msg =$nick %fservename user list.
    set %fsusers ""
    set %i 0
    :start
    inc %i
    if ($read -l $+ [ [ %i ] [ $td(fusers.txt) ] ] ) {
      set %fqsu $read -l $+ [ %i ] $td(fusers.txt)
      set %fsusers %fsusers $fix(11,%fqsu)
      goto start
    }
    else { msg =$nick %fsusers | unset %fsusers %fqsu }
  }
  elseif (($1 == user) && ($2)) {
    if ($fs-credit($rb($2)) == $null) msg =$nick No such user. Could have info under a different nick.
    else {
      msg =$nick --------------------------------
      msg =$nick User info for $rb($2)
      msg =$nick --------------------------------
      msg =$nick Info       : $readini $td(fsnames.txt) $rb($2) info
      msg =$nick Group      : $grp($rb($2))
      if ($ratio($rb($2)) == leech) msg =$nick  Ratio      : leech
      else msg =$nick Ratio      : 1: $+ $ratio($rb($2))
      msg =$nick Upload     : $upfile($rb($2)) files in $upload($rb($2)) bytes.
      msg =$nick Download   : $downfile($rb($2)) files in $download($rb($2)) bytes.
      msg =$nick Hostmask   : $fs.hostmask($rb($2))
      if ($ratio($rb($2)) == leech) { msg =$nick Credit Left: Unlimited }
      else { msg =$nick Credit Left: $fs-credit($rb($2)) bytes. }
      msg =$nick --------------------------------
    }
  }
  elseif ($1 == chat) {
    iecho Fserve user $hc($nick) has requested to chat.
    msg =$nick A message has been sent to admin for this request.
  }
  elseif ($1 == find) {
    set %fsfind $findfile(%fservedir,$2,1)
    if (%fsfind) msg =$nick  $+ $2 $+ : $replace($right(%fsfind,$sub($len(%fsfind),$len(%fservedir))),\,/)
    else msg =$nick No such file on this system.
    unset %fsfind
  }
  elseif ($1 == topfiles) {
    if ($2) && ($2 >= 1) && ($2 <= 10) {
      if ($exists($td(topdls.txt))) {
        set %i 0
        msg =$nick Top $2 download(s) as of %comp.time.done on %comp.date.done $+ .
        msg =$nick $str( ,5) $+ $fix(20,Filename)) Download(s)                   
        :loop
        inc %i
        if (%i < 10) msg =$nick $chr(160) $+ %i $+ . $top.list.veiw(%i)
        else msg =$nick %i $+ . $top.list.veiw(%i)        
        if (%i < $2) { goto loop }
        msg =$nick End of top download(s).
      }
      else  msg =$nick No top downloads compiled.          
    }
    else msg =$nick Syntax: topfiles <# between 1 and 10>
  }
  else msg =$nick Invalid command.
  halt
}

on 1:FILERCVD:* {
  if (($valid($nick) == 2) || ($fserv($nick).status == waiting) || ($fserv($nick).status == $null) || ($fslog($nick) == 0)) { halt }
  set %j 0
  :start
  inc %j
  if ($get(%j) == $null) { set %rctime n/a | set %cpsget n/a | goto next1 }
  elseif (($nick == $get(%j)) && ($nopath($filename) == $get(%j).file)) goto next
  goto start
  :next
  if ($get(%j).cps == n/a) { set %rctime n/a | set %cpsget n/a | goto next1 }
  set %cpsget $kps($get(%j).cps)
  %rctime = $lof($filename) / $get(%j).cps
  :next1
  msg =$nick Received $lof($filename) bytes in %rctime secs, ( $+ %cpsget $+ Kbps), transfer succeeded.
  msg =$nick Transfer finished successfully. Closing data connection.
  msg =$nick   
  %newupl = $pls($lof($filename),$upload($rn($rb($nick))))
  writeini $td(fsnames.txt) $rn($rb($nick)) upload %newupl
  if ($ratio($rn($rb($nick))) != leech) %newcred = $mpy($lof($filename),$ratio($rn($rb($nick)))) {
    %fincred = $fs-credit($rb($nick)) + %newcred
    writeini $td(fsnames.txt) $rn($rb($nick)) credit %fincred
  }
  %newfup = $pls($upfile($rn($rb($nick))),1)
  writeini $td(fsnames.txt) $rn($rb($nick)) fileup %newfup
  set %fsdfile $nopath($filename)
  write -ds [ $+ [ %fsdfile ] ] $td(files.txt)
  write $td(files.txt) %fsdfile -rwxrwxrwx  1 $rn($rb($nick))       $grp$rn($rb($nick)))       $lof($filename) $mid(4,7,$fulldate) $mid(1,5,$time) %fsdfile
  set %fdfd $read -ns [ $+ [ %fsdfile ] ] $td(files.txt)
  msg =$nick %fdfd
  msg =$nick  
  msg =$nick Type 'filedesc %fsdfile <description>' to set file description.
  msg =$nick  
  msg =$nick $totals($rn($rb($nick)))
  writeini $td(fstats.txt) ServeStats totul $pls($total.uploads,1)
  writeini $td(fstats.txt) ServeStats totul.size $pls($totul.size,$lof($filename))
  unset %cps* %fdfd %rctime %new* %fsdfile %fincred
  if (%fserve.timer == $null) && (%update.fs.time == on) { .timer 1 300 comp.list -s | set %fserve.timer $ltimer }
  halt
}
on 1:FILESENT:* {
  if (($valid($nick) == 2) || ($fserv($nick).status == waiting) || ($fserv($nick).status == $null) || ($fslog($nick) == 0)) { halt }
  set %i 0
  :start
  inc %i
  if ($send(%i) == $null) {
    set %sntime n/a
    set %cpssend n/a
    goto end
  }
  elseif (($nick == $send(%i)) && ($nopath($filename) == $send(%i).file)) goto next
  :next
  if ($send(%i).cps == n/a) { set %sntime n/a | set %cpssend n/a | goto next1 }
  set %cpssend $kps($send(%i).cps)
  %sntime = $lof($filename) / $send(%i).cps
  :next1
  msg =$nick Transmitted $lof($filename) bytes in %sntime secs, ( $+ %cpssend $+ Kbps), transfer succeeded.
  msg =$nick $totals($rn($rb($nick)))
  unset %cps* %sntime
  writeini $td(fstats.txt) downloads $filename $pls($fs.downloads($filename),1)
  writeini $td(fstats.txt) ServeStats totdl $pls($total.downloads,1)
  writeini $td(fstats.txt) ServeStats totdl.size $pls($totdl.size,$lof($filename))
  if ($exists($td(dlfiles.txt))) {
    if ($read -s $+ $filename $td(dlfiles.txt) == $null) write $td(dlfiles.txt) $filename
  }
  else write $td(dlfiles.txt) $filename
  if (%fserve.timer == $null) && (%update.fs.time == on) { .timer 1 300 comp.list -s | set %fserve.timer $ltimer }
  halt
}
ctcp +10:dcc send { .sreq ignore }
ctcp 1:dcc send {
  if ($fslog($nick) == 0) { .sreq %sreq }
  elseif ($valid($nick) == 2) {
    msg =$nick Not logged in.
    .sreq ignore
    close -s $nick $3
    halt
  }
  elseif ($gets($nick) >= %maxul) {
    msg =$nick You are uploading the maximum files at one time, please wait for one to finish.
    .sreq ignore
  } 
  elseif (((%filetypes != all) && $findtok(%filetypes,$right($3,3),44)) == $null) {
    msg =$nick I only accept these files: %filetypes 
    .sreq ignore
  }
  elseif ((%findfile == on) && ($findfile(%fservedir,$3,1))) {
    msg =$nick File already exists on this system.
    .sreq ignore
    close -s $nick $3
  }
  elseif (($6 > %maxfsize) && (%fmsize == on) && (%maxfsize)) {
    msg =$nick File size too large. Size limit is %maxfsize bytes.
    .sreq ignore
    close -s nick $3
  }
  else {
    set %i 0
    :start
    inc %i
    if ($fserv(%i) == $null) .sreq auto
    elseif ($fserv(%i) == $nick) {
      msg =$nick Ready to receive " $+ $3 $+ ".
      .sreq auto
    }
    else goto start
  }
}
on 1:SENDFAIL:* {
  if (($valid($nick) != 2) && ($fserv($nick).status != waiting) && ($fserv($nick).status) && ($fslog($nick) != 0)) {
    if ($abortfiles($rn($rb($nick)))) set %tmpa $abortfiles($rn($rb($nick))) writeini $td(fsnames.txt) $rn($rb($nick)) aborted $nopath($filename) $+ %tmpa
    elseif ($abortfiles($rn($rb($nick))) == $null) writeini $td(fsnames.txt) $rn($rb($nick)) aborted $nopath($filename)
    msg =$nick $totals($rn($rb($nick)))
    %newupl = $sub($download($rn($rb($nick))),$lof($filename))
    writeini $td(fsnames.txt) $rn($rb($nick)) download %newupl
    %newfup = $sub($downfile($rn($rb($nick))),1)
    writeini $td(fsnames.txt) $rn($rb($nick)) filedown %newfup
    msg =$nick  $+ $nopath($filename) did not complete
    msg =$nick You may get it again without losing credits.
  }
  halt
}
on 1:GETFAIL:* {
  if (($valid($nick) != 2) && ($fserv($nick).status != waiting) && ($fserv($nick).status) && ($fslog($nick) != 0)) {
    msg =$nick Your upload of  $+ $nopath($filename) $+  did not complete.
    msg =$nick You will not receive any credits.
    .remove $filename
  }
  halt
}

menu Channel {
  fserv
  .on/off
  ..on { fserv on }
  ..-
  ..off { fserv off }
  .-
  .users
  ..view all { fserve.users }
  ..clear all { clear.all }
  ..-
  ..new ratio { writeini $td(fsnames.txt) $$?="uUsername:" ratio $$?="new ratio (one num) <#\leech>" }
  ..give creds { givecred $$?="username:" $$?="Number of credits to give (in bytes):" }
  ..take creds { takecred $$?="username:" $$?="Number of credits to take (in bytes):" }
  ..-
  ..ban user { .auser =10 $$?="Enter nick or hostmask to ban:" | iecho $hc($!) has been banned from the fileserver. }
  ..dele ban { .ruser =10 $maddress($$?="Enter hostmask to unban:") | iecho $hc($maddress($!)) has been unbanned from the fileserver. }
  ..-
  ..dele user { deluser $$?="username to delete:" | iecho $hc($!) has been deleted from fileserver. }
  ..-
  ..help { pophelp cfusers }
  .advertise 
  ..setup { adv.window }  
  ..-
  ..chan adv
  ...start { start.msg }
  ...-  
  ...stop { stop.msg }
  ..-
  ..help { pophelp cfadvert }
  .setup
  ..motd file { run notepad $td(welcome.txt) }
  ..home dir { set %fservedir $$?="Enter new fileserver home directory:" | iecho $hc($!) is the new fileserver home directory. }
  ..command { set %fcomnd $$?="Command to start fserve (current [ %fcomnd ] )" | iecho $hc($!) is the new fileserver channel command. }
  ..start creds { set %scredits $$?="credits to start with (in bytes)" | iecho User start credits is now $hc($!) bytes. }
  ..-
  ..max
  ...max d/l { set %maxdl $$?="Maximum simultaneous d/l's:" | iecho $hc($!) is the maximum number of files a user can d/l at one time. }
  ...max u/l { set %maxul $$?="Maximum simultaneous u/l's:" | iecho $hc($!) is the maximum number of files a user can u/l at one time. }
  ...max login { set %maxfsrv $$?="Maximum fserves (current [ %maxfsrv ] )" | iecho $hc($!) is the new fileserver user limit. }
  ...max fsize
  ....on { set %fmsize on | set %maxfsize $$?="Maximum file size in bytes:" | iecho $hc($!) bytes is the new fileserver file size limit. }
  ....-
  ....off { set %fmsize off | set %maxfsize any }
  ..req pass
  ...on { set %fpass on }
  ...-
  ...off { set %fpass off }
  ..dupechk
  ...on { set %findfile on }
  ...-
  ...off { set %findfile off }
  ..user ratio
  ...on { set %ratio $$?="Default ratio (one num) <#\leech> :" | if (%ratio == leech) iecho Leech access given to all users. | else iecho Default User ratio is now 1: $+ $hc($!) }
  ...-
  ...off { set %ratio leech }
  ..valid files
  ...all { set %filetypes all | iecho All files accepted. }
  ...-
  ...set { set %filetypes $$?="Enter each type, separate with a comma" | iecho Files now accepted: $sc(%filetypes) $+ . }
  ..message
  ...on { set %showdiz on }
  ...off { set %showdiz off }
  ...-
  ...file { set %dirchange $$?="Name of file (i.e. file_id.diz)" }
  ..-
  ..help { pophelp cfsetup }
  .-
  .stats
  ..top 10
  ...view { view.top.all }
  ...-
  ...compile { comp.list }
  ...-
  ...update
  ....on { set %update.fs.time on | iecho Topfiles list will be compiled automatically. }
  ....-
  ....off { set %update.fs.time off | iecho You will have to compile the toplist manually. }
  ..totals
  ...view { view.stats window }
  ...-
  ...reset { remini $td(fstats.txt) ServeStats }
  ..-
  ..help { pophelp cfstats }
  .-
  .status
  ..on { fstatus on }
  ..-
  ..off { fstatus off }
  ..-
  ..help { pophelp cfstatus }
}
menu Query {
  fserv
  .user stats { user.window $rn($1) }
  .-
  .new ratio { writeini $td(fsnames.txt) $rn($1) ratio $$?="New ratio <# greater than 1 or leech>" }
  .give crds { givecred $rn($1) $$?="Number of credits to give (in bytes):" }
  .take crds { takecred $rn($1) $$?="Number of credits to give (in bytes):" }
  .-
  .ban user { .auser =10 $fs.hostmask($rn($1)) | iecho $hc($rn($1)) has been banned from the fileserver. }
  .dele ban { .ruser =10 $fs.hostmask($rn($1)) | iecho $hc($rn($1)) has been unbanned from the fileserver. }
  .-
  .dele user { deluser $1 }
  .-
  .help { pophelp qfserve }
}
menu nicklist {
  fserv
  .user stats { if ($rn($nick)) user.window $rn($1) | else user.window $1 $address($1,3)  }
  .-
  .help { pophelp nfserve }
}
menu @TopDownloads {
  recompile { window -c @TopDownloads | comp.list | view.top.all }
  -
  reset { window -c @TopDownloads | remini $td(fstats.txt) downloads | remove $td(topdls.txt) | remove $td(dlfiles.txt)  }
  -
  exit { set %toploc $swlc(@TopDownloads) | window -c @TopDownloads }
}
menu @Fstats {
  dclick { rline @Fstats 7 Counting files, please wait... | rline @Fstats 7 Total files in fserve:  $+ $tot.files $+  }
  reset { window -c @Fstats | remini $td(fstats.txt) ServeStats }
  -
  exit { set %fstatloc $swlc(@Fstats) | window -c @Fstats }
}
menu @fstatus {
  exit { set %fstatusloc $swlc(@fstatus) | window -c @fstatus | if ($script(fstatus.mrc)) .unload -rs fstatus.mrc  | if (%fstatus.timer) $timoff(%fstatus.timer,fstatus.timer)  }
}
menu @Fusers { 
  user stats:fusers.pop stats $strip($sline(@Fusers,1))
  -
  del user:fusers.pop del $strip($sline(@Fusers,1))
  ban user :fusers.pop ban $strip($sline(@Fusers,1))
  del ban :fusers.pop delban $strip($sline(@Fusers,1))
  -
  clear all:fusers.pop delall $strip($sline(@Fusers,1))
  -
  exit:window -c @Fusers
}