home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / comm / irc / AmScript.lha / Developer / AmScript.amirx next >
Encoding:
Text File  |  1999-08-07  |  26.0 KB  |  773 lines

  1. /* $VER: AmScript 0.9 (07/08/99) by Paul Demark & Michael Trebilcock */
  2. Options Results
  3. signal on syntax
  4. Bold='02'x
  5. Inverse='16'x
  6. Underline='1F'x
  7.  
  8. IF Exists('Libs:rexxreqtools.library')|Exists('Libs/rexxreqtools.library')|Exists('rexxreqtools.library') THEN DO
  9. IF ~SHOW('L','rexxreqtools.library') THEN Call AddLib('rexxreqtools.library',0,-30,0);End
  10. ELSE DO;Call cEcho('Unable to open RexxReqTools.library  Please Install Libs:rexxreqtools.library');Exit;End
  11. IF Exists('Libs:rexxsupport.library')|Exists('Libs/rexxsupport.library')|Exists('rexxsupport.library') THEN DO
  12. IF ~SHOW('L','rexxsupport.library') THEN Call AddLib('rexxsupport.library',0,-30,0);End
  13. ELSE DO;Call cEcho('Unable To Open RexxSupport.library  Please Install Libs:rexxsupport.library from your Workbench disk');Exit;End
  14. IF Exists('Libs:rexxdossupport.library')|Exists('Libs/rexxdossupport.library')|Exists('rexxdossupport.library') THEN DO
  15. IF ~SHOW('L','rexxdossupport.library') THEN Call AddLib('rexxdossupport.library',0,-30,0);End
  16. ELSE DO;Call cEcho('Unable To Open RexxDosSupport.library  Please Install Libs:rexxdossupport.library');Exit;End
  17.  
  18. Template='Arguements/M,Install/S,Resolve=R/S,SList=SoundList/S,Play/S,SSend=SoundSend/S,NBan=NickBan/S,Ban=IPBan/S,ZBan=ZIPBan/S,Simple/S,Complex/S,Run/S,NewNick=NNick/S,ZOp/S,ZDeOp/S,ZSuspend=ZSus/S,ZUnSuspend=ZUnSus/S,Type/S,Time/K,NoTime/S,Verbose=Verb/S,NoReason=NoR/S,ASHelp=Help/S'
  19. Parse Arg Args
  20. Call ReadArgs(Args,Template)
  21.  
  22.  
  23. INFO screen
  24. Screen="'"result"'"
  25. Screen='rt_pubscrname='Screen
  26. PARSE UPPER VERSION f
  27. f=SUBSTR(WORD(f,6),1,2)
  28. "GetMyNick"
  29. MyNick=Result
  30. GetChannel
  31. Channel=Result
  32. Version="v0.9"
  33. Tags="AmScript "Version" by Paul Demark & Michael Trebilcock"
  34. NL='0A'x
  35.  
  36. IF Time='TIME'&~DATATYPE(ASHelp,'W') THEN DO
  37.  /* This is a work around of a rexxdossupport.library bug */
  38.  Call cEcho('Do not just use the TIME keyword without an arguement.')
  39.  Exit
  40. End
  41. SELECT
  42.  WHEN ASHelp THEN Call Help()
  43.  WHEN Install THEN Call Install() /* Fully Complete */
  44.  WHEN Resolve THEN Call Resolve() /* Fully Complete */
  45.  WHEN SList THEN Call List() /* Fully Complete */
  46.  WHEN Play|SSend THEN Call Play() /* Fully Complete */
  47.  WHEN NBan THEN Call NBan() /* Fully Complete */
  48.  WHEN Ban|ZBan THEN Call IPBan() /* Fully Complete */
  49.  WHEN ZDeOp|ZOp THEN Call ZDeOp() /* Fully Complete */
  50.  WHEN ZSuspend THEN Call ZSuspend() /* Fully Complete */
  51.  WHEN ZUnSuspend THEN Call ZUnSuspend() /* Fully Complete */
  52.  WHEN Run THEN Call Run()  /* Fully Complete */
  53.  WHEN NewNick THEN Call NewNick() /* Fully Complete */
  54.  WHEN Type THEN Call Type() /* Complete, Can Add Shortcuts for Nick, Underline, Bold, Inverse */
  55.  OTHERWISE Call Help()  /* Fully Complete */
  56. End
  57.  
  58. Depart:
  59. IF Verbose THEN IF ASHelp~=1 THEN Call cEcho('Now quitting AmScript')
  60. Exit
  61.  
  62. Help:
  63. SELECT
  64.  WHEN Install|Resolve|SList|Play|SSend|NBan|Ban|ZBan|Run|NewNick|Verbose|NoReason THEN DO
  65.   IF ~Exists('AmScriptHelp.amirx')&~Exists('Rexx/AmScriptHelp.amirx') THEN Call cEcho(Bold"Online help file is NOT installed (AmScriptHelp.amirx)")
  66.   ELSE DO
  67.    'SAY /Rx AmScriptHelp.amirx Helpizm=69 'Args
  68.    Exit
  69.   End
  70.  End
  71.  OTHERWISE
  72.   IF Arguements.0~='ARGUEMENTS.0' THEN DO
  73.    Call cEcho(Bold"Unknown Command: "Arguements.0)
  74.    Call cEcho(" ")
  75.   End
  76.   Call cEcho(Bold"Welcome to AmScript "Version"!")
  77.   IF ASHelp THEN DO
  78.    Call cEcho(" ")
  79.    Call cEcho("ASHelp / Help command brings up this general help.  For help on a specific command, type: /ASHelp <Command>")
  80.   End
  81.   Call cEcho(" ")
  82.   Call cEcho("The Available Commands Are:")
  83.   Call cEcho(Bold"Install"Bold" - Installs aliases for quick access to this script")
  84.   Call cEcho(Bold"Resolve / R"Bold" - Resolve ones IP address (Either by Nick or IP Address given)")
  85.   Call cEcho(Bold"SList / SoundList"Bold" - List available sound files")
  86.   Call cEcho(Bold"Play"Bold" - Play sounds from the 'SoundList' command or by their path/filename")
  87.   Call cEcho(Bold"SSend / SoundSend"Bold" - Send a sound (by name or number from the soundlist) to a nominated user")
  88.   Call cEcho(Bold"NBan / NickBan"Bold" - Bans the specified person by their nickname")
  89.   Call cEcho(Bold"Ban/IPBan"Bold" - Bans the specified person by their hotmask for "Bold"<Time>")
  90.   Call cEcho(Bold"ZBan/ZIPBan"Bold" - ZBans the specified person by their hotmask for "Bold"<Time in Hours>")
  91.   Call cEcho(Bold"ZOp"Bold" - Op the specified person via Z")
  92.   Call cEcho(Bold"ZDeOp"Bold" - DeOp the specified person via Z")
  93.   Call cEcho(Bold"ZSuspend / Suspend"Bold" - Suspend the specified person from Z for "Bold"<Time>")
  94.   Call cEcho(Bold"ZUnSuspend / UnSuspend"Bold" - UnSuspend the specified person from Z")
  95.   Call cEcho(Bold"Run"Bold" - Run programs from within AmIRC")
  96.   Call cEcho(Bold"NewNick / Nick"Bold" - Change your nick to a new one")
  97.   Call cEcho(Bold"Type"Bold" - Type defined text file to a person or channel")
  98.   Call cEcho(" ")
  99.   Call cEcho(Bold"ASHelp / Help"Bold" - to bring this help or help for any of the above commands")
  100.   Call cEcho("For help on any command, type: /AS ASHelp <Command>")
  101.   Call cEcho(" ")
  102.   Call cEcho(Bold"Verbose"Bold" - will show additional information with the other commands available")
  103.   Call cEcho(Bold"Time = <Value>"Bold" - specify the time to act on a person on other commands with <Time> mentioned above")
  104.   Call cEcho(Bold"NoTime"Bold" - Do not ask for the time of a command to act on a person")
  105.   Call cEcho(" ")
  106.   Call cEcho("Commands in "Bold"<>"Bold" means they are required.  Commands in "Bold"[]"Bold" are optional.")
  107. End
  108. Return()
  109.  
  110. Install:
  111. Call cEcho("Installing AmScript..")
  112. "say /alias /AS /Rx AmScript.amirx %p"
  113. "say /alias /AmScript /Rx AmScript.amirx %p"
  114. "say /alias /SoundList /Rx AmScript.amirx SList"
  115. "say /alias /SList /Rx AmScript.amirx SList"
  116. "say /alias /Play /Rx AmScript.amirx Play %p"
  117. "say /alias /SoundSend /Rx AmScript.amirx SSend %p"
  118. "say /alias /SSend /Rx AmScript.amirx SSend %p"
  119. "say /alias /Resolve /rx AmScript.amirx Resolve %p"
  120. "say /alias /R /rx AmScript.amirx Resolve %p"
  121. "say /alias /NBan /Rx AmScript.amirx NBan %p"
  122. "say /alias /IPBan /Rx AmScript.amirx IPBan %p"
  123. "say /alias /ZBan /Rx AmScript.amirx ZIPBan %p"
  124. "say /alias /ZOp /Rx AmScript.amirx ZOp %p"
  125. "say /alias /ZDeOp /Rx AmScript.amirx ZDeOp %p"
  126. "say /alias /ZSuspend /Rx AmScript.amirx ZSuspend %p"
  127. "say /alias /ZUnSuspend /Rx AmScript.amirx ZUnSuspend %p"
  128. "say /alias /Run /Rx AmScript.amirx Run %p"
  129. "say /alias /NewNick /Rx AmScript.amirx NewNick %p"
  130. "say /alias /NNick /Rx AmScript.amirx NewNick %p"
  131. "say /Alias /Type /rx AmScript.amirx Type %p"
  132. "say /alias /ASHelp /Rx AmScript.amirx ASHelp %p"
  133. Call cEcho(Bold"Installation Finished..  Please now save your AmIRC preferences.")
  134. Return()
  135.  
  136. Resolve:
  137. IF Arguements.0=""|Arguements.0='ARGUEMENTS.0' THEN DO
  138.  Call cEcho('No Nick/Address was entered!  Please enter a Nick or an Address.')
  139.  Call cEcho('EG: /AS Resolve Mick')
  140.  Call cEcho('or')
  141.  Call cEcho('/AS Resolve icq.mirabilis.com')
  142.  Call Depart()
  143. End
  144. Result=''
  145. "UserHost" Arguements.0
  146. UHost=Result
  147. IF UHost~='' THEN DO
  148.  Hst=SubStr(UHost,Pos('@',UHost)+1)
  149.  Call cEcho("Resolving "Arguements.0"'s IP Address..")
  150.  NickName="'s"
  151. End
  152. ELSE DO
  153.  Hst=Arguements.0
  154.  Call cEcho("Resolving "Hst"..")
  155.  NickName=""
  156. End
  157.  
  158. SELECT
  159.  WHEN Exists('Miami:MiamiResolve') THEN Resolver='Miami:MiamiResolve'
  160.  WHEN Exists('AmiTCP:bin/askhost') THEN Resolver='AmiTCP:bin/askhost'
  161.  WHEN Exists('Libs:rexxreqtools.library')|Exists('Libs/rexxreqtools.library')|Exists('rexxreqtools.library') THEN DO
  162.   IF ~SHOW('L','rexxreqtools.library') THEN DO
  163.    Call AddLib('rexxreqtools.library',0,-30,0)
  164.   End
  165.   Resolver='Kuang11 Library'
  166.  End
  167.  OTHERWISE
  168.   Call cEcho('No tool to resolve addresses available.  Please install either:')
  169.   Call cEcho('Miami:MiamiResolve')
  170.   Call cEcho('AmiTCP:bin/askhost')
  171.   Call cEcho('Libs:rexxkuang11.library')
  172.   Call Depart()
  173. End
  174. IF Verbose=1 THEN Call cEcho('Found 'Resolver' to resolve.')
  175. IF Resolver~='Kuang11 Library' THEN DO
  176.  ADDRESS COMMAND Resolver Hst ">T:Resolve"
  177.  CheckOpen=Open(Resolve,'T:Resolve','R')
  178.  IF CheckOpen=0 THEN DO
  179.   Call cEcho('Unable to open temporary file for resolving.')
  180.   Call Depart()
  181.  End
  182.  i=0
  183.  DO UNTIL EOF(Resolve)
  184.   DataRead=ReadLn(Resolve)
  185.   SELECT
  186.    WHEN Left(DataRead,5)='host:' THEN Parse Var DataRead 'host: 'Hst Rest
  187.    WHEN Left(DataRead,5)='Host ' THEN IP=Hst
  188.    WHEN Strip(DataRead)='gethostbyname: Unknown host' THEN IP=Hst
  189.    WHEN Left(DataRead,8)='aliases:' THEN DO;Addy=1;i=0;End
  190.    WHEN Left(DataRead,13)='address list:' THEN DO;Addy=2;i=0;End
  191.    WHEN Left(DataRead,4)='    ' THEN DO
  192.     SELECT
  193.      WHEN Addy=1 THEN DO
  194.       Parse Var DataRead Alias.i Rest
  195.       i=i+1
  196.      End
  197.      WHEN Addy=2 THEN DO
  198.       Parse Var DataRead IP.i Rest
  199.       i=i+1
  200.      End
  201.      OTHERWISE NOP
  202.     End
  203.    End
  204.    OTHERWISE NOP
  205.   End
  206.  End
  207.  Call Close(Resolve)
  208.  Call ResolveCheck()
  209.  Call MultipleResolve()
  210.  Call Delete('T:Resolve')
  211. End
  212. ELSE DO
  213.  /* Kuang11 Library Method */
  214.  IP=GetNumIP(Hst)
  215.  Call ResolveCheck()
  216.  Call SingleResolve()
  217. End
  218. Return()
  219.  
  220. ResolveCheck:
  221. IF IP=Hst THEN DO
  222.  Call cEcho(""Arguements.0||NickName" hostname is not resolvable.")
  223.  Call Depart()
  224. End
  225. IF IP="" THEN DO
  226.  Call cEcho(""Arguements.0||NickName" address was not found.")
  227.  Call Depart()
  228. End
  229. Return()
  230.  
  231. MultipleResolve:
  232. Call cEcho(Bold'Host Address: 'Bold||Hst)
  233. i=0
  234. IF Alias.i~=''&Alias.i~='ALIAS.'||i THEN DO
  235.  DO UNTIL Alias.i='ALIAS.'||i|Alias.i=''
  236.   IF i=0 THEN Call cEcho(Bold'Alias List: 'Bold||Alias.i)
  237.   ELSE Call cEcho('            'Alias.i)
  238.   i=i+1
  239.  End
  240. End
  241. i=0
  242. IF IP.i~=''&IP.i~='IP.'||i THEN DO
  243.  DO UNTIL IP.i='IP.'||i|IP.i=''
  244.   IF i=0 THEN Call cEcho(Bold'Address List: 'Bold||IP.i)
  245.   ELSE Call cEcho('              'IP.i)
  246.   i=i+1
  247.  End
  248. End
  249. Return()
  250.  
  251. SingleResolve:
  252. Call cEcho(Bold"HostName:"Bold Hst)
  253. Call cEcho(Bold"IP:"Bold IP)
  254. Return()
  255.  
  256. List:
  257. "GetCTCPSoundDir"
  258. SoundDir=Result
  259. IF SoundDir="" THEN DO;Call cEcho("Configure your AmIRC sound prefs first");Call Depart();End
  260. IF Left(SoundDir,8)='PROGDIR:' THEN SoundDir=SubStr(SoundDir,9)
  261. Call cEcho("Listing the files in the directory '"SoundDir"'..")
  262. SoundList=ShowDir(SoundDir,'F','|')
  263. IF Arguements.0='ARGUEMENTS.0' THEN Arguements.0=2
  264. i=1
  265. DO Until SoundList=''
  266.  Parse Var SoundList SoundList.i'|'SoundList
  267.  i=i+1
  268. End
  269. i=1
  270. Call Open(SoundFile,'T:SoundList','W')
  271. IF result~=1 THEN Call WriteError('starting to write')
  272. DO UNTIL SoundList.i='SOUNDLIST.'||i
  273.  Call WriteLn(SoundFile,SoundList.i)
  274.  IF result~=Length(SoundList.i)+1 THEN Call WriteError('writing')
  275.  Call cEcho(Bold||i||Bold'. 'SoundList.i)
  276.  i=i+1
  277. End
  278. Call cEcho('End of the sounds list.')
  279. Call CloseFile()
  280. Return()
  281.  
  282. Play:
  283. i=1
  284. IF DATATYPE(Arguements.0,'W')&Exists('T:SoundList') THEN DO
  285.  CheckOpen=Open(SoundFile,'T:SoundList',R)
  286.  IF CheckOpen~=1 THEN Call WriteError('opening')
  287.  DO UNTIL EOF(SoundFile)
  288.   SoundList=ReadLn(SoundFile)
  289.   IF Arguements.0=i THEN DO
  290.    "GetCTCPSoundDir"
  291.    SoundDir=Result
  292.    IF Left(SoundDir,8)='PROGDIR:' THEN SoundDir=SubStr(SoundDir,9)
  293.    SoundDir=AbsolutePath(SoundDir)
  294.    IF Right(SoundDir,1)~='/'&Right(SoundDir,1)~=':' THEN SoundDir=SoundDir||'/'
  295.    IF Exists(SoundDir||SoundList)&SoundList~='' THEN DO
  296.     IF Play THEN DO
  297.      Call cEcho('Now playing 'Bold||SoundList)
  298.      "PLAYSOUND "SoundDir||SoundList
  299.     End
  300.     IF SSend THEN DO
  301.      IF Arguements.1~=''&Arguements.1~='ARGUEMENTS.1' THEN DO
  302.       IF Verbose THEN Call cEcho('Sending sound file 'Bold||SoundList||Bold' to 'Bold||Arguements.1)
  303.       "Say /DCC Send "Arguements.1 SoundDir||SoundList
  304.      End
  305.      ELSE Call cEcho('Please enter a nick to send the file 'Bold||SoundList||Bold' to.')
  306.     End
  307.     Call CloseFile()
  308.    End
  309.    ELSE DO
  310.     IF SoundList~='' THEN DO
  311.      Call cEcho("The sound file '"SoundList"' does not exist")
  312.      Call CloseFile()
  313.     End
  314.    End
  315.   End
  316.   ELSE i=i+1
  317.  End
  318.  IF (i-2)<Arguements.0 THEN Call cEcho('Sound number 'Bold||Arguements.0||Bold' does not exist.')
  319. End
  320. ELSE DO
  321.  "GetCTCPSoundDir"
  322.  SoundDir=Result
  323.  IF Left(SoundDir,8)='PROGDIR:' THEN SoundDir=SubStr(SoundDir,9)
  324.  SoundDir=AbsolutePath(SoundDir)
  325.  IF Right(SoundDir,1)~='/'&Right(SoundDir,1)~=':' THEN SoundDir=SoundDir||'/'
  326.  IF Pos(':',Arguements.0)=0 THEN DO
  327.   IF Exists(SoundDir||Arguements.0) THEN DO
  328.    IF Play THEN DO
  329.     Call cEcho('Now playing 'Bold||Arguements.0)
  330.     "PLAYSOUND "Arguements.0
  331.    End
  332.    IF SSend THEN DO
  333.     IF Arguements.1~=''&Arguements.1~='ARGUEMENTS.1' THEN DO
  334.      IF Verbose THEN Call cEcho('Sending sound file 'Bold||Arguements.0||Bold' to 'Bold||Arguements.1)
  335.      "Say /DCC Send "Arguements.1 SoundDir||Arguements.0
  336.     End
  337.     ELSE Call cEcho('Please enter a nick to send the file 'Bold||Arguements.0||Bold' to.')
  338.     End
  339.    Call Depart()
  340.   End
  341.  End
  342.  IF Exists(Arguements.0) THEN DO
  343.   IF Play THEN DO
  344.    Call cEcho('Now playing 'Bold||Arguements.0)
  345.    "PLAYSOUND "Arguements.0
  346.   End
  347.   IF SSend THEN DO
  348.    IF Arguements.1~=''&Arguements.1~='ARGUEMENTS.1' THEN DO
  349.     IF Verbose THEN Call cEcho('Sending sound file 'Bold||Arguements.0||Bold' to 'Bold||Arguements.1)
  350.     "Say /DCC Send "Arguements.1 SoundDir||Arguements.0
  351.    End
  352.    ELSE Call cEcho('Please enter a nick to send the file 'Bold||Arguements.0||Bold' to.')
  353.   End
  354.  End
  355.  ELSE DO
  356.   IF DATATYPE(Arguements.0,'W')&~Exists('T:SoundList') THEN DO
  357.    IF Play THEN DO
  358.     Call cEcho("Now bringing up your soundlist..")
  359.     Call List()
  360.    End
  361.   End
  362.   ELSE DO
  363.    IF Arguements.0='ARGUEMENTS.0' THEN DO
  364.     IF Play=1 THEN Action='play'
  365.     ELSE Action='send'
  366.     Call cEcho('Please enter a number or sound filename to 'Action'.')
  367.    End
  368.    ELSE Call cEcho(Arguements.0' sound file does not exist.')
  369.   End
  370.  End
  371. End
  372. Return()
  373.  
  374. WriteError:
  375. Call cEcho("An error was encountered while "Arg(1)||NL||" the sound file")
  376. IF Arg(1)~='closing' THEN DO;Call Close(SoundFile);IF result=0 THEN Call WriteError('closing');End
  377. Exit
  378. Return()
  379.  
  380. CloseFile:
  381. Call Close(SoundFile)
  382. IF result~=1 THEN Call WriteError('closing')
  383. Call Depart()
  384. Return()
  385.  
  386. NBan:
  387. IF Channel='' THEN DO;Call cEcho('No channel joined!');Call Depart();End
  388. IF Arguements.0='ARGUEMENTS.0'|Arguements.0='' THEN DO
  389.  Arguements.0=rtgetstring(,"Enter nick of the person you wish to nickban",Tags,"_Ok|_Cancel",Screen)
  390.  IF rtresult=0 THEN Call Depart()
  391. End
  392. Nick=Arguements.0
  393. Call FindUser()
  394. IF Found~=-1&Found~=0 THEN Call Reason()
  395. ELSE DO;Call cEcho(Nick' is not in 'Channel);Call Depart();End
  396. IF NoTime=0 THEN DO
  397.  Time=rtgetlong(,"Enter the time wish to ban "Nick||NL||"0 equals forever",Tags,"_Seconds|_Mins|_Hours|_Days|_Forever|_Cancel","rtgl_min=0 rtgl_max=31536000" Screen)
  398.  Call TimeBan()
  399. End
  400. ELSE DO
  401.  Time='0'
  402.  Action=''
  403. End
  404. IF Verbose THEN DO
  405.  IF Compress(Arguements.1)=''|Arguements.1='ARGUEMENTS.1' THEN Reason=''
  406.  ELSE Reason=' with the reason 'Bold||Arguements.1
  407.  Call cEcho("Doing a nickban on "Bold||Nick||Bold" on "Bold||Channel||Bold||Action||Reason)
  408. End
  409. 'RAW MODE 'Channel' -o+b 'Nick Nick'!*@*'
  410. 'RAW KICK 'Channel Nick ':'Arguements.1
  411. IF DATATYPE(Time,'W')&Time>1&Time<31536000&NoTime=0 THEN DO
  412.  Delay(f*Time)
  413.  'RAW MODE 'Channel' -b 'Nick'!*@*'
  414. End
  415. Return()
  416.  
  417. IPBan:
  418. IF ZBan THEN BanType='Z'
  419. ELSE BanType=''
  420. IF Arguements.0='ARGUEMENTS.0'|Arguements.0='' THEN DO
  421.  Arguements.0=rtgetstring(,"Enter nick of the person you wish to "BanType"Ban",Tags,"_Ok|_Cancel",Screen)
  422.  IF rtresult=0 THEN Call Depart()
  423. End
  424. "USERHOST" Arguements.0
  425. UHost=Result
  426. IF ZBan THEN DO
  427.  IF Channel='' THEN DO
  428.   Channel=rtgetstring(,"In what channel you wish to do your ZBan in?",Tags,"_Ok|_Cancel",Screen)
  429.   IF rtresult=0 THEN Call Depart()
  430.   IF Compress(Left(Channel,1))~='#' THEN Channel='#'||Compress(Channel)
  431.  End
  432.  Call Reason()
  433. End
  434. ELSE DO
  435.  IF Channel='' THEN DO;Call cEcho('No channel joined!');Call Depart();End
  436.  Call FindUser()
  437.  IF Found~=-1&Found~=0 THEN Call Reason()
  438.  ELSE DO;Call cEcho("User "Bold||Arguements.0||Bold" is not on the channel "Bold||Channel||Bold".");Call Depart();End
  439. End
  440. Full=Arguements.0"!"UHost
  441. IF Full=Arguements.0||'!' THEN DO
  442.  Call cEcho('Could not get the IP address of 'Arguements.0'.')
  443.  /* ***** Add possible support for NickBan/Manual input of IP Addy */
  444.  Call Depart()
  445. End
  446. Parse Var Full Nick"!"Username"@"IP
  447. IF Left(Username,1)='~' THEN Username='*'||SubStr(Username,2)
  448. IF ZBan=1 THEN DO
  449.  Time=rtgetlong(,"Enter the time in Hours/Days you wish to ZBan "Nick,Tags,"_Hours|_Days|_Cancel","rtgl_min=1 rtgl_max=1440" Screen)
  450.  Call ZTimeBan()
  451.  Level=rtgetlong(,"Enter the ZBan level on "Nick,Tags,"_Ok|_Cancel","rtgl_min=1 rtgl_max=500" Screen)
  452.  IF rtresult=0 THEN Call Depart()
  453. End
  454. ELSE DO
  455.  IF NoTime=0 THEN DO
  456.   Time=rtgetlong(,"Enter the time wish to ban "Nick||NL||"0 equals forever",Tags,"_Seconds|_Mins|_Hours|_Days|_Forever|_Cancel","rtgl_min=0 rtgl_max=31536000" Screen)
  457.   Call TimeBan()
  458.  End
  459.  ELSE DO
  460.   Time=''
  461.   Action=''
  462.  End
  463. End
  464. IF Simple THEN Call Simple()
  465. ELSE Call Complex()
  466. Return()
  467.  
  468. ZDeOp:
  469. IF ZOp THEN Action='Op'
  470. ELSE Action='DeOp'
  471. IF Arguements.0~='ARGUEMENTS.0'&Arguements.0~='' THEN DO
  472.  i=0
  473.  DO FOREVER
  474.   IF Arguements.i='ARGUEMENTS.'||i THEN Leave
  475.   ELSE IF i~=0 THEN Arguements.0=Arguements.0||' '||Arguements.i
  476.   i=i+1
  477.  End
  478. End
  479. ELSE DO
  480.  Arguements.0=rtgetstring(,"Enter the nick(s) you wish to "Action" via Z",Tags,"_Ok|_Cancel",Screen)
  481.  IF rtresult=1 THEN Arguements.0=Translate(Arguements.0,"       ",".,-+@*/\")
  482.  ELSE Call Depart()
  483. End
  484. Nicks=Arguements.0
  485. Nickx=''
  486. Nickz=''
  487. DO UNTIL Nicks=''
  488.  PARSE Var Nicks Nick Nicks
  489.  "GetUsers"
  490.  Found=Find(Translate(Upper(Result),"","+@%"),Compress(Upper(Nick)))
  491.  IF Found=-1|Found=0 THEN Nickx=Nickx||' '||Nick
  492.  ELSE Nickz=Nickz||' '||Nick
  493. End
  494. Nickz=Strip(Nickz)
  495. Nickx=Strip(Nickx)
  496. IF Nickx~='' THEN Call cEcho('Z' Action 'of' Bold||Strip(Nickx)||Bold 'is not possible as they are not in the channel 'Channel'.')
  497. IF Nickz~='' THEN DO
  498.  IF Verbose THEN Call cEcho('Requested a Z' Action 'of' Bold||Nickz'.')
  499.  DO UNTIL Nickz=''
  500.   Nicks=Strip(SubWord(Nickz,1,3))
  501.   Nickz=SubWord(Mickz,4)
  502.   "RAW PRIVMSG Z@Channels.Oz.Org :"Upper(Action) Channel Nicks
  503.  End
  504. End
  505. Return()
  506.  
  507. ZSuspend:
  508. IF Arguements.0='ARGUEMENTS.0'|Arguements.0='' THEN DO
  509.  Arguements.0=rtgetstring(,"Enter the nick you wish to suspend on Z",Tags,,Screen)
  510.  IF rtresult=0 THEN Call Depart()
  511. End
  512. IF ~DATATYPE(Time,'W')|Time<1|Time>31536000 THEN DO
  513.  Time=rtgetlong(,"Enter the time wish to suspend "Arguements.0" from using Z",Tags,"_Seconds|_Mins|_Days|_Cancel","rtgl_min=0 rtgl_max=31536000" Screen)
  514. End
  515. ELSE DO
  516.  rtezrequest("Enter the base for "Time" to suspend "Arguements.0" from using Z","_Seconds|_Mins|_Days|_Cancel",Tags,Screen)
  517. End
  518. Call ZSuspensionDisplay()
  519. Call TimeBan()
  520. IF Time=0 THEN Time=''
  521. "GetUsers"
  522. Users=Result
  523. IF Find(Users,'@'MyNick)~=0|Find(Users,'%'MyNick)~=0 THEN DO
  524.  Found=Find(Translate(Upper(Users),"","+@%"),Compress(Upper(Arguements.0)))
  525.  IF Found~=-1&Found~=0 THEN Axtion=Left(Word(Users,Found),1)
  526.  SELECT
  527.   WHEN Axtion='+' THEN "RAW MODE "Channel" -v "Arguements.0
  528.   WHEN Axtion='@' THEN "RAW MODE "Channel" -o "Arguements.0
  529.   WHEN Axtion='%' THEN "RAW MODE "Channel" -vo "Arguements.0 Arguements.0
  530.   OTHERWISE NOP
  531.  End
  532. End
  533. Call cEcho("Suspend" Channel Strip(Arguements.0) Time Left(Action,1))
  534. "RAW PRIVMSG Z@Channels.Oz.Org :Suspend" Channel Strip(Arguements.0) Time Left(Action,1)
  535. Return()
  536.  
  537. ZSuspensionDisplay:
  538. SELECT
  539.  WHEN rtresult=1 THEN Action=' for 'Bold||Time' seconds'Bold
  540.  WHEN rtresult=2 THEN Action=' for 'Bold||Time' minutes'Bold
  541.  WHEN rtresult=3 THEN Action=' for 'Bold||Time' days'Bold
  542.  OTHERWISE Call Depart()
  543. End
  544. Call cEcho('Suspending the user 'Bold||Arguements.0||Bold||' from using Z'||Action||'.')
  545. Return()
  546.  
  547. ZUnSuspend:
  548. IF Arguements.0='ARGUEMENTS.0'|Arguements.0='' THEN DO
  549.  Arguements.0=rtgetstring(,"Enter the nick you wish to unsuspend on Z",Tags,,Screen)
  550.  IF rtresult=0 THEN Call Depart()
  551. End
  552. "RAW PRIVMSG Z@Channels.Oz.Org :UnSuspend" Channel Strip(Arguements.0)
  553. Return()
  554.  
  555. TimeBan:
  556. SELECT
  557.  WHEN rtresult=1 THEN Action=' for 'Bold||Time' seconds'Bold
  558.  WHEN rtresult=2 THEN DO
  559.   Action=' for 'Bold||Time' minutes'Bold
  560.   Time=Time*60
  561.  End
  562.  WHEN rtresult=3 THEN DO
  563.   Action=' for 'Bold||Time' hours'Bold
  564.   Time=Time*60*60
  565.  End
  566.  WHEN rtresult=4 THEN DO
  567.   Action=' for 'Bold||Time' days'Bold
  568.   Time=Time*60*60*24
  569.  End
  570.  WHEN rtresult=5 THEN DO
  571.   Action=' for 'Bold'forever 'Bold
  572.   Time=0
  573.  End
  574.  OTHERWISE Call Depart()
  575. End
  576. Return()
  577.  
  578. ZTimeBan:
  579. SELECT
  580.  WHEN rtresult=1 THEN Action=' for 'Bold||Time' hours'Bold
  581.  WHEN rtresult=2 THEN DO
  582.   Action=' for 'Bold||Time' days'Bold
  583.   Time=Time*24
  584.  End
  585.  OTHERWISE Call Depart()
  586. End
  587. Return()
  588.  
  589. FindUser:
  590. IF Upper(MyNick)=Upper(Arguements.0) THEN DO;Call cEcho("Don't bother trying to do a ban on yourself");Call Depart();End
  591. "GetUsers"
  592. Users=Result
  593. Found=Find(Translate(Upper(Users),"","+@%"),Compress(Upper(Arguements.0)))
  594. IF BanType~='Z' THEN DO;IF Find(Users,'@'MyNick)=0&Find(Users,'%'MyNick)=0 THEN DO;Call cEcho("You cannot do a ban when you are not opped");Call Depart();End;End
  595. Return()
  596.  
  597. Reason:
  598. SELECT
  599.  WHEN NoReason THEN Arguements.1=''
  600.  WHEN Arguements.1~='ARGUEMENTS.1'&Arguements.1~='' THEN DO
  601.   i=2
  602.   DO FOREVER
  603.    IF Arguements.i='ARGUEMENTS.'||i THEN Leave
  604.    ELSE IF i~=0 THEN Arguements.1=Arguements.1||' '||Arguements.i
  605.    i=i+1
  606.   End
  607.  End
  608.  OTHERWISE
  609.   Arguements.1=rtgetstring(,"Enter the reason why ya wish to "BanType"ban the person"||NL||"A reason is not always necessary",Tags,"_Ok|_Cancel|_No Reason",Screen)
  610.   SELECT
  611.    WHEN rtresult=0 THEN Arguements.1=''
  612.    WHEN rtresult=2 THEN Call Depart()
  613.    OTHERWISE NOP
  614.   End
  615. End
  616. Return()
  617.  
  618. Complex:
  619. Call rtezrequest("Please select a type of Hotmask "BanType"Ban or"||NL||"Simple for the Simple "BanHost"Ban menu","*!*U_sername@*.Host|*@*_Host|_Nick!*@*|*!*_Username@*|Si_mple|_Cancel",Tags,Screen)
  620. IF Verbose THEN DO
  621.  IF Compress(Arguements.1)=''|Arguements.1='ARGUEMENTS.1' THEN Reason=''
  622.  ELSE Reason=' with the reason 'Bold||Arguements.1
  623.  Call cEcho("Doing a ban on "Bold||Arguements.0||Bold" on "Bold||Channel||Bold||Reason)
  624. End
  625. SELECT
  626.  WHEN rtresult=5 THEN DO
  627.   Simple=1
  628.   Call Simple()
  629.  End
  630.  WHEN rtresult=0 THEN NOP
  631.  OTHERWISE Call Ban()
  632. End
  633. Return()
  634.  
  635. Simple:
  636. Call rtezrequest("Please select a type of Simple "BanType"Ban or"||NL||"Hotmask for the Hotmask "BanType"Ban menu","*!*U_sername@Host|*!*@_Host|_Nick!*@*|*!_Username@*|Hot_mask|_Cancel",Tags,Screen)
  637. IF Verbose THEN DO
  638.  IF Compress(Arguements.1)=''|Arguements.1='ARGUEMENTS.1' THEN Reason=''
  639.  ELSE Reason=' with the reason 'Bold||Arguements.1
  640.  Call cEcho("Doing a ban on "Bold||Arguements.0||Bold" on "Bold||Channel||Bold||Reason)
  641. End
  642. SELECT
  643.  WHEN rtresult=5 THEN DO
  644.   Simple=0
  645.   Call Complex()
  646.  End
  647.  WHEN rtresult=0 THEN NOP
  648.  OTHERWISE Call Ban()
  649. End
  650. Return()
  651.  
  652. Ban:
  653. IF Simple=0 THEN DO
  654.  IF DATATYPE(Compress(IP,'.'),'N') THEN IP=SubStr(IP,1,LastPos('.',IP))||'*'
  655.  ELSE IP='*'||SubStr(IP,Pos('.',IP))
  656. End
  657. SELECT
  658.  WHEN rtresult=1 THEN BanHost='*!'Username'@'IP
  659.  WHEN rtresult=2 THEN BanHost='*!*@'IP
  660.  WHEN rtresult=3 THEN BanHost=Nick'!*@*'
  661.  WHEN rtresult=4 THEN BanHost='*!'Username'@*'
  662.  OTHERWISE cEcho('An error has occured!  Please email the command used to sykoe@sub.net.au')
  663. End
  664. IF Verbose THEN Call cEcho(BanType'Banning 'Bold||Nick||Bold||Action'.')
  665. IF ZBan THEN DO
  666.  IF Level<76 THEN "RAW MODE "Channel" -o "Nick
  667.  ELSE "RAW PRIVMSG Z@Channels.Oz.Org :Ban" Channel Strip(BanHost) Time Level Arguements.1
  668. End
  669. ELSE DO
  670.  'RAW MODE 'Channel' -o+b 'Nick BanHost
  671.  'RAW KICK 'Channel Nick ':'Arguements.1
  672. End
  673. IF Time~=0&DATATYPE(Time,'W')&BanType~='Z' THEN Call BanTime()
  674. Return()
  675.  
  676. BanTime:
  677. Delay(f*Time)
  678. IF Verbose THEN Call cEcho('UnBanning 'Bold||Nick||Bold' at 'Bold||BanHost)
  679. 'RAW MODE 'Channel' -b 'BanHost
  680. Return()
  681.  
  682. Run:
  683. i=0
  684. IF Exists(Arguements.i)&Arguements.i~='ARGUEMENTS.'||i&Arguements.i~="" THEN DO
  685.  Arguements=Arguements.i
  686.  DO UNTIL Arguements.i='ARGUEMENTS.'||i
  687.   IF i>1 THEN Arguements=Arguements||' '||Arguements.i
  688.   i=i+1
  689.  End
  690. End
  691. ELSE DO
  692.  IF Verbose THEN DO
  693.   IF Arguements.i='ARGUEMENTS.'i|Arguements.i="" THEN Call cEcho('No program on the command line was entered.  Now starting the GUI.')
  694.   ELSE Call cEcho("The program '"Arguements.0"' does not exist!  Now starting the GUI.")
  695.  End
  696.  Arguements=rtgetstring(,"Enter Filename, Path, and Arguments of the program to run"||NL||"EG: Miami:MiamiTelnet localhost 23",Tags,"_Ok|File _Requestor|_Cancel",Screen)
  697.  SELECT
  698.   WHEN rtresult=0 THEN Call Depart()
  699.   WHEN rtresult=1 THEN DO
  700.    IF Exists(Word(Arguements,1)) THEN ADDRESS COMMAND Arguements
  701.    ELSE Call cEcho("File '"Word(Arguements,1)"' does not exist!")
  702.    Call Depart()
  703.   End
  704.   OTHERWISE
  705.    File=rtfilerequest(,,'Select the program...',Screen)
  706.    IF rtresult=0 THEN Call Depart()
  707.    ELSE DO
  708.     IF ~Exists(File) THEN DO
  709.      Call cEcho("The program '"File"' does not exist!")
  710.      Call Depart()
  711.    End
  712.    Arguements=rtgetstring(,"Enter the Arguments for the program you want to run"||NL||"localhost 23",Tags,"_Ok|_Cancel|_No Arguements",Screen)
  713.    SELECT
  714.     WHEN rtresult=2 THEN Call Depart()
  715.     WHEN rtresult=0 THEN Arguements=''
  716.     OTHERWISE NOP
  717.    End
  718.    Arguements=File||' '||Arguements
  719.   End
  720.  End
  721. End
  722. IF Verbose THEN Call cEcho('Now running: 'Arguements)
  723. ADDRESS COMMAND 'Run >NIL:' Arguements
  724. Return()
  725.  
  726. NewNick:
  727. IF Arguements.0='ARGUEMENTS.0'|Arguements.0='' THEN DO
  728.  Arguements.0=rtgetstring(,"Enter your new nickname to use",Tags,"_Ok|_Cancel",Screen)
  729.  IF rtresult=0 THEN Call Depart()
  730. End
  731. IF Verbose THEN Call cEcho('Changing nick to 'Arguements.0)
  732. 'Say /Nick 'Arguements.0
  733. Return()
  734.  
  735. Type:
  736. IF Arguements.0=""|Arguements.0="ARGUEMENTS.0" THEN DO
  737.  Arguements.0=rtfilerequest('Text',,'File to type to AmIRC..','_Type', Screen)
  738.  IF rtresult=0 THEN Call Depart()
  739.  IF Arguements.1=""|Arguements.1="ARGUEMENTS.1" THEN DO
  740.   Arguements.1=rtgetstring(,"Enter the persons Nick to show the text privately to"||NL||"Enter a channel name to send it to send it by a Notice"||NL||"Leave Empty or hit Public to send it publically in the current channel window",Tags,"_Type|_Public",Screen)
  741.   IF rtresult=0 THEN Nick=""
  742.  End
  743. End
  744. IF ~Exists(Arguements.0) THEN DO
  745.  Check=Pos(':',Arguements.0)
  746.  IF Check>0 THEN DO;Call cEcho('Specified file "'BOLD||Arguements.0||BOLD'" does not exist.');Call Depart();End
  747.  Arguements.0='Text/'Arguements.0
  748.  IF ~Exists(Arguements.0) THEN DO;Call cEcho('Specified file "'BOLD||Arguements.0||BOLD'" does not exist.');Call Depart();End
  749. End
  750. IF Arguements.1="" THEN Call cEcho('Typing file "'BOLD||Arguements.1||BOLD'" publically.')
  751. ELSE DO;Arguements.1=Compress(Arguements.1);Call cEcho('Typing file "'BOLD||Arguements.0||BOLD'" to 'BOLD||Arguements.1||BOLD'.');End
  752. IF ~OPEN('F',Arguements.0,'R') THEN DO;Call cEcho('The specified file "'BOLD||Arguements.0||BOLD'" could not be opened.');Call Depart();End
  753. ELSE DO
  754.  Line = ReadLn('F')
  755.  DO WHILE ~EOF('F')
  756.   IF Arguements.1="" THEN DO
  757.    'Say ""'Line;Call Delay(f);End
  758.   ELSE DO
  759.    "RAW NOTICE "Arguements.1" :"Line"";Call Delay(f);End
  760.   Line=ReadLn('F')
  761.  End
  762.  Close('F')
  763. End
  764. Return()
  765.  
  766. cEcho:
  767. 'ECHO P='d2c(27)'b«AmScript» 'arg(1)
  768. Return()
  769.  
  770. Syntax:
  771. "ECHO P="d2c(27)"b«Syntax» " "Command on line" SIGL", Returned" RC ":" errortext(rc) sourceline(SIGL)
  772. Call Depart()
  773.