def _on_message(self, message): '''handle the reception of a message''' if message['type'] not in ('chat', 'normal'): log.error("Unhandled message: %s" % message) return body = message['body'] account = message['from'].bare if account in self.conversations: cid = self.conversations[account] else: cid = time.time() self.conversations[account] = cid self.rconversations[cid] = [account] self.session.conv_first_action(cid, [account]) if body is None: type_ = e3.Message.TYPE_TYPING else: type_ = e3.Message.TYPE_MESSAGE msgobj = e3.Message(type_, body, account) # override font size! msgobj.style.size = self.session.config.i_font_size self.session.conv_message(cid, account, msgobj) # log message e3.Logger.log_message(self.session, None, msgobj, False)
def _gui_message_(self,text,conv): cedict = conv.emcache.parse() custom_emoticons = gui.base.MarkupParser.get_custom_emotes(text, cedict) message = e3.Message(e3.Message.TYPE_INFO, text, None, None) self.session.send_message(conv.cid, text, conv.cstyle, cedict, custom_emoticons) message.body="<b><a href = \"%s\">%s</a> was successfully generated and sent :)</b>" % (text, text) self.session.gui_message(conv.cid, '', message)
def _on_message(self, client, message): '''handle the reception of a message''' body = message.getBody() account = message.getFrom().getStripped() if account in self.conversations: cid = self.conversations[account] else: cid = time.time() self.conversations[account] = cid self.rconversations[cid] = [account] self.session.add_event(e3.Event.EVENT_CONV_FIRST_ACTION, cid, [account]) if body is None: type_ = e3.Message.TYPE_TYPING else: type_ = e3.Message.TYPE_MESSAGE msgobj = e3.Message(type_, body, account) self.session.add_event(e3.Event.EVENT_CONV_MESSAGE, cid, account, msgobj) # log message e3.Logger.log_message(self.session, None, msgobj, False)
def _on_chats_ready(self, results): '''called when the chat history is ready''' self.conversation.conv_status.clear() if not results: self.conversation.output.unlock() return for stat, timestamp, msg_text, nick, account in results: is_me = self.session.contacts.me.account == account if is_me: contact = self.session.contacts.me else: contact = self.session.contacts.get(account) if contact == None: contact = e3.Contact(account, nick=nick) datetimestamp = datetime.datetime.utcfromtimestamp(timestamp) message = e3.Message(e3.Message.TYPE_OLDMSG, msg_text, account, timestamp=datetimestamp) message.style = self.conversation.cstyle if is_me: self.conversation.output_message(message, None) else: self.conversation.input_message(message, contact, None, None) self.conversation.conv_status.clear() self.conversation.output.unlock()
def request_attention(self, cid): '''request the attention of the contact''' account = self.account.account message = e3.Message(e3.Message.TYPE_MESSAGE, '%s requests your attention' % (account, ), account) self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
def check_url(self,cid, account, msg): s = msg l=re.findall(r'(http?://www.youtube.com/watch\S+)', s) if len(l) >= 1: msg_text=l[0] url_data = urlparse.urlparse(msg_text) query = urlparse.parse_qs(url_data.query) video_id = query["v"][0] if video_id: try: src = BeautifulSoup.BeautifulSoup(urllib.urlopen("http://www.youtube.com/watch?v=%s"%video_id)) title=src.title.string.split('\n')[1].strip() urllib.urlretrieve ("http://img.youtube.com/vi/%s/hqdefault.jpg"%video_id,tempfile.gettempdir()+"/%s.jpg"%video_id) image=tempfile.gettempdir()+"/%s.jpg"%video_id if self.watch.bl: self.watch.set_video(title,"http://www.youtube.com/v/%s"%video_id,image,account) else: self.watch.init_info() self.watch.set_video(title,"http://www.youtube.com/v/%s"%video_id,image,account) self.watch.win_show() except NameError: warn="""<P><B>BeautifulSoup</B> is required by youtube plugin please run <B>easy_install BeautifulSoup</B> or <B>pip install BeautifulSoup</B> </P> """ url=e3.Message(e3.Message.TYPE_INFO, warn,account,timestamp=None) self.session.gui_message(cid, account, url)
def _on_chats_ready(self, results): '''called when the chat history is ready''' if not results: return for stat, timestamp, msg_text, nick, account in results: contact = founded_account = self.session.contacts.get(account) if contact == None: contact = e3.Contact(account, nick=nick) is_me = self.session.contacts.me.account == account datetimestamp = datetime.datetime.fromtimestamp(timestamp) if is_me: self.text.send_message(self.formatter, contact, msg_text, None, None, None, self.first) else: message = e3.Message(e3.Message.TYPE_MESSAGE, msg_text, account, timestamp=datetimestamp) self.text.receive_message(self.formatter, contact, message, None, None, self.first) self.first = False
def _on_chats_ready(self, results): '''called when the chat history is ready''' account_colors = {} style = e3.Style() font_color_default = style.color.to_hex() possible_colors = [ "#0000FF", "#00FFFF", "#FF0000", "#FF00FF", font_color_default ] if not results: return self.conv_status.clear() for stat, timestamp, msg_text, nick, account in results: is_me = self.session.contacts.me.account == account if is_me: contact = self.session.contacts.me else: contact = self.session.contacts.get(account) if contact == None: contact = e3.Contact(account, nick=nick) datetimestamp = datetime.datetime.utcfromtimestamp(timestamp) message = e3.Message(e3.Message.TYPE_OLDMSG, msg_text, account, timestamp=datetimestamp) if is_me: msg = self.conv_status.pre_process_message( contact, message, False, None, None, message.timestamp, message.type, None) self.text.send_message(self.formatter, msg) else: try: account_colors[account] except KeyError: if not len(possible_colors) == 0: account_colors[account] = possible_colors.pop() else: account_colors[account] = font_color_default message.style = self._get_style(account_colors[account]) msg = self.conv_status.pre_process_message( contact, message, True, None, None, message.timestamp, message.type, message.style) self.text.receive_message(self.formatter, msg) self.conv_status.post_process_message(msg) self.conv_status.update_status() if len(results) >= 1000: self.nicebar.new_message(_('Too many messages to display'), gtk.STOCK_DIALOG_WARNING)
def _on_message(self, cid, account, message, cedict=None): user = self.session.contacts.get(account) msg_text = message.body message = e3.Message(e3.Message.TYPE_INFO, msg_text, account, timestamp=None) self.check_url(cid, account, message.body)
def on_notify_attention(self): '''called when the nudge button is clicked''' self.session.request_attention(self.cid) message = e3.Message(e3.Message.TYPE_NUDGE, '', None, None) self.output.send_message(self.formatter, self.session.contacts.me, message, {}, '', self.first) self.play_nudge()
def request_information(self, msg): '''display a message for user''' contact = self.session.contacts.me message = e3.Message(e3.Message.TYPE_MESSAGE, msg, None, None) msg = gui.Message.from_information(contact, message) self.text.information(msg) self.conv_status.post_process_message(msg) self.conv_status.update_status()
def on_send_message_failed(self, errorCode): '''method called when a message fails to be delivered''' contact = self.session.contacts.me message = e3.Message(e3.Message.TYPE_MESSAGE, '', None, None) message.body = _('Error delivering message') msg = gui.Message.from_information(contact, message) self.output.information(self.formatter, msg) self.conv_status.post_process_message(msg) self.conv_status.update_status()
def on_notify_attention(self): '''called when the nudge button is clicked''' self.session.request_attention(self.cid) message = e3.Message(e3.Message.TYPE_NUDGE, '', None, None) message.body = _('You just sent a nudge!') msg = gui.Message.from_information(self.session.contacts.me, message) self.output.information(self.formatter, msg) self.conv_status.post_process_message(msg) self.play_nudge()
def send_message(self, cid, text, style=None, cedict=None, celist=None): '''send a common message''' if cedict is None: cedict = {} if celist is None: celist = [] account = self.account.account message = e3.Message(e3.Message.TYPE_MESSAGE, text, account, style) self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
def _on_send_message(self, text): '''method called when the user press enter on the input text''' custom_emoticons = gui.base.MarkupParser.get_custom_emotes( text, self.emcache.parse()) self.session.send_message(self.cid, text, self.cstyle, self.emcache.parse(), custom_emoticons) message = e3.Message(e3.Message.TYPE_MESSAGE, text, None, self.cstyle) self.output.send_message(self.formatter, self.session.contacts.me, message, self.emcache.parse(), self.emcache.path, self.first) self.messages.push(text) self.play_send() self.first = False
def _on_send_message(self, text): '''method called when the user press enter on the input text''' cedict = self.emcache.parse() custom_emoticons = gui.base.MarkupParser.get_custom_emotes( text, cedict) self.session.send_message(self.cid, text, self.cstyle, cedict, custom_emoticons) message = e3.Message(e3.Message.TYPE_MESSAGE, text, None, self.cstyle) self.output_message(message, cedict) self.messages.push(text) self.play_send() self.conv_status.update_status()
def check_url(self,cid, account, msg): s = msg l=re.findall(r'(http?://www.youtube.com/watch\S+)', s) if len(l) >= 1: msg_text=l[0] url_data = urlparse.urlparse(msg_text) query = urlparse.parse_qs(url_data.query) video_id = query["v"][0] if video_id: src = BeautifulSoup.BeautifulSoup(urllib.urlopen("http://www.youtube.com/watch?v=%s"%video_id)) title=src.title.string.split('\n')[1].strip() image="""<a href="http://www.youtube.com/v/%s"> <img src="http://img.youtube.com/vi/%s/hqdefault.jpg" width="150" height="150"></a> <h3>%s</h3>"""%(video_id, video_id,title) url=e3.Message(e3.Message.TYPE_INFO, image,account,timestamp=None) self.session.gui_message(cid, account, url)
def _on_chats_ready(self, results): '''called when the chat history is ready''' account_colors = {} style = e3.Style() font_color_default = style.color.to_hex() possible_colors = ["#0000FF", "#00FFFF", "#FF0000", "#FF00FF", font_color_default] if not results: return for stat, timestamp, msg_text, nick, account in results: is_me = self.session.contacts.me.account == account if is_me: contact = self.session.contacts.me else: contact = self.session.contacts.get(account) if contact == None: contact = e3.Contact(account, nick=nick) datetimestamp = datetime.datetime.utcfromtimestamp(timestamp) message = e3.Message(e3.Message.TYPE_MESSAGE, msg_text, account, timestamp=datetimestamp) if is_me: self.text.send_message(self.formatter, contact, message, None, None, self.first) else: try: account_colors[account] except KeyError: if not len(possible_colors) == 0: account_colors[account] = possible_colors.pop() else: account_colors[account] = font_color_default message.style = self._get_style(account_colors[account]) self.text.receive_message(self.formatter, contact, message, None, None, self.first) self.first = False
def _on_shake_message(self, value): data = json.loads(value) from_uin = data["from_uin"] account = str(from_uin) contact = self.session.contacts.contacts.get(account, None) if contact is None: return if account in self.conversations: cid = self.conversations[account] else: cid = time.time() self.conversations[account] = cid self.rconversations[cid] = [account] self.session.conv_first_action(cid, [account]) msgobj = e3.Message(e3.Message.TYPE_MESSAGE, '%s requests your attention' % (contact.nick, ), account) self.session.conv_message(cid, account, msgobj) # log message e3.Logger.log_message(self.session, None, msgobj, False)
def _on_message(self, message): '''handle the reception of a message''' data = json.loads(message) from_uin = str(data['from_uin']) account = from_uin body = data['content'][-1] type_ = e3.Message.TYPE_MESSAGE if account in self.conversations: cid = self.conversations[account] else: cid = time.time() self.conversations[account] = cid self.rconversations[cid] = [account] self.session.conv_first_action(cid, [account]) msgobj = e3.Message(type_, body, account) self.session.conv_message(cid, account, msgobj) # log message e3.Logger.log_message(self.session, None, msgobj, False)
def send(self, mail, body): '''Builds a P2P Message and sends Worker a ACTION_SEND_MESSAGE with cid returned by self.request.''' message = e3.Message(e3.Message.TYPE_P2P, body, self.mail, dest=mail) self.manager.output_action(e3.Action.ACTION_SEND_MESSAGE, (self.request(mail), message))
def custom_on_send_message(self, conversation, text): cid = conversation.cid if text.startswith("/"): commands = ["/help", "/clear", "/nudge", "/run", "/tiny", "/all"] chck = text.split('[') text = text.split(' ') command = text[0] message = e3.Message(e3.Message.TYPE_INFO, '', None, None) if command in commands: if command == "/help": help = """<ul><strong><li>/clear for cleaning chat window.</li></strong> <strong><li>/nudge for sending nudge to user.</li></strong> <strong><li>/run for running command e.g /run mplayer [fatman.mp3], /run firefox or /run mplayer [james axl.flv] <span>DEFAULT PATH IS YOUR HOME DIRECTORY</span>.</li></strong> <strong><li>/tiny for sending large URL e.g /tiny large_url.</li></strong<ul>""" message = e3.Message(e3.Message.TYPE_INFO, help, '', timestamp = None) elif command == "/clear": conversation.output.clear() elif command == "/nudge": self.session.request_attention(cid) message.body = _('You just sent a nudge!') self.soundPlayer.play(gui.theme.sound_theme.sound_nudge) elif command == "/run": if len(chck) == 2: try: subprocess.Popen([text[1], self.homedir+chck[1][:-1]]) except NameError: message.body = "<b>Command not found</b>" elif len(text) == 2: try: subprocess.Popen([text[1]]) except OSError: message.body = "<b>Command not found</b>" elif len(text) == 1: message.body = "<b>Please type /help for more help</b>" elif command == "/tiny": if len(text) != 2: message.body = "<b>Please type /help for more help</b>" else: req = urllib2.Request(text[1]) try: urllib2.urlopen(req) url = tinyurl.create_one(text[1]) message = e3.Message(e3.Message.TYPE_MESSAGE, url, None, None) #It is look ilogical but i need it :). self.session.gui_message(cid, '', message) message.type = e3.Message.TYPE_INFO message.body = "<b><a href = \"%s\">%s</a> was successfully generated and sent :)</b>" % (url, url) except NameError: message.body = "<b>Please install tinyurl</b>" except ValueError: message.body = "<b>Check your URL</b>" except urllib2.URLError: message.body = "<b>Check your URL</b>" elif command == "/all": if len(text) > 1: for conv in self.session.conversations.itervalues(): conv._on_send_message(' '.join(text[1:])) else: message.body = "<b>Please type /help for more help</b>" if message.body: self.session.gui_message(cid, '', message) else: conversation._on_send_message(text)
def custom_on_send_message(self, conversation, text): cid = conversation.cid if text.startswith("/"): commands = ["/help", "/clear", "/nudge", "/run", "/tiny", "/all","/tiny-all", "/message","/online","/away","/busy","/invisible","/block","/idle"] text = text.split() command = text[0] message = e3.Message(e3.Message.TYPE_INFO, '', None, None) if command in commands: if command == "/help": help = """<ul><strong><li>/clear for cleaning chat window.</li></strong> <strong><li>/nudge for sending nudge to user.</li></strong> <strong><li>/run for running command e.g /run mplayer <I>fatman.mp3</I>, /run firefox or /run mplayer <I>james axl.flv</I> <span>DEFAULT PATH IS YOUR HOME DIRECTORY</span>.</li></strong> <strong><li>/tiny for sending large URL e.g /tiny large_url.</li></strong> <strong><li>/all for sending message to all conversations.</li></strong> <strong><li>/tiny-all for sending large URL to all conversations.</li></strong> <strong><li>Change status, <b>/online "Status"<b/>, <b>/busy "Status"<b/>, <b>/away "Status"<b/>, <b>/idle "Status"<b/>, <b>/invisible<b/>.</li></strong> <strong><li>/message to set message of the session.</li></strong> <ul>""" message = e3.Message(e3.Message.TYPE_INFO, help, '', timestamp = None) elif command == "/clear": conversation.output.clear() elif command == "/nudge": self.session.request_attention(cid) message.body = _('You just sent a nudge!') self.soundPlayer.play(gui.theme.sound_theme.sound_nudge) elif command == "/run": if len(text) >= 3 : try: subprocess.Popen([text[1], self.homedir+' '.join(text[2:])]) except NameError: message.body = "<b>Command not found</b>" elif len(text) < 3 and len(text)>1: try: subprocess.Popen([text[1]]) except OSError: message.body = "<b>Command not found</b>" else: message.body = "<b>Please type /help for more help</b>" elif command == "/tiny": self.check_tiny(conversation,text,message,False) elif command == "/all": if len(text) > 1: for conv in self.session.conversations.itervalues(): conv._on_send_message(' '.join(text[1:])) elif command == "/tiny-all": self.check_tiny(None,text,message) elif command == "/online": self.session.set_status(e3.status.ONLINE) if text[1:]: self.session.set_message(' '.join(text[1:])) elif command == "/invisible": self.session.set_status(e3.status.OFFLINE) if text[1:]: self.session.set_message(' '.join(text[1:])) elif command == "/busy": self.session.set_status(e3.status.BUSY) if text[1:]: self.session.set_message(' '.join(text[1:])) elif command == "/away": self.session.set_status(e3.status.AWAY) if text[1:]: self.session.set_message(' '.join(text[1:])) elif command == "/idle": self.session.set_status(e3.status.IDLE) if text[1:]: self.session.set_message(' '.join(text[1:])) elif command == "/message": self.session.set_message(' '.join(text[1:])) else: message.body = "<b>Please type /help for more help</b>" if message.body: self.session.gui_message(cid, '', message) else: conversation._on_send_message(text)
def request_attention(self, cid): '''send a nudge message''' account = self.account.account message = e3.Message(Message.TYPE_NUDGE, None, account) self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
break except KeyError, e: log.error("Can not get group buddy display name") pass account = group_code if account in self.conversations: cid = self.conversations[account] else: cid = time.time() self.conversations[account] = cid self.rconversations[cid] = [account] self.session.conv_first_action(cid, [account]) type_ = e3.Message.TYPE_MESSAGE msgobj = e3.Message(type_, body, display_name) self.session.conv_message(cid, display_name, msgobj) e3.Logger.log_message(self.session, None, msgobj, False) def _on_nick_update(self, value): data = json.loads(value) uin = str(data["uin"]) nick = data["nick"] contact = self.session.contacts.contacts.get(uin, None) if contact is None: return account = uin old_nick = contact.nick status_ = contact.status
def send_typing_notification(self, cid): '''send typing notification to contact''' account = self.account.account message = e3.Message(e3.Message.TYPE_TYPING, None, account) self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
def send_message(self, cid, text, style=None): '''send a common message''' account = self.account.account message = e3.Message(e3.Message.TYPE_MESSAGE, text, account, style) self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))