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)