Ejemplo n.º 1
0
class ChatManager():
    idsDic = {}
    aliasDic = {}
    config = {}
    listeners = {}

    def addIRCChannelToDictionary(self, channel):
        self.idsDic[channel] = {'type':'irc', 'channel':channel, 'alias':'#' + channel}
        self.aliasDic[channel] = {'type':'irc', 'channel':channel, 'alias':'#' + channel}


    def addSkypeChannelToDictionary(self, channel):
        channel['type'] = "skype"
        channel['alias'] = "&" + channel['name']
        self.idsDic[channel['channel']] = channel
        self.aliasDic['&' + channel['name']] = channel

    def __init__(self):
      if (self.idsDic == {}):
        self.configProvider = ConfigProvider()
        skypesection = self.configProvider.getConfigSection('skype')
        ircsection = self.configProvider.getConfigSection('irc')
        for channel in ircsection['channels']:
            self.addIRCChannelToDictionary(channel)
        for channel in skypesection['channels']:
            self.addSkypeChannelToDictionary(channel)
            
    def getChanelByAlias(self, alias):
        return self.aliasDic.get(alias, None)
    def getChanelById(self, Id):
        return self.idsDic.get(Id, None)
    def getAliases(self):
        return self.aliasDic.keys()
    def getIds(self):
        return self.idsDic.keys()
    def isListening(self, channel1, channel2):
        if(self.listeners.keys().count(channel1) and self.listeners[channel1].count(channel2)):
            return True
    def turnListenOn(self, channel1, channel2):
        aliases = self.getAliases()
        if(self.getAliases().count(channel1) and self.getAliases().count(channel2) and channel1!=channel2):
            if(self.isListening(channel1,channel2) != True ):
              if self.listeners.get(channel1, False) == False:
                  self.listeners[channel1] = []
              self.listeners[channel1].append(channel2)
              return self.listeners
            elif(channel1 == channel2):
              return "nonono"
            else:
              return "already listening"
    def turnListenOff(self, channel1, channel2):
        if(self.isListening(channel1, channel2)):
          self.listeners[channel1].remove(channel2)
          return self.listeners
class InterChatDispatcher():
  __state = {}
  def __init__(self):
    if(self.__state):
      self.__dict__ = self.__state
    else:
      self.configProvider = ConfigProvider()
      self.gatesProvider = GatesProvider()
      self.chatMgr = ChatManager()
  def launch(self):
    #launch irc
    irc_config = self.configProvider.getConfigSection('irc');
    self.irc_thread = IRCThread( irc_config['host'], irc_config['port'], irc_config['nick'], irc_config['channels'], self)
    self.connexion = self.irc_thread.getConnexion()
    self.irc_thread.start()
    self.skype_thread = InterChatSkypeThread(self)
    self.skype_thread.start()
  def dispatchIRCCommand(self, nick, message, channel):
    print "Message: "+message+" From " + channel
    return "oui"

  def dispatchMessageToChannel(self, channel, message):
    channelTo = self.chatMgr.getChanelByAlias(channel)
    if(channelTo['type'] == 'irc'):          
      self.irc_thread.writeToChannel(message, channelTo['channel'])
    if(channelTo['type'] == 'skype'):
      self.skype_thread.writeToChannel(message, channelTo['channel'])

  def messageToChannel(self, channel, message, nick=""):
    parts = message.split(" ")
    if(len(parts) > 1 and self.chatMgr.getChanelByAlias(parts[1])):
        channelTo = self.chatMgr.getChanelByAlias(parts[1])
        body = message.replace("!tele "+parts[1],"")         
        rmessage = "tele from {0}@{1}: {2}".format(nick, channel, body)
        if(channelTo['type'] == 'irc'):          
          self.irc_thread.writeToChannel(rmessage, channelTo['channel'])
        elif(channelTo['type'] == 'skype'):
          self.skype_thread.writeToChannel(rmessage, channelTo['channel'])
  def helpToChannel(self, channel, message):
    with open('config/help.txt','r') as f:
      for i,l in enumerate(f):
        self.dispatchMessageToChannel(channel, l)
  def getChannelList(self):
    return self.chatMgr.getAliases()
  def dispatchMessage(self, chatname, sendername, body):
#    print body
    channel = self.chatMgr.getChanelById(chatname)
    if( sendername in ['pdobot', 'ictelecom'] ):
      return False;
    for channelTo in self.chatMgr.getAliases():
      channelToFull = self.chatMgr.getChanelByAlias(channelTo)
      if(self.chatMgr.isListening(channelTo, channel['alias'])):
        print "BINGO"
        if (channelToFull['type'] == 'irc'):
          message = "{0}{1}: {2}".format(sendername, channel['alias'], body)
          self.irc_thread.writeToChannel(message, channelTo)
    return False
  def listenChatOn(self, channel1, channel2):
      return self.chatMgr.turnListenOn(channel1, channel2)
  def listenChatOff(self, channel1, channel2):
      return self.chatMgr.turnListenOff(channel1, channel2)