Advertisement
flypip

Flydroid

Jul 21st, 2013
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.98 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. ########################################################################################################################
  4. #Flypip, flybot c'est un robot qui permet la connection entre plusieur machine (android = > ordinateur                 #
  5. #   par xmpp, talk.google.com.                                                 #
  6. ########################################################################################################################
  7.  
  8. import sys, traceback
  9. import xmpp, android
  10. import urllib
  11. import re
  12. import inspect
  13.  
  14. droid = android.Android()
  15.  
  16. def print_info(obj):
  17.     for (name, value) in inspect.getmembers(obj):
  18.         print '%s: %r' % (name, value)
  19.  
  20. class GtalkRobot:
  21.     ########################################################################################################################
  22.     conn = None
  23.     show = "available"
  24.     status = "flybot"
  25.     commands = None
  26.     command_prefix = 'command_'
  27.     ########################################################################################################################
  28.    
  29.     def command_999_default(self, user, message, args):
  30.         """.*?(?s)(?m)"""
  31.         global droid
  32.  
  33.         if message.find("!test") != -1:
  34.             self.replyMessage(user, "test execute")
  35.  
  36.         if message.find("!vib") != -1:
  37.             droid.vibrate()
  38.  
  39.         if message.find("!con") != -1:
  40.             try:
  41.                 droid.sendSms("7100","Conso")
  42.                 self.replyMessage(user, "Le message de consommation est envoye.")
  43.             except:
  44.                 self.replyMessage(user, "echec de l'envoie du message.")
  45.            
  46.         if message.find("!call") != -1:
  47.             try:
  48.                 droid.phoneCallNumber(message[6:])
  49.                 droid.vibrate()
  50.                 droid.notify("Flybot appele.","appele en cour: "+message[6:])
  51.             except:
  52.                 self.replyMessage(user, "echec de l'appele demandé.")
  53.            
  54.         if message.find("!loc") != -1:
  55.             try:
  56.                self.replyMessage(user,droid.getCellLocation())
  57.             except:
  58.                self.replyMessage(user, "echec de la localisation")
  59.  
  60.     ########################################################################################################################
  61.     #These following methods can be only used after bot has been successfully started
  62.  
  63.     #show : xa,away---away   dnd---busy   available--online
  64.     def setState(self, show, status_text):
  65.         if show:
  66.             show = show.lower()
  67.         if show == "online" or show == "on" or show == "available":
  68.             show = "available"
  69.         elif show == "busy" or show == "dnd":
  70.             show = "dnd"
  71.         elif show == "away" or show == "idle" or show == "off" or show == "out" or show == "xa":
  72.             show = "xa"
  73.         else:
  74.             show = "available"
  75.        
  76.         self.show = show
  77.  
  78.         if status_text:
  79.             self.status = status_text
  80.        
  81.         if self.conn:
  82.             pres=xmpp.Presence(priority=5, show=self.show, status=self.status)
  83.             self.conn.send(pres)
  84.  
  85.     def getState(self):
  86.         return self.show, self.status
  87.  
  88.     def replyMessage(self, user, message):
  89.         self.conn.send(xmpp.Message(user, message))
  90.  
  91.     def getRoster(self):
  92.         return self.conn.getRoster()
  93.  
  94.     def getResources(self, jid):
  95.         roster = self.getRoster()
  96.         if roster:
  97.             return roster.getResources(jid)
  98.  
  99.     def getShow(self, jid):
  100.         roster = self.getRoster()
  101.         if roster:
  102.             return roster.getShow(jid)
  103.  
  104.     def getStatus(self, jid):
  105.         roster = self.getRoster()
  106.         if roster:
  107.             return roster.getStatus(jid)
  108.  
  109.     def authorize(self, jid):
  110.         """ Authorise JID 'jid'. Works only if these JID requested auth previously. """
  111.         self.getRoster().Authorize(jid)
  112.    
  113.     ########################################################################################################################
  114.     def initCommands(self):
  115.         if self.commands:
  116.             self.commands.clear()
  117.         else:
  118.             self.commands = list()
  119.         for (name, value) in inspect.getmembers(self):
  120.             if inspect.ismethod(value) and name.startswith(self.command_prefix):
  121.                 self.commands.append((value.__doc__, value))
  122.         #print self.commands
  123.  
  124.     def controller(self, conn, message):
  125.         text = message.getBody()
  126.         user = message.getFrom()
  127.         if text:
  128.             text = text.encode('utf-8', 'ignore')
  129.             if not self.commands:
  130.                 self.initCommands()
  131.             for (pattern, bounded_method) in self.commands:
  132.                 match_obj = re.match(pattern, text)
  133.                 if(match_obj):
  134.                     try:
  135.                         bounded_method(user, text, match_obj.groups())
  136.                     except:
  137.                         print_info(sys.exc_info())
  138.                         self.replyMessage(user, "Unexpected error: \n %s" % str(sys.exc_info()[1]) )
  139.                     break
  140.  
  141.     def presenceHandler(self, conn, presence):
  142.         #print presence
  143.         #print_info(presence)
  144.         if presence:
  145.             print "-"*100
  146.             print presence.getFrom(), ",", presence.getFrom().getResource(), ",", presence.getType(), ",", presence.getStatus(), ",", presence.getShow()
  147.             print "~"*100
  148.             if presence.getType()=='subscribe':
  149.                 jid = presence.getFrom().getStripped()
  150.                 self.authorize(jid)
  151.  
  152.     def StepOn(self):
  153.         try:
  154.             self.conn.Process(1)
  155.         except KeyboardInterrupt:
  156.             return 0
  157.         return 1
  158.  
  159.     def GoOn(self):
  160.         while self.StepOn(): pass
  161.  
  162.     ########################################################################################################################
  163.     # "debug" parameter specifies the debug IDs that will go into debug output.
  164.     # You can either specifiy an "include" or "exclude" list. The latter is done via adding "always" pseudo-ID to the list.
  165.     # Full list: ['nodebuilder', 'dispatcher', 'gen_auth', 'SASL_auth', 'bind', 'socket', 'CONNECTproxy', 'TLS', 'roster', 'browser', 'ibb'].
  166.     def __init__(self, server_host="talk.google.com", server_port=5223, debug=[]):
  167.         self.debug = debug
  168.         self.server_host = server_host
  169.         self.server_port = server_port
  170.  
  171.     def start(self, gmail_account, password):
  172.  
  173.         global droid
  174.         jid=xmpp.JID(gmail_account)
  175.         user, server, password = jid.getNode(), jid.getDomain(), password
  176.        
  177.         self.conn=xmpp.Client(server, debug=self.debug)
  178.         #talk.google.com
  179.         conres=self.conn.connect( server=(self.server_host, self.server_port) )
  180.         if not conres:
  181.             print "Unable to connect to server %s!"%server
  182.             sys.exit(1)
  183.         if conres<>'tls':
  184.             print "Warning: unable to estabilish secure connection - TLS failed!"
  185.        
  186.         authres=self.conn.auth(user, password)
  187.         if not authres:
  188.             print "Unable to authorize on %s - Plsese check your name/password."%server
  189.             sys.exit(1)
  190.         if authres<>"sasl":
  191.             print "Warning: unable to perform SASL auth os %s. Old authentication method used!"%server
  192.        
  193.         self.conn.RegisterHandler("message", self.controller)
  194.         self.conn.RegisterHandler('presence',self.presenceHandler)
  195.        
  196.         self.conn.sendInitPresence()
  197.        
  198.         self.setState(self.show, self.status)
  199.        
  200.         droid.notify("Flybot","Flybot started!")
  201.         droid.vibrate(500)
  202.         self.GoOn()
  203.  
  204. ############################################################################################################################
  205.  
  206.  
  207. ############################################################################################################################
  208. if __name__ == "__main__":
  209.     bot = GtalkRobot()
  210.     bot.setState('available', "Flybot")
  211.     bot.start("yourmail", "yourpassword")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement