Initial import of the ircii-pana-1.1-final source tree.

git-svn-id: svn://svn.code.sf.net/p/bitchx/code/tags/ircii-pana-1.1-final@1 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
Kevin Easton
2008-02-25 09:25:32 +00:00
commit 28febcfea9
1429 changed files with 250653 additions and 0 deletions

414
script/file.tcl Normal file
View File

@@ -0,0 +1,414 @@
;#to contact the author of this fserve for any reason
;#(comments, suggestions, beefs) 264mlang@home.com
;#got a damn bug that makes a tcl.log file, read it and you;ll see
;#it writes that crap when you get a file, I don't know what could be wrong
;#just what youve been waiting for..a vfs for the fserve
;#implemented 1 dir level, some crappy color codes
;#configuration file saved as ~/fserve.config
bind nick - * nicktrick
bind ctcp - !trigger ahoy
bind pub - !trigger ahoy
bind hook - dcc_* flash
set dotimer off;
set maxusers 6;
set maxsends 5;
set dirnames [list 0];
set indexed [list 0];
set buffer [list 0];
set who [list 0];
set thechannel "#mychannel";
set channeldisplay "/ctcp $nickname !trigger to get on my fserve!"
set nicktrans [list 0];
proc settimer {args} {
global channeldisplay;
if {[string length $args]>0} {
set channeldisplay $args;
};#if
};#proc
proc readconfig {} {
global maxusers;
global maxsends;
global thechannel;
global dotimer;
global channeldisplay;
if {[catch {glob "~/fserve.config"}]!=1} {
set configfile [open "~/fserve.config" r]
set conf [read $configfile];
set maxusers [lindex $conf 0];
set maxsends [lindex $conf 1];
set dotimer [lindex $conf 2];
set channeldisplay [lindex $conf 3];
set thechannel [lindex $conf 4];
close $configfile;
};#if
};#proc
proc writeconfig {} {
global maxusers;
global maxsends;
global thechannel;
global dotimer;
global channeldisplay;
set configfile [open "~/fserve.config" w]
puts $configfile $maxusers;
puts $configfile $maxsends;
puts $configfile $dotimer;
puts $configfile "\{$channeldisplay\}";
puts $configfile $thechannel;
close $configfile;
putscr "wrote ~/fserve.config";
};#proc
proc toggletimer {} {
global dotimer;
if {[string match $dotimer on]} {
set dotimer off;
} else {set dotimer on;}
putscr "Timer turned $dotimer!";
};#proc
proc nicktrick {args} {
global nicktrans;
global who;
set oldnick [lindex $args 0];
set newnick [lindex $args 4];
set oldmatch [lsearch $nicktrans $oldnick]
if {$oldmatch<=0} {
for {set counter 0} {$counter<=[expr [llength [channels]]-1]} {incr counter} {
if {[onchan $newnick [lindex [channels] $counter]]} {
set ip [getchanhost $newnick [lindex [channels] $counter]];
};#if
};#for
set stuff [dccstats];
foreach check $stuff {
if {[string match [lindex $check 1] $oldnick] && [string match [lindex $check 7] "chat"] && $oldmatch<0} {
lappend nicktrans $newnick [lindex $check 8];
};#if
};#foreach
};#if
if {$oldmatch>0} {
set nicktrans [lreplace $nicktrans $oldmatch [expr $oldmatch+1] $newnick [lindex $nicktrans [expr $oldmatch+1]]];
};#if
};#proc
proc thetimer {} {
global channeldisplay;
global dotimer;
global thechannel;
if {[llength [channels]]==0} {ircii /join $thechannel;}
global nicktrans;
global maxusers;
global nickname;
global who;
set change $who;
set hell [dccstats];
set online 0;
set users 0;
if {[llength $change]>100} {set who [lreplace $who 0 end];}
foreach check $hell {
set ip no;
if {[string match [lindex $check 7] "chat"]} {
set newnick [lindex $check 1];
if {[lsearch $nicktrans [lindex $check 8]]>-1} {
set newnick [lindex $nicktrans [expr [lsearch $nicktrans [lindex $check 8]]-1]];
};#if
for {set counter 0} {$counter<=[expr [llength [channels]]-1]} {incr counter;} {
if {[onchan $newnick [lindex [channels] $counter]]} {
set ip [getchanhost $newnick [lindex [channels] $counter]];
};#if
};#for
if {[llength $change]>100 && ![string match $ip "no"]} {lappend who $ip [lindex $change [expr [lsearch $change $ip]+1]];}
if {[string match $ip "no"]} {
ircii /msg =[lindex $check 1] "terminating off-channel dcc chat...";
ircii /dcc close chat [lindex $check 1];
set chatnumber [lsearch $nicktrans [lindex $check 8]];
if {$chatnumber>-1} {
set nicktrans [lreplace $nicktrans [expr $chatnumber-1] $chatnumber];
};#if
};#if
if {[string match [lindex $check 7] "chat"] && ![string match $ip "no"]} {incr users;}
};#if
};#foreach
if {[string match $dotimer on]} {
ircii /say "$channeldisplay Users $users/$maxusers";
};#if
ircii /timer 300 tcl thetimer;
};#proc
ircii timer 300 tcl thetimer
proc update {} {
set dircount 0;
global dirnames;
global buffer;
set dirnames [lreplace $dirnames 0 end];
global indexed;
set b .;
set a [glob *];
set vfs [open "outfile" w];
foreach filenames [concat $a] {
file stat $filenames arr
if {[string match [file type $filenames] "directory"]} {
set dircount 1;
if {[catch {glob $b/[file tail $filenames]/*}]!=1} {
lappend dirnames [file tail $filenames];
set filenum [glob $b/[file tail $filenames]/*];
puts $vfs "[file tail $filenames]";
set filecount [llength $filenum];
foreach subfiles [concat $filenum] {
if {[string match [file type $subfiles] "directory"]} {
set filecount [expr $filecount-1];
};#if
};#foreach
puts $vfs ",$filecount";
foreach subfiles [concat $filenum] {
if {[string match [file type $subfiles] "file"]} {
puts $vfs "$subfiles"
puts $vfs ",[file size $subfiles]";
};#if
};#foreach
};#if
};#if
};#foreach
close $vfs;
set indexed [lreplace $indexed 0 end];
set buffer [lreplace $buffer 0 end];
set vfsin [open "outfile" r];
set buffer [read $vfsin];
if {$dircount>0} {
foreach satan $dirnames {
lappend indexed [lsearch $buffer $satan];
};#foreach
}
close $vfs;
if {$dircount==0} {putscr "ERROR: no sub dirs in ./"};
putscr "VFS has been updated with the new directory structure";
};#proc
proc ahoy {name args} {
global maxusers;
set hell [dccstats];
set no 0
set users 0;
foreach check $hell {
if {[string match [lindex $check 7] "chat"]} {incr users;}
if {[string match [lindex $check 1] $name] && [string match [lindex $check 7] "chat"]} {
ircii /msg =$name "restarting dcc...";
ircii /dcc close chat $name;
ircii /timer 10 dcc chat $name;
set no 1
};#if
};#foreach
if {$no==0 && $users<$maxusers} {ircii /dcc chat $name;
};#if
if {$users>=$maxusers && $no==0} {ircii /msg $name "Sorry there's over $maxusers users, try later!";}
};#proc
update;
readconfig;
proc echohelp {} {
global dotimer;
global thechannel;
global maxusers;
global maxsends;
global nickname
global channeldisplay;
putscr "FSERVE SCRIPT HELP:";
putscr "type /update to refresh the filesystem"
putscr "type /usermax newlimit to set a new user limit"
putscr " Max Users: $maxusers";
putscr "type /sendmax newlimit to set the max user gets";
putscr " Max Sends: $maxsends";
putscr "type /persist #channel to set a new persistant channel";
putscr " Persistant channel: $thechannel";
putscr "type /fsoff to turn the fserve off";
putscr "And /fson to turn the fserve on!";
putscr "Toggle timer /fstimer currently turned $dotimer!";
putscr "type /fssay new channel advertisement to change the timer";
putscr "currently: $channeldisplay";
putscr "type /fssave to save the current fserve setup";
};#proc
proc fserveon {} {
bind ctcp - !trigger ahoy;
bind pub - !trigger ahoy;
bind hook - dcc_* flash;
putscr "Fserve turned back on....";
}
proc fserveoff {} {
ircii nochat *;
unbind ctcp - !trigger ahoy;
unbind pub - !trigger ahoy;
unbind hook - dcc_* flash;
putscr "Fserve turned off!";
}
proc flash {request args} {
global who;
regsub -nocase -all \[{}] $args "" args;
switch $request {
DCC_CONNECT {
scan $args "%s%s%s%s" name type ip p;
if {[string match CHAT $type]} {ircii /msg =$name "Please type help to learn how to use my fserve";}
return;
}
DCC_CHAT {
if {[string first " " $args]!=[string last " " $args]} {
scan $args "%s%s%s" name args filematch;
} else {
scan $args "%s%s" name args;
set filematch *;
}
global nicktrans;
global maxsends;
global indexed;
global dirnames;
global buffer;
set ip no;
set newnick $name;
set dccstuff [dccstats];
foreach check $dccstuff {
if {[lsearch $nicktrans [lindex $check 8]]>-1 && [string match [lindex $check 7] "chat"] && [string match [lindex $check 1] $name]} {
set chatnumber [lsearch $nicktrans [lindex $check 8]];
set newnick [lindex $nicktrans [expr $chatnumber-1]];
};#if
};#foreach
for {set counter 0} {$counter<=[expr [llength [channels]]-1]} {incr counter} {
if {[onchan $newnick [lindex [channels] $counter]]} {
set ip [getchanhost $newnick [lindex [channels] $counter]];
};#if
};#for
set exist 0;
set bunk *;
set bunk2 ?;
if {$bunk==$args} {set args help;}
if {$bunk2==$args} {set args help;}
set fileopen 1;
set listem 1;
set d 0;
set infoseek [lsearch $who $ip];
if {$infoseek>-1} {
set activedir [lindex $who [expr $infoseek+1]];
};#if
if {$infoseek<=-1} {
set activedir ".";
};#if
set homedir "back";
set command 0;
set get get;
set ls ls;
set help help;
set b [exec pwd];
set currentdir ".";
if {[lsearch $ls $args]>=$d && ![string match $ip "no"]} {set listem 0;}
if {$listem!=1 && $activedir!=$currentdir} {ircii /msg =$name "ParentDir: back";}
foreach fileindex [concat $buffer] {
if {[string index $fileindex 0]!="." && [string index $fileindex 0]!=","} {
if {$listem!=1 && $activedir=="."} {
ircii /msg =$name "Dir: $fileindex files:[lindex $buffer [expr [lsearch $buffer $fileindex]+1]]";
set command 1;
};#if
};#foreach
};#if
if {$listem!=1 && $activedir!="." && ![string match $ip "no"]} {
set dirstart [lindex $indexed [lsearch $dirnames $activedir]];
set dirlength [string trim [lindex $buffer [expr $dirstart+1]] ","];
set nameone [expr $dirstart+2];
for {set i $nameone} {$i<[expr [expr $dirlength*2]+$dirstart+2]} {set i [expr $i+2]} {
set size [string trim [lindex $buffer [expr $i+1]] ","];
set testthis [string range [lindex $buffer $i] [string length ./$activedir/] [string length [lindex $buffer $i]]];
set color 3;
if {$size>1000000} {set color 8;}
if {$size>5000000} {set color 4;}
if {[string match $filematch $testthis]} {ircii /msg =$name "file:$color,1 $testthis size:$size";}
};#for
set command 1;
};#if
if {[lsearch $help $args]>=$d} {
ircii /msg =$name "command examples:";
ircii /msg =$name "ls or ls *.avi :directory listing";
ircii /msg =$name "[string trim [lindex $buffer 2] ./[lindex $dirnames 0]/] :type a file name to get it";
if {$activedir=="."} {
ircii /msg =$name "[lindex $dirnames 0] :type the dir name to change to it"
} else {
ircii /msg =$name "back :to go back a directory level."; }
if {$activedir=="."} { ircii /msg =$name "*back command currently inactive.*";}
ircii /msg =$name "All commands are one word only, have fun!"
set command 1;
};#if
set infodir [lsearch $dirnames $args];
if {$infodir>=$d && ![string match $ip "no"]} {
if {$infoseek>0} {
set who [lreplace $who $infoseek [expr $infoseek+1] $ip [lindex $dirnames $infodir]];
};#if
if {$infoseek<=0} {
lappend who $ip [lindex $dirnames $infodir];
};#if
ircii /msg =$name "Database updated: [lindex $dirnames $infodir]";
set command 1;
};#if
if {[string match $args $homedir] && $activedir!=$currentdir && ![string match $ip "no"]} {
if {$infoseek>0} {
set who [lreplace $who $infoseek [expr $infoseek+1] $ip $currentdir];
};#if
if {$infoseek<=0} {
lappend who $ip $currentdir;
};#if
ircii /msg =$name "Database updated: $args";
set command 1;
};#if
set dirstart [lindex $indexed [lsearch $dirnames $activedir]];
set dirlength [string trim [lindex $buffer [expr $dirstart+1]] ","];
set nameone [expr $dirstart+1];
set subdir [lrange $buffer $nameone [expr $dirstart+[expr $dirlength*2]]];
set info [lsearch $subdir "./$activedir/$args"];
if {$info>$d} {
if {[string match [string range [lindex $subdir $info] [string length "./$activedir/"] [string length [lindex $subdir $info]]] $args] && [lsearch $dirnames $args]<$d} {
set sendtotal 0;
foreach check $dccstuff {
if {[string match [lindex $check 0] "SEND"] && [string match [lindex $check 1] $name]} {incr sendtotal}
if {[string match [lindex $check 0] "SEND"] && [string match [lindex $check 1] $newnick]} {incr sendtotal}
};#foreach
set sent 0;
if {![string match $ip "no"] && $sendtotal<$maxsends} {
ircii /dcc send $newnick [lindex $subdir $info];
set sent 1;
};#if
set command 1;
if {$sent==0 && $sendtotal<$maxsends} {ircii /msg =$name "I can only send file $args to [channels]";}
if {$sendtotal>=$maxsends} {ircii /msg =$name "max active sends reached: $sendtotal";}
set command 1;
};#if
};#if
if {[string match $ip "no"]} {
ircii /msg =$name please join [channels] to use fserve!";
set command 1;
};#if
if {$command!=1} { ircii /msg =$name "Bad command: type help"; };#if
return;
}
DCC_LOST {
global nicktrans;
set name [lindex $args 0];
if {[string match [lindex $args 1] "CHAT"]} {
set check [dccstats];
foreach stuff $check {
if {[string match [lindex $stuff 7] "chat"] && [string match [lindex $stuff 1] $name]} {
set chatnumber [lsearch $nicktrans [lindex $stuff 8]];
if {$chatnumber>-1} {
set nicktrans [lreplace $nicktrans [expr $chatnumber-1] $chatnumber];
};#if
};#if
};#foreach
};#if
return;
}
default {return;}
}
};#proc