; ,d, ; ,&&HR. ; oHRMH&6b ; ./RM&M&DM9H? ; _dMRMHHRM9RMHM, ; ,&M6HM6M/9HM9HHM9. ; ,HMHHHHHH? ?M9MHHMb ; .dHMMH6HMMH? ?MRMRMML ._____________ _______. .________. _________ ; .dMHM9HM9M9H/ `MMMM6M| JM#""MMMMP"*MM ``HMPMMM, HM&MMMH'' ]MMMMM[ ; ,&MMMMHMM9MMM' `MMHMMM, ^' MMMM: ` |M|`MMMdMP:MMMF .dMP'?MMMb. ; ,HMMMMHMMMMMMH' `HMMMMH MMMM: JML ?MMMH :MMM6 ,HM*****MMMH\ ; .dHMMM6HMMMHMHMM' `9MMMMb .~######b. ~d###b~?##:=#####b~-d####~ -d######~. ; .dMMMMMMMMMMMMMMM' 9MMMM? ; ._o#MMMMMMH9MMMMMMMM' *MMMM, ; ._o#HMMMMMMMMMMMMMMMMMMM' ?MMMH. ; ._o#HMMMMMMMMMMMMMMMMMMMMMMM' `MMMb F I L E S E R V E R ; _odHMMMMMMMMMMMMMMHH###*""""`""' `HMML ........................... ; _odHHH###*""""`"""" `HMM, ; " `HMM. ; 9MH ; ?Mb ; ?M| ; `M, ; `&. ; `\ ; `| ; Atma FileServer for mIRC 6.02+ ; Programmed by Correl J. Roush ; correlr@phoenixinquis.net ; www.phoenixinquis.net ; ; ASCII Art generated using Jih-Shin Ho's DOS-based program "DISPLAY" #atma.sa off [addon] name=Atma FileServer id=atma category=FileServing version=1.39-20041217 author=Correl J. Roush helpfile=Atma.hlp [dirs] [scriptfiles] 1=atma.sa [miscfiles] 1=Atma.hlp 2=Readme.txt 3=versioninfo.txt [configfiles] 1=atma.dat 2=Atma.stp 3=fscache.dat [atma.sa] #atma.sa off ; __________________________ ;/`````````````````````````` ; Dialogs dialog atma_config { title $Atma size -1 -1 283 147 option dbu tab "Server Config", 1, 2 -1 278 138 box "", 156, 5 87 273 26, tab 1 check "Enable Ad", 158, 13 97 36 10, tab 1 push radio "Normal", 163, 67 97 30 10, group tab 1 radio "CTCP", 164, 98 97 25 10, tab 1 text "Show ad every", 159, 143 98 39 8, tab 1 edit "", 160, 183 97 23 10, tab 1 right radio "Seconds", 161, 214 101 34 9, group tab 1 radio "Minutes", 162, 214 93 33 9, tab 1 edit $Atma(InfoLine), 24, 8 76 199 10, tab 1 autohs box "Server Info", 23, 5 69 205 19, tab 1 box "Network/Channel Setup", 166, 212 15 66 73, tab 1 button "Add", 168, 216 77 28 9, tab 1 button "Delete", 169, 247 77 28 9, tab 1 list 167, 215 45 60 31, tab 1 size box "Configuration", 188, 113 15 97 54, tab 1 check "Respond to !list", 22, 116 54 49 10, tab 1 check "Respond to @find / @locator", 190, 116 44 87 10, tab 1 ;check "Channel Enforced", 189, 116 34 55 10, tab 1 combo 194, 44 56 60 37, tab 1 size drop text "Queue using", 195, 8 58 33 8, tab 1 text "Total", 179, 18 45 18 8, tab 1 edit $Atma(maxTSends), 182, 39 44 20 10, tab 1 right edit $Atma(maxTQueues), 183, 62 44 20 10, tab 1 right edit $Atma(maxUsers), 193, 84 44 20 10, tab 1 right edit 1, 192, 84 33 20 10, tab 1 read right edit $Atma(MaxUQueues), 184, 62 33 20 10, tab 1 right edit $Atma(maxUSends), 181, 39 33 20 10, tab 1 right text "Users", 180, 18 35 18 8, tab 1 text "Sends", 186, 40 23 18 8, tab 1 text "Queues", 185, 63 23 20 8, tab 1 text "Sessions", 191, 85 23 23 8, tab 1 box "Fserv Limits", 187, 5 15 106 54, tab 1 combo 197, 215 23 59 46, tab 1 size drop check "Use Global Sends/Queues", 198, 116 24 79 10, disable tab 1 button "Add", 199, 216 35 28 9, tab 1 button "Delete", 200, 247 35 28 9, tab 1 tab "Advanced Config", 2 check "FileServer Chat", 107, 8 17 50 10, tab 2 check "Enable Channel Enforcer", 108, 8 27 74 10, tab 2 text "Limit @find / @locator to", 109, 8 37 71 10, tab 2 box "/dccallow Enforcer (DALNet Only)", 110, 163 15 115 37, tab 2 combo 111, 166 23 109 29, tab 2 size drop box "Minimum CPS", 112, 163 53 115 34, tab 2 check "Drop sends that have been going below", 113, 166 62 106 10, tab 2 edit $Atma(MinCPS), 114, 174 73 24 10, tab 2 right text "cps for", 115, 199 75 21 8, tab 2 edit $Atma(MinCPS.Secs), 116, 221 73 24 10, tab 2 right text "seconds.", 117, 246 75 25 8, tab 2 box "Maximum CPS", 118, 163 88 115 25, tab 2 check "Limit sends to a max of", 119, 166 99 66 10, tab 2 edit $Atma(MaxCPS), 120, 232 99 24 10, tab 2 right text "kb/s", 121, 257 101 18 8, tab 2 edit $Atma(@Find.Results), 129, 79 36 23 10, tab 2 right text "results", 131, 104 37 19 8, tab 2 text "Tempban lasts for", 147, 170 38 47 8, tab 2 edit $Atma(DCCAllowEnforcer.TempBan), 148, 218 37 28 10, tab 2 text "seconds.", 149, 247 38 26 8, tab 2 check "Enable FServ find comand", 152, 8 48 74 10, tab 2 edit $Atma(fs_find.Results), 154, 57 57 23 10, tab 2 right text "results", 155, 82 59 19 8, tab 2 box "QuickSearch Cache", 49, 5 88 156 25, tab 2 button "Rebuild Now", 128, 100 97 41 11, tab 2 check "Rebuild on mIRC startup", 127, 10 98 68 10, tab 2 text "Limit to", 196, 36 59 21 8, tab 2 tab "Statistics", 3 box "", 134, 5 15 273 98, tab 3 text "Leeched Files", 135, 50 46 41 8, tab 3 text "Leeched Bytes", 136, 50 55 41 8, tab 3 text "Record Speed", 137, 50 64 41 8, tab 3 text "Hits", 138, 50 73 41 7, tab 3 edit "", 146, 92 72 138 9, tab 3 read autohs right edit "", 145, 92 63 138 9, tab 3 read autohs right edit "", 144, 92 54 138 9, tab 3 read autohs right edit "", 143, 92 45 138 9, tab 3 read autohs right button "Reset", 139, 199 86 31 9, tab 3 tab "Triggers", 4 box "Trigger Configuration", 33, 5 15 273 98, tab 4 box "Channel Setup", 35, 209 20 66 65, tab 4 check "All active channels", 39, 213 73 60 10, disable tab 4 button "Add", 37, 213 63 28 9, disable tab 4 button "Delete", 38, 244 63 28 9, disable tab 4 list 36, 212 27 60 35, disable tab 4 size button "...", 45, 181 88 20 9, disable tab 4 button "...", 41, 181 64 20 9, disable tab 4 edit "", 43, 7 88 169 10, tab 4 read autohs button "Edit File", 75, 75 79 28 9, disable tab 4 button "Unset", 74, 44 79 28 9, disable tab 4 text "MOTD File", 44, 8 79 33 8, disable tab 4 edit "", 40, 7 64 169 10, tab 4 read autohs text "Root Directory", 42, 9 56 49 8, disable tab 4 button "Add", 71, 8 37 28 9, tab 4 button "Rename", 72, 39 37 28 9, disable tab 4 button "Delete", 73, 70 37 28 9, disable tab 4 check "This trigger is enabled", 34, 73 24 72 8, disable tab 4 combo 32, 8 24 60 43, tab 4 sort drop tab "FServ Access", 151 box "Access Permissions", 98, 5 35 273 78, tab 151 list 100, 8 45 238 65, tab 151 sort size button "Remove", 150, 250 71 23 11, tab 151 button "Edit", 102, 250 58 23 11, tab 151 button "Add", 101, 250 45 23 11, tab 151 box "", 104, 5 15 273 20, tab 151 radio "Denied Hosts", 133, 202 21 50 10, tab 151 radio "Allowed Hosts", 132, 143 21 50 10, tab 151 combo 103, 8 21 86 42, tab 151 size drop tab "Ad Style", 165 box "Style Preview", 54, 5 15 273 20, tab 165 text "Format Preset:", 58, 8 44 37 8, tab 165 edit $Atma(FormatString), 57, 7 54 268 10, tab 165 autohs check "Always strip color (automatically done on mode +c channels)", 60, 8 64 180 10, tab 165 edit The _/\tma FileServer includes the following variables for formatstring parsing: $crlf &Atma.Triggers &Atma.Users &Atma.Sends &Atma.Queues &Atma.InfoLine, 62, 6 78 272 26, tab 165 read multi link "Click here for help on the formatstring parser", 55, 87 106 106 8, tab 165 button "Save", 63, 152 43 25 9, tab 165 button "Delete", 64, 178 43 25 9, tab 165 button "Preview", 65, 204 43 25 9, tab 165 combo 59, 50 43 90 52, tab 165 size drop box FormatString, 56, 5 36 273 39, tab 165 icon 106, 9 23 264 8 text "Programmed by Correl J. Roush, 2002", 6, 3 139 93 8, disable link "http://www.phoenixinquis.net/", 27, 201 139 77 8 button "okcancel", 66, 101 140 38 8, hide ok cancel check "Start file server on connect", 25, 22 121 79 10 check "Enable FileServer", 30, 149 119 110 12, push box "", 29, 146 113 116 21 menu "&File", 122 item "E&xit", 123, 122, ok cancel menu "&Help", 124 item "&Atma Help", 125, 124 item "&mIRC Fserv Help", 126, 124 } on *:dialog:atma_config:init:0:{ $iif($Atma(StartOnConnect),did -c atma_config 25) $iif($Atma(Active),did -c atma_config 30) $iif($Atma(FServChat),did -c atma_config 107) $iif($Atma(ChannelEnforcer),did -c atma_config 108) $iif($Atma(fs_find),did -c atma_config 152) didtok $dname 111 44 Notify and cancel send,Tempban/cancel all sends/clear queues if ($Atma(DCCAllowEnforcer) == Notify) { did -c $dname 111 1 } if ($Atma(DCCAllowEnforcer) == Ban) { did -c $dname 111 2 } if ($Atma(MinCPS.Enabled)) { did -c $dname 113 did -e $dname 114,116 } if ($Atma(MaxCPS.Enabled)) { did -c $dname 119 did -e $dname 120 } updateStats $iif($Atma(QuickSearchRefreshOnStart),did -c atma_config 127) Atma.cfgTriggers did -c $dname 132 updateAccess $iif($readini($Atma.ini,nickComp,stripcolor),did -c atma_config 60) didtok $dname 194 44 Number Of Files,FileSize (MB) did $iif($Atma(Active),-b,-e) $dname 194 did -h $dname 106 did -g $dname 106 $formatstr_preview updateChans updateStyle } on *:dialog:atma_config:close:0:hsave -ob _/\tmaFS " $+ $scriptdiratma.dat $+ " on *:dialog:atma_config:menu:125:Atma.Help on *:dialog:atma_config:menu:126:help /fserve on *:dialog:atma_config:sclick:1,2,3,4,151,165:{ did $iif($did == 165,-v,-h) $dname 106 } on *:dialog:atma_config:edit:*:{ $iif($did == 181,Atma maxUSends $did($dname,$did)) $iif($did == 184,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .maxUQueues $did($dname,$did)) $iif($did == 182,Atma maxTSends $did($dname,$did)) $iif($did == 183,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .maxTQueues $did($dname,$did)) $iif($did == 160,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .Interval $did($dname,$did)) $iif($did == 24,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .InfoLine $did($dname,$did)) $iif($did == 51,Atma QuickSearchRefresh.Interval $did($dname,$did)) $iif($did == 57,Atma FormatString $did($dname,$did)) $iif($did == 193,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .maxUsers $did($dname,$did)) $iif($did == 129,Atma @Find.Results $did($dname,$did)) $iif($did == 153,Atma fs_find.Results $did($dname,$did)) $iif($did == 114,Atma MinCPS $did($dname,$did)) $iif($did == 116,Atma MinCPS.Secs $did($dname,$did)) $iif($did == 120,Atma MaxCPS $did($dname,$did)) $iif($did == 148,Atma DCCAllowEnforcer.TempBan $did($dname,$did)) } on *:dialog:atma_config:sclick:158:{ Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .EnableAd $did($dname,$did).state updateChans $did($dname,197).sel $did($dname,167).sel } on *:dialog:atma_config:sclick:162:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .IntervalUnit minutes on *:dialog:atma_config:sclick:163:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .TriggerType Normal on *:dialog:atma_config:sclick:164:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .TriggerType CTCP on *:dialog:atma_config:sclick:161:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .IntervalUnit seconds on *:dialog:atma_config:sclick:22:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .RespondToList $did($dname,$did).state on *:dialog:atma_config:sclick:25:Atma StartOnConnect $did($dname,$did).state on *:dialog:atma_config:sclick:26:Atma ClearQueuesOnStart $did($dname,$did).state on *:dialog:atma_config:sclick:105:Atma.Activate on *:dialog:atma_config:sclick:194:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .QueueUsing $iif($did($dname,$did).sel == 1,FileCount,FileSize) on *:dialog:atma_config:sclick:27:run http://www.phoenixinquis.net/ on *:dialog:atma_config:sclick:30:{ $iif($did($dname,$did).state,Atma.Activate,Atma.Deactivate) did $iif($Atma(Active),-c,-u) $dname 30 did $iif($Atma(Active),-b,-e) $dname 194 } on *:dialog:atma_config:sclick:167:{ updateChans $did($dname,197).sel $did($dname,$did).sel did $iif($did($dname,$did).seltext == *,-e,-b) $dname 181,182 } on *:dialog:atma_config:sclick:168:{ var %chan = $$?="Enter a channel to configure" $iif(!%chan,return) if (!$regex(%chan,^[#&][^ ]*?$)) { _errorbox Not a valid channel name return } if ($istok($Atma.Channels($did($dname,197).seltext),%chan,5)) { _errorbox Channel has already been added return } Channel.Copy $did($dname,197) $+ . $+ $did($dname,167).seltext $did($dname,197) $+ . $+ %chan updateChans $did($dname,197).sel $findtok($Atma.Channels($did($dname,197).seltext),%chan,5) var %delay = $iif($Atma.Channels($did($dname,197).seltext,%chan).IntervalUnit == seconds,$Atma.Channels($did($dname,197).seltext,%chan).Interval,$calc($Atma.Channels($did($dname,197).seltext,%chan).Interval * 60)) .timer_/\tma. $+ %chan 0 %delay Atma.Advertise %chan } on *:dialog:atma_config:sclick:169:{ if ($did($dname,167).seltext == *) { _errorbox '*' is a special system identifier for default settings. It may not be deleted. return } .timer_/\tma. $+ $did($dname,167).seltext off Atma.Config -rw Channels. $+ $did($dname,197) $+ . $+ $did($dname,167).seltext $+ * updateChans $did($dname,197).sel } on *:dialog:atma_config:sclick:107:Atma FServChat $did($dname,$did).state on *:dialog:atma_config:sclick:108:Atma ChannelEnforcer $did($dname,$did).state on *:dialog:atma_config:sclick:190:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .@Find $did($dname,$did).state on *:dialog:atma_config:sclick:152:Atma fs_find $did($dname,$did).state on *:dialog:atma_config:sclick:113:{ Atma MinCPS.Enabled $did($dname,$did).state .timer_/\tma.MinCPS $iif($Atma(MinCPS.Enabled),0 5 Atma.CheckMinCPS,off) } on *:dialog:atma_config:sclick:119:{ Atma MaxCPS.Enabled $did($dname,$did).state .dcc maxcps $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) } on *:dialog:atma_config:sclick:111:{ $iif($did($dname,$did).sel == 1,Atma DCCAllowEnforcer Notify, Atma DCCAllowEnforcer Ban) } on *:dialog:atma_config:sclick:197:{ updateChans $did($dname,$did).sel } on *:dialog:atma_config:sclick:199:{ ; Add network var %newnet = $dialog(atma_networks,atma_networks) $iif(!%newnet,return) if ($istok($Atma.Networks,%newnet,5)) { _errorbox The IRC network ' $+ %newnet $+ ' is already configured. return } Channel.setDefault %newnet * updateChans $findtok($Atma.Networks,%newnet,5) } on *:dialog:atma_config:sclick:200:{ ; Delete network if ($did($dname,197).seltext == *) { _errorbox '*' is a special system identifier for default settings. It may not be deleted. return } $iif(!$?!="Are you sure you want to delete settings for IRC network ' $+ $did($dname,197).seltext $+ ' (this cannot be undone)?",return) Atma.Config -rw Channels. $+ $did($dname,197).seltext $+ * updateChans } on *:dialog:atma_config:sclick:139:{ Atma.Config -r Hits Atma.Config -r LeechedFiles Atma.Config -r LeechedBytes Atma.Config -r RecordSpeed updateStats } on *:dialog:atma_config:sclick:32:Atma.cfgTriggers $did($dname,$did).sel on *:dialog:atma_config:sclick:34:Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $did($dname,$did).state on *:dialog:atma_config:sclick:37:{ Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels $addtok($Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels),$$?="Channel to Add?",44) did -r $dname 36 didtok $dname 36 44 $Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels) } on *:dialog:atma_config:sclick:38:{ Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels $remtok($Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels),$$did($dname,36).seltext,44) did -r $dname 36 didtok $dname 36 44 $Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels) } on *:dialog:atma_config:sclick:39:{ Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .AllChans $did($dname,$did).state var %action = $iif($did($dname,$did).state,-b,-e) did %action $dname 36 did %action $dname 37 did %action $dname 38 } on *:dialog:atma_config:sclick:71:{ var %NewTrigger = $?="What will the new trigger be?" $iif(!%NewTrigger,return) if ($istok($Atma.Triggers,%NewTrigger,5)) { _errorbox There already exists a trigger by this name. $crlf $+ Failed to create new trigger. return } %NewTrigger = $trig.encode(%NewTrigger) var %NewFSRoot while (!%NewFSRoot) { set %NewFSRoot $sdir($mircdir,Select a directory to serve) } var %NewFSMOTD = $sfile($mircdir,Select a text file, Use as MOTD) Atma.Config Triggers. $+ %NewTrigger 0 Atma.Config Triggers. $+ %NewTrigger $+ .Root %NewFSRoot Atma.Config Triggers. $+ %NewTrigger $+ .MOTD %NewFSMOTD did -a $dname 32 %NewTrigger Atma.cfgTriggers $findtok($didtok($dname,32,5),%NewTrigger,1,5) } on *:dialog:atma_config:sclick:72:{ var %NewTrigger = $?="What shall this trigger be renamed to?" $iif(!%NewTrigger,return) if ($istok($Atma.Triggers,%NewTrigger,5)) { _errorbox There already exists a trigger by this name. $crlf $+ Failed to rename trigger. return } %NewTrigger = $trig.encode(%NewTrigger) var %counter = 1 while (%counter <= $hfind(_/\tmaFS,Triggers. $+ $trig.encode($did($dname,32).seltext) $+ *,0,w)) { var %newEntry .echo -q $regex($hfind(_/\tmaFS,Triggers. $+ $trig.encode($did($dname,32).seltext) $+ *,%counter,w),/^Triggers\.([^\.]*)(\..*)?/i) %newEntry = Triggers. $+ %NewTrigger $+ $regml(2) Atma.Config %newEntry $Atma.Config($hfind(_/\tmaFS,Triggers. $+ $trig.encode($did($dname,32).seltext) $+ *,%counter,w)) inc %counter } Atma.Config -rw Triggers. $+ $trig.encode($did($dname,32).seltext) $+ * Atma.cfgTriggers 1 Atma.cfgTriggers $findtok($didtok($dname,32,5),%NewTrigger,1,5) } on *:dialog:atma_config:sclick:73:{ $iif(!$did($dname,32).sel,return) $iif(!$?!="This will permanently delete the selected trigger. Do it anyway?",return) Atma.Config -rw Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .* Atma.Config -rw Triggers. $+ $trig.encode($did($dname,32).seltext) Atma.cfgTriggers } on *:dialog:atma_config:sclick:74:{ Atma.Config -r Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .MOTD did -r $dname 43 } on *:dialog:atma_config:sclick:75:$iif($Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .MOTD),run notepad.exe $ifmatch) on *:dialog:atma_config:sclick:41:{ var %NewDir while (!%NewDir) { %NewDir = $sdir($mircdir,Select a directory to serve) } Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Root %NewDir did -o $dname 40 1 %NewDir } on *:dialog:atma_config:sclick:45:{ var %NewMOTD = $sfile($mircdir,Select a text file,Use as MOTD) $iif(!%NewMOTD,return) Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .MOTD %NewMOTD did -o $dname 43 1 %NewMOTD } on *:dialog:atma_config:sclick:50:{ Atma QuickSearchRefresh $did($dname,$did).state did $iif($did($dname,$did).state,-e,-b) $dname 51 } on *:dialog:atma_config:sclick:127:Atma QuickSearchRefreshOnStart $did($dname,$did).state on *:dialog:atma_config:sclick:128:Atma.CacheTriggers on *:dialog:atma_config:sclick:103,132,133:updateAccess on *:dialog:atma_config:sclick:101:{ dialog -m atma_access atma_access did -c atma_access $iif($did($dname,132).state,22,23) } on *:dialog:atma_config:sclick:102:{ $iif(!$did(atma_config,100).sel,return) var %Scope = $trig.encode($did(atma_config,103).seltext) set %Scope $iif(%Scope == Global Permissions,Access.,Trigger. $+ %Scope $+ .Access.) $+ $gettok($did(atma_config,100).seltext,1,32) dialog -m atma_access atma_access did -c atma_access $iif($did($dname,132).state,22,23) did -o atma_access 1 1 $gettok($did(atma_config,100).seltext,1,32) $iif($gettok($Atma.Config(%Scope),2,32),did -c atma_access 4) did $iif($did(atma_access,4).state,-e,-b) atma_access 8,10,12,13 if ($gettok($Atma.Config(%Scope),2,32)) { var %time = $ctime did -o atma_access 8 1 $int($calc(($ifmatch - %time) / 86400)) did -o atma_access 10 1 $int($calc((($ifmatch - %time) % 86400) / 3600)) did -o atma_access 12 1 $int($calc(((($ifmatch - %time) % 86400) % 3600) / 60)) did -o atma_access 13 1 $int($calc(((($ifmatch - %time) % 86400) % 3600) % 60)) } did -o atma_access 20 1 $gettok($Atma.Config(%Scope),3-,32) } on *:dialog:atma_config:sclick:150:{ $iif(!$did(atma_config,100).sel,return) var %Scope = $trig.encode($did(atma_config,103).seltext) $iif(%Scope == Global^32Permissions,set %Scope Global) Atma.Access.Remove $gettok($did(atma_config,100).seltext,1,32) %Scope updateAccess } on *:dialog:atma_config:sclick:55:^formatstr.help on *:dialog:atma_config:sclick:59:{ did -o $dname 57 1 $hget(_/\tmaFS.STP,$did($dname,$did).seltext) Atma FormatString $did($dname,57) did -g $dname 106 $formatstr_preview } on *:dialog:atma_config:sclick:60:{ writeini $Atma.ini nickComp stripcolor $did($dname,$did).state did -g $dname 106 $formatstr_preview } on *:dialog:atma_config:sclick:63:{ var %style = $?="Save style as (no spaces)" $iif(!%style,return) if ($chr(32) isin %style) { _errorbox Spaces are not allowed in style names | return } if ($hget(_/\tmaFS.STP,%style)) { $iif(!$?!="Overwrite existing style of this name?",return) } hadd _/\tmaFS.STP %style $did($dname,57) hsave -ob _/\tmaFS.STP " $+ $scriptdirAtma.stp $+ " updateStyle } on *:dialog:atma_config:sclick:64:{ if ($hget(_/\tmaFS.STP,0).item <= 1) { _errorbox You must leave at least one style | return } $iif(!$?!="Really delete the selected style (this cannot be undone)?",return) hdel _/\tmaFS.STP $did($dname,59).seltext hsave -ob _/\tmaFS.STP " $+ $scriptdirAtma.stp $+ " updateStyle } on *:dialog:atma_config:sclick:65:did -g $dname 106 $formatstr_preview dialog atma_access { title Atma Fserv Access size -1 -1 143 112 option dbu edit "", 1, 32 2 106 10 text "Hostmask", 2, 4 3 25 8 box "Expiration", 3, 1 33 141 38 check "User access expires in....", 4, 4 41 131 10 edit "0", 8, 7 53 17 10, disable right text "days", 9, 25 55 14 8 edit "0", 10, 42 53 17 10, disable right edit "0", 12, 72 53 17 10, disable right edit "0", 13, 104 53 17 10, disable right text "hrs", 14, 60 55 9 8 text "min", 15, 89 54 14 8 text "sec", 16, 122 54 13 8 box "Comment", 17, 1 73 141 23 button "OK", 18, 30 99 37 12, default ok button "Cancel", 19, 71 99 37 12, cancel edit "", 20, 4 82 134 11, autohs box "", 21, 1 15 141 17 radio "Access", 22, 23 21 30 9 radio "Deny", 23, 90 21 30 9 } on *:dialog:atma_access:sclick:4:did $iif($did($dname,$did).state,-e,-b) $dname 8,10,12,13 on *:dialog:atma_access:sclick:18:{ if ((*!*@* !iswm $did($dname,1)) || ($regex($did($dname,1),/\s/))) { _errorbox You did not enter a valid hostmask. Please enter a valid hostmask in the form *!*@* and try again. halt } Atma.Access.Add $did($dname,1) $iif($did(atma_config,103).seltext != Global Permissions,$trig.encode($ifmatch),Global) $iif($did($dname,22).state,Allow,Deny) $iif($did($dname,4).state,$calc($ctime + (($did($dname,8) * 86400) + ($did($dname,10) * 3600) + ($did($dname,12) * 60) + $did($dname,13))),0) $did($dname,20) updateAccess } dialog atma_queues { title "_/\tma Queue Management" size -1 -1 249 147 option dbu list 1, 2 6 123 126, size vsbar box "Queue Info", 3, 131 3 117 129 text "Queue Slot #", 4, 135 14 37 8 edit "", 5, 174 13 27 10, read text "FileName", 6, 135 41 25 8 edit "", 7, 138 50 106 10, read autohs text "Size", 8, 181 41 16 8 edit "", 9, 198 39 46 10, read button "Clear this queue", 10, 137 80 105 10, disable button "Clear all queues for this user", 11, 137 92 105 10, disable button "Send this queue", 12, 137 104 105 10, disable button "Send all queues for this user", 13, 137 116 105 10, disable button "Clear All", 14, 138 135 49 10 button "Send All", 15, 192 135 49 10 button "OK/Cancel", 16, 218 3 30 9, hide ok cancel text "User", 17, 136 26 18 8 edit "", 18, 157 25 87 10, read button "^ Move Up ^", 19, 13 135 42 10 button "v Move Down v", 20, 59 135 42 10 button "Add a queue", 21, 137 68 105 10 } on *:dialog:atma_queues:init:0:{ updateQueues } on *:dialog:atma_queues:sclick:1:{ updateQueues $did($dname,$did).sel } on *:dialog:atma_queues:sclick:10:{ write -dl $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ " updateQueues } on *:dialog:atma_queues:sclick:11:{ Atma.ClearQueues $gettok($did($dname,1).seltext,2,32) updateQueues } on *:dialog:atma_queues:sclick:12:{ scid $gettok($did(atma_queues,1).seltext,3,32) dcc send -c $gettok($did($dname,1).seltext,2,32) $gettok($did($dname,1).seltext,4-,32) write -dl $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ " updateQueues } on *:dialog:atma_queues:sclick:13:{ scid $gettok($did(atma_queues,1).seltext,3,32) var %regex = /^ $+ $gettok($did(atma_queues,1).seltext,2,32) $cid / var %lines var %counter = 1 while (%counter <= $lines($scriptdirqueues.dat)) { var %send = $read($scriptdirqueues.dat,%counter) if ($regex(%send,%regex)) { dcc send -c $gettok(%send,1,32) $gettok(%send,3-,32) ; write -dl $+ %counter " $+ $scriptdirqueues.dat $+ " %lines = $addtok(%lines,%counter,44) } inc %counter } %lines = $sorttok(%lines,44,nr) %counter = 1 while (%counter <= $numtok(%lines,44)) { write -dl $+ $gettok(%lines,%counter,44) " $+ $scriptdirqueues.dat $+ " inc %counter } updateQueues } on *:dialog:atma_queues:sclick:14:{ Atma.ClearQueues updateQueues } on *:dialog:atma_queues:sclick:15:{ var %counter = 1 while (%counter <= $lines($scriptdirqueues.dat)) { var %temp = $read($scriptdirqueues.dat,%counter) scid $gettok(%temp,2,32) dcc send $gettok(%temp,1,32) $gettok(%temp,3-,32) inc %counter } Atma.ClearQueues updateQueues } on *:dialog:atma_queues:sclick:19:{ $iif($did($dname,1).sel <= 1,return) var %temp = $read($scriptdirqueues.dat,$calc($did($dname,1).sel - 1)) write -l $+ $calc($did($dname,1).sel - 1) " $+ $scriptdirqueues.dat $+ " $read($scriptdirqueues.dat,$did($dname,1).sel) write -l $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ " %temp updateQueues $calc($did($dname,1).sel - 1) } on *:dialog:atma_queues:sclick:20:{ $iif(($did($dname,1).sel < 1) || ($did($dname,1).sel >= $lines($scriptdirqueues.dat)),return) var %temp = $read($scriptdirqueues.dat,$calc($did($dname,1).sel + 1)) write -l $+ $calc($did($dname,1).sel + 1) " $+ $scriptdirqueues.dat $+ " $read($scriptdirqueues.dat,$did($dname,1).sel) write -l $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ " %temp updateQueues $calc($did($dname,1).sel + 1) } on *:dialog:atma_queues:sclick:21:{ var %nick = $?="Enter a nickname for the queue" $iif(!%nick,return) var %file = $sfile($mircdir,Select a file to queue for %nick,Add to Queue) $iif(!%file,return) write " $+ $scriptdirqueues.dat $+ " %nick $cid %file Atma.ProcessQueues updateQueues } dialog atma_networks { title Select Network size -1 -1 95 89 option dbu button "OK", 2, 4 78 42 9, default ok list 3, 3 27 89 50, sort size text "Select the IRC network that you would like to configure from the list below.", 4, 3 3 88 22, center button "Cancel", 5, 49 78 42 9, cancel edit "", 6, 6 64 53 10, hide result } on *:dialog:atma_networks:init:0:{ var %counter = 1 while (%counter <= $server(0)) { $iif(!$didwm($dname,3,$server(%counter).group),did -a $dname 3 $server(%counter).group) inc %counter } if ($server(0)) { did -c $dname 3 1 did -o $dname 6 1 $did($dname,3).seltext } } on *:dialog:atma_networks:sclick:3:{ did -o $dname 6 1 $did($dname,$did).seltext } ; __________________________ ;/`````````````````````````` ; Menus menu menubar,status,query,nicklist,channel,@Atma { Atma FileServer .Configure: Atma .Manage Queues: dialog -m atma_queues atma_queues .Rebuild QuickSearch Cache: Atma.CacheTriggers .Chat with fserv users: Atma.Chat .- .Preview Ad: { var %ad = $replace($parse_formatstr(*,$Atma(FormatString)),&\,$chr(13)) var %counter = 1 while (%counter <= $numtok(%ad,13)) { echo -a $gettok(%ad,%counter,13) inc %counter } } . $iif($chan,Show to $chan) : { var %ad = $replace($parse_formatstr($chan,$Atma(FormatString)),&\,$chr(13)) var %counter = 1 while (%counter <= $numtok(%ad,13)) { msg $chan $gettok(%ad,%counter,13) inc %counter } } . $iif($1,Show to $1) : { var %ad = $replace($parse_formatstr(*,$Atma(FormatString)),&\,$chr(13)) var %counter = 1 while (%counter <= $numtok(%ad,13)) { msg $1 $gettok(%ad,%counter,13) inc %counter } } .- .Reload: reload -rs " $+ $script $+ " .Unload: unload -rs " $+ $script $+ " } ; __________________________ ;/`````````````````````````` ; Remotes on *:load:{ $iif(!$Atma.Config(Channels.*.*.TriggerType),Channel.setDefault * *) $iif(!$ini($Atma.ini,Atma),Atma.createdefaultini) $iif($server && $Atma(StartOnConnect),Atma.Activate) } on *:unload:{ atma.deactivate --force } on *:start:{ if ($version < 6.02) { echo 4 -s ATMA REQUIRES mIRC VERSION 6.02 OR HIGHER, UNLOADING... unload -rs " $+ $script $+ " return } if (!$ini($Atma.ini,Atma)) { echo 4 -s *���� Atma Fileserver INI entries not found, inserting defaults... Atma.createdefaultini } debug.print Loading atma.dat $iif(!$hget(_/\tmaFS),hmake _/\tmaFS 10) $iif($findfile($scriptdir,atma.dat,1),hload -b _/\tmaFS " $+ $ifmatch $+ ") $iif(!$Atma.Config(Channels.*.*.TriggerType),Channel.setDefault * *) $iif(!$hget(_/\tmaFS.Cache),hmake _/\tmaFS.Cache 1000) $iif($findfile($scriptdir,fscache.dat,1),hload -b _/\tmaFS.Cache " $+ $ifmatch $+ ") $iif($Atma(QuickSearchRefreshOnStart),Atma.CacheTriggers) $iif(!$hget(_/\tmaFS.STP),hmake _/\tmaFS.STP 10) $iif($findfile($scriptdir,Atma.stp,1),hload -b _/\tmaFS.STP " $+ $ifmatch $+ ",Atma.createdefaultstp) $iif($exists(" $+ $scriptdirqueues.dat $+ "),.remove " $+ $scriptdirqueues.dat $+ ") } on *:connect:{ var %counter = 1 while (%counter <= $scon(0)) { $iif(($scon(%counter).status == connected) && (%counter != $cid),return) inc %counter } $iif($Atma(StartOnConnect),Atma.Activate) } on *:exit:{ atma.deactivate --force return } on *:text:*:#:{ if ($Atma.Channels($Atma.Networks($networkname),$chan).@Find && (($1 == @find) || ($1 == @locator)) && $2-) { var %search = $replace($2-,$chr(32),*) var %search.results $Atma.QuickSearch(%search) $iif(!%search.results,return) .msg $nick _/\tmaFServ QuickSearch Results .msg $nick Found ( $+ %search.results $+ ) matches for %search $iif(%search.results,.msg $nick Displaying match(es) 1 to $iif(%search.results <= $Atma(@Find.Results),$ifmatch,$Atma(@Find.Results))) var %counter = 1 while (%counter <= $iif(%search.results <= $Atma(@Find.Results),$ifmatch,$Atma(@Find.Results))) { var %search.result = $Atma.QuickSearch(%search,%counter) .msg $nick  $+ $trig.decode($gettok(%search.result,1,32))  -- $gettok(%search.result,2-,32) ( $+ $bytes($Atma.QuickSearch(%search,%counter).size).suf $+ ) inc %counter } .msg $nick Search Complete. return } if (($1 == !list) && ($Atma(Active)) && ($Atma.Channels($Atma.Networks($networkname),$chan).RespondToList) && ($Atma.Triggers($chan))) { var %ad = $replace($parse_formatstr($chan,$Atma(FormatString)),&\,$chr(13)) var %counter = 1 while (%counter <= $numtok(%ad,13)) { .notice $nick $gettok(%ad,%counter,13) inc %counter } return } if ($istok($Atma.Triggers,$1-,5) && !$istok($Atma.Triggers($chan),$1-,5)) { .notice $nick The trigger ' $+ $1- $+ ' is not being served to $chan $+ . | return } if ((!$istok($Atma.Triggers($chan),$1-,5)) || ($Atma.Channels($Atma.Networks($networkname),$chan).TriggerType != Normal)) { return } if (!$Atma(Active)) { .notice $nick The FileServer is not available at this time. Please try again later. | return } if ($fserv(0) >= $Atma(maxUsers)) { .notice $nick The FileServer is currently full. Please try again later. | return } if ($gettok($Atma.Access($address($nick,5),$trig.encode($1-)),1,32) == DENIED) { .notice $nick $gettok($Atma.Access($address($nick,5),$trig.encode($1-)),2-,32) | return } Atma.Config Hits $calc($Atma.Config(Hits) + 1) updateStats var %FSDir = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .Root) $+ " var %FSMOTD = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .MOTD) $+ " ;Fserv session handling -- CONNECTING hadd -m _/\tmaFS.Sessions $nick CONNECTING hadd -m _/\tmaFS.Sessions $nick $+ .Channel $chan hadd -m _/\tmaFS.Sessions $nick $+ .Trigger $1- hadd -m _/\tmaFS.Sessions $nick $+ .ConnectTime $ctime fserve $nick $Atma(maxTSends) %FSDir %FSMOTD } ctcp *:*:?:{ $iif($1- == VERSION, ctcpreply $nick VERSION $Atma ) $iif(!$istok($Atma.Triggers,$1-,5),return) if (!$Atma(Active)) { .notice $nick The FileServer is not available at this time. Please try again later. | return } ;Gotta figure out what chan the user may have triggered from, since ctcp isn't chan specific ;Of course, if a chan can't be found, then user must not have triggered from any channel, so foo on them var %trigchan var %counter = 1 while (%counter <= $numtok($Atma.Channels($Atma.Networks($networkname)),5)) { var %chan = $gettok($Atma.Channels($Atma.Networks($networkname)),%counter,5) if (%chan == *) { var %counter2 = 1 while (%counter2 <= $numtok($Atma.Channels($Atma.Networks($networkname),*),44)) { var %chan = $gettok($Atma.Channels($Atma.Networks($networkname),*),%counter,44) if (($Atma.Channels($Atma.Networks($networkname),%chan).TriggerType == CTCP) && ($nick ison %chan) && ($istok($Atma.Triggers(%chan),$1-,5))) set %trigchan %chan inc %counter2 } } else { if (($Atma.Channels($Atma.Networks($networkname),%chan).TriggerType == CTCP) && ($nick ison %chan) && ($istok($Atma.Triggers(%chan),$1-,5))) set %trigchan %chan } inc %counter } $iif(!%trigchan,return) var %FSDir = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .Root) $+ " var %FSMOTD = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .MOTD) $+ " ;Fserv session handling -- CONNECTING hadd -m _/\tmaFS.Sessions $nick CONNECTING hadd -m _/\tmaFS.Sessions $nick $+ .CID $cid hadd -m _/\tmaFS.Sessions $nick $+ .Channel %trigchan hadd -m _/\tmaFS.Sessions $nick $+ .Trigger $1- hadd -m _/\tmaFS.Sessions $nick $+ .ConnectTime $ctime fserve $nick $Atma(maxTSends) %FSDir %FSMOTD } on *:open:!:{ ;Session handling -- CONNECTED hadd -m _/\tmaFS.Sessions $nick CONNECTED if ($window(@fserv-chat)) { aline -l @fserv-chat $nick $+ / $+ $network aline @fserv-chat --  $+ $nick $+ / $+ $network has joined the fserv if ($active != @fserv-chat) { window -g3 @fserv-chat } } var %counter = 1 while (%counter <= $fserv(0)) { if ($fserv(%counter) == $nick) { inc %counter | continue } msg = $+ $fserv(%counter) --  $+ $nick $+ / $+ $network has joined the fserv inc %counter } var %chan = $Atma.Channels($Atma.Networks($networkname),$Atma.Sessions($nick).Channel) msg =$nick -  $+ $Atma msg =$nick - Programmed by Correl J. Roush (correlr@phoenixinquis.net) 2002 msg =$nick - ______________________________________________________________ msg =$nick - $Atma.Channels($Atma.Networks($networkname),%chan).InfoLine msg =$nick - msg =$nick - You may have up to $Atma(maxUSends) simultaneous file sends, and up to $Atma.Channels($Atma.Networks($networkname),%chan).maxUQueues $iif($Atma.Channels($Atma.Networks($networkname),%chan).QueueUsing == FileSize,MB worth of) queued files. msg =$nick - The FServ is limited to a maximum of $Atma(maxTSends) simultaneous file sends and $Atma.Channels($Atma.Networks($networkname),%chan).maxTQueues $iif($Atma.Channels($Atma.Networks($networkname),%chan).QueueUsing == FileSize,MB worth of) queued files. msg =$nick - $iif($Atma(FServChat),msg =$nick - ***FServ Chat is enabled; you may chat with other users on the fserv) $iif($Atma(ChannelEnforcer),msg =$nick - ***Channel Enforcer is enabled; parting the fserv's channels will result in your queues being cleared.) $iif($Atma(MaxCPS.Enabled),msg =$nick - ***MaxCPS is enabled; sends from this server will not exceed $Atma(MaxCPS) kb/s.) $iif($Atma(MinCPS.Enabled),msg =$nick - ***MinCPS is enabled; sends from this server may not drop below $Atma(MinCPS) CPS for more than $Atma(MinCPS.secs) seconds or they will be terminated.) $iif($Atma(DCCAllowEnforcer) == ban,msg =$nick - ***DCCAllowEnforcer is enabled; failure to /dccallow + $+ $me $+  will result in your sends/queues being cleared and a $duration($Atma(DCCAllowEnforcer.TempBan)) temporary ban from the fserv.) halt } on *:close:!:{ ;FServ session handling -- CLOSED $iif($hget(_/\tmaFS.Sessions),hdel -w _/\tmaFS.Sessions $nick $+ *) var %counter = 1 while (%counter <= $fserv(0)) { if ($nick != $fserv(%counter)) { msg = $+ $fserv(%counter) --  $+ $nick $+ / $+ $network has left the fserv } inc %counter } if ($window(@fserv-chat)) { dline -l @fserv-chat $fline(@fserv-chat,$nick $+ / $+ $network,1,1) aline @fserv-chat --  $+ $nick $+ / $+ $network has left the fserv if ($active != @fserv-chat) { window -g3 @fserv-chat } } } on *:nick:{ $iif(!$Atma.Queue($nick),return) var %counter = 1 while (%counter <= $lines($scriptdirqueues.dat)) { write -l $+ %counter " $+ $scriptdirqueues.dat $+ " $replace($read($scriptdirqueues.dat, %counter),$nick,$newnick) inc %counter notice $newnick Your fserv queues have been successfully switched to point to your new nickname. [AtmaFserv] } if ($fserv($nick)) { close -f $nick notice $newnick Your fserv connection was closed due to a change in nickname. Please reconnect to ensure that files are queued under your new nickname. [AtmaFserv] } } on *:serv:*:{ $iif($1- == cd.., tokenize 32 cd ..) $iif($istok(cd dir ls read exit bye c s,$1,32),return) if ($1 == help) { msg =$nick - Help - $Atma if (!$2) { msg =$nick - The following commands are supported: msg =$nick - CD LS GET READ HELP EXIT BYE msg =$nick - SENDS QUEUES CLEARQUEUES FIND WHOSONLINE msg =$nick - msg =$nick - Type help followed by a command to get more info on that command. } elseif ($2 == CD) { msg =$nick - CD  - Change to the specified directory msg =$nick - msg =$nick - Used to move through the path structure of the fileserver. msg =$nick - msg =$nick - Examples: msg =$nick - CD TextFiles (Changes directory to the TextFiles folder) msg =$nick - CD .. (Moves back one directory) } elseif (($2 == DIR) || ($2 == LS)) { msg =$nick - LS [-b|k] [-#] or DIR [-b|k] [-#] [/w] - List the contents of the current directory msg =$nick - msg =$nick - Lists the name and size of each file in the current directory. msg =$nick - The /w switch forces a wide listing. (DIR only, LS is always a wide listing) msg =$nick - The [-b|k] selects bytes or k's. msg =$nick - The [-#] specifies the number of files on each line in a horizontal listing. } elseif ($2 == GET) { msg =$nick - GET  - asks the fileserver to DCC Send the specified file. } elseif ($2 == READ) { msg =$nick - READ [-numlines]  - reads the specified text file. msg =$nick - msg =$nick - The user will be sent a default of 20 lines and then prompted whether to continue listing. msg =$nick - The -numlines option changes the default number of lines to a value between 5 and 50. } elseif ($2 == HELP) { msg =$nick - HELP [command] - displays FServ command help msg =$nick - msg =$nick - [command] is optional, use it to display help on a specific command. msg =$nick - if [command] is not given, HELP will display a listing of all supported commands. } elseif (($2 == EXIT) || ($2 == BYE)) { msg =$nick - EXIT or BYE - closes the FServ session. } elseif ($2 == SENDS) { msg =$nick - SENDS - Lists the server's active DCC Sends } elseif ($2 == QUEUES) { msg =$nick - QUEUES - Lists the server's send queue } elseif ($2 == CLEARQUEUES) { msg =$nick - CLEARQUEUES - Clears all the files you have queued in the fileserver } elseif ($2 == FIND) { msg =$nick - FIND  - Search for files on the fileserver } elseif ($2 == WHOSONLINE) { msg =$nick - WHOSONLINE - Lists other people currently on the fserv. msg =$nick - msg =$nick - This command only shows a list of users when FileServer chat is enabled. } else { msg =$nick - No help available for the command $2 } msg =$nick - End of Help halt } if ($1 == get) { if (!$2) { msg =$nick No filename specified. halt } if (!$exists(" $+ $cd $+ \ $+ $2- $+ ")) { msg =$nick File does not exist. Check your spelling. halt } Atma.SendFile $nick " $+ $cd $+ \ $+ $2- $+ " halt } if ($1- == sends) { var %counter = 1 msg =$nick There are $send(0) sends in progress while (%counter <= $send(0)) { msg =$nick  $+ %counter $+ . - $send(%counter) is recieving $send(%counter).file ( $+ $send(%counter).pc $+ % of $bytes($send(%counter).size).suf $+ , Approx. $duration($round($calc(($send(%counter).size - $send(%counter).sent) / $send(%counter).cps))) remaining) inc %counter } halt } if ($1- == queues) { var %counter = 1 msg =$nick There are $iif($lines(" $+ $scriptdirqueues.dat $+ "),$ifmatch,0) send(s) waiting in the queue while (%counter <= $iif($lines(" $+ $scriptdirqueues.dat $+ "),$ifmatch,0)) { msg =$nick  $+ %counter $+ . - $gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),1,32) queued $nopath($gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),3-,32)) ( $+ $bytes($file($gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),3-,32)).size).suf $+ ) through IRC server $servername($scid($gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),2-,32))) inc %counter } halt } if ($1 == clearqueues) { Atma.ClearQueues $nick msg =$nick All your queues have been cleared. halt } if ($1 == find) { if (!$Atma(fs_find)) { msg =$nick find command is currently disabled. | halt } if (!$2) { msg =$nick No search criteria was specified | halt } var %search = $replace($2-,$chr(32),*) var %search.results $Atma.QuickSearch(%search) .msg =$nick QuickSearch Results .msg =$nick Found ( $+ %search.results $+ ) matches for %search $iif(!%search.results,halt) $iif(%search.results,.msg =$nick Displaying match(es) 1 to $iif(%search.results <= $Atma(fs_find.Results),$ifmatch,$Atma(fs_find.Results))) var %counter = 1 while ((%counter <= %search.results) && (%counter <= $Atma(fs_find.Results))) { var %search.result = $Atma.QuickSearch(%search,%counter) .msg =$nick  $+ $trig.decode($gettok(%search.result,1,32))  -- $gettok(%search.result,2-,32) ( $+ $bytes($Atma.QuickSearch(%search,%counter).size).suf $+ ) inc %counter } .msg =$nick Search Complete. halt } if ($1- == whosonline) { if ($Atma(FServChat)) { var %counter = 1 msg =$nick - There are $fserv(0) user(s) currently on the fserv while (%counter <= $fserv(0)) { msg =$nick - $fserv(%counter) inc %counter } msg =$nick End of list. } else { msg =$nick FServ Chat is not enabled. } halt } if ($Atma(FServChat)) { var %counter = 1 while (%counter <= $fserv(0)) { $iif($fserv(%counter) != $nick,msg = $+ $fserv(%counter) ( $+ $nick $+ / $+ $network $+ ) $1-) inc %counter } if ($window(@fserv-chat)) { aline @fserv-chat ( $+ $nick $+ / $+ $network $+ ) $1- if ($active != @fserv-chat) { window -g1 @fserv-chat } } halt } msg =$nick - " $+ $1 $+ " is not a recognized command. Type help for a list of available commands. halt } on *:input:@fserv-chat:{ if ($left($1,1) == /) { $eval($1-,2) | halt } var %counter = 1 aline @fserv-chat ( $+ $me $+ ) $1- while (%counter <= $fserv(0)) { msg = $+ $fserv(%counter) ( $+ $me $+ ) $1- inc %counter } halt } on *:filesent:*:{ var %sendwindow %counter = 1 while (%counter <= $send($nick,0)) { $iif($send($nick,%counter).path $+ $send($nick,%counter).file == $filename,set %sendwindow %counter) inc %counter } Atma.Config LeechedFiles $calc($Atma.Config(LeechedFiles) + 1) Atma.Config LeechedBytes $calc($Atma.Config(LeechedBytes) + $send($nick,%sendwindow).sent) $iif($iif($gettok($Atma.Config(RecordSpeed),2,32),$ifmatch,0) < $send($nick,%sendwindow).cps,Atma.Config RecordSpeed $nick $send($nick,%sendwindow).cps) updateStats .timer 1 1 Atma.ProcessQueues .timer_/\tma.CheckMinCPS.Terminate off } on *:sendfail:*:{ .timer 1 1 Atma.ProcessQueues .timer_/\tma.CheckMinCPS.Terminate off } on *:part:*:{ if (($comchan($nick,0) <= 1) && $Atma(ChannelEnforcer) && $Atma.Queue($nick).Count) { .notice $nick [FSERV NOTICE] You no longer share a common channel with the fserv; All sends and waiting queues have been cleared [ $+ $Atma Channel Enforcer] Atma.ClearQueues $nick close -s $nick } } on *:snotice:*The user * is not accepting DCC sends of filetype*:{ var %filename = $send($3,$send($3,0)).file close -s $send($3,0) $3 $iif($fserv($3),msg = $+ $3,.notice $3) Your send of %filename was BLOCKED by the IRC server. In order to recieve files of this type, you must first type /dccallow + $+ $me $+ , then you will be able to download the file. if ($Atma(DCCAllowEnforcer) == Ban) { close -sf $3 Atma.ClearQueues $3 Atma.Access.Add $address($3,9) Global Deny $calc($ctime + $Atma(DCCAllowEnforcer.TempBan)) DCCAllow Enforcement TempBan .notice $3 Because you did not comply with this fserv's DCCALLOW rule, your sends and queues have been cleared, and you have been globally banned from this fserv for a duration of $duration($Atma(DCCAllowEnforcer.TempBan)) } } raw 401:*:{ ; Ahnold may be back, but his queues won't be waiting for him ;d close -s $2 Atma.ClearQueues $2 } ; __________________________ ;/`````````````````````````` ; Aliases alias Atma.ver { return $readini($script,addon,version) } alias -l Atma.ini { return $iif($_Sylver.ini,$_Sylver.ini,Sylver.ini) } alias Atma { if (!$isid) { if (!$1) { dialog -m atma_config atma_config } else { $iif($2,writeini $Atma.ini Atma $1 $2-,remini $Atma.ini Atma $1) } } else { $iif(!$1,return _/\tma FileServer Build $Atma.ver) return $readini($Atma.ini,Atma,$1) } } alias Atma.Config { $iif(!$hget(_/\tmaFS),hmake _/\tmaFS 10) if (!$isid) { if ($regex($1,/^-r(w)?/i)) { $iif(!$2,return) var %item = $replace($2-,$chr(32),$chr(46)) hdel $iif($regml(1),- $+ $ifmatch) _/\tmaFS %item } else { hadd _/\tmaFS $1- } } else { return $eval($ $+ hget(_/\tmaFS,$1-) $+ $iif($prop,. $+ $prop),2) } hsave -ob _/\tmaFS " $+ $scriptdiratma.dat $+ " } alias Atma.Help { run " $+ $scriptdirAtma.hlp $+ " } alias Atma.createdefaultini { remini $Atma.ini Atma writeini $Atma.ini Atma InfoLine $Atma writeini $Atma.ini Atma maxUSends 1 writeini $Atma.ini Atma maxUQueues 20 writeini $Atma.ini Atma maxTSends 3 writeini $Atma.ini Atma maxTQueues 99 writeini $Atma.ini Atma maxUsers 10 writeini $Atma.ini Atma QueueUsing FileCount writeini $Atma.ini Atma Interval 30 writeini $Atma.ini Atma IntervalUnit minutes writeini $Atma.ini Atma RespondToList 1 writeini $Atma.ini Atma EnableAd 1 writeini $Atma.ini Atma StartOnConnect 1 writeini $Atma.ini Atma FServChat 1 writeini $Atma.ini Atma ChannelEnforcer 1 writeini $Atma.ini Atma @Find 1 writeini $Atma.ini Atma @Find.Results 5 writeini $Atma.ini Atma fs_find 1 writeini $Atma.ini Atma fs_find.Results 10 writeini $Atma.ini Atma DCCAllowEnforcer Notify writeini $Atma.ini Atma DCCAllowEnforcer.TempBan 300 writeini $Atma.ini Atma MinCPS.Enabled 0 writeini $Atma.ini Atma MinCPS 6 writeini $Atma.ini Atma MinCPS.secs 5 writeini $Atma.ini Atma MaxCPS.Enabled 0 writeini $Atma.ini Atma MaxCPS 20 writeini $Atma.ini Atma TriggerType Normal writeini $Atma.ini Atma QuickSearchRefreshOnStart 0 writeini $Atma.ini Atma FormatString &b_/\&b&c04tma&c&bFServ&b(Triggers&b[&b &c05&Atma.Triggers&c &b]&b Hits&b[&b &c05&Atma.Hits&c &b]&b Users&b[&b &c05&Atma.Users&c &b]&b Sends&b[&b &c05&Atma.Sends&c &b]&b Queues&b[&b &c05&Atma.Queues&c &b]&b Leeched&b[&b &c05&Atma.LeechedBytes&c in &c05&Atma.LeechedFiles&c files &b]&b Record Speed&b[&b &c05&Atma.RecordSpeed&c &b]&b InfoLine&b[&b &c05&Atma.InfoLine&c &b]&b) } alias -l Atma.createdefaultstp { $iif($hget(_/\tmaFS.STP),hfree _/\tmaFS.STP) hmake _/\tmaFS.STP 10 hadd _/\tmaFS.STP Atma_Short &b_/\&b&c04tma&c&bFServ&b(Triggers&b[&b &c05&Atma.Triggers&c &b]&b Users&b[&b &c05&Atma.Users&c &b]&b Sends&b[&b &c05&Atma.Sends&c &b]&b Queues&b[&b &c05&Atma.Queues&c &b]&b InfoLine&b[&b &c05&Atma.InfoLine&c &b]&b) hadd _/\tmaFS.STP Atma_Long &b_/\&b&c04tma&c&bFServ&b(Triggers&b[&b &c05&Atma.Triggers&c &b]&b Hits&b[&b &c05&Atma.Hits&c &b]&b Users&b[&b &c05&Atma.Users&c &b]&b Sends&b[&b &c05&Atma.Sends&c &b]&b Queues&b[&b &c05&Atma.Queues&c &b]&b Leeched&b[&b &c05&Atma.LeechedBytes&c in &c05&Atma.LeechedFiles&c files &b]&b Record Speed&b[&b &c05&Atma.RecordSpeed&c &b]&b InfoLine&b[&b &c05&Atma.InfoLine&c &b]&b) hsave -ob _/\tmaFS.STP " $+ $scriptdirAtma.stp $+ " } alias Atma.Activate { writeini $Atma.ini Atma Active 1 var %counter = 1 var %connection = 1 while ( %connection <= $scon(0) ) { scon %connection var %counter = 1 while (%counter <= $numtok($Atma.Channels($Atma.Networks($networkname)),5)) { var %chan = $gettok($Atma.Channels($Atma.Networks($networkname)),%counter,5) var %delay = $iif($Atma.Channels($Atma.Networks($networkname),%chan).IntervalUnit == seconds,$Atma.Channels($Atma.Networks($networkname),%chan).Interval,$calc($Atma.Channels($Atma.Networks($networkname),%chan).Interval * 60)) .timer_/\tma. $+ $server $+ . $+ %chan 0 %delay Atma.Advertise %chan Atma.Advertise %chan inc %counter } inc %connection } if ($Atma(MinCPS.Enabled)) { .timer_/\tma.MinCPS 0 5 Atma.CheckMinCPS } .timer_/\tma.AuditAccess 0 5 Atma.Access.Audit } alias Atma.Deactivate { $iif($1 != --force,$iif(!$input(This will halt the fserv and clear all waiting queues. Shut down anyway?,264,$Atma),return)) writeini $Atma.ini Atma Active 0 var %connection = 1 while ( %connection <= $scon(0) ) { .timer_/\tma* off inc %connection } $iif($exists(" $+ $scriptdirqueues.dat $+ "),.remove " $+ $scriptdirqueues.dat $+ ") } alias Atma.Sends return $iif($1,$send($1,0),$send(0)) alias Atma.Users.Count return $fserv(0) alias Atma.Triggers { var %Atma.Triggers var %counter = 1 while (%counter <= $hget(_/\tmaFS,0).item) { if ($regex($hget(_/\tmaFS,%counter).item,/^Triggers\.([^\.]*)$/i)) { if ($1) { if ($hget(_/\tmaFS,Triggers. $+ $regml(1) $+ .AllChans) || $istok($hget(_/\tmaFS,Triggers. $+ $regml(1) $+ .Channels),$1,44)) { $iif($hget(_/\tmaFS,Triggers. $+ $regml(1)),%Atma.Triggers = $addtok(%Atma.Triggers,$regml(1),5)) } } else { %Atma.Triggers = $addtok(%Atma.Triggers,$regml(1),5) } } inc %counter } ; Sort 'em alphabetically... %Atma.Triggers = $sorttok(%Atma.Triggers,5) %Atma.Triggers = $trig.decode(%Atma.Triggers) $iif($prop != Formatted,return %Atma.Triggers) var %Atma.Triggers.Formatted = $gettok(%Atma.Triggers,1,5) $iif(%Atma.Triggers.Formatted && ($Atma.Config(Channels. $+ $Atma.Networks($networkname) $+ . $+ $iif($1,$Atma.Channels($Atma.Networks($networkname),$1),*) $+ .TriggerType) == CTCP),%Atma.Triggers.Formatted = /ctcp $me %Atma.Triggers.Formatted) %counter = 2 while (%counter <= $numtok(%Atma.Triggers,5)) { if ($Atma.Config(Channels. $+ $Atma.Networks($networkname) $+ . $+ $iif($1,$Atma.Channels($Atma.Networks($networkname),$1),*) $+ .TriggerType) == CTCP) { %Atma.Triggers.Formatted = %Atma.Triggers.Formatted & /ctcp $me $gettok(%Atma.Triggers,%counter,5) } else { %Atma.Triggers.Formatted = %Atma.Triggers.Formatted & $gettok(%Atma.Triggers,%counter,5) } inc %counter } return %Atma.Triggers.Formatted } alias Atma.Channels { var %Atma.Channels var %network = $iif($1,$1,$Atma.Networks($networkname)) var %counter = 1 while (%counter <= $hget(_/\tmaFS,0).item) { var %regex = /^Channels\. $+ $regex.encode(%network) $+ \.([^\.]*)$/i if ($regex($hget(_/\tmaFS,%counter).item,%regex)) { %Atma.Channels = $addtok(%Atma.Channels,$regml(1),5) } inc %counter } if (!$2) { return $sorttok(%Atma.Channels,5,r) } if (($2 == *) && !$prop) { var %chans var %counter = 1 while (%counter <= $chan(0)) { if (!$istok(%Atma.Channels,$chan(%counter),5)) set %chans $addtok(%chans,$chan(%counter),44) inc %counter } return %chans } var %chan = $iif($istok(%Atma.Channels,$2,5),$2,*) $iif(!$prop,return %chan) return $Atma.Config(Channels. $+ %network $+ . $+ %chan $+ . $+ $prop) } alias Atma.Networks { var %Atma.Networks var %counter = 1 while (%counter <= $hget(_/\tmaFS,0).item) { var %regex = /^Channels\.([^\.]*)\.\*$/i if ($regex($hget(_/\tmaFS,%counter).item,%regex)) { %Atma.Networks = $addtok(%Atma.Networks,$regml(1),5) } inc %counter } if (!$1) { return $sorttok(%Atma.Networks,5,r) } if (($1 == *) && !$prop) { var %nets var %counter = 1 while (%counter <= $scon(0)) { var %network $iif($scon(%counter).$network,$ifmatch,{unknown}) if (!$istok(%Atma.Networks,%network,5)) set %nets $addtok(%nets,%network,44) inc %counter } return $reptok(%nets,{unknown},*,5) } var %net = $iif($istok(%Atma.Networks,$1,5),$1,*) $iif(!$prop,return %net) } alias Atma.Sessions { $iif(!$1,return) $iif(!$prop,return $hget(_/\tmaFS.Sessions,$1)) return $hget(_/\tmaFS.Sessions,$1 $+ . $+ $prop) } alias -l Channel.setDefault { $iif(!$2,return) Atma.Config Channels. $+ $1 $+ . $+ $2 1 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .MaxUQueues 20 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .MaxTQueues 99 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .MaxUsers 10 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .QueueUsing FileCount Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .@Find 1 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .RespondToList 1 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .InfoLine $Atma Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .EnableAd 1 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .TriggerType Normal Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .Interval 30 Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .IntervalUnit minutes } alias -l Channel.Copy { $iif(!$2,return) var %counter = 1 while (%counter <= $hfind(_/\tmaFS,/^ $+ $regex.encode(Channels. $+ $1)/i,0,r)) { var %source = $hfind(_/\tmaFS,/^ $+ $regex.encode(Channels. $+ $1)/i,%counter,r) .echo -q $regex(%source,/^Channels\..*?\..*?\.(.*)/i) var %dest = Channels. $+ $2 $+ $iif($regml(1),. $+ $regml(1)) Atma.Config %dest $Atma.Config(%source) inc %counter } } alias Atma.Advertise { if (!$1) { Atma.AdvertiseAll return } if ($1 == *) { Atma.AdvertiseMulti return } if (($me ison $1) && ($Atma.Channels($Atma.Networks($networkname),$1).EnableAd)) { if ($Atma.Triggers($1)) { var %ad = $replace($parse_formatstr($1,$Atma(FormatString)),&\,$chr(13)) var %counter = 1 while (%counter <= $numtok(%ad,13)) { msg $1 $gettok(%ad,%counter,13) inc %counter } } } } alias -l Atma.AdvertiseMulti { var %chans var %con = 1 var %counter = 1 while (%counter <= $numtok($Atma.Channels($Atma.Networks($networkname),*),44)) { %chan = $gettok($Atma.Channels($Atma.Networks($networkname),*),%counter,44) Atma.Advertise %chan inc %counter } } alias -l Atma.AdvertiseAll { var %counter = 1 while (%counter <= $scon(0)) { scon %counter var %counter2 = 1 while (%counter2 <= $chan(0)) { atma.advertise $chan(%counter2) inc %counter2 } inc %counter } } alias -l Atma.cfgTriggers { var %action = $iif($Atma.Triggers,-e,-b) did -r atma_config 32,103 did -r atma_config 40 did -r atma_config 43 did -r atma_config 36 $iif($Atma.Triggers,didtok atma_config 32 5 $Atma.Triggers) didtok atma_config 103 5 Global Permissions $iif($Atma.Triggers,didtok atma_config 103 5 $didtok(atma_config,32,5)) did %action atma_config 34 did %action atma_config 36 did %action atma_config 37 did %action atma_config 38 did %action atma_config 39 did %action atma_config 41 did %action atma_config 42 did %action atma_config 44 did %action atma_config 45 did %action atma_config 72 did %action atma_config 73 did %action atma_config 74 did %action atma_config 75 if ($Atma.Triggers) { did -c atma_config 32 $iif($1,$1,1) did -c atma_config 103 $iif($1,$calc($1 + 1),1) var %Trigger = $trig.encode($did(atma_config,32).seltext) did $iif($hget(_/\tmaFS,Triggers. $+ %Trigger),-c,-u) atma_config 34 did -o atma_config 40 1 $hget(_/\tmaFS,Triggers. $+ %Trigger $+ .Root) did -o atma_config 43 1 $hget(_/\tmaFS,Triggers. $+ %Trigger $+ .MOTD) didtok atma_config 36 44 $hget(_/\tmaFS,Triggers. $+ %Trigger $+ .Channels) did $iif($hget(_/\tmaFS,Triggers. $+ %Trigger $+ .AllChans),-c,-u) atma_config 39 var %action = $iif($hget(_/\tmaFS,Triggers. $+ %Trigger $+ .AllChans),-b,-e) did %action atma_config 36 did %action atma_config 37 did %action atma_config 38 } else { did -c atma_config 103 1 } } alias -l updateChans { did -r atma_config 197 didtok atma_config 197 5 $Atma.Networks did -c atma_config 197 $iif($1,$1,1) did -r atma_config 167 didtok atma_config 167 5 $Atma.Channels($did(atma_config,197).seltext) did -c atma_config 167 $iif($2,$2,1) var %net = $did(atma_config,197).seltext var %chan = $did(atma_config,167).seltext did -o atma_config 181 1 $Atma(MaxUSends) did -o atma_config 182 1 $Atma(MaxTSends) did -o atma_config 184 1 $Atma.Channels(%net,%chan).MaxUQueues did -o atma_config 183 1 $Atma.Channels(%net,%chan).MaxTQueues did -o atma_config 193 1 $Atma.Channels(%net,%chan).MaxUsers did -c atma_config 194 $iif($Atma.Channels(%net,%chan).QueueUsing == FileCount,1,2) did $iif($Atma.Channels(%net,%chan).@Find,-c,-u) atma_config 190 did $iif($Atma.Channels(%net,%chan).RespondToList,-c,-u) atma_config 22 did $iif($Atma.Channels(%net,%chan).EnableAd,-c,-u) atma_config 158 did $iif($Atma.Channels(%net,%chan).TriggerType == Normal,-c,-u) atma_config 163 did $iif($Atma.Channels(%net,%chan).TriggerType == CTCP,-c,-u) atma_config 164 did -o atma_config 160 1 $Atma.Channels(%net,%chan).Interval did $iif($Atma.Channels(%net,%chan).IntervalUnit == Minutes,-c,-u) atma_config 162 did $iif($Atma.Channels(%net,%chan).IntervalUnit == Seconds,-c,-u) atma_config 161 did -o atma_config 24 1 $Atma.Channels(%net,%chan).InfoLine } alias -l updateStats { $iif(!$dialog(atma_config),return) did -o atma_config 143 1 $iif($Atma.Config(LeechedFiles),$ifmatch,0) did -o atma_config 144 1 $iif($Atma.Config(LeechedBytes),$bytes($ifmatch).suf ( $+ $ifmatch bytes),0 bytes) did -o atma_config 145 1 $iif($Atma.Config(RecordSpeed),$round($calc($gettok($ifmatch,2,32) / 1024),2) $+ kb/s by $gettok($ifmatch,1,32),0kb/s) did -o atma_config 146 1 $iif($Atma.Config(Hits),$ifmatch,0) } alias -l updateAccess { var %Scope = $trig.encode($did(atma_config,103).seltext) did -r atma_config 100 $iif(%Scope == Global^32Permissions,set %Scope Access.,set %Scope Triggers. $+ %Scope $+ .Access.) var %counter = 1 while (%counter <= $hfind(_/\tmaFS,%Scope $+ *,0,w)) { if ($gettok($Atma.Config($hfind(_/\tmaFS,%Scope $+ *,%counter,w)),1,32) == $iif($did(atma_config,132).state,Allow,Deny)) { .echo -q $regex($hfind(_/\tmaFS,%Scope $+ *,%counter,w),/Access.(.*)$/) did -a atma_config 100 $regml(1) ( $+ $iif($gettok($Atma.Config($hfind(_/\tmaFS,%Scope $+ *,%counter,w)),2,32),$asctime($ifmatch),Never Expires) $+ ) $gettok($Atma.Config($hfind(_/\tmaFS,%Scope $+ *,%counter,w)),3-,32) } inc %counter } } alias -l updateStyle { did -r atma_config 59 var %counter = 1 while (%counter <= $hget(_/\tmaFS.STP,0).item) { did -a atma_config 59 $hget(_/\tmaFS.STP,%counter).item inc %counter } did -c atma_config 59 $findtok($didtok(atma_config,59,5),$hfind(_/\tmaFS.STP,$did(atma_config,57),1).data,1,5) } alias -l updateQueues { var %dropdown did -r atma_queues 1 $iif(!$lines(" $+ $scriptdirqueues.dat $+ "),return) var %counter = 1 while (%counter <= $lines(" $+ $scriptdirqueues.dat $+ ")) { did -a atma_queues 1 %counter $gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),1,32) $gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),2-,32) inc %counter } did -c atma_queues 1 $iif($1,$1,1) if ($did(atma_queues,1).sel < 1) { did -b atma_queues 10,11,12,13 did -r atma_queues 5,18,7,9 return } did -o atma_queues 5 1 $gettok($did(atma_queues,1).seltext,1,32) did -o atma_queues 18 1 $gettok($did(atma_queues,1).seltext,2,32) ( $+ $servername($gettok($did(atma_queues,1).seltext,3,32)) $+ ) did -o atma_queues 7 1 $nopath($gettok($did(atma_queues,1).seltext,4-,32)) did -o atma_queues 9 1 $bytes($file($gettok($did(atma_queues,1).seltext,4-,32)).size,3).suf did -e atma_queues 10,11,12,13 } alias Atma.SendFile { ;Atma.Sendfile $nick $file var %chan = $Atma.Channels($Atma.Networks($networkname),$Atma.Sessions($1).Channel) $iif(!$1 || !$2-,return) if ($Atma.Sends >= $Atma(maxTSends)) { Atma.Queue $1 $2- return } if ($Atma.Sends($1) >= $Atma(maxUSends)) { Atma.Queue $1 $2- return } .dcc maxcps $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) dcc send -cl $+ $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) $1 $2- } alias Atma.Queue { $iif($hget(_/\tmaFS.Queues),hfree _/\tmaFS.Queues) hmake _/\tmaFS.Queues 10 var %counter = 1 while (%counter <= $iif($lines(" $+ $scriptdirqueues.dat $+ "),$ifmatch,0)) { hadd _/\tmaFS.Queues %counter $read(" $+ $scriptdirqueues.dat $+ ",%counter) inc %counter } if ($isid) { var %regex = /^ $+ $1 $iif($2,$2,.*) /i if ($prop == size) { if ($2) { return $bytes($file($gettok($hget(_/\tmaFS.Queues,$hfind(_/\tmaFS.Queues,%regex,$2,r).data),2-,32)).size,m) } else { var %QueuesMB = 0 var %counter = 1 while (%counter <= $hfind(_/\tmaFS.Queues,%regex,0,r).data) { inc %QueuesMB $bytes($file($gettok($hget(_/\tmaFS.Queues,$hfind(_/\tmaFS.Queues,%regex,%counter,r).data),2-,32)).size,m) inc %counter } return %QueuesMB } } else { if ($2) { return $hget(_/\tmaFS.Queues,$hfind(_/\tmaFS.Queues,%regex,$2,r).data) } else { return $hfind(_/\tmaFS.Queues,%regex,0,r).data } } } else { Atma.AddQueue $1 $cid $2- } } alias -l Atma.AddQueue { $iif(!$3-,return) var %chan = $Atma.Channels($Atma.Networks($networkname),$Atma.Sessions($1).Channel) var %regex = /^ $+ $1 $2 $regex.encode($3-) $+ $ $+ /i if ($hfind(_/\tmaFS.Queues,%regex,0,r).data) { msg =$nick You have already queued the file $nopath($3-) } else { if ($Atma.Queue($1).Count >= $Atma.Channels($Atma.Networks($networkname),%chan).maxTQueues) { msg =$nick The FServ queue limit has been reached. Wait for some sends to finish, then try again. return } if ($Atma.Queue($1).Count >= $Atma.Channels($Atma.Networks($networkname),%chan).maxUQueues) { msg =$nick You have reached your maximum queue limit. Wait for some of your sends to finish, then try again. return } write " $+ $scriptdirqueues.dat $+ " $1 $2 $3- msg =$nick Your file ( $+ $nopath($3-) $+ ) has been queued into slot $lines(" $+ $scriptdirqueues.dat $+ ") } } alias Atma.ProcessQueues { $iif(!$lines(" $+ $scriptdirqueues.dat $+ "),return) var %queue = 1 while ($Atma.Sends < $Atma(maxTSends)) { if (%queue > $lines(" $+ $scriptdirqueues.dat $+ ")) { return } var %qtext = $read(" $+ $scriptdirqueues.dat $+ ",%queue) if ($Atma.Sends($gettok(%qtext,1,32)) >= $Atma(maxUSends)) { inc %queue | continue } scid $gettok(%qtext,2,32) .dcc maxcps $iif .dcc maxcps $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) dcc send -cl $+ $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) $gettok(%qtext,1,32) $gettok(%qtext,3-,32) write -dl $+ %queue " $+ $scriptdirqueues.dat $+ " inc %queue } } alias Atma.ClearQueues { while ($read(" $+ $scriptdirqueues.dat $+ ",w,$1 *)) { var %line = $readn write -dl $+ %line " $+ $scriptdirqueues.dat $+ " } } alias -l RelativePath { ;var %regex = /^ $+ $replace($1,\,\\) $+ (.*?)$/ var %regex = /^ $+ $regex.encode($1) $+ (.*?)$/ var %relativepath .echo -q $regex(relpath,$2,%regex) debug.print $lower(\ $+ $regml(relpath,1)) return \ $+ $replace($regml(relpath,1),$chr(32),$chr(5)) } alias -l Atma.CacheTriggers { ;window -doC @Atma 1 1 300 200 $iif($hget(_/\tmaFS.Cache),hfree _/\tmaFS.Cache) $iif(!$Atma.Triggers,return) var %Atma.Triggers = $trig.encode($Atma.Triggers) hmake _/\tmaFS.Cache 1000 echo -s AtmaFS: Caching FServ files... var %starttime = $ticks var %counter = 1 var %filecount = 0 while (%counter <= $numtok(%Atma.Triggers,5)) { var %files = $findfile($Atma.Config(Triggers. $+ $gettok(%Atma.Triggers,%counter,5) $+ .Root),*.*,0,hadd _/\tmaFS.Cache $gettok(%Atma.Triggers,%counter,5) $+ $chr(5) $+ $RelativePath($Atma.Config(Triggers. $+ $gettok(%Atma.Triggers,%counter,5) $+ .Root),$1-) $file($1-).size) var %fcount echo -s $gettok($Atma.Triggers,%counter,5) -- Cached %files files inc %filecount %files inc %counter } hsave -ob _/\tmaFS.Cache " $+ $scriptdirfscache.dat $+ " echo -s Finished caching %filecount FServ files ( $+ $calc(($ticks - %starttime) / 1000) seconds , $calc(%filecount / (($ticks - %starttime) / 1000)) files per second $+ ). ;window -c @Atma } alias Atma.QuickSearch { $iif(!$1,return 0) var %search = * $+ $1 $+ * return $iif($2 && ($prop == size),$hget(_/\tmaFS.Cache,$hfind(_/\tmaFS.Cache,%search,$iif($2,$2,0),w)),$replace($hfind(_/\tmaFS.Cache,%search,$iif($2,$2,0),w),$chr(5),$chr(32))) } alias -l formatstr_preview { ;modded considerably from ZeeG's $xd.p previewing alias in xServ var %preview = " $+ $scriptdiratma-preview.bmp $+ " var %prvstr = $parse_formatstr(#pinet,$did(atma_config,57)) window -phf @atma_preview 0 0 528 16 $iif(%prvstr,drawtext -bpc @atma_preview $colour(normal) $colour(background) verdana -7 1 1 528 16 %prvstr) drawsave @atma_preview %preview window -c @atma_preview return %preview } alias -l Atma.CheckMinCPS { $iif(!$send(0),return) $iif($timer(_/\tma.CheckMinCPS.Terminate),return) var %counter = 1 while (%counter <= $send(0)) { if ($send(%counter).cps < $Atma(MinCPS)) { .timer_/\tma.CheckMinCPS.Terminate 1 $Atma(MinCPS.Secs) Atma.CheckMinCPS.Terminate %counter return } inc %counter } } alias -l Atma.CheckMinCPS.Terminate { if ($send($1).cps < $Atma(MinCPS)) { .notice $send($1) Your send of $send($1).file has been canceled because the bytes per second dropped below the server minimum of $Atma(MinCPS) for a duration of $Atma(MinCPS.Secs) seconds. close -s $+ $1 } } alias Atma.Access { $iif(!$1,return) $iif(!$istok($trig.encode($Atma.Triggers),$2,5),return) var %Trig.AllowList = 0 var %Trig.Allowed = 0 var %regex = /^Triggers. $+ $replace($2,^,\^) $+ .Access.(.*?)$/ var %counter = 1 while (%counter <= $hfind(_/\tmaFS,%regex,0,r)) { .echo -q $regex($hfind(_/\tmaFS,%regex,%counter,r),%regex) var %matchhost = $regml(1) if ((%matchhost iswm $1) && ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == DENY)) { return DENIED You are banned from using this trigger. Reason:( $gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),3-,32) ) (Ban Expires: $iif($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),2,32),$asctime($ifmatch) / Current time = $asctime($ctime),Never) ) } if ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == ALLOW) { %Trig.AllowList = 1 $iif(%matchhost iswm $1, %Trig.Allowed = 1) } inc %counter } var %Global.AllowList = 0 var %Global.Allowed = 0 var %regex = /^Access.(.*?)$/ var %counter = 1 while (%counter <= $hfind(_/\tmaFS,%regex,0,r)) { .echo -q $regex($hfind(_/\tmaFS,%regex,%counter,r),%regex) var %matchhost = $regml(1) if ((%matchhost iswm $1) && ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == DENY)) { return DENIED You are banned from using this FileServer. Reason:( $gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),3-,32) ) (Ban Expires: $iif($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),2,32),$asctime($ifmatch) / Current time = $asctime($ctime),Never) ) } if ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == ALLOW) { %Global.AllowList = 1 $iif(%matchhost iswm $1, %Global.Allowed = 1) } inc %counter } if (%Trig.AllowList || %Global.AllowList) { $iif(%Trig.AllowList && %Trig.Allowed,return ALLOWED) $iif(%Global.AllowList && %Global.Allowed,return ALLOWED) return DENIED You do not have permission to access this exclusive $iif(%Global.AllowList,FileServer.,trigger.) } else { return ALLOWED } } alias Atma.Access.Add { var %Scope = $iif($2 != Global,Triggers. $+ $2 $+ .Access.,Access.) hadd _/\tmaFS %Scope $+ $1 $3- } alias -l Atma.Access.Remove { var %Scope = $iif($2 != Global,Triggers. $+ $2 $+ .Access.,Access.) Atma.Config -r %Scope $+ $1 } alias -l Atma.Access.Audit { var %regex = /^(Triggers\..*?\.)?Access.(.*?)$/ var %counter = 1 while (%counter <= $hfind(_/\tmaFS,%regex,0,r)) { .echo -q $regex($hfind(_/\tmaFS,%regex,%counter,r),%regex) if (*!*@* iswm $regml($regml(0))) { var %expires = $gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),2,32) if (%expires && (%expires < $ctime)) { debug.print PERMISSION $hfind(_/\tmaFS,%regex,%counter,r) EXPIRED, PURGED Atma.Config -r $hfind(_/\tmaFS,%regex,%counter,r) } } inc %counter } } alias Atma.Chat { if ($window(@fserv-chat)) { return } window -el15 @fserv-chat aline -l @fserv-chat @ $+ $me var %counter = 1 while (%counter <= $fserv(0)) { aline -l @fserv-chat $fserv(%counter) $+ / $+ $scid($fserv(%counter).cid).network inc %counter } } alias -l trig.encode { return $replace($1-, $& $chr(32),^32, $& $chr(46),^46) } alias -l trig.decode { return $replace($1-, $& ^32,$chr(32), $& ^46,$chr(46)) } alias -l regex.encode { return $replace($1-, $& \,\\, $& .,\., $& *,\*, $& +,\+, $& [,\[, $& ],\], $& $chr(40), \ $+ $chr(40), $& $chr(41), \ $+ $chr(41)) } alias -l _errorbox .echo -q $input($$1-,260,$Atma) alias -l debug.print $iif($window(@Atma),aline @Atma $$1-) alias -l servername { scon $1 return $!server } alias networkname { return $iif($network,$network,atma.unknown.network) }