@database "ChatBox 1.129 Alpha" $VER: ChatBox.guide 1.129 (12.04.95) @node main "ChatBox - The new world of IRC" @{"Before you start" link names} @{"Overview " link overview} @{"Acknowledgements" link acknowledge} @{"Requirements " link required} @{"Commands " link commands} @{"ARexx Support " link arexx} @{"Preferences " link prefs} @{"The Prefs file " link prefsfile} @{"Distribution " link distribution} @{"Future " link future} @{"The Author " link author} @endnode @node distribution "Distribution" As of ChatBox v1.153, distribution has moved to freely distributable so long as the original archive found on Aminet is intact. No files may be added, or removed. Clear? Registration will be moved to the ChatBox homepage, and must be done from there. E-Mail registrations will be accepted only through June '97. If you do not register with me, I will NOT respond to E-Mail, nor will I take suggestions. @endnode @node overview "Overview - Copyright, implementation, goals" ChatBox was started as a personal project to overcome the limitations that I experienced using the IRC clients currently available for the Amiga. And I certainly did not like the UNIX version. ChatBox is Copyright (C) 1994-1997 by Jeffrey D. Webster. This version is currently an evaluation version, so, as with all software, use it at your own risk. The author will not be held liable for any damages resulting during the use of this software. It is provided 'as-is' with no warranty, neither expressed nor implied. The command set of ChatBox is implemented as the common 'slash' command method. My goal in designing ChatBox is to allow complete operator control. ChatBox will be designed in such a way that is simple for new users, yet has the power for seasoned users. I didn't over 'idiot-proof' ChatBox, so there are no cute requesters for every little thing you wish to do. Simplicity is the design goal. *I* do not like GUI's to do such simple tasks as are required on IRC. This in mind, don't ask for 'DOCKS', 'REQUESTERS'*, or 'GADGETS' unless they ADD to the functionality of ChatBox's communication facilities. For example, no gadgets for 'KICK', or 'BAN'... You can ADD smart kicks and bans via ARexx, I will therefore leave that up to the user. Bug reports must also be made on the ChatBox homepage. For executable/archive updates to ChatBox, point your browser to: http://www.primenet.com/~jweb/chatbox.html For registration point your forms capable browser to: http://www.primenet.com/~jweb/regcb.html For bug reports/suggestions point your forms capable browser to: http://www.primenet.com/~jweb/suggestcb.html Through June of 1997 you may also send bug reports, suggestions, and registrations to jweb@primenet.com. @endnode @node acknowledge "Acknowledgements, and thanks" All code contained in ChatBox is (C) 1994-1997 by Jeffrey D. Webster Special thanks goes to: Jim Huls Faithful alpha tester, without whom 100% of the bugs would not have been found Mike Latinovich Super "oof!'r" Deluxe! For his suggestions, and alpha testing Paul Reece For his special interest in playing with the 'Friends' feature RobR For alpha testing and encouragement Jonathon Potter For refreshing my memory about refreshing Osma "Tau" Ahvenlampi for use of his DCC clients. And for MOST of the CB.CHAT code that ChatBox's DCC Chat client uses. Christoper Aldi for designing and allowing me to use ClassAct for ChatBox's preferences facility. Josef Faulkner For the excellent ARexx scripts he wrote that really put CB's ARexx port to the test. Sami Itkonen For his many suggestions, and calm outlook. And many others whose names escape me... @endnode @node required "Requirements, and setup" What is required to use ChatBox? You'll need AmiTCP 3.0b2+, minimum of 1-meg, 2.04+ of the Amiga OS, and a little patience while ChatBox is still under development. How do I install ChatBox? There is no REAL installation necessary, other than putting AmiTCP together. The only other task necessary is setting some ENV: variables. The following Environment Variables can be set (and stored in ENVARC: if you wish to make them permanent, and available upon reboot): DCCPATH Path where you'd like dcc's to go. REALNAME Your real full name. IRCSERVER Your default server. USERNAME Your login name (don't fake this) IRCNAME Your default nickname HOSTNAME Your host name (not your dialups) NODENAME Your domain (ie: primenet.com) DCCDIR Path where the AS225 DCC files are located PUBSCREEN Public screen name, if it doesn't exist, it will be created. TEXTFONT Font for text window, names list, and gadgets SCREENFONT Default font for custom public screen SETUPFILE Alias file to load on startup... NOTE: Do not enclose tooltype settings in QUOTES!!! The above are also options on the command line, or can be specified as ToolTypes for ChatBox's Icon. ChatBox's template is: "USERNAME/K,HOSTNAME/K,NODENAME/K,IRCNAME/K,IRCSERVER/K,REALNAME/K,DCCPATH/K, DCCDIR/K,PUBSCREEN/K,TEXTFONT/K,SCREENFONT/K,SETUPFILE/K" Note that HOSTNAME must be specified, in one of the three ways (on the commandline, as a tooltype, or in ENV:). The ENVironment variables are the fallback in case options are not specified as tooltypes or on the command line. Addendum: HOSTNAME may also be specified in Prefs. Note that the preferences facility does not override the Above... ToolTypes and CLI options have priority. NOTE: Most tooltypes and CLI options will be removed in future versions, get used to using Prefs... @endnode @node prefsfile "ChatBox's Preferences File" As of v1.148, the prefs file is no longer a binary file. Rather, it has gone to a text based tagfile. Included in this archive is a program called "CBCvtPrefs", as you may have guessed, this program converts the old binary prefs file to the new ASCII file format. The default prefs file name is 'cb.prefs', so, to convert 'cb.prefs' use: CBCvtPrefs cb.prefs cbnew.prefs After you have done this, you can delete the old prefs file, and replace it with the new one (after renaming it to 'cb.prefs'). Here are all of the supported tags, and their expected arguments: They are grouped respective to the layout of the ChatBox prefs editor. NOTE: can be any string of characters. is an ascii representation of a decimal # User Prefs: REALNAME = LOGINNAME = PASSWORD = DEFNICK = USERINFO = HOSTNAME = DOMAIN = Server Prefs: DEFSERVER = AUTOJOIN = Paths Prefs: DCCPATH = DCCDIR = ALIASFILE = STARTUP = DEFPATH = SOUNDFILE = <8SVX_sound> Display Prefs: SCREENMODEID = <32-Bit_ModeID> (in hexadecimal, without leading '0x') SCREENTYPE = (below) Screen Types: DEFAULT PRIVATE PUBLIC PUBSCREEN = SCREENWIDTH = SCREENHEIGHT = SCREENDEPTH = OVERSCAN = Overscan Types: TEXT STANDARD MAX VIDEO AUTOSCROLL (no arguments required, this is a flag) TEXTFONT = SCREENFONT = SPACING = (# of pixel spaces extra between text lines) SCROLLBACK = (# of kilobytes for scrollback buffer) HISTORYLINES = (# of history lines) WINDOWTOP = WINDOWLEFT = WINDOWWIDTH = WINDOWHEIGHT = Misc Prefs: KICKMSGTYPE = KickMsg Types: DEFAULT RANDOM AREXX DEFKICKMSG = KICKFILE = DEFQUITMSG = USEWHOISREQ (no arguments required) SIGNOFFISQUIT (no arguments required) TRIGGER = (character for triggering friends commands) Prefs items in the Prefs menu: SHOWISON (no arguments for any of these) SHOWCTCP SKIPMOTD BEEPONMSG BEEPONBEEP BEEPONAWAY INTERNALBEEP EXTERNALBEEP BEEPSCRFLASH @endnode @node prefs "ChatBox's preferences facility" In this section preferences will be described by it's individual components. Prefs Menu Edit... Brings up the preferences editor window. Skip MOTD Skip MOTD server message (message of the day) Show CTCP Show CTCP's when they are sent. Show ISON Show ISON server replies. (see: @{"Silent use of /NOTIFY" link notify}) Beep Beep options Private Msgs Beep on incoming messages On BEEP Beep on incoming BEEP control codes When Away Beep only when away, based on former two options Internal Beep Not implemented External 8SVX Not implemented Flash Screen Flash screen on BEEP Preferences Editor The preference editor is separated into four pages. User page From this page you can modify information that ChatBox may share with other users via various CTCP's. Password is not used, and is completely ignored in this version of ChatBox. Real Name Your real name, or any info that you'd like to appear in WHOIS Login Name The login name you use, significant when using IdentD. Password * unused * Def. Nick The nickname you'd like to begin each session with UserInfo Information you'd like to appear on a USERINFO CTCP. Host Name Your host's named address Domain Your named domain, if not the same as Host. Defaults Real Name: ChatBox IRC (C) 1994-1996 JDW Developments Login Name: Unknown Def. Nick: same as Login Name UserInfo: ChatBox version string Host Name: taken from ENV:HOSTNAME Domain: taken from ENV:HOSTNAME Server Page You may specify the default server to use from here, as well as specifying all the channels you wish to automatically join on connection. There are no defaults. The listviewbrowser is for the server list you have specified to select from. You must have the file "cb.serv" in the home directory for this to be active. Notes on 'Auto Join': If more than one channel is specified, separate each channel name with a comma and NO spaces. You may specify up to 10 channels to join, this is the current IRC server limit. Paths Page Clients The full path to your DCC clients * Receive To The full path to the directory where DCC's receives should go * Alias File The full path and filename of your default alias file * Startup Not implemented * Def. Path Not implemented * Sound File Not implemented * Display Page Screen/Window Prefs Screen Mode Allows you to select a screen mode for 'owned' screens * Window Font Font to use for gadgets, and text in the window * Screen Font Screen font, for title bar * Public Screen The name of the public screen to open, or to open on. Screen Types Public Screen Use an 'owned' public screen, if named screen (Above) does no exist, else open on existing named screen Custom Screen Use a privately owned screen Default Use the default public screen Spacing Additional spacing between text lines in channel window Buffer (K) Scrollback buffer size in Kilobytes History Number of lines in History Misc Page Kick Prefs Use Default Message Use the default kick message on all kicks if one is not specified. Random From File Use a kick file, randomly selects a line. See also: @{"Kick File" link kickfile} for format ARexx Script Execute an ARexx Script for the kick. (valid only from WHOIS Requester) The format used for calling the script is: script.rexx
Kick File Random Kick file, or ARexx script file to use, depending on selection above. * Default Kick Default kick message if one is not specified NOTE: If you'd like CB to use a random kick message from the /KICK command, and you don't have 'Random from file' set in prefs, simply use '$' as the 'kick reason', and CB will use the random file. (An alias perhaps? "/alias rkick kick $0 $") Use Whois Requester Open WHOIS Requester on double clicks in names list. /SignOff = /Quit With this option set (checked) /SIGNOFF will not only send a 'QUIT' to the server, but it will also close down the ChatBox Session. If not checked, then it will merely QUIT the server and close the connection, leaving the Session open. Default Quit Default message to use for quitting, if one is not specified. * NOTE: All prefs items above with a '*' next to them allow the use of an ASL requester of the appropriate type for option selection. Please note that the ASL Library LOCKS input to the window, so that it ignores incoming messages (i.e. from the timer.device, dcc clients, and the connection). If you keep the ASL requester open for too long and you are connected to a server, you WILL ping-timeout. Keep this in mind! It is NOT a bug. @endnode @node kickfile "ChatBox's Random kick message file" If you wish to use random kick messages, you'll have to create a kick file. The format is quite simple. Just make some kick messages up, any amount, and put them in a standard text file. Then, at the beginning of the file put a '#numlines', so that ChatBox will know how many lines there are. The '#xx' MUST be the first line of the file... An example: |------------> Cut Here <-----------| #4 Get outta here! Go away, you bother me! Bruised? Did I say I'd OP you? |-----------------------------------| Easy enough? @endnode @node arexx "ChatBox's ARexx Port" The Quick & Dirty: ChatBox's port is named 'ChatBox', and 'ChatBox.x' for subsequent invocations of ChatBox (where 'x' is a number). The rest: Currently supported Commands: @{"WAIT " link wait_rx} - wait for text from ChatBox's ARexx Port @{"CMD " link cmd_rx} - Send a ChatBox command as if it were entered manually @{"RAW " link raw_rx} - Send a RAW IRC command @{"MATCH " link match_rx} - Match a "friend's" address @{"NICKONCH" link nickonch_rx} - Check if a nickname is currently joined in a channel @{"FINDNICK" link findnick_rx} - Find a nick and return the channels where it is joined @{"ISOP " link isop_rx} - Find out if a given has VOICE or OPs @{"PATTERN " link pattern_rx} - Check if a given pattern matches a given string. @{"NAMES " link names_rx} - Get ChatBox internal list of names for a given channel @{"LOCAL " link local_rx} - Similar to @{"/ECHO" link echo} but allows a custom header Currently, FINDNICK is not implemented. See the section on @{"Formats for command IRC commands" link fmt_irc} Also, see @{"Special notes on on ChatBox's command parser." link parser} @endnode @node local_rx "ARexx: LOCAL command" COMMAND: NICKONCH NICK/K CHANNEL/K STEM|VAR PARAMETERS: HDR/K Required! Header to use. TXT/F/K Required! Text to place on line. EXAMPLE: LOCAL HDR '[LocalTest]' TXT 'This is a test of the LOCAL command.' Yields: [LocalTest] | This is a test of the LOCAL command. @endnode @node nickonch_rx "ARexx: NICKONCH command" COMMAND: NICKONCH NICK/K CHANNEL/K STEM|VAR PARAMETERS: NICK/K Required! The nick to look for on CHANNEL CHANNEL/K Required! The channel to search for NICK RESULTS: stem.ISON or is set to 1 if NICK is on CHANNEL, else 0 EXAMPLE: NICKONCH NICK 'SASCMan' CHANNEL '#amiga' VAR ison if ison==1 THEN say 'SASCMan is on channel #amiga' else say 'SASCMan is not on channel #amiga' @endnode @node findnick_rx "ARexx: FINDNICK command" Not yet implemented. @endnode @node isop_rx "ARexx: ISOP command" COMMAND: ISOP NICK/K CHANNEL/K STEM|VAR PARAMETERS: NICK/K Required. Nick to check for OPs, VOICE, or even existence... CHANNEL/K Required. Channel name to look on (must be joined) RESULTS: stem.ISOPPED, or is set to: 1 if NICK is opped 2 if NICK is voiced 3 if NICK is not on the channel 0 if NICK is not opped or voiced, but IS on channel EXAMPLE: ISOP NICK 'SkyGuy' CHANNEL '#amiga' VAR isopped if isopped == 1 THEN say 'SkyGuy is opped' else if isopped == 2 THEN say 'SkyGuy has voice' else if isopped == 3 THEN say 'SkyGuy is not on #amiga' else say 'SkyGuy is on #amiga, but is not opped or voiced' @endnode @node pattern_rx "ARexx: PATTERN command" COMMAND: PATTERN ADDRESS/K PATT/K STEM|VAR PARAMETERS: ADDRESS The 'string' to match/check PATT The pattern to match against RESULTS: For STEM: variable.ISMATCH is set to the BOOLEAN values 1 or 0. For VAR: variable is set to BOOLEAN 1 or 0. EXAMPLE: PATTERN ADDRESS SASCMan!jweb@priment.com PATT *!*jweb@*primenet.com VAR ismatch if ismatch THEN say 'We have a match!' @endnode @node names_rx "ARexx: NAMES command" COMMAND: NAMES CHANNEL/K STEM|VAR PARAMETERS: CHANNEL The channel to get the names list from (you must be joined on this channel for a succesful return. RESULTS: For STEM: variable.USERS.0-n, an array of 'names' For VAR: variable is set to a string of names, separated by spaces EXAMPLE: NAMES #amiga STEM names. say names.USERS.1 @endnode @node fmt_irc "Formats for common IRC commands" Only the most common RAW IRC command formats will be covered here. For a more indepth review of other IRC Commands see the IRC-RFC. When someone sends a /msg or just sends text to a channel it is sent with the "PRIVMSG" IRC command: Format for PRIVMSG: Nick!user@host PRIVMSG recipient :message text Recipient can be a channel or a nickname. Message text can also contain a CTCP (marked by a leading and trailing HEX $01). When someone joins a channel the "JOIN" command is used: Format for JOIN: Nick!user@host JOIN :channel When someone leaves a channel, the "PART" command is used: Format for PART: Nick!user@host PART :channel When someone signs off (quits), the "QUIT" command is used: Format for QUIT: Nick!user@host QUIT :signoff message When someone issues a '/mode' change, the "MODE" command is used: Format for MODE: Nick!user@host MODE :parameters Flags: i.e. +o, +b, -b, etc. Parameters can be a list of nick names (for +o, +b, i.e.), or a list of addresses (for +/-b), a keyword (for +k), or a limit number (for +l). "/notice" takes the same format as PRIVMSG, only substituting NOTICE where PRIVMSG is. Nick is the Nick name of the user that invoked the command, user@host is his/her address. HINT: To distinguish between a private "PRIVMSG" and a public "PRIVMSG" you need only check if the first character of stem.CHANNEL is "#" for global channel, or "&" for server specific channel. If it is one of those characters, it is a public message. Now, you should have read about the commands first... @endnode @node wait_rx "ARexx: WAIT command" COMMAND: WAIT STEM|VAR PARAMETERS: NONE RESULTS: I recommend using a stem variable, which is invoked via: WAIT stem variable. (don't forget the trailing period!!!) In the above example, all of ChatBox's text information would be stored in stem variable: 'variable.x' The defined stems are: TOKENS, NICK, ADDRESS, CMD, CHANNEL, LINE TOKENS is an array that holds each token in the RAW IRC command line sent by the server. NICK is the nickname of the person that sent the command (or server address) ADDRESS is the address of "NICK" (or server) CMD is the command that was issued, or an error/reply number CHANNEL is the recipient (target) of the 'CMD', CHANNEL is not necessarily a channel name, it could be a nick name, if the action was private LINE is the message text or parameters of the CMD line... CTCP a BOOLEAN value (1 = TRUE, 0 = FALSE), tells if PRIVMSG was a CTCP EXTRACTING TOKENS: If the following command were received: :SASCMan!~jweb@ip000.phx.primenet.com PRIVMSG #amiga :ChatBox rules! ;) 0 1 2 3 4 5 <- TOKENS THEN: stem.TOKENS.0 = SASCMan!~jweb@ip000.phx.primenet.com stem.TOKENS.1 = PRIVMSG stem.TOKENS.2 = #amiga stem.TOKENS.3 = :ChatBox stem.TOKENS.4 = rules! stem.TOKENS.5 = ;) stem.NICK = SASCMan stem.ADDRESS = jweb@ip000.phx.primenet.com stem.CMD = PRIVMSG stem.CHANNEL = #amiga stem.LINE = ChatBox rules! ;) In most circumstances you'll not need the TOKENS. But they are invaluable when you wish to pick the MESSAGE TEXT apart. NOTES: ChatBox will queue up to 256 lines of text... if your script is so slow that this limit is too low, then you're overdoing it. 256 lines of text can easily reach memory usage of 100k of RAM (or more). If the queue gets out of hand (i.e. scripts seem 'lagged'), simply issue a "/wait ON" command to flush the queue. You should always issue a "CMD '/wait on'" at the start of the script, and a "CMD '/wait off'" at the end of the script. See the @{"/WAIT" link wait} command for more information. @endnode @node cmd_rx "ARexx: CMD command" COMMAND: CMD CMDLINE/F [VAR ] PARAMETERS: CMDLINE A ChatBox '/' (slash) command line. See example below. RESULTS: CMDLINE is executed by ChatBox's parser as if it were typed in the command entry gadget. Currently, CMD returns nothing. EXAMPLE: address 'ChatBox' options results CMD '/msg '||stem.NICK||' Hello, buddy!' CMD '/join #amiga' CMD '/msg '||stem.CHANNEL||' re Everyone!' CMD '/op '||stem.NICK CMD '/server irc.some.other.net' @endnode @node raw_rx "ARexx: RAW command" COMMAND: RAW RAWLINE/F PARAMETERS: RAWLINE is a valid client to server IRC protocol command line. See the IRC RFC, or the section on the format of IRC commands. RESULTS: Sends RAWLINE to the server to be executed. RAW currently sets no return values. EXAMPLE: RAW 'PRIVMSG #amiga :Hello Folks!!!' RAW 'MODE +oo-o :OpMe AndME DeopMe' RAW 'JOIN :#amiga' @endnode @node match_rx "ARexx: MATCH command" COMMAND: MATCH NICK/K ADDRESS/K STEM|VAR PARAMETERS: NICK Nick to look up in ChatBox's internal 'FRIENDS' list. ADDRESS address associated with if 'STEM' is specified, followed by a stem variable, MATCH will place the results of it's match attempt in that stem variable. If 'VAR' is used then ISMATCH and STATUS (see below) are concatenated into . RESULTS: stem.ISMATCH - 0 if no match, 1 if there was a match stem.STATUS - string indicating status i.e.: +ckbo (chop, kick, ban, op capable) EXAMPLE: address 'ChatBox.1' options results WAIT stem irc. MATCH irc.NICK irc.ADDRESS stem info. if info.ISMATCH == 1 then say irc.NICK||' is on the friends list with status of: '||info.STATUS else say irc.NICK||' is not on the friends list.' exit 0 @endnode @node commands "Command set for ChatBox" @{"Special notes on on ChatBox's command parser." link parser} Channel operations: @{"/JOIN, /J " link join } @{"/LEAVE, /L" link leave } [] @{"/PART " link leave } [] @{"/NAMES " link names } [ON/OFF]|[,{] [] Channel operator operations: @{"/MODE " link mode } [|] {[+/-]} [] [] [] @{"/KICK " link kick } [] []|[$] @{"/OP " link op } [] [ []] @{"/DEOP " link op } [] [ []] @{"/BAN " link ban } [] [ []] @{"/UNBAN " link ban } [] [ []] @{"/VOICE " link voice } [] [ []] @{"/UNVOICE " link voice } [] [ []] Messaging: @{"/ME " link me } @{"/MSG, /M " link msg } |[,|[,...]] @{"/NOTICE " link notice } | @{"/PING " link ping } | @{"/CTCP " link ctcp } | [] @{"/QUERY " link query } [|] Server queries: @{"/ADMIN " link admin } [] @{"/CONNECT " link connect} [ []] @{"/INFO " link info } [] @{"/KILL " link kill } @{"/LINKS " link links } [[] ] @{"/STATS " link stats } [ []] @{"/TIME " link time } [] @{"/TRACE " link trace } [] @{"/VERSION " link version} [] Information queries: @{"/LIST " link list } []|[] []] [MIN ] [MAX ] @{"/WHO " link who } [ []] @{"/WHOIS " link whois } [] [,[,...]] @{"/WHOWAS " link whowas } [ []] Server operations: @{"/QUIT " link signoff } [] @{"/SERVER " link server } [] @{"/SIGN " link signoff} [] @{"/SIGNOFF " link signoff} [] Personal operations: @{"/AWAY " link away } [] @{"/INVITE " link invite } [] @{"/NICK " link nick } ChatBox internals: @{"/ADD " link add }
[] @{"/ALIAS " link alias } [ [ []]] @{"/DCC " link dcc } [] @{"/DESCRIBE " link describe} @{"/ECHO " link echo } @{"/ERRWIN " link errwin } @{"/EXEC " link exec }