#!/usr/bin/python # -*- coding: utf-8 -*- # --------------------------------------------------------------------------- # # # # Plugin for iSida Jabber Bot # # Copyright (C) diSabler # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program. If not, see . # # # # --------------------------------------------------------------------------- # PSTO_JID = 'psto@psto.net/Psto' PSTO_ERROR = '\nYou cannot read this psto.' psto_msg_trunc = 64 psto_id = {} def psto(type, jid, nick, text): global psto_id if not len(text) or len(text) == text.count(' '): send_msg(type, jid, nick, L('What message do you want to find?','%s/%s'%(jid,nick))) return try: psto_idn,psto_comm = re.findall('#?([a-z]{5,})\/?([0-9]*\-*[0-9]*)?',text)[0] if psto_idn: psto_id[psto_idn] = '%s\n%s\n%s\n%s' % (type,jid,nick,psto_comm) send_msg('chat', PSTO_JID, '', '#%s+' % psto_idn) else: send_msg(type, jid, nick, L('Smoke help about command!','%s/%s'%(jid,nick))) except: send_msg(type, jid, nick, L('Smoke help about command!','%s/%s'%(jid,nick))) def psto_catch(room,jid,nick,type,text): global psto_id if '%s/%s' % (room,nick) != PSTO_JID: return if text == PSTO_ERROR: (type,jid,nick,psto_comm) = psto_id.popitem()[1].split('\n') send_msg(type, jid, nick, text[1:]) else: try: psto_idn, text = text.split(' ',1)[0][2:],text[1:] (type,jid,nick,psto_comm) = psto_id.pop(psto_idn).split('\n') splitter = re.findall('http\:\/\/[-a-z0-9]+?\.psto\.net\/%s' % psto_idn, text, re.S|re.I|re.U)[0] while '\n\n' in text: text = text.replace('\n\n','\n') while '\n ' in text: text = text.replace('\n ','\n') if psto_comm: new_text = text.split(splitter)[0][:-1] comment = new_text.split('\n')[-1] new_text = '\n'.join(new_text.split('\n')[:-1]) if len(new_text) > psto_msg_trunc: new_text = new_text[:psto_msg_trunc] + u'…' new_text += '\n%s | %s' % (comment,splitter) if '-' in psto_comm: psto_comm = psto_comm.split('-',1) else: psto_comm = [psto_comm,psto_comm] if not psto_comm[0]: psto_comm[0] = '1' if not psto_comm[1]: psto_comm[1] = str(len(text.split(psto_idn))) if len(psto_comm[0]) > 3: psto_comm[0] = psto_comm[0][:3] if len(psto_comm[1]) > 3: psto_comm[1] = psto_comm[1][:3] msg = '' for tmp in range(int(psto_comm[0]),int(psto_comm[1])+1): try: msg += u'• #%s/%s %s' % (psto_idn,tmp,text.split(splitter)[1].split('#%s/%s' % (psto_idn,tmp))[1].split('#%s/%s' % (psto_idn,tmp+1))[0].replace('\n',' ',1)) except: pass new_text += '\n' + msg else: new_text = text.split(splitter)[0][:-1] + ' ' + splitter send_msg(type, jid, nick, new_text) except: pass def psto_post(type, jid, nick, text): send_msg('chat', PSTO_JID, '', text) time.sleep(1.2) send_msg(type, jid, nick, L('Message posted to Psto.','%s/%s'%(jid,nick))) global execute,message_control message_control = [psto_catch] execute = [(3, 'psto', psto, 2, 'Miniblogs http://psto.net\npsto [#]post[/[from_comment][-][to_comment]] - show post'), (9, 'psto_post', psto_post, 2, 'Send message to blog at psto.net')]