#{{{Top of file import string import socket import os import time import sys import getpass import operator import signal import traceback import codecs import locale import SocketWrapper import pprint from IMCom import IMCom, errorCodes from Colors import * # do idle time in a better spot than at the end of every command. # like at the command handler. terminalWidth = 80 #{{{ Utility functions def mySort(x, y): a,b = x c,d = y return cmp(b,d) def getColor(fg, bg): if bg != "": retval = fg[:-1] + ";" + bg[4:] return retval return fg def setCIColors(prefs, profile): global usercolor, statuscolor, errorcolor, messagebodycolor,\ timecolor, desccolor, sepcolor, defaultcolor, keycolor g = profile.sessioncolors backgroundcolor = g["background"] usercolor = getColor(g["user"] , backgroundcolor) statuscolor = getColor(g["status"] , backgroundcolor) errorcolor = getColor(g["error"] , backgroundcolor) messagebodycolor = getColor(g["messagebody"], backgroundcolor) timecolor = getColor(g["time"] , backgroundcolor) desccolor = getColor(g["desc"] , backgroundcolor) sepcolor = getColor(g["sep"] , backgroundcolor) defaultcolor = getColor(g["default"] , backgroundcolor) keycolor = getColor(g["key"] , backgroundcolor) def getTerminalWidth(): terminalWidth = 80 #linelength def yesnostr( val ): if( val ): return "yes" else: return "no" def truefalsestr( val ): if( val ): return "true" else: return "false" #def logDebug(s): # print s #unicode(s.encode('ascii','replace')) # my field parser.. def listExtend(a, b): #print "listExtending a:",a,"b:",b if len(b) == 0 or len(b[0]) == 0: return a.extend(b) def parseFields(input, numFields): input = input.lstrip() #print "dealing with: [" + input +"] numFields:", numFields try: # we've split enough fields, go ahead and return what was given to us. if numFields == 1: # handle a special case where there is nothing left if len(input) == 0: return [] # handle a special case where there are quotes exactly around the edges if input[0] == '"' and input[-1] == '"': return [input[1:-1]] return [input] quotePos = input.find('"') quotePos2 = input.find('"', quotePos+1) spacePos = input.find(' ') #print "quotePos:", quotePos, "spacePos:", spacePos # there isn't anything left to split by, so just return what we have left. if quotePos == -1 and spacePos == -1: # handle special case empty string if len(input) == 0: return [] return [input] # handle the case where there are no quotes. if quotePos == -1: retval = [input[:spacePos]] #retval.extend(parseFields(input[spacePos+1:], numFields -1)) listExtend(retval, parseFields(input[spacePos+1:], numFields -1)) return retval # handle the case where quotes are further on in the file. if quotePos > spacePos: retval = [input[:spacePos]] #retval.extend(parseFields(input[spacePos+1:], numFields -1)) listExtend(retval, parseFields(input[spacePos+1:], numFields -1)) return retval # handle the case where there are mismatched quotes if quotePos != -1 and quotePos2 == -1: print "mismatched quotes." return None # handle the case where quoted item in the next item retval = [input[quotePos+1:quotePos2]] #retval.extend(parseFields(input[quotePos2+1:], numFields -1)) listExtend(retval, parseFields(input[quotePos2+1:], numFields -1)) return retval except: return None #}}} #{{{ Misc commands (bang, quit logs, last, version, set, setPriority, listProfiles, switchProfile) def bangCommand(cli, line): if(len(line) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"bang") + " ls ~") return os.system(line) return def quitCommand(cli, line): for key in cli.socketlisteners: key.sendData("Server shutting down.\n") key.disconnect() cli.imcom.disconnect() if cli.autostatus != None: cli.autostatus.kill() cli.running = 0 cli.handleQuit() return def logsCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params) > 1): cli.output("Too many arguments.\nI can take at most one argument - the nick or JID to view logs for" ) return if( len(params) == 1 ): messages = cli.loghandler.readLogs( params[0], None,\ None, None, None, 1 ) else: messages = cli.loghandler.readLogs( None, None, None,\ None, None, 1 ) for x in messages: cli.loghandler.displayMessage( x ) return def idleCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) cli.autostatus.setIdleTime( int( params[0] ) ) cli.autostatus.doAutoStatus() return def lastCommand(cli, line): params = parseFields(line,2) #string.split(line, None, 1) if len(params) == 0: cli.output( cli.colorscheme["sepcolor"] + "You have messaged the following people:" + cli.colorscheme["defaultcolor"] ) for x in cli.lastToDict.keys(): cli.output( cli.colorscheme["usercolor"] + cli.getNick( x ) + cli.colorscheme["defaultcolor"] ) cli.output( cli.colorscheme["sepcolor"] + "The following people have messaged you:" + cli.colorscheme["defaultcolor"] ) for x in cli.lastFromDict.keys(): cli.output( cli.colorscheme["usercolor"] + cli.getNick( x ) + cli.colorscheme["defaultcolor"] ) return if len(params) == 2: messages = cli.loghandler.readLogs( params[0], -1, -1, None, params[1], 0 ) for x in messages: cli.loghandler.displayMessage( x ) return jidL = cli.getJID( params[0] ) jid = jidL[0] target = params[0] if( jid == target ): cli.output( cli.colorscheme["desccolor"] + "Note: " + cli.colorscheme["usercolor"] + target + cli.colorscheme["defaultcolor"] + " is not in your roster" ) if( not cli.lastToDict.has_key( jid ) ): cli.output( "You haven't said anything to " + cli.colorscheme["usercolor"] + target + cli.colorscheme["defaultcolor"] ) else: cli.output( cli.colorscheme["usercolor"] + cli.profile.user + "@" + cli.profile.server + cli.colorscheme["defaultcolor"] + " -> " + \ cli.colorscheme["usercolor"] + target + "\n" + cli.colorscheme["messagebodycolor"] + cli.lastToDict[jid] + cli.colorscheme["defaultcolor"] ) if( not cli.lastFromDict.has_key( jid ) ): cli.output( cli.colorscheme["usercolor"] + target + cli.colorscheme["defaultcolor"] + " hasn't said anything to you" ) else: cli.output( cli.colorscheme["usercolor"] + target + cli.colorscheme["defaultcolor"] + " -> " + cli.colorscheme["usercolor"] + cli.profile.user + "@" + \ cli.profile.server + "\n" + cli.colorscheme["messagebodycolor"] + cli.lastFromDict[jid] + cli.colorscheme["defaultcolor"] ) return def versionCommand(cli, line): params = parseFields(line, 1) if(len(params)==0): cli.output("You are using CLI Version: " + str(cli.VERSION) + " using IMCom library version: " + str(cli.imcom.VERSION)) cmd = cli.prefs.getCommand(cli.profile,"version") cli.output("You can see what others are using by issuing: " + cmd + " [username]") cli.output("Example: " + cmd + " airog") return to = params[0] jid,resource = cli.getJID(to) if resource == None: cli.output(cli.colorscheme["errorcolor"] + "ERROR:" + cli.colorscheme["defaultcolor"] + " A resource is required to send a version request.") return to = cli.getNick(jid) cli.imcom.sendVersionRequest(jid, resource) cli.output("Querying " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"] + " about the client version they are using.") cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return def setpriorityCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): priority = 0 else: try: priority = int(params[0]) if priority < 6: cli.output("Base priority must be a positive integer greater than 5. (6, 8, 49574, etc)") return except: cli.output("Base priority must be a positive integer greater than 5. (6, 8, 49574, etc)") return cli.profile.priority = priority cli.output("Setting base priority to " + cli.colorscheme["statuscolor"] + str(priority) + cli.colorscheme["defaultcolor"]) if(cli.currentStatus == "online" or cli.currentStatus == "chat"): cli.imcom.sendPriority(priority) elif(cli.currentStatus == "away"): cli.imcom.sendPriority(priority-2) elif(cli.currentStatus == "xa"): cli.imcom.sendPriority(priority-4) elif(cli.currentStatus == "dnd"): cli.imcom.sendPriority(priority-6) return def setCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params)<2): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"set") + " statusShow off") cli.output("The values are boolean and can be on, off, true, false, yes, no") maxwidth = 0 for x in cli.profile.switches.keys(): if maxwidth < len( cli.profile.switches[x][1]): maxwidth = len( cli.profile.switches[x][1] ) for x in cli.profile.switches.keys(): cli.output( cli.colorscheme["keycolor"] + string.ljust( cli.profile.switches[x][1], maxwidth + 3 ) + ": " + cli.colorscheme["desccolor"] + string.ljust(cli.profile.switches[x][0], 6) + cli.colorscheme["defaultcolor"] + ": " + cli.colorscheme["desccolor"] + cli.profile.switches[x][2] + cli.colorscheme["defaultcolor"]) return variable = string.lower(params[0]) value = string.lower(params[1]) if variable == "ssl": cli.output("I cannot set the SSL value via the UI. Please edit the config file directly. Change the port accordingly and update the SSL flag. Sorry.") return if(value == "on" or value == "true" or value == "yes"): value = 1 else: value = 0 if( cli.profile.switches.has_key( variable ) ): cli.profile.switches[variable] = \ [ truefalsestr( value ), cli.profile.switches[variable][1], cli.profile.switches[variable][2] ] cli.output( cli.colorscheme["desccolor"] + cli.profile.switches[variable][2] + " " + cli.colorscheme["statuscolor"] + yesnostr( value ) + cli.colorscheme["defaultcolor"] ) else: cli.output( "Unknown variable " + cli.colorscheme["statuscolor"] + params[0] + cli.colorscheme["defaultcolor"] ) return if(variable == "statusshow"): cli.showPresenceUpdates = value return if(variable == "debug"): cli.debug=value cli.imcom.setDebug(value) return if(variable == "colors"): if(value): cli.setColors() else: cli.setNoColors() return if(variable == "ringbell"): cli.ringBell = value return if(variable == "confringbell"): cli.confRingBell = value return if(variable == "nickprompt"): cli.useNickAsPrompt = value return if(variable == "allowinterruptions"): cli.allowInterrupt = value return return def listprofilesCommand(cli, line): keys = cli.prefs.profiles.keys() cli.output("You have " + cli.colorscheme["timecolor"] + "%d"%len(keys) + cli.colorscheme["defaultcolor"] + " profiles") for item in keys: cli.output(cli.prefs.profiles[item].name) cli.output("") return def switchprofileCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"switchprofile") + " jabber.org") return if(cli.prefs.profiles.has_key(string.strip(params[0]))): cli.profile.loadedModules = [] cli.profile = cli.prefs.profiles[string.strip(params[0])] cli.output("Switching to " + line + ", hold on a sec...") cli.imcom.disconnect() cli.imcom = None cli.imcom = IMCom(cli) cli.registerCallbacks() cli.lastMessaged = None cli.lastReceived = None cli.threadHash = {} result = cli.applyProfileWrapper() if result[0] != 0: sys.exit(-1) cli.applyPrefs(0) cli.loghandler.setProfile( cli.profile ) return else: cli.output("I couldn't find a profile by the name of " + line) return #}}} #{{{ Administrative commands (admin, adminWho, changePassword, submitVCard, def adminCommand(cli, line): params = string.split(line, None, 1) body = None to = None if(len(params) != 2): cli.output("Incorrect number of arguments. Usage: " + cli.prefs.getCommand(cli.profile,"admin") + " floobin.cx announce/online") cli.output(" or floobin.cx annouce/motd") return to = params[0] res = params[1] cli.output("Composing a message to users of " + to + " for res: " + res) body = cli.getAllText("msg") if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + "cancelled" + cli.colorscheme["defaultcolor"]) return thread = None cli.imcom.sendMessage(to, body, thread, res) cli.output("Sent a message to " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return def adminwhoCommand(cli, line): cli.output("Retrieving the list of all users online.. hold on a sec..") body = "" cli.imcom.sendPacket(body) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return def changepasswordCommand(cli, line): params = parseFields(line, 1) if len(params) <= 0: cmd = cli.prefs.getCommand(cli.profile, "changepassword") cli.output("Too few parmeters. Usage: " + cmd + " ") cli.output("Example " + cmd + " myPantsAreMypAsswoRd") return cli.imcom.sendChangePassword(params[0]) cli.output("Attempting to change your password.") return def submitvcardCommand(cli, line): params = parseFields(line, 5) #string.split(line, None, 4) if(len(params) != 5): cli.output("Incorrect number of arguments. Usage: /submitinfo " + " Casey Crabb Casey Airog crabbkw@nafai.dyndns.org \n" + cli.prefs.getCommand(cli.profile, "submitvcard") + " DisplayName FamilyName GivenName NickName Email") return fn = params[0] f = params[1] g = params[2] n = params[3] e = params[4] cli.output("Submitting your vCard to the server.") cli.imcom.sendSetInfo(fn,f,g,n,e) return #}}} #{{{ old Message Commands def oldmsgrCommand(cli, line): params = string.split(line, None, 1) body = None to = None if(len(params) != 2): cli.output("Incorrect number of arguments. Usage: " + cli.prefs.getCommand(cli.profile,"msgr") + " airog@floobin.cx the resource I'm at") return if( cli.profile.switches["statusnag"][0] == "true" ): cli.statusNag() to = params[0] jid,resource = cli.getJID(to) res = params[1] if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "no such user: " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) return cli.output("Composing a message to " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"] + " on resource: " + cli.colorscheme["keycolor"] + params[1] + cli.colorscheme["defaultcolor"]) if(cli.useNickAsPrompt): body = cli.getAllText(to) else: body = cli.getAllText( "msg" ) if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + "cancelled" + cli.colorscheme["defaultcolor"]) return thread = None if(cli.threadHash.has_key(jid)): thread = cli.threadHash[jid] else: thread = None cli.imcom.sendMessage(jid, body, thread, res) cli.lastMessaged = jid cli.output("Sent a message to " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) cli.logMessage(jid,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return def oldmsgCommand(cli, line): params = string.split(line,None,1) body = None to = None # begin add by ted multi_to = None multi_message_p = None multi_jids = None # end add by ted if(len(params) == 1): if( cli.profile.switches["statusnag"][0] == "true" ): cli.statusNag() to = params[0] # begin add by ted multi_to = string.split(to, ',') if len(multi_to) <= 1: # end add by ted jid,resource = cli.getJID(to) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "no such user: " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) return cli.output("Composing a message to " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) if(cli.useNickAsPrompt): body = cli.getAllText(to) else: body = cli.getAllText( "msg" ) if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + "cancelled" + cli.colorscheme["defaultcolor"]) return elif(len(params)<2): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"msg") + " airog@floobin.cx hi there!") return if( cli.profile.switches["statusnag"][0] == "true" ): cli.statusNag() if(body == None): body = params[1] to = params[0] # begin add by ted if (len(params) != 1): multi_to = string.split(to, ',') multi_message_p = (len(multi_to) > 1) multi_jids = [] if multi_message_p: for to in multi_to: if len(to) == 0: continue jid,resource = cli.getJID(to) if (resource != None and resource != ""): multi_jids.append(jid + "/" + resource) else: multi_jids.append(jid) to = cli.getNick(jid) if (not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "No such user: " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) return # I'm passing the buck on your scary threading. thread = None else: # end add by ted. note: following lines have been indented. jid,resource = cli.getJID(to) to = cli.getNick(jid) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "No such user: " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) return thread = None if(cli.threadHash.has_key(jid)): thread = cli.threadHash[jid] else: thread = None if(resource != None and resource != ""): jid = jid + "/" + resource if multi_message_p: cli.imcom.sendMultiMessage(multi_jids, body, thread) for to in multi_to: if(len(to) == 0): continue cli.output("Sent a message to "+ cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) cli.logMultiMessage(multi_jids, cli.profile.user + "@" + cli.profile.server, cli.getDate(), cli.getTime(), body) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return else: cli.imcom.sendMessage(jid, body, thread) cli.lastMessaged = jid if(not cli.imcom.conferences.has_key(jid)): cli.output("Sent a message to " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"]) cli.logMessage(jid,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return def oldreplyCommand(cli, line): if(cli.lastMessaged == None): cli.output("You have to message somebody first.") return body = line to = cli.lastMessaged nick = cli.getNick(to) if(len(line) == 0): cli.output("Composing a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) if(cli.useNickAsPrompt): body = cli.getAllText(nick) else: body = cli.getAllText("msg") if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + " cancelled" + cli.colorscheme["defaultcolor"]) return cli.lastMessaged = to thread = None if(cli.threadHash.has_key(to)): thread = cli.threadHash[to] else: thread = None cli.imcom.sendMessage(to, body, thread) if(not cli.imcom.conferences.has_key(to)): cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) cli.logMessage(to,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return def oldrespondCommand(cli, line): if(cli.lastReceived == None): cli.output("Someone has to message you first.") return to = cli.lastReceived nick = cli.getNick(to) body = line if(len(line) == 0): cli.output("Composing a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) if(cli.useNickAsPrompt): body = cli.getAllText(nick) else: body = cli.getAllText("msg") if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + " cancelled" + cli.colorscheme["defaultcolor"]) return thread = None if(cli.threadHash.has_key(to)): thread = cli.threadHash[to] else: thread = None cli.imcom.sendMessage(to, body, thread) cli.lastMessaged = to cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) cli.logMessage(to,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) cli.autostatus.setIdleTime( 0 ) cli.autostatus.doAutoStatus() return #}}} #{{{ Message Commands (msgr, msg, reply, respond) def msgrCommand(cli, line): params = parseFields(line, 2) body = None if(len(params) != 2): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"msgr") + " airog@floobin.cx the resource I'm at") return jid, resource = cli.getJID(params[0]) resource = params[1] nick = cli.getNick(jid) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "no such user: " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"]) return if( cli.profile.switches["statusnag"][0] == "true" ): cli.statusNag() cli.output("Composing a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " on resource: " + cli.colorscheme["keycolor"] + resource + cli.colorscheme["defaultcolor"]) if(cli.useNickAsPrompt): body = cli.getAllText(nick) else: body = cli.getAllText("msg") if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + "cancelled" + cli.colorscheme["defaultcolor"]) return thread = None if(cli.threadHash.has_key(jid)): thread = cli.threadHash[jid] else: thread = None cli.imcom.sendMessage(jid, body, thread, resource) cli.lastMessaged = jid cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " at " + cli.colorscheme["timecolor"] + cli.getTime() + cli.colorscheme["defaultcolor"]) cli.logMessage(jid,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) return def msgCommand(cli, line): params = parseFields(line, 2) body = None if(len(params) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"msg") + " airog@floobin.cx hi there!") return jid, resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "no such user: " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"]) return nick = cli.getNick(jid) if( cli.profile.switches["statusnag"][0] == "true" ): cli.statusNag() if(len(params) == 1): #We're a multi-line message mode message. cli.output("Composing a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " (. to Send, # to cancel)") if(cli.useNickAsPrompt): body = cli.getAllText(nick) else: body = cli.getAllText( "msg" ) if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + "cancelled" + cli.colorscheme["defaultcolor"]) return if(len(params) == 2): body = params[1] thread = None if(cli.threadHash.has_key(jid)): thread = cli.threadHash[jid] else: thread = None if(resource != None and resource != ""): jid = jid + "/" + resource cli.lastMessaged = jid cli.imcom.sendMessage(jid, body, thread) if(not cli.imcom.conferences.has_key(jid)): cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " at " + cli.colorscheme["timecolor"] + cli.getTime() + cli.colorscheme["defaultcolor"]) cli.logMessage(jid,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) return def msggroupCommand(cli, line): params = parseFields(line, 1) body = None if(len(params) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"msggroup") + " mygroup") return group = params[0] if not cli.imcom.grouphash.has_key(group): cli.output("You have not defined a group: " + group + ".") cli.output("The following is a list of the groups you have defined.") for g in cli.imcom.grouphash.keys(): cli.output(cli.colorscheme["keycolor"] + g + cli.colorscheme["defaultcolor"]) return #We're a multi-line message mode message. cli.output("Composing a message to the members of group " + cli.colorscheme["keycolor"] + group + cli.colorscheme["defaultcolor"] + " (. to Send, # to cancel)") if(cli.useNickAsPrompt): body = cli.getAllText(group) else: body = cli.getAllText( "msg" ) if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + "cancelled" + cli.colorscheme["defaultcolor"]) return for jid in cli.imcom.grouphash[group]: cli.logMessage(jid,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) cli.imcom.sendMessage(jid, body, None, None) cli.output("Sent a message to the members of group " + cli.colorscheme["keycolor"] + group + cli.colorscheme["defaultcolor"] + " at " + cli.colorscheme["timecolor"] + cli.getTime() + cli.colorscheme["defaultcolor"] + ".") return def replyCommand(cli, line): if(cli.lastMessaged == None): cli.output("You have to message somebody first.") return body = line to = cli.lastMessaged nick = cli.getNick(to) if(len(line) == 0): cli.output("Composing a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " (. to Send, # to cancel)") if(cli.useNickAsPrompt): body = cli.getAllText(nick) else: body = cli.getAllText("msg") if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + " cancelled" + cli.colorscheme["defaultcolor"]) return cli.lastMessaged = to thread = None if(cli.threadHash.has_key(to)): thread = cli.threadHash[to] else: thread = None cli.imcom.sendMessage(to, body, thread) if not cli.imcom.conferences.has_key(to): cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " at " + cli.colorscheme["timecolor"] + cli.getTime() + cli.colorscheme["defaultcolor"]) cli.logMessage(to,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) return def respondCommand(cli, line): if(cli.lastReceived == None): cli.output("Someone has to message you first.") return to = cli.lastReceived nick = cli.getNick(to) body = line if(len(line) == 0): cli.output("Composing a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " (. to Send, # to cancel)") if(cli.useNickAsPrompt): body = cli.getAllText(nick) else: body = cli.getAllText("msg") if(body == None or len(body)==0): cli.output("Message " + cli.colorscheme["errorcolor"] + " cancelled" + cli.colorscheme["defaultcolor"]) return thread = None if(cli.threadHash.has_key(to)): thread = cli.threadHash[to] else: thread = None cli.imcom.sendMessage(to, body, thread) cli.lastMessaged = to cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " at " + cli.colorscheme["timecolor"] + cli.getTime() + cli.colorscheme["defaultcolor"]) cli.logMessage(to,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),body) return def msgbangCommand(cli, line): params = parseFields(line, 2) if len(params) != 2: cmd = cli.prefs.getCommand(cli.profile,"msgbang") cli.output("Too few arguments. Usage: " + cmd + " [JID] [COMMAND]") cli.output("Example: " + cmd + " airog /sbin/ifconfig eth0") cli.output("This command is only available on UNIX systems.") return jid, resource = cli.getJID(params[0]) cmd = params[1] thread = None if(cli.threadHash.has_key(jid)): thread = cli.threadHash[jid] else: thread = None i,o = os.popen4(cmd) msg = o.read() o.close() i.close() cli.imcom.sendMessage(jid, msg, thread, resource) cli.lastMessaged = jid nick = cli.getNick(jid) cli.output("Sent a message to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " at " + cli.colorscheme["timecolor"] + cli.getTime() + cli.colorscheme["defaultcolor"]) cli.logMessage(jid,cli.profile.user+"@"+cli.profile.server, cli.getDate(),cli.getTime(),msg) return #}}} #{{{ Roster Management (e, w, add, remove, addGroup, delGroup, setGroup, auth, deny, delete, rename, info, membership) def eCommand(cli, line): cli.printOnlineRoster() return def wCommand(cli, line): cli.printRoster() return def addCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params)<2): cli.output("Too few arguments. usage: " + cli.prefs.getCommand(cli.profile,"add") + " airog@floobin.cx airog") return to = params[0] nick = params[1] if(to[0] == "$" and len(to) == 2): n = int(to[1]) if(len(cli.userQueue)>n): to = cli.userQueue[n] if(-1 == string.find(to,"@")): cli.output(cli.colorscheme["errorcolor"] + "ERROR: " + cli.colorscheme["defaultcolor"] + to + " isn't a fully qualified jabber ID. \nUsage: " + cli.prefs.getCommand(cli.profile,"add") + " airog@floobin.cx airog") return if cli.imcom.nickhash.has_key(nick): cli.output(cli.colorscheme["errorcolor"] + "ERROR: " + cli.colorscheme["defaultcolor"] + "can not set nick of " + cli.colorscheme["keycolor"] + to + cli.colorscheme["defaultcolor"] + " to '" + cli.colorscheme["keycolor"] + nick + cli.colorscheme["defaultcolor"] + "' because that nickname is already associated with JID: " + cli.colorscheme["keycolor"] + cli.imcom.nickhash[nick] + cli.colorscheme["defaultcolor"]) cli.output("Not sending subscribe request.") return if nick.find("/") != -1: cli.output(cli.colorscheme["errorcolor"] + "ERROR: " + cli.colorscheme["defaultcolor"] + "can not set nick of " + cli.colorscheme["keycolor"] + params[0] + cli.colorscheme["defaultcolor"] + " to '" + cli.colorscheme["keycolor"] + name + cli.colorscheme["defaultcolor"] + "' because nicknames CANNOT contain slashes.") cli.output("Not sending subscribe request.") return cli.imcom.sendSubscribe(to) cli.imcom.setNick(to, nick) cli.output("Sending subscribe request to " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"] + " and renaming to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) return def authCommand(cli, line): params = parseFields(line, 1) if(len(params)==0): cli.output("Too few arguments. usage: " + cli.prefs.getCommand(cli.profile,"auth") + " airog@floobin.cx") return to = params[0] jid,resource = cli.getJID(to) to = cli.getNick(jid) cli.imcom.sendSubscribed(jid) cli.output("Authorizing " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"] + " to add you to their roster") return def denyCommand(cli, line): params = parseFields(line, 1) if(len(params)==0): cli.output("Too few arguments. usage: " + cli.prefs.getCommand(cli.profile,"deny") + " airog@floobin.cx") return to = params[0] jid,resource = cli.getJID(to) to = cli.getNick(jid) cli.imcom.sendUnsubscribed(jid) cli.output("Denying " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"] + " to add you to their roster") return def removeCommand(cli, line): params = parseFields(line, 1) if(len(params)==0): cli.output("Too few arguments. usage: " + cli.prefs.getCommand(cli.profile,"remove") + " airog@floobin.cx") return to = params[0] jid,resource = cli.getJID(to) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return cli.imcom.sendUnsubscribe(jid) cli.output("Attempting to unsubscribe from " + cli.colorscheme["usercolor"] + to + cli.colorscheme["defaultcolor"] + "'s presence") return def renameCommand(cli, line): params = parseFields(line, 2) if(len(params) != 2): cmd = cli.prefs.getCommand(cli.profile, "rename") cli.output("Incorrect number of arguments. usage: " + cmd + " \n" + "Example: " + cmd + " airog casey") return jid,resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return name = params[1] if cli.imcom.nickhash.has_key(name): cli.output(cli.colorscheme["errorcolor"] + "ERROR: " + cli.colorscheme["defaultcolor"] + "can not set nick of " + cli.colorscheme["keycolor"] + params[0] + cli.colorscheme["defaultcolor"] + " to '" + cli.colorscheme["keycolor"] + name + cli.colorscheme["defaultcolor"] + "' because that name is already associated with JID: " + cli.colorscheme["keycolor"] + cli.imcom.nickhash[name] + cli.colorscheme["defaultcolor"]) return if name.find("/") != -1: cli.output(cli.colorscheme["errorcolor"] + "ERROR: " + cli.colorscheme["defaultcolor"] + "can not set nick of " + cli.colorscheme["keycolor"] + params[0] + cli.colorscheme["defaultcolor"] + " to '" + cli.colorscheme["keycolor"] + name + cli.colorscheme["defaultcolor"] + "' because nicknames CANNOT contain slashes.") return cli.output("Attempting to set " + cli.colorscheme["usercolor"] + jid + cli.colorscheme["defaultcolor"] + "'s nick to " + cli.colorscheme["usercolor"] + name + cli.colorscheme["defaultcolor"]) cli.imcom.setNick(jid,name) return def deleteCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"delete") + " airog") cli.output("This command will remove a roster entry, unsubscribing as necessary. " + "Use this if you don't want someone in your roster at all and " + cli.prefs.getCommand(cli.profile, "remove") + " when you simply want to " + "not receive presence updates from someone, but still want a nickname and " + "group associated with them.") return jid,resource = cli.getJID(params[0]) cli.output("Removing the roster entry for " + cli.colorscheme["usercolor"] + jid + cli.colorscheme["defaultcolor"]) cli.imcom.removeUser(jid) return def infoCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"info") + " airog@floobin.cx") return jid,resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return cli.output("Trying to retrieve information on " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"]) cli.imcom.sendGetInfo(jid) return def showCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. usage: " + cli.prefs.getCommand(cli.profile,"show") + " lurker") cli.output("The following is a list of groups: ") keys = cli.imcom.grouphash.keys() for item in keys: if(len(cli.imcom.grouphash[item]) > 0): cli.output(cli.colorscheme["keycolor"] + item + cli.colorscheme["defaultcolor"]) return if(not cli.imcom.grouphash.has_key(params[0]) or len(cli.imcom.grouphash[params[0]]) <= 0): cli.output("There is no one who is a member of group: " + cli.colorscheme["keycolor"] + params[0] + cli.colorscheme["defaultcolor"]) return cli.showGroupMembers(params[0]) return def addgroupCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params)<2): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"addgroup") + " airog lurker") return jid,resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return gname = params[1] cli.output("Adding " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"] + " to group " + cli.colorscheme["keycolor"] + gname + cli.colorscheme["defaultcolor"]) cli.imcom.addGroup(jid,gname) return def setgroupCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params)<2): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"setgroup") + " airog lurker") return jid,resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return gname = params[1] cli.output("Setting " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"] + "'s group to be " + cli.colorscheme["keycolor"] + gname + cli.colorscheme["defaultcolor"]) cli.imcom.setGroup(jid,gname) return def delgroupCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params)<2): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"delgroup") + " airog lurker") return jid,resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return gname = params[1] cli.output("Removing " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"] + " from group " + cli.colorscheme["keycolor"] + gname + cli.colorscheme["defaultcolor"]) cli.imcom.removeGroup(jid,gname) return def membershipCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"membership") + " airog") return jid,resource = cli.getJID(params[0]) nick = cli.getNick(jid) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return l = cli.imcom.gjidhash[jid] cli.output(cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " belongs to the following groups:" + cli.colorscheme["keycolor"]) for item in l: cli.output(item) cli.output(cli.colorscheme["defaultcolor"]) return #}}} #{{{ Presence Management (chat, online, away, xa, dnd) def chatCommand(cli, line): cli.handleUserPresenceChange(cli.currentStatus, cli.currentStatusReason, "chat", "") cli.currentStatus = "chat" cli.currentStatusReason = "" cli.imcom.sendChat() cli.output("Setting status to " + cli.colorscheme["statuscolor"] + "chat" + cli.colorscheme["defaultcolor"]) cli.autostatus.statusChange( cli.currentStatus, cli.currentStatusReason ) cli.autostatus.doAutoStatus() return def onlineCommand(cli, line): reason = "" params = parseFields(line, 1) if(len(params) != 0): reason = params[0] cli.handleUserPresenceChange(cli.currentStatus, cli.currentStatusReason, "online", reason) cli.currentStatus = "online" cli.currentStatusReason = reason cli.autostatus.statusChange( cli.currentStatus, cli.currentStatusReason ) cli.output("Setting status to " + cli.colorscheme["statuscolor"] + "online" + cli.colorscheme["defaultcolor"]) cli.imcom.sendOnline(reason) cli.autostatus.doAutoStatus() return def awayCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): reason = "I'm too lazy to enter why I'm away" else: reason = params[0] cli.handleUserPresenceChange(cli.currentStatus, cli.currentStatusReason, "away", reason) cli.currentStatus = "away" cli.currentStatusReason = reason cli.imcom.sendAway(reason) cli.output("Setting status to " + cli.colorscheme["statuscolor"] + "away" + cli.colorscheme["defaultcolor"] + " with reason: " + cli.colorscheme["desccolor"] + reason + cli.colorscheme["defaultcolor"]) cli.autostatus.statusChange( cli.currentStatus, cli.currentStatusReason ) cli.autostatus.doAutoStatus() return def xaCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): reason = "I'm too lazy to enter why I'm xa" else: reason = params[0] cli.handleUserPresenceChange(cli.currentStatus, cli.currentStatusReason, "xa", reason) cli.currentStatus = "xa" cli.currentStatusReason = reason cli.imcom.sendXA(reason) cli.output("Setting status to " + cli.colorscheme["statuscolor"] + "xa" + cli.colorscheme["defaultcolor"] + " with reason: " + cli.colorscheme["desccolor"] + reason + cli.colorscheme["defaultcolor"]) cli.autostatus.statusChange( cli.currentStatus, cli.currentStatusReason ) cli.autostatus.doAutoStatus() return def dndCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): reason = "I'm too lazy to enter why I'm dnd" else: reason = params[0] cli.handleUserPresenceChange(cli.currentStatus, cli.currentStatusReason, "dnd", reason) cli.currentStatus = "dnd" cli.currentStatusReason = reason cli.imcom.sendDND(reason) cli.output("Setting status to " + cli.colorscheme["statuscolor"] + "dnd" + cli.colorscheme["defaultcolor"] + " with reason: " + cli.colorscheme["desccolor"] + reason + cli.colorscheme["defaultcolor"]) cli.autostatus.statusChange( cli.currentStatus, cli.currentStatusReason ) cli.autostatus.doAutoStatus() return #}}} #{{{ FileTransfer Commands def sendfileCommand(cli, line): params = parseFields(line, 2) #string.split(line, None, 1) if(len(params) < 2): cli.output("Too few arguments. usage:" + cli.prefs.getCommand(cli.profile,"sendfile") + " airog /home/crabbkw/test.txt") return jid,res = cli.getJID(params[0]) fname = params[1] if(not os.path.exists(fname) or not os.path.isfile(fname)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + "Path doesn't exist: " + fname) return nick = cli.getNick(jid) cli.output("Offering: " + cli.colorscheme["desccolor"] + fname + cli.colorscheme["defaultcolor"] + " to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) cli.imcom.sendFile(jid+"/"+res,fname) return def getfileCommand(cli, line): params = parseFields(line, 1) if(len(params)<=0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"getfile") + " airog") return jid,resource = cli.getJID(params[0]) if(not cli.checkto(jid)): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["defaultcolor"] + jid + " is not a proper Jabber ID or not on userlist") return nick = cli.getNick(jid) if not cli.imcom.filehash.has_key(jid): cli.output(params[0] + " has not tried to send you a file. You cannot receive a file not transmitted. " + cli.colorscheme["defaultcolor"]) return file = cli.imcom.filehash[jid][0][0] cli.output("Attempting to get " + cli.colorscheme["desccolor"] + str(file) + cli.colorscheme["defaultcolor"] + " from " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"]) cli.imcom.getFile(jid) return #}}} #{{{ Agent Commands def agentsCommand(cli, line): cli.output("Requesting the list of transport and agents supported") cli.imcom.sendAgentListRequest() return def agenthelpCommand(cli, line): if(len(line) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"agenthelp") + " icq.jabber.org") return cli.output("Beginning the registration process. Requesting required information.") to = line cli.imcom.sendAgentRegHelp(to) return def agentregCommand(cli, line): params = string.split(line) if(len(params) < 2): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"agentreg") + " icq.jabber.org 1227626 yeah-right nobody") return to = params[0] fields=params[1:] cli.imcom.sendAgentRegistration(to,fields) return def interactiveregCommand( cli, line ): fields = string.split( line, "<" ) ffrom = fields.pop(0) cli.output( "Now attempting to register you for the " + cli.colorscheme["usercolor"] + cli.getNick( ffrom ) + cli.colorscheme["defaultcolor"] + " (" + cli.colorscheme["usercolor"] + ffrom + cli.colorscheme["defaultcolor"] +")" ) cli.gettingCommand = 1 cli.mode = cli.MULTILINE retfields = [] for i in fields: print "\n" + cli.colorscheme["keycolor"] + i + cli.colorscheme["defaultcolor"] retfields.append( raw_input("> " ) ) answer = raw_input( "Send registration request (y/n)? " ) cli.mode = 0 cli.gettingCommand = 0 # show the messages that came in while they were busy cli.dumpQueue() if( ( answer[0] == "y" ) or ( answer[0] == "Y" ) ): cli.imcom.sendAgentRegistration( ffrom, retfields ) def unregisterCommand(cli, line): params = parseFields(line, 1) if len(params) <= 0: cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile, "unregister") + " \n" + "Example " + cli.prefs.getCommand(cli.profile, "unregister") + " aim.floobin.cx\n") return #if cli.imcom.subscriptions.has_key(line): # if cli.imcom.subscriptions[line] == "from" or cli.imcom.subscriptions[line] == "both": cli.imcom.sendAgentUnregistration(params[0] ) return #}}} #{{{ Alias Commands def aliasCommand(cli, line): params = parseFields(line, 2) #string.split(line,None,1) if(len(params) != 2): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"alias") + " \n" + "Example " + cli.prefs.getCommand(cli.profile,'alias') + " today ! date\n") cli.output("This is the current list of aliases") keys = cli.profile.aliases.keys() for item in keys: cli.output(cli.colorscheme["keycolor"] + item + cli.colorscheme["defaultcolor"] + " : " + cli.colorscheme["desccolor"] + cli.profile.aliases[item] + cli.colorscheme["defaultcolor"]) return cli.output("Setting " +params[0] + " to " + params[1]) cli.profile.aliases[params[0]]=params[1] return def unaliasCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"unalias") + " \n" + "Example " + cli.prefs.getCommand(cli.profile,'unalias') + " today\n") cli.output("This is the current list of aliases") keys = cli.profile.aliases.keys() for item in keys: cli.output(cli.colorscheme["keycolor"] + item + cli.colorscheme["defaultcolor"] + " : " + cli.colorscheme["desccolor"] + cli.profile.aliases[item] + cli.colorscheme["defaultcolor"]) return if(not cli.profile.aliases.has_key(params[0])): cli.output(cli.colorscheme["errorcolor"] + "Error: " + cli.colorscheme["keycolor"] + params[0] + cli.colorscheme["defaultcolor"] + " is not the name of an alias") return cli.output("Removing alias: " + cli.colorscheme["keycolor"] + params[0] + cli.colorscheme["defaultcolor"]) del cli.profile.aliases[params[0]] return #}}} #{{{ Conference Commands def joinconfCommand(cli, line): params = parseFields(line, 4) #string.split(line,None,1) if(len(params) < 3): cmd = cli.prefs.getCommand(cli.profile,"joinconf") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example : " + cmd + " jdev@conference.jabber.org jdev casey\n" + "Example2: " + cmd + " otherchannel@conference.jabber.org oc casey confpassword\n") cli.output("This is the current list of conferences you are in: ") if len(cli.imcom.confnick) > 0: for key in cli.imcom.confnick.keys(): cli.output(cli.colorscheme["keycolor"] + key + cli.colorscheme["defaultcolor"] + " : " + cli.colorscheme["usercolor"] + cli.imcom.confnick[key] + cli.colorscheme["defaultcolor"]) return cli.output("Attemping to join conference: " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"]) if len(params) == 4: cli.imcom.joinConference(params[0], params[1], params[2], params[3]) else: cli.imcom.joinConference(params[0], params[1], params[2], None) return def leaveconfCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"leaveconf") + " \n" + "Example " + cli.prefs.getCommand(cli.profile,'leaveconf') + " jdev@conference.jabber.org\n") cli.output("This is the current list of conferences you are in: ") if len(cli.imcom.confnick) > 0: for key in cli.imcom.confnick.keys(): cli.output(cli.colorscheme["keycolor"] + key + cli.colorscheme["defaultcolor"] + " : " + cli.colorscheme["usercolor"] + cli.imcom.confnick[key] + cli.colorscheme["defaultcolor"]) return cli.output("attempting to leave conference: " + cli.colorscheme["usercolor"] + params[0] + cli.colorscheme["defaultcolor"]) cli.imcom.leaveConference(params[0]) return def confusersCommand(cli, line): params = parseFields(line, 1) if(len(params) == 0): cli.output("Too few arguments. Usage: " + cli.prefs.getCommand(cli.profile,"confusers") + " \n" + "Example " + cli.prefs.getCommand(cli.profile,'confusers') + " jdev@conference.jabber.org\n") cli.output("This is the current list of conferences you are in: ") if len(cli.imcom.confnick) > 0: for key in cli.imcom.confnick.keys(): cli.output(key + " : " + cli.imcom.confnick[key]) return cjid = params[0] if(cli.imcom.confnick.has_key(params[0])): cjid = cli.imcom.confnick[params[0]] if(cli.imcom.conferences.has_key(cjid)): # print out the users for key in cli.imcom.conferences[cjid][2]: stat = cli.imcom.conferences[cjid][2][key][0] show = cli.imcom.conferences[cjid][2][key][1] aff = cli.imcom.conferences[cjid][2][key][2] role = cli.imcom.conferences[cjid][2][key][3] towrite = cli.colorscheme["usercolor"] + key + cli.colorscheme["defaultcolor"] + " is " + cli.colorscheme["statuscolor"] + show + \ cli.colorscheme["defaultcolor"] + " as " + cli.colorscheme["desccolor"] + stat + cli.colorscheme["defaultcolor"] if aff != None: towrite = towrite + " (" + cli.colorscheme["keycolor"] + aff + cli.colorscheme["defaultcolor"] + ") " if role != None: towrite = towrite + " (" + cli.colorscheme["keycolor"] + role + cli.colorscheme["defaultcolor"] + ") " cli.output(towrite) else: cli.output("You're not a part of conference: " + cjid) return def confnickchangeCommand(cli, line): params = parseFields(line, 2) if len(params) != 2: cmd = cli.prefs.getCommand(cli.profile,"confnickchange") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev airog") return cjid = params[0] if(cli.imcom.confnick.has_key(params[0])): cjid = cli.imcom.confnick[params[0]] if not cli.imcom.conferences.has_key(cjid): cli.output("You are not in a conference called " + params[0] + ".") return cli.output("Attempting to change your nickname to " + cli.colorscheme["usercolor"] + params[1] + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceChangeNick(cjid, params[1]) return def confinviteCommand(cli, line): params = parseFields(line, 2) if len(params) != 2: cmd = cli.prefs.getCommand(cli.profile, "confinvite") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev airog") return cjid = params[0] if(cli.imcom.confnick.has_key(params[0])): cjid = cli.imcom.confnick[params[0]] if not cli.imcom.conferences.has_key(cjid): cli.output("You are not in a conference called " + params[0] + ".") return jid,resource = cli.getJID(params[1]) if resource != None: jid = jid + "/" + resource cli.output("Sending an invitation to join " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"] + " to " + cli.colorscheme["usercolor"] + jid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceInvite(cjid, jid) def confsubjectCommand(cli, line): params = parseFields(line, 2) if len(params) != 2: cmd = cli.prefs.getCommand(cli.profile, "confsubject") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev everything you ever wanted to know about jabber development") return cjid, resouce = cli.getJID(params[0]) if not cli.imcom.conferences.has_key(cjid): cli.output("You are not in a conference called " + params[0] + ".") return cli.output("Attempting to change " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"] + "'s subject to \"" + cli.colorscheme["desccolor"] + params[1] + cli.colorscheme["defaultcolor"] + "\"") cli.imcom.sendConferenceChangeSubject(cjid, params[1]) def confkickCommand(cli, line): params = parseFields(line, 3) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confkick") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev idiot You're a bloody idiot.") return cjid, resource = cli.getJID(params[0]) nick = params[1] reason = None if len(params) == 3: reason = params[2] cli.output("Attempting to kick " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " out of " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceKickUser(cjid, nick, reason) def confvoiceCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confvoice") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to voice " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceVoiceUser(cjid, nick) def confdevoiceCommand(cli, line): params = parseFields(line, 3) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confdevoice") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev loudmouth") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to revoke the voice priviledges of " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceDeVoiceUser(cjid, nick) def confbanCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confban") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev shmuck.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to ban " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " from " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceBanUser(cjid, nick) def confmodCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confmod") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to grant moderator role to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceGrantModerator(cjid, nick) def confdemodCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confdemod") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to revoke moderator role to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceRevokeModerator(cjid, nick) def confmemberCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confmember") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to grant member affiliation to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceGrantMember(cjid, nick) def confdememberCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confdemember") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to revoke member affiliation to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceRevokeMember(cjid, nick) def confadminCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confadmin") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to grant admin affiliation to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceGrantAdmin(cjid, nick) def confdeadminCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confdeadmin") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to revoke admin affiliation from " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceRevokeAdmin(cjid, nick) def confownerCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confowner") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to grant owner affiliation to " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceGrantOwner(cjid, nick) def confdeownerCommand(cli, line): params = parseFields(line, 2) if len(params) < 2: cmd = cli.prefs.getCommand(cli.profile, "confdeowner") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " jdev casey.") return cjid, resource = cli.getJID(params[0]) nick = params[1] cli.output("Attempting to revoke owner affiliation from " + cli.colorscheme["usercolor"] + nick + cli.colorscheme["defaultcolor"] + " in " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceRevokeOwner(cjid, nick) def confdestroyCommand(cli, line): params = parseFields(line, 1) if len(params) < 1: cmd = cli.prefs.getCommand(cli.profile, "confdestroy") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " myconference") return cjid, resource = cli.getJID(params[0]) cli.output("Attempting to destroy " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceDestroy(cjid) def confconfigCommand(cli, line): params = parseFields(line, 1) if len(params) < 1: cmd = cli.prefs.getCommand(cli.profile, "confconfig") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " myconference") return cjid, resource = cli.getJID(params[0]) cli.output("Requesting configuration form for " + cli.colorscheme["keycolor"] + cjid + cli.colorscheme["defaultcolor"]) cli.imcom.sendConferenceConfigRequest(cjid) #}}} def modloadCommand(cli, line): params = parseFields(line, 2) if(len(params) != 1): cmd = cli.prefs.getCommand(cli.profile, "modload") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " examplemodule\n") cli.output("The following is a list of modules already loaded.") for item in cli.profile.modules.keys(): cli.output(item) return cli.output("Attempting to load module: " + params[0]) try: cli.loadModule(params[0]) except: cli.output("Failed to load module: " + params[0]) if(cli.debug): traceback.print_exc() return cli.output("Success!") def modunloadCommand(cli, line): params = parseFields(line, 2) if(len(params) != 1): cmd = cli.prefs.getCommand(cli.profile, "modunload") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " examplemodule\n") cli.output("The following is a list of modules already loaded.") for item in cli.profile.modules.keys(): cli.output(item) return cli.output("Attempting to unload module: " + params[0]) result = cli.unloadModule(params[0]) if result == -1: cli.output("Failed to unload module: " + params[0]) else: cli.output("Success!") def modconfigCommand(cli, line): params = parseFields(line, 2) if(len(params) != 1): cmd = cli.prefs.getCommand(cli.profile, "modconfig") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " examplemodule\n") cli.output("The following is a list of modules already loaded.") for item in cli.profile.modules.keys(): cli.output(item) return result = cli.configureModule(params[0]) if result == -1: cli.output("Failed to configure module: " + params[0]) else: cli.output("Success!") def saveprefsCommand(cli, line): cli.output("Saving your preferences to ~/.imcom/imcomrc") cli.prefs.writePreferences() cli.output("Prefs saved") return def jidlinktestCommand(cli, line): params = parseFields(line, 2) #string.split(line,None,1) if(len(params) != 1): cmd = cli.prefs.getCommand(cli.profile,"jidlinktest") cli.output("Too few arguments. Usage: " + cmd + " \n" + "Example: " + cmd + " airog desk\n") return jid,resource = cli.getJID(line) cli.output("Sending JIDLink Test Request to " + cli.colorscheme["usercolor"] + jid + cli.colorscheme["defaultcolor"] + "/" + cli.colorscheme["keycolor"] + resource + cli.colorscheme["defaultcolor"] + ".") cli.imcom.sendJIDLinkTestRequest(jid,resource) return def helpCommand(cli, line): cli.output(cli.colorscheme["sepcolor"] + "------------------Help-------------------" + cli.colorscheme["defaultcolor"]) cli.output("The following commands are available: ") keys = cli.prefs.commands.helpcommands.keys() mxkeylen = 0 hc = [] for item in keys: if(len(item) > mxkeylen): mxkeylen = len(item) hc.append((item,cli.prefs.getCommand(cli.profile,item))) hc.sort(mySort) for item in hc: key,value = item cli.output(cli.colorscheme["keycolor"] + string.ljust(value,mxkeylen+4) + cli.colorscheme["defaultcolor"] + " : " + cli.colorscheme["desccolor"] + cli.prefs.commands.helpcommands[key] + cli.colorscheme["defaultcolor"]) cli.output("") return #}}} # end of file.