def sendChatMessage(self, text): """ Sends a chat message. This method will throttle chats sent to the same channel or person. Otherwise the KoL server could display them out-of-order to other users. """ messages = [] # Clean the text. text = ChatUtils.cleanChatMessageToSend(text) # Get information about the chat. chatInfo = ChatUtils.parseChatMessageToSend(text) if len(text) > MAX_CHAT_LENGTH: # Figure out the prefix that should be appended to every message. prefix = '' if "type" in chatInfo: if chatInfo["type"] == "private": prefix = "/w %s " % chatInfo["recipient"] elif chatInfo["type"] == "channel": if "channel" in chatInfo: prefix = "/%s " % chatInfo["channel"] if "isEmote" in chatInfo: prefix += "/me " # Construct the array of messages to send. while len(text) > (MAX_CHAT_LENGTH - len(prefix)): index = text.rfind(" ", 0, MAX_CHAT_LENGTH - len(prefix) - 6) if index == -1: index = MAX_CHAT_LENGTH - len(prefix) - 6 msg = text[:index] + "..." text = text[index:] else: msg = text[:index] + "..." text = text[index+1:] if len(messages) > 0: msg = "..." + msg messages.append(prefix + msg) else: messages.append(msg) if len(messages) > 0: messages.append(prefix + "..." + text) else: messages.append(prefix + text) else: messages.append(text) # Determine if we need to throttle the message as we don't want to send two messages # to the same person or channel without a little time for the server to figure out # which message is first. key = None lastTime = None doThrottle = False if "type" in chatInfo: if chatInfo["type"] == "private": key = "private:%s" % chatInfo["recipient"] elif chatInfo["type"] == "channel": if "channel" in chatInfo: key = "channel:%s" % chatInfo["channel"] else: key = "channel:%s" % self.currentChannel if key != None and key in self.lastChatTimestamps: lastTime = self.lastChatTimestamps[key] if lastTime != None: if lastTime >= time.time() - 2: doThrottle = True # Send the message(s). chats = [] for message in messages: if doThrottle: time.sleep(2) r = SendChatRequest(self.session, message) data = r.doRequest() tmpChats = data["chatMessages"] for chat in tmpChats: chats.append(chat) doThrottle = True if key != None: self.lastChatTimestamps[key] = time.time() return chats
def sendChatMessage(self, text, waitForReply=False, useEmoteFormat=False): """ Sends a chat message. This method will throttle chats sent to the same channel or person. Otherwise the KoL server could display them out-of-order to other users. """ messages = [] # Clean the text. text = ChatUtils.cleanChatMessageToSend(text) # Get information about the chat. chatInfo = ChatUtils.parseChatMessageToSend(text) # remove commands from beginning of text if useEmoteFormat and chatInfo.get("type", None) != "private": # get text, not counting /commands at beginning arr = text.split(' ') while len(arr) > 0 and arr[0][0] == "/": del arr[0] text = ' '.join(arr) if "channel" in chatInfo: text = "/%s /me : %s" % (chatInfo["channel"], text) else: text = "/me : %s" % (text) chatInfo["isEmote"] = True if len(text) > MAX_CHAT_LENGTH: # Figure out the prefix that should be appended to every message. prefix = '' if "type" in chatInfo: if chatInfo["type"] == "private": prefix = "/w %s " % chatInfo["recipient"] elif chatInfo["type"] == "channel": if "channel" in chatInfo: prefix = "/%s " % chatInfo["channel"] if "isEmote" in chatInfo: prefix += "/me " # Construct the array of messages to send. while len(text) > (MAX_CHAT_LENGTH - len(prefix)): index = text.rfind(" ", 0, MAX_CHAT_LENGTH - len(prefix) - 6) if index == -1: index = MAX_CHAT_LENGTH - len(prefix) - 6 msg = text[:index] + "..." text = text[index:] else: msg = text[:index] + "..." text = text[index + 1:] if len(messages) > 0: msg = "... " + msg messages.append(prefix + msg) else: messages.append(msg) if len(messages) > 0: messages.append(prefix + "... " + text) else: messages.append(text) else: messages.append(text) # Send the message(s). chats = [] for message in messages: chatToSend = chatInfo chatToSend["text"] = message replyQueue = Queue.Queue() self._dispatcher.dispatch(chatToSend, replyQueue) if waitForReply: replies = replyQueue.get() chats.extend(replies) replyQueue.task_done() for chat in chats: if 'listen' in chat['type'] or 'channel' in chat['type']: if 'currentChannel' in chat: self.currentChannel = chat['currentChannel'] return chats
def sendChatMessage(self, text): """ Sends a chat message. This method will throttle chats sent to the same channel or person. Otherwise the KoL server could display them out-of-order to other users. """ messages = [] # Clean the text. text = ChatUtils.cleanChatMessageToSend(text) # Get information about the chat. chatInfo = ChatUtils.parseChatMessageToSend(text) if len(text) > MAX_CHAT_LENGTH: # Figure out the prefix that should be appended to every message. prefix = '' if "type" in chatInfo: if chatInfo["type"] == "private": prefix = "/w %s " % chatInfo["recipient"] elif chatInfo["type"] == "channel": if "channel" in chatInfo: prefix = "/%s " % chatInfo["channel"] if "isEmote" in chatInfo: prefix += "/me " # Construct the array of messages to send. while len(text) > (MAX_CHAT_LENGTH - len(prefix)): index = text.rfind(" ", 0, MAX_CHAT_LENGTH - len(prefix) - 6) if index == -1: index = MAX_CHAT_LENGTH - len(prefix) - 6 msg = text[:index] + "..." text = text[index:] else: msg = text[:index] + "..." text = text[index + 1:] if len(messages) > 0: msg = "..." + msg messages.append(prefix + msg) else: messages.append(msg) if len(messages) > 0: messages.append(prefix + "..." + text) else: messages.append(prefix + text) else: messages.append(text) # Determine if we need to throttle the message as we don't want to send two messages # to the same person or channel without a little time for the server to figure out # which message is first. key = None lastTime = None doThrottle = False if "type" in chatInfo: if chatInfo["type"] == "private": key = "private:%s" % chatInfo["recipient"] elif chatInfo["type"] == "channel": if "channel" in chatInfo: key = "channel:%s" % chatInfo["channel"] else: key = "channel:%s" % self.currentChannel if key != None and key in self.lastChatTimestamps: lastTime = self.lastChatTimestamps[key] if lastTime != None: if lastTime >= time.time() - 2: doThrottle = True # Send the message(s). chats = [] for message in messages: if doThrottle: time.sleep(2) r = SendChatRequest(self.session, message) data = r.doRequest() tmpChats = data["chatMessages"] for chat in tmpChats: chats.append(chat) doThrottle = True if key != None: self.lastChatTimestamps[key] = time.time() for chat in chats: if 'listen' in chat['type'] or 'channel' in chat['type']: self.currentChannel = chat['current'] return chats