Time-stamp: <2001-07-16 15:38:19 Administrator> -------------------------------------------------------------------------- What is IMCom IMCom is console Jabber Client written in Python. It in many ways resembles micq because that is the ICQ client that I used before switching to jabber. -------------------------------------------------------------------------- What does IMCom require IMCom first and foremost requires a python interpreter which can be obtained at www.python.org. I have tested only with python 2.0. It may work with python 1.x and it may work with python 2.1, I don't know though. Also, this has only been tested on the linux C Python version 2.0. If someone is willing to test on other platforms/version please contact me. IMCom requires the pyexpat or expat module for python. Note that while the windows binary distribution of python includes the expat parser the linux source by default doesn't build in support for expat. You have to edit the Setup file in the Modules subdirectory of the source tree and specify where the expat library and includes are kept. For more information about building python with expat support read the python README and the Modules/Setup.in file from the python source tree. The expat library itself can be found here: http://www.jclark.com/xml/expat.html It is highly recommended, but not required, to have the readline module for python installed as well. Readline needs to be explicitly compiled in under unix. Windows does not ship with readline, but supposedly there is a working implementation here: http://newcenturycomputers.net/projects/readline.html IMCom supports * Account Creation * Roster Management (adding, removing users) * Status changing * VCard retrieval (very basic) * Logging * Auto-reconnecting on disconnect * Command and color customization * Primitive group support * Transport Registration (icq, aim, msn, etc) * File Transfer IMCom does NOT support * Group Chat * VCard submission * Searching for users * SSL Connections. ------------------------------------------------------------------------ Where can I get IMCom http://imcom.floobin.cx Documentation http://imcom.floobin.cx/src Archives http://discobob.dyndns.org/~crabbkw/imcom/ Bleeding Edge Source ------------------------------------------------------------------------ How do I start IMCom? There are two programs in the IMCom suite right now, * the command-line interface, which is started by python CLI.py * the account-creation utility which is started by python AccountCreator.py Note that while the client has been fairly well tested, the AccountCreator has not. ------------------------------------------------------------------------ How do I use IMCom IMCom is command driven, the default commands are the following: /msg /msg airog hello Sends a message a user. The username can either be a nickname you have specified or a fully qualified Jabber ID. This has two modes, single-line mode and multi-line mode. In single-line mode it takes a username and a message to send. In multi-line mode hit enter after typing the username and it will display a different prompt: [msg]: Type a period on a line by itself to send the message, or a hash( # ) on a line by itself to cancel the message. e Displays a list of users currently online. w Displays the status of everyone on your roster. /info /info airog@jabber.zollers.net Retrieves the VCard of a user. It will display only the Fullname, Given Name, Family Name and Nick Name. It takes either a nickname or a fully qualified JID. /add /add airog@jabber.zollers.net airog Adds a user to your roster, requesting permission if need be. The first parameter is the fully qualified Jabber ID, the second parameter is the nickname to give the JID. /remove /remove airog Removes a user from your roster. The user may be specified as a nickname or a fully qualified Jabber ID. /online /online Sets your current status to online. /chat /chat Sets your current status to free for chat /away /away I've stepped out for a minute Sets your current status to Away with the reason specified. /xa /xa I'm going to bed Sets your current status to eXtended Away with the reason specified. Extended Away is equivalent to Not Available. /dnd /dnd I'm doing homework Sets your current status to Do Not Disturb with the reason specified. /quit Quits the program. // // I'm doing well Sends a message to the last person you messaged. This command has similar functionality and options as /msg /r /r I'm doing well, yourself? Sends a message to the last person who messaged you. This command has similar functionality and options as /msg /set /set colors off Sets boolean variables as to how IMCom behaves. The boolean values accepted as true are "true", "yes". Everything else is interpreted as false. Currently the following variables are supported: * statusshow Whether or not to show status updates * colors Whether or not to use colors * debug Whether or not to output debugging information * ringbell Whether or not to ring the terminal bell on incoming msg /auth /auth airog@jabber.zollers.net Sends authorization to a user so that they can add you to their roster. The user may be specified by either nick or fully qualified Jabber ID. ! ! ls ~ Executes the rest of the line as a command. /rename /rename airog@jabber.zollers.net casey Gives a new nickname to a roster item. The first parameter can be either a nickname or a fully qualified Jabber ID, the second parameter is literally the new nickname. /delete /delete airog@jabber.zollers.net Completely removes all information about a user from your roster. Note that you can remove people's subscription to your presence by doing this. This command is not recommended general use. /listprofiles Lists all the profiles currently in the configuation file. /switchprofile /switchprofile seifer Switches profile to the named profile. /show /show lurker Lists all users in a particular group. Without an argument, lists all the groups that exist. /addgroup /addgroup airog lurker Add a user to a group /delgroup /delgroup airog lurker Remove a user from a group /setgroup /setgroup airog lurker Set a users group to be just the group specified. /membership /membership airog Shows the list of groups a person belongs to. /agents /agents Retrieves a list of all transports available on the server. /agenthelp /reghelp icq.floobin.cx Gets help on registering for a transport on the server. This step is REQUIRED in the registration process. /agentreg /agentreg icq.floobin.cx 1227636 airog yeahright Registers with a transport on your server. The agenthelp command must be issued before this command will be successful, the agenthelp command will tell you the exact format of this command as it changes from time to time. /sendfile /sendfile airog /home/crabbkw/testme.txt Sends a file to a user. The transport MUST support file transfer for the file to send. ICQ, AIM, MSN transport DO NOT SUPPORT file transfer. /getfile /getfile airog Initiates a file transfer when someone is trying to send you a file. The file will be saved in ~/.imcom/files /saveprefs /saveprefs Saves your preferences. /alias /alias today ! date Creates a textual substitution alias. The example above creates the aliased command today, which runs the date program. /alias by itself will list the aliases which currently exist /unalias /unalias today Removes an existing alias. Remember to save your preferences after creating or removing an alias /logs /logs casey Allows searching logfiles by nick, time/date, or text. The following rules and caveats apply: * You can specify the log to search by a list of nicks or jids, and you can also use the wildcard "*". For instance: /logs casey,*_aim * The text search feature is case-insensitive if you enter your query in all lowercase, and case sensitive if you use any uppercase in your query. * Dates should be specified in the form 2001-11-21 14:08:15 * two-part times (14:08) are allowed and interpreted minutes and hours (14:08 becomes 14:08:00) * two-part dates are allowed and interpreted as mm/dd (american format). The year is assumed to be the current year and the time is midnight * "today" is today at 23:59; "yesterday" is yesterday at midnight /last /last In this form the last command will show you people who've messaged in this session /last /last casey In this form the last command will show you the last exchange with the specified nick /last /last casey 5 In this form the alst command will show you the last 5 messages sent to or from the specified nick. This reads the logfiles, so there's no upper bound on the number of messages /help Show the commands available and a brief description of them. ------------------------------------------------------------------------ How do I customize IMCom IMCom is a very customizable program. The commands and colors are both completely customizable by tweaking the configuration file. The configuration file is in pure XML. The following is a complete example of a configuration file. <imcom default='jabber.org'> <command> <msg>/msg</msg> <e>e</e> <w>w</w> <info>/info</info> <add>/add</add> <remove>/remove</remove> <online>/online</online> <chat>/online</chat> <away>/away</away> <xa>/xa</xa> <dnd>/dnd</dnd> <quit>/quit</quit> <reply>//</reply> <respond>/r</respond> <set>/set</set> <auth>/auth</auth> <bang>!</bang> <rename>/rename</rename> <delete>/delete</delete> <listprofiles>/listprofiles</listprofiles> <switchprofile>/switchprofile</switchprofile> <show>/show</show> <addgroup>/addgroup</addgroup> <delgroup>/delgroup</delgroup> <setgroup>/setgroup</setgroup> <membership>/membership</membership> <agents>/agents</agents> <agenthelp>/agenthelp</agenthelp> <agentreg>/agentreg</agentreg> <getfile>/getfile</getfile> <sendfile>/sendfile</sendfile> <alias>/alias</alias> <unalias>/unalias</unalias> <saveprefs>/saveprefs</saveprefs> <help>/help</help> </command> <profile name='jabber.org' debug='false' statusshow='true' ssl='false' colors='true' ringbell='true'> <server>jabber.org</server> <port>5222</port> <user>testuser</user> <password>yeahright</password> <resource>at home</resource> <command> <msg>/msg</msg> <e>e</e> <w>w</w> <info>/info</info> <add>/add</add> <remove>/remove</remove> <online>/online</online> <chat>/online</chat> <away>/away</away> <xa>/xa</xa> <dnd>/dnd</dnd> <quit>/quit</quit> <reply>//</reply> <respond>/r</respond> <set>/set</set> <auth>/auth</auth> <bang>!</bang> <rename>/rename</rename> <delete>/delete</delete> <listprofiles>/listprofiles</listprofiles> <switchprofile>/switchprofile</switchprofile> <show>/show</show> <addgroup>/addgroup</addgroup> <delgroup>/delgroup</delgroup> <setgroup>/setgroup</setgroup> <membership>/membership</membership> <agents>/agents</agents> <agenthelp>/agenthelp</agenthelp> <agentreg>/agentreg</agentreg> <getfile>/getfile</getfile> <sendfile>/sendfile</sendfile> <alias>/alias</alias> <unalias>/unalias</unalias> <saveprefs>/saveprefs</saveprefs> <help>/help</help> </command> <color> <user>brightgreen</user> <status>yellow</status> <error>brightred</error> <messagebody>cyan</messagebody> <time>blue</time> <desc>purple</desc> <sep>brightblue</sep> <default>white</default> <key>green</key> </color> </profile> </imcom> You do not have to specify all the subelements under command or color, the defaults will be used for all subelements not appearing. The command has a section outside profiles. This is the global command section applying to all profiles. The profile command section will override the imcom profile section. The following values are valid for colors: * darkgray * brightred * brightgreen * yellow * brightblue * purple * brightcyan * white * black * red * green * brown * blue * magenta * cyan * lightgray The following are subelements of color: * user the color to use for all JIDs and nicknames * status the color to use for all status information * error the color to use when an error occurs * messagebody the color to use for a message body * time the color used to display time stamps * desc the color used for all descriptions * sep the color used for all separators * key the color used for keys in key, value pairs * default the color used by everything else ------------------------------------------------------------------------ What do you mean group support? Each user can belong to 0 or more groups. To show the groups a particular person belongs to use the membership command. Example: /membership airog This would return the list of groups the user airog belongs to. To see which users belong to a particular group use the show command. Example: /show lurker This would return a list which looks very similar to the roster list except that it only shows users which are members of the group lurker. To see a list of the groups that you have just use the show command with no arguments. Example: /show This would return the list of groups currently in existance. Note that you never actually have to create a group. Simply adding a user to a non-existing group will create that group. There is currently one special group. The lurker group is used for people who you want to have Nick<->JID matching on, but don't want to see status updates for or even on your roster at all. For instance, I use the lurker group for people who I have on my list twice, once with their icq user and once with their jabber user. I add their icq user to my lurker group so I never see it unless I really want to. I also use it for people who I very rarely talk to. People who are a member of the lurker group will only ever show up if you use the show command to show the members of group lurker. If a user (bob) belongs to both lurker group and school group, and you use the show command to list the members of the school group bob will not appear in that list because he is a lurker. The only list a lurker will show up in is the lurker list. To add a user to a group use the addgroup command. It will create the group if necessary. To remove a user from a group use the delgroup command. It will remove the group if no users exist in the group anymore. To set a user belonging to just one group use the setgroup command. It will create the group if necessary. ------------------------------------------------------------------------ File Transfer information. To send a file user: /sendfile airog myfile.txt To receive a file from a user: /getfile airog To refuse receipt of a file simply ignore it. Files are saved in ~/.imcom/files ------------------------------------------------------------------------ $0 through $9 The person who most recently evented you is stored in $0 through $9. Events include messages, auth requests, file requests, basically everything EXCEPT status changes. This is an advanced feature and not yet well tested at of version 0.62. It is useful when random3409783408@jabber.org messages you because you can then just /info $0 To get info on random3409783408@jabber.org. ------------------------------------------------------------------------ Aliases This is another advanced feature that was requested. Basically aliases are textual-substitution commands. That is, you can shorten one command line to a single command. For instance, say you are running on a unix system and want to bind the command /cls to clear the screen. You could /alias /clear ! clear Which would create the alias /clear, which would literally run ! clear Let say I message user bob often. I could /alias /bob /msg bob which would allow me to /bob hi! Sending the message "hi!" to bob. To get a list of aliases use just /alias To remove an alias use /unalias <alias-name> eg: /unalias /bob To save aliases to your preferences issue a saveprefs command, which defaults to /saveprefs ------------------------------------------------------------------------ Who maintains IMCom Casey Crabb (crabbkw@rose-hulman.edu) maintains IMCom and enthusiastically accepts bug reports, especially if they are reproducible. Feature requests are also taken into consideration and potentially added to the list of things to do.