aIRC — File Browser
aIRCv0.8.69 / aIRCv0.8.69 / addons / fserve1.mrc
fserve1.mrc — 30.32 KB — Download this file
;/**********************************************************************
; *
; * aIRC
; * File Server - file1
; *
; **********************************************************************/
;
alias _fserve.addonver { return 2.1 }
alias _fserve.unload {
}
alias fssetup {
if ($1 == on) || ($1 == off) { _fserve.turn $1 }
else { _fserve.setup $1- }
}
alias _fserve.turn {
if ($1 == off) {
_setsetup fserve fserve 0
.disable #_fserve
}
elseif ($1) {
_setsetup fserve fserve 1
.enable #_fserve
}
if ($show) { info.a File Server is $iif($_getsetup(fserve,fserve),ON,OFF) }
_fserve.init
}
alias _fserve.triggered {
if ($_flood2(3,__FSERVEnoFSERVE)) || ($2- != $null) { return }
var %trigger = $1,%reply = _puthelp $nick & _qnotice $nick,%reject = $_not($_getsetup(script,quiet-reject))
if ($_fserve.isbanned($fulladdress,%++handle)) { }
elseif ($fserv($nick)) {
if (%reject) { %reply FileServer is busy, try again later. }
_fserve.echo FileServer request by $nick rejected (existing session)
}
elseif ($_dcctotal.fserv >= $_getsetup(fserve,maxusers)) {
if (%reject) { %reply Sorry, my file server is full. Try again later. }
_fserve.echo FileServer request by $nick rejected (server full)
}
elseif ($isdir($_fserve.homedir(%trigger))) {
if ($_getsetup(fserve,useuserlist)) && (%++handle != $null) {
var %tmpflags = $_nickflags(%++handle)
if (x !isincs %tmpflags) {
if (%reject) { %reply Sorry, you don't have access to my file server. }
_fserve.echo FileServer request by $nick rejected (handle: %++handle $+ , user doesn't have the +x flag)
return
}
if (N isincs %tmpflags) {
if (%reject) { %reply Sorry, you don't have access to my file server. }
_fserve.echo FileServer request by $nick rejected (handle: %++handle $+ , user has the +N flag)
return
}
}
_delhsection fservetmpusr $nick
if (%++handle != $null) { _setd fservetmpusr $nick handle $ifmatch }
_setd fservetmpusr $nick address $fulladdress
_setd fservetmpusr $nick trigger %trigger
var %homedir = $shortfn($_fserve.homedir(%trigger)),%welcome = $shortfn($_fserve.welcome(%trigger))
fserve $nick $null $iif(%homedir,$shortfn(%homedir),$null) $shortfn(%welcome)
}
}
#_fserve off
ON *:JOIN:#:{
if ($_getsetup(fserve,triggers) == $null) { return }
if ($nick == $me) { _fserve.ad.chan $chan }
elseif ($_getsetup(fserve,advertonjoin)) && ($_fserve.isadvertchan($chan)) && ($fserv($nick).status != active) && ($_not($_fserve.isbanned($fulladdress,%++handle))) && ($_fserve.ad.msg($chan) != $null) { _automsghtchan $chan $nick _puthelp $nick & notice $nick $ifmatch }
}
ON *:TEXT:@find *:#:{ _fserve.@findlocator $nopath($strip($2-)) }
ON *:TEXT:@locator *:#:{ _fserve.@findlocator $nopath($strip($2-)) }
ON *:TEXT:&:#:{
if ($1- != $null) && ($_getsetup(fserve,triggers) != $null) {
var %triggers = $ifmatch
if ($istok(%triggers,$1-,32)) && ($_fserve.isactivetriggerforchan($1-,$chan)) { _fserve.triggered $1- }
elseif ($1- == !list) && ($fserv($nick).status != active) && ($_getsetup(fserve,advertonlist)) && ($_fserve.isadvertchan($chan)) && ($_not($_fserve.isbanned($fulladdress,%++handle))) {
if ($_flood2(4,__fserveno!find)) { return }
if ($_fserve.ad.msg($chan) != $null) { _puthelp $nick & notice $nick $ifmatch }
}
}
}
menu query {
$iif((=* iswm $active) && ($right($active,-1)),fserve):
}
ON *:FILERCVD:*:{
var %handle = $_get(fservetmpusr,$nick,handle),%size = $file($filename).size
_setsetup fserve Ufiles $calc($_getsetup(fserve,Ufiles) + 1)
_setsetup fserve Ubytes $calc($_getsetup(fserve,Ubytes) + %size)
if ($_getsetup(fserve,useuserlist)) && (%handle != $null) {
_fserve.setuserfields %handle
var %ratio = $_getsetup(fserve,ratio),%credits = $calc($_fserve.getuser(%handle,credits) + (%size * %ratio))
if (%ratio) { _fserve.setuser %handle credits %credits }
if ($fserv($nick).status == active) && ($_get(fservetmpusr,$nick,logged)) {
_fservemsg $nick File Received: $^'($nopath($filename)) $^p($_size(%size))
if (%ratio) { _fservemsg $nick Credits: %credits }
}
_fserve.setuser %handle Ufiles $calc($_fserve.getuser(%handle,Ufiles) + 1)
_fserve.setuser %handle Ubytes $calc($_fserve.getuser(%handle,Ubytes) + %size)
}
}
ON *:FILESENT:*:{
var %handle = $_get(fservetmpusr,$nick,handle),%size = $file($filename).size,%sendnum = $send($nick,0),%ttf,%cps = 0
while (%sendnum) {
%ttf = $send($nick,%sendnum).path $+ $send($nick,%sendnum).file
if (%ttf = $filename) { %cps = $send($nick,%sendnum).cps }
dec %sendnum
}
_setsetup fserve Dfiles $calc($_getsetup(fserve,Dfiles) + 1)
_setsetup fserve Dbytes $calc($_getsetup(fserve,Dbytes) + %size)
_fserve.toplist $filename
if (%cps > $_fserve.getrecordcps) {
_setsetup fserve recordcps %cps
_setsetup fserve recordby $nick
}
if ($fserv($nick).status != active) { return }
if ($_getsetup(fserve,useuserlist)) && (%handle != $null) {
_fserve.setuserfields %handle
if ($fserv($nick).status == active) && ($_get(fservetmpusr,$nick,logged)) { _fservemsg $nick File Sent: $^'($nopath($filename)) $^p($_size(%size)) }
_fserve.setuser %handle Dfiles $calc($_fserve.getuser(%handle,Dfiles) + 1)
_fserve.setuser %handle Dbytes $calc($_fserve.getuser(%handle,Dbytes) + %size)
}
}
ON *:SENDFAIL:*:{
var %handle = $_get(fservetmpusr,$nick,handle)
if ($fserv($nick).status != active) { return }
if ($_getsetup(fserve,useuserlist)) && (%handle != $null) {
_fserve.setuserfields %handle
var %size = $file($filename).size,%ratio = $_getsetup(fserve,ratio),%credits = $calc($_fserve.getuser(%handle,credits) + %size)
if (%ratio) { _fserve.setuser %handle credits %credits }
if ($fserv($nick).status == active) && ($_get(fservetmpusr,$nick,logged)) {
if (%ratio) {
_fservemsg $nick Failed to send: $^'($nopath($filename)) - Your credits will be restored
_fservemsg $nick Credits: %credits
}
else { _fservemsg $nick Failed to send: $^'($nopath($filename)) }
}
}
else { _fservemsg $nick Failed to send: $^'($nopath($filename)) }
}
CTCP *:DCC SEND *:*:{
if (%+dcc.badcc) { return }
var %handle = $_get(fservetmpusr,$nick,handle),%trigger = $_get(fservetmpusr,$nick,trigger)
if (%handle != $null) && ($fserv($nick).status == active) && ($_get(fservetmpusr,$nick,logged)) {
if ($_dccignore(%+dcc.file)) || (N isincs %++flags) { }
else {
var %ext = $iif($count(%+dcc.file,.) > 0,$gettok(%+dcc.file,-1,46)),%extM = $iif($count(%+dcc.file,.) > 0,*. [ $+ [ %ext ] ] )
if ($_dcctotal.get($nick) > $_getsetup(dcc,maxGuser)) {
_fservemsg $nick I'm receiving too many files from you. Please try again later.
halt
}
elseif ($_dcctotal.get > $_getsetup(dcc,maxGtotal)) {
_fservemsg $nick I'm receiving too many files. Please try again later.
halt
}
elseif ($file($findfile($_fserve.homedir(%trigger),%+dcc.file,1)).size >= %+dcc.size) {
_fservemsg $nick I can't accept $^'(%+dcc.file) It's in my File Server
halt
}
elseif ($file($findfile($getdir(%extM),%+dcc.file,1)).size >= %+dcc.size) {
_fservemsg $nick I can't accept $^'(%+dcc.file) I already have it
halt
}
else {
_timer -o 1 0 .sreq $iif($_minio(0,16),+m,-m) $sreq
.sreq +m auto
if ($_getsetup(fserve,ratio)) && ($_fserve.getuser(%handle,credits)) {
_fservemsg $nick Accepting $^'(%+dcc.file)
_fservemsg $nick $calc(%+dcc.size * $_getsetup(fserve,ratio)) credits will be given upon completion
}
}
}
}
}
ON *:SERV:*:{
var %i,%logged = $_get(fservetmpusr,$nick,logged),%handle = $_get(fservetmpusr,$nick,handle),%trigger = $_get(fservetmpusr,$nick,trigger)
.timer_FSERVELOGINTIMEOUT $+ $nick off
if ($_not(%logged)) {
if (%handle == $null) {
%handle = $1-
if (%handle == new) && ($_getsetup(script,open-telnets)) {
_fservemsg $nick You now get to pick a nick to use on the file server,
_fservemsg $nick and a password so nobody else can pretend to be you.
_fservemsg $nick Please remember both!
_fservemsg $nick Enter the nickname you would like to use.
_setd fservetmpusr $nick newuser 1
_setd fservetmpusr $nick handle NEW
}
elseif ($_isuser(%handle)) {
var %tmpflags = $_nickflags(%handle)
_setd fservetmpusr $nick handle %handle
if ($_fserve.isbanned($null,%handle)) {
_fservemsg $nick You are banned from my File Server
_fserve.close $nick
}
elseif ($_userpass(%handle) == $null) {
_fservemsg $nick Can't log in until you have a password set.
_fserve.close $nick
}
elseif (x !isincs %tmpflags) || (N isincs %tmpflags) {
_fservemsg $nick You don't have access.
_fserve.close $nick
}
else { _fservemsg $nick Enter your password. }
}
else {
_fservemsg $nick You don't have access.
_fserve.close $nick
}
halt
}
elseif ($_get(fservetmpusr,$nick,newuser)) {
if (%handle == new) {
if ($_isinvalidinitialchar4handle($1-)) {
_fservemsg $nick You can't start your nick with the character ' $+ $left($1,1) $+ '
_fservemsg $nick Try another one please:
}
elseif ($_not($_isvalidhandle($1-))) {
_fservemsg $nick You can't use weird symbols in your nick.
_fservemsg $nick Try another one please:
}
elseif ($_isuser($1)) {
_fservemsg $nick Sorry, that nickname is taken already.
_fservemsg $nick Try another one please:
}
elseif ($1 == $me) { _fservemsg $nick Sorry, can't use my name for a nick. }
else {
_fservemsg $nick Okay, now choose and enter a password:
_setd fservetmpusr $nick handle $1
}
_fserve.logintimeout $nick 1
}
elseif ($len($1) < 4) {
_fservemsg $nick Try to use at least 4 characters in your password.
_fservemsg $nick Choose and enter a password:
_fserve.logintimeout $nick 1
}
elseif ($_not($_isvalidhandle($1,ignorefirstcharacter))) {
_fservemsg $nick You can't use weird symbols in your password.
_fservemsg $nick Try another one please:
_fserve.logintimeout $nick 1
}
else {
var %ident = $gettok($gettok($_address($nick,5),1,64),2,33),%ip = $fserv($nick).ip,%addy = $_get(fservetmpusr,$nick,address)
_putlog New user via fserve: [[ $+ %handle $+ ]] $+ $iif(%ident != $null,%ident,?) $+ @ $+ %ip $+ / $+ ?
if ($_getsetup(script,notify-newusers) != $null) {
var %i = 1,%notify = $replace($ifmatch,$chr(32),$chr(44)),%n = $numtok(%notify,44)
while (%i <= %n) {
_cmd.note $null $gettok(%notify,%i,44) introduced to %handle $+ , %ip
inc %i
}
}
_dummy $_creatinguser(%handle,$_mask(%addy,%_maskuser),$_changemodes($_getsetup(script,default-flags),+xF),$1)
_fservemsg $nick Remember that! You'll need it next time you log in.
_fservemsg $nick You now have an account on $me
_fserve.setuserfields %handle
_fserve.login $nick %handle
}
halt
}
else {
if ($1- != $null) && ($_isuser(%handle)) && ($_passwdok(%handle,$1-)) {
if ($_fserve.getuser(%handle,credits) == $null) { _fserve.setuser %handle credits $_getsetup(fserve,initialcredits) }
_fserve.login $nick %handle
}
else {
_fservemsg $nick Negative on that Houston.
_fserve.close $nick
}
halt
}
}
elseif ($istok(quit bye exit,$1,32)) {
if (%handle != $null) { _fserve.logout %handle }
}
elseif ($1 == help) {
_fserve.help $nick $2-
halt
}
elseif ($istok(s c,$1-,32)) { }
elseif ($istok($_getsetup(fserve,commands),$1,32)) {
if ($1 == read) { }
elseif ($istok(search srch find,$1,32)) {
if ($2- != $null) {
if (?:\* iswm $remove($_fserve.homedir(%trigger),$fserv($nick).cd)) { var %dir = $fserv($nick).cd }
else { var %dir = $_fserve.homedir(%trigger) }
var %file = $findfile(%dir,$nopath($2-),1)
if (%file != $null) { _fservemsg $nick $+ $2 $+ : $replace($remove(%file,%dir),\,/) }
else { _fservemsg $nick $+ $2 $+ : File not found }
}
else { _fserve.help $nick $1 }
halt
}
elseif ($1 == msg) {
if ($2 == $null) || ($3- == $null) { _fserve.help $nick msg }
elseif ($fserv($2).status == active) && ($_get(fservetmpusr,$2,logged)) {
_fservemsg $nick Message sent
_fservemsg $2 < $+ $nick $+ > $3-
}
else { _fservemsg $nick No such user $2 }
halt
}
elseif ($1 == say) {
if ($2- == $null) { _fserve.help $nick say }
else {
var %i = 1,%f = $fserv(0)
while (%i <= %f) {
if ($fserv(%i).status == active) && ($_get(fservetmpusr,$fserv(%i),logged)) { _fservemsg $fserv(%i) < $+ $nick $+ > $2- }
inc %i
}
}
halt
}
elseif ($1 == who) {
_fservemsg $nick current users:
var %i = 1,%f = $fserv(0),%m,%fs = 0
while (%i <= %f) {
if ($fserv(%i).status == active) && ($_get(fservetmpusr,$fserv(%i),logged)) {
_fservemsg $nick $+ %i $+ : $fserv(%i)
inc %fs
}
inc %i
}
_fservemsg $nick total: $_nsingoplur(%fs,user,users)
halt
}
elseif ($1 == ratio) {
if ($_getsetup(fserve,useuserlist)) && ($_getsetup(fserve,ratio)) { _fservemsg $nick Fserve ratio: [1: $+ $ifmatch $+ ] }
else { _fservemsg $nick Fserve ratio: full leech }
haltdef
}
elseif ($1 == credits) {
if (%handle == $null) || ($_fserve.getuser(%handle,leech)) { _fservemsg $nick You have leech access }
else {
if ($_fserve.getuser(%handle,credits) == $null) { _fserve.setuser $nick credits $_getsetup(fserve,initialcredits) }
var %hcredits = $_fserve.getuser(%handle,credits)
_fservemsg $nick You have $+ %hcredits $+ $_singoplur(%hcredits,credit,credits)
}
halt
}
elseif ($1 == get) {
_dummy $_fserve.sendrequest($nick,%handle,$cd,$nopath($2-))
halt
}
elseif ($1 == stats) {
if ($2- == $null) {
_fservemsg $nick
_fservemsg $nick Stats for %trigger
_fservemsg $nick Current:
_fservemsg $nick users: $_dcctotal.fserv $+ / $+ $_getsetup(fserve,maxusers)
_fservemsg $nick downloads: $_dcctotal.send $+ / $+ $_getsetup(dcc,maxStotal)
_fservemsg $nick uploads: $_dcctotal.get $+ / $+ $_getsetup(dcc,maxGtotal)
_fservemsg $nick Total:
_fservemsg $nick logins: $_fserve.getlogins
_fservemsg $nick downloads: $_getsetup(fserve,Dfiles) $^bp($_size($_getsetup(fserve,Dbytes)))
_fservemsg $nick uploads: $_getsetup(fserve,Ufiles) $^bp($_size($_getsetup(fserve,Ubytes)))
}
else {
var %file = $cd $+ \ $+ $2-,%size = $file(%file).size,%t = $read -nw"* $+ %file $+ " $_usrdir(fs_sent.log),%l = $readn,%n
if (%l) { var %t = $read -nl $+ %l $_usrdir(fs_sent.log),%n = $gettok(%t,1,32) }
if (%n) { _fservemsg $nick $^'($2-) $^bp($_size(%size)) has been downloaded $_nsingoplur(%n,time,times) }
else { _fservemsg $nick No records for $^'($2-) }
}
halt
}
elseif ($1 == info) {
_fservemsg $nick
if (%handle != $null) {
_fservemsg $nick User info for $nick - %handle
_fservemsg $nick credits: $iif($_fserve.getuser(%handle,credits),$_fserve.getuser(%handle,credits),leech)
}
else {
_fservemsg $nick User info for $nick
_fservemsg $nick credits: leech
}
_fservemsg $nick Current:
_fservemsg $nick downloads: $_dcctotal.send($nick) $+ / $+ $_getsetup(dcc,maxSuser)
_fservemsg $nick uploads: $_dcctotal.get($nick) $+ / $+ $_getsetup(dcc,maxGuser)
if (%handle != $null) {
_fservemsg $nick Total:
_fservemsg $nick downloads: $_fserve.getuser(%handle,Dfiles) $^bp($_size($_fserve.getuser(%handle,Dbytes)))
_fservemsg $nick uploads: $_fserve.getuser(%handle,Ufiles) $^bp($_size($_fserve.getuser(%handle,Ubytes)))
}
halt
}
elseif ($1 == top) {
var %fssentfile = $_usrdir(fs_sent.log),%lines,%topn,%win = @__fileservertop
_openwins %win
filter -fwteu 1 32 %fssentfile %win & $cd $+ \*
%lines = $line(%win,0)
%topn = %lines
if (%topn > 10) { %topn = 10 }
if ($_isint(2-)) && ($2- <= %topn) && ($round($2-,0) == $2-) {
var %line = $line(%win,$2-),%dls = $gettok(%line,1,32),%file = $_fixfilename($gettok(%line,2-,32))
if ($_isfile(%file)) { _dummy $_fserve.sendrequest($nick,%handle,$nofile(%file),$nopath(%file)) }
else { _fservemsg $nick Top file $^'($2) $^p($nopath(%file)) not found }
}
elseif (%topn) {
_fservemsg $nick
_fservemsg $nick Top %topn files in %trigger
_fservemsg $nick
_fservemsg $nick $_fillright(4, ,N) $_fillright(7, ,DLs) File
%i = 1
while (%i <= %topn) {
var %line = $line(%win,%i),%dls = $gettok(%line,1,32),%file = $nopath($gettok(%line,2-,32))
_fservemsg $nick $_fillright(4, ,%i) $_fillright(7, ,%dls) %file
inc %i
}
_fservemsg $nick
_fservemsg $nick Type 'top <number>' to download a file
}
else { _fservemsg $nick No files downloaded yet in %trigger }
halt
}
elseif ($1 == queue) {
var %rwin = @__fserveremotequeue,%i = 1,%n = $_nickqueue2win(-n,%rwin,$nick)
if (%n) {
_fservemsg $nick You have $_nsingoplur(%n,file,files) queued
while (%i <= %n) {
_fservemsg $nick $+ %i $+ - $line(%rwin,%i)
inc %i
}
close -@ %rwin
}
else { _fservemsg $nick You have no files queued. }
halt
}
elseif ($1 == sends) {
var %i = 1,%n = $_dcctotal.send
if (%n) {
_fservemsg $nick There $_singoplur(%n,is,are) %n dcc $_singoplur(%n,send,sends)
while (%i <= %n) {
var %nick = $send(%i),%file = $send(%i).file,%cps = $send(%i).cps,%pc = $send(%i).pc,%sent = $send(%i).sent,%size = $send(%i).size,%left = $calc((%size - %sent) / %cps)
if ($send(%i).status == active) {
if (%left) { _fservemsg $nick $chr(35) $+ %i $+ - ' $+ %file $+ ' to $+ %nick $+ %pc $+ $chr(37) ( $+ $_size(%sent) $+ / $+ $_size(%size) $+ ) $_size(%cps) $+ /s ( $+ $_duration(%left) left) }
else { _fservemsg $nick $chr(35) $+ %i $+ - ' $+ %file $+ ' to $+ %nick $+ %pc $+ $chr(37) ( $+ $_size(%sent) $+ / $+ $_size(%size) $+ ) $_size(%cps) $+ /s }
}
else { _fservemsg $nick $chr(35) $+ %i $+ - ' $+ %file $+ ' to $+ %nick $+ %pc $+ $chr(37) ( $+ $_size(%sent) $+ / $+ $_size(%size) $+ ) (Inactive) }
inc %i
}
_fservemsg $nick - End of sends list
}
else { _fservemsg $nick There are no dcc sends }
halt
}
elseif ($1 == queues) {
var %win = @__fservetmpqueues,%i = 1,%n
_nickqueue2win -i %win * *
%n = $result
if (%n) {
_fservemsg $nick There $_singoplur(%n,is,are) %n waiting $_singoplur(%n,queue,queues)
while (%i <= %n) {
var %line = $line(%win,%i),%nick = $gettok(%line,1,32),%file = $gettok(%line,2-,32),%size = $file(%file).size,%nopath = $nopath(%file)
_fservemsg $nick $chr(35) $+ %i $+ - ' $+ %nopath $+ ' to $+ %nick $+ ( $+ $_size(%size) $+ )
inc %i
}
_fservemsg $nick - End of queues list
}
else { _fservemsg $nick There are no waiting queues }
close -@ %win
halt
}
elseif ($1 == cancel) {
var %n = $_sendqueue.removenick($nick,$2-),%left = $_sendqueue.queues($nick)
if (%left = $null) { %left = 0 }
%left = ( $+ $_nsingoplur(%left,file,files) left)
if (%n) {
if ($2- != $null) && ($_not($_isint($remove($2-,$chr(44),-)))) { _fservemsg $nick You removed $_nsingoplur(%n,file,files) matching ' $+ $2- $+ ' from your queue. %left }
else { _fservemsg $nick You removed $_nsingoplur(%n,file,files) from your queue. %left }
}
elseif ($_isint($remove($2-,$chr(44),-))) { _fservemsg $nick You didn't have queues: $2- }
elseif ($2- != $null) { _fservemsg $nick You didn't have any files matching ' $+ $2- $+ ' in your queue. }
else { _fservemsg $nick You didn't have any files in your queue }
halt
}
elseif ($1 == cd) || ($1 == dir) || ($1 == ls) { return }
}
else {
if ($_getsetup(fserve,helponinvalid)) { _fserve.help $nick }
halt
}
}
ON *:OPEN:!:{ _fserve.onopen $nick }
#_fserve end
alias _fserve.checkfserves {
var %i = 1,%n = $fserv(0),%nick,%addy,%handle,%close,%zzz
while (%i <= %n) {
var %close = 0,%nick = $fserv(%i),%logged = $_get(fservetmpusr,%nick,logged),%handle = $_get(fservetmpusr,%nick,handle),%addy = $_get(fservetmpusr,%nick,address)
if (%logged) {
if ($_fserve.isbanned(%addy,%handle)) { %close = 1 }
}
elseif ($_fserve.isbanned(%addy,$null)) { %close = 1 }
if (%close) && ($istok(%zzz,%nick,32) == $false) {
_fservemsg %nick You are banned from my File Server
_fserve.close %nick
%zzz = $addtok(%zzz,%nick,32)
}
inc %i
}
}
alias _fserve.isbanned {
var %addy = $1,%handle = $2
if (%handle == $null) && (%addy != $null) { %handle = $_finduser(%addy) }
if (%handle != $null) && ($_fserve.getuser(%handle,BAN)) { return 2 }
if (%addy != $null) && ($hmatch($_list.tablename(fservebans),%addy,1).data) { return 1 }
return 0
}
alias _fserve.homedir {
var %t = trigger_ $+ $1,%c = $_getsetup(fserve,%t),%f = $gettok(%c,1,$asc(*)),%h = $gettok(%c,2,$asc(*)),%w = $gettok(%c,3,$asc(*))
if (%h == $null) {
if ($_mini(fileserver,homedir)) { _setsetup fserve %t %f * $ifmatch * %w }
}
return $gettok($_getsetup(fserve,%t),2,$asc(*))
}
alias _fserve.welcome {
var %t = trigger_ $+ $1,%c = $_getsetup(fserve,%t),%f = $gettok(%c,1,$asc(*)),%h = $gettok(%c,2,$asc(*)),%w = $gettok(%c,3,$asc(*))
if (%w == $null) {
if ($_mini(fileserver,welcome)) { _setsetup fserve %t %f * %h * $ifmatch }
}
return $gettok($_getsetup(fserve,%t),3,$asc(*))
}
alias fserve {
var %maintrigger = $gettok($_getsetup(fserve,triggers),1,32),%welcome = $iif($4,$4,$_fserve.welcome(%maintrigger))
tokenize 32 $_parameter($1,1,File Server [/fserve],1,$_activequery,Nick:) $iif($2,$2,$iif($_getsetup(dcc,maxGtotal),$_getsetup(dcc,maxGtotal),2)) $iif($3 != $null,$3,$iif($_fserve.homedir(%maintrigger) != $null,$_fserve.homedir(%maintrigger),$null))
if ($fserv($1)) { info.a There is an existing Fserve session with $1 }
elseif ($3- == $null) { error.a File Server Root directory not set. }
elseif ($isdir($3-) == $false) { error.a File Server Root directory $^'($3) not found }
else {
if ($nopath(%welcome) == $null) || ($isfile(%welcome) == $false) {
%welcome = $shortfn($_chfile($_fixfilename($_tmpdir(fstmp.fstmp))))
write -c " $+ %welcome $+ "
}
fserve $1 $2 $shortfn($3-) $shortfn(%welcome)
}
}
; $_fserve.getuser(<handle>,<field>)
alias _fserve.getuser { return $_ruini($1,$_nospaces(_fserve,$2)) }
; /_fserve.setuser <handle> <field> [content]
alias _fserve.setuser { _wuini $1 _fserve $+ $2 $3- }
alias _fservemsg {
if ($fserv($1).status == active) { msg = $+ $1 $$2- }
elseif ($_connected) { _puthelp $1 & _qnotice $1 $$2- }
}
alias _fserve.onopen {
var %nick = $1,%reply = _fservemsg %nick,%handle,%flags
%reply
%reply
%reply $me ( $+ Fserve: aIRC v $+ $_vers $+ +win $+ $bits (c)1997-2001 tabo)
%reply $+ $_aircweb
%reply
%reply
_fserve.help %nick
_setd fservetmpusr %nick newuser 0
if ($_getsetup(fserve,useuserlist)) {
%handle = $_get(fservetmpusr,%nick,handle)
%flags = $_nickflags(%handle)
if (%handle != $null) {
if ($_fserve.getuser(%handle,credits) == $null) { _fserve.setuser %handle credits $_getsetup(fserve,initialcredits) }
.timer -mo 1 0 _fserve.login %nick %handle
}
else {
_setd fservetmpusr %nick logged 0
.timer -mo 1 0 _fserve._onopenask %nick 0
}
}
else { .timer -mo 1 0 _fserve.login %nick }
}
alias _fserve._onopenask {
_fservemsg $1 Please enter your nickname.
if ($_getsetup(script,open-telnets)) { _fservemsg $1 (If you are new, enter 'NEW' here.) }
_fserve.logintimeout $1
}
alias _fserve.logintimeout {
var %to = $_getsetup(script,connect-timeout)
if ($_not($_isint(%to))) {
_setsetup script connect-timeout 15
%to = 15
}
.timer_FSERVELOGINTIMEOUT $+ $1 -o 1 %to _fserve.onlogintimeout $1-
}
alias _fserve.onlogintimeout {
if ($fserv($1).status == active) {
if ($2) { _fservemsg $1 Timeout. }
else { _fservemsg $1 Guess you're not there. Bye. }
close -f $1
}
}
alias _fserve.login {
if ($_fserve.isbanned($_get(fservetmpusr,$1,address),$2)) {
msg = $+ $1 You are banned from my file server
_fserve.close $1
return
}
_setd fservetmpusr $1 logged 1
_setd fservetmpusr $1 newuser 0
_setsetup fserve logins $calc($_fserve.getlogins + 1)
if ($2 != $null) {
msg = $+ $1
msg = $+ $1 Welcome $2
if ($_getsetup(fserve,ratio)) {
var %tmp = Ratio 1: $+ $ifmatch
if ($_fserve.getuser($2,credits) > 0) { %tmp = %tmp - credits: $ifmatch }
msg = $+ $1 %tmp
}
_fserve.setuser $2 lastlogin $ctime
_fserve.setuser $2 logins $calc($round($_fserve.getuser($2,logins),0) + 1)
}
}
alias _fserve.logout { _fserve.setuser $1 lastlogout $ctime }
alias _fserve.close {
close -f $1
_delhsection fservetmpusr $1
}
alias _fserve.setuserfields {
if ($_fserve.getuser($1,credits) !isnum) { _fserve.setuser $1 credits $_getsetup(fserve,initialcredits) }
_fserve.setuser $1 connections
_fserve._setuser $1 leech 0
_fserve._setuser $1 Ufiles 0
_fserve._setuser $1 Ubytes 0
_fserve._setuser $1 Dfiles 0
_fserve._setuser $1 Dbytes 0
_fserve._setuser $1 logins 0
_fserve._setuser $1 lastlogin 0
_fserve._setuser $1 lastlogout 0
_fserve._setuser $1 BAN 0
}
alias _fserve._setuser {
if ($_fserve.getuser($1,$2) == $null) { _fserve.setuser $1- }
}
alias _fserve.toplist {
var %fssentfile = $_usrdir(fs_sent.log),%t,%l,%n,%i,%max,%maxl,%win1 = @__fsnfs1,%win2 = @__fsnfs2
if ($isfile(%fssentfile) == $false) { write -c %fssentfile }
if ($1- != $null) {
var %t = $read -nw"* $+ $1- $+ " %fssentfile,%l = $readn
if (%l) { var %t = $read -nl $+ %l %fssentfile,%n = $calc($gettok(%t,1,32) + 1) }
else { %n = 1 }
write $iif(%l,-l [ $+ [ %l ] ] ) %fssentfile %n $1-
}
}
alias fssay {
tokenize 32 $_parameter($1-,1,Fserve Say [/fssay],normal,$null,Message:)
var %i = 1,%f = $fserv(0),%fs = 0
while (%i <= %f) {
if ($fserv(%i).status == active) && ($_get(fservetmpusr,$fserv(%i),logged)) {
_fservemsg $fserv(%i) <@ $+ $me $+ > $1-
inc %fs
}
inc %i
}
if (%fs) { info.a Fserve message: $1- }
else { error.a No active fserve sessions }
}
alias _fserve.echo { info.a $1- }
alias -l _fserve.parm2wc {
var %string = * $+ $1- $+ *
while (** isin %string) { %string = $replace(%string,**,*) }
return %string
}
alias -l _fserve.@findlocator {
if ($_fserve.isbanned($fulladdress,%++handle)) { return }
if ($1- == $null) || ($_not($_getsetup(fserve,@find@locator))) || ($_fserve.@prot(0)) { return }
var %wc = $_fserve.parm2wc($1-),%wint = @__findlocatortmp,%found,%i = 1,%maxf = $_getsetup(fserve,@maxmatches),%reply = _puthelp $nick & _qprivmsg $nick,%echo
if ($len(%wc) <= 5) { return }
if ($_not($_isint(%maxf))) { %maxf = 6 }
%echo = Fserve Search request from $nick ( $+ $address $+ ) in $chan : " $+ $1- $+ "
_openwins %wint
%found = $_fserve.wc2win(%wc,%wint,$chan)
if (%found) {
if (%found > %maxf) { %echo = %echo - Found too many matches! ( $+ %found $+ ). Sending the first %maxf matches. }
else { %echo = %echo - Found $_nsingoplur(%found,match,matches) $+ . }
%reply Found $_nsingoplur(%found,match,matches) for ' $+ $1- $+ ' - Join the desired fserve to request a file - slots[ $+ $_dcctotal.send $+ / $+ $_getsetup(dcc,maxStotal) $+ ] ques[ $+ $_sendqueue.queues $+ / $+ $_getsetup(dcc,maxQtotal) $+ ]
var %i = 1,%tfile
while (%i <= %found) && (%i <= %maxf) {
%tfile = $gettok($line(%wint,%i),2-,32)
%reply %i $+ : $+ $nopath(%tfile) $+ [ $+ $_size($file(%tfile).size) $+ ] trigger[ $+ $gettok($line(%wint,%i),1,32) $+ ]
inc %i
}
if (%found > %maxf) { %reply There are $+ $calc(%found - %maxf) $+ more files matching ' $+ $1- $+ ' }
_dummy $_fserve.@prot(1)
}
else { %echo = %echo - No matches. }
info.a %echo
close -@ %wint
}
alias -l _fserve.wc2win {
var %wc = $1,%win = $2,%chan = $3,%ftriggers,%striggers = $_getsetup(fserve,triggers),%i = $numtok(%striggers,32),%t,%y,%dir
while (%i) {
var %t = $gettok(%striggers,%i,32),%y = triggerchan_ $+ %t,%y = $_getsetup(fserve,%y)
if ($_not($gettok(%y,1,32))) || ($istok($gettok(%y,2-,32),%chan,32)) {
%dir = $_fserve.homedir(%t)
if ($isdir(%dir)) { _dummy $findfile(%dir,%wc,0,aline %win %t $1-) }
}
dec %i
}
return $line(%win,0)
}
alias -l _fserve.@prot {
if (%__fserveno@find@locator.1) { return 1 }
if ($1) {
if (%__fserveno@find@locator.2) { return 1 }
if ($_getsetup(fserve,@secondsprot.state)) && ($_isint($_getsetup(fserve,@secondsprot.secs)) > 0) {
set -u [ $+ [ $ifmatch ] ] %__fserveno@find@locator.2 1
return 1
}
}
var %state = $_getsetup(fserve,@floodprot.state),%reqs = $round($_getsetup(fserve,@floodprot.reqs),0),%secs = $round($_getsetup(fserve,@floodprot.secs),0),%ignt = $round($_getsetup(fserve,@floodprot.ignt),0)
if (%state) && (%reqs) && (%secs) && (%ignt) && ($_flood.main(1,0,%reqs,0,%secs,__fservenocount@find@locator,l)) {
set -u [ $+ [ %ignt ] ] %__fserveno@find@locator.1 1
return 1
}
return 0
}