87 lines
4.2 KiB
Python
87 lines
4.2 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# --------------------------------------------------------------------------- #
|
|
# #
|
|
# Plugin for iSida Jabber Bot #
|
|
# Copyright (C) diSabler <dsy@dsy.name> #
|
|
# #
|
|
# 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 <http://www.gnu.org/licenses/>. #
|
|
# #
|
|
# --------------------------------------------------------------------------- #
|
|
|
|
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')]
|