94 lines
4.2 KiB
Python
94 lines
4.2 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
import irc3
|
||
|
import os
|
||
|
import random
|
||
|
from string import ascii_lowercase as alpha
|
||
|
SED1_RE = "juggle s/"
|
||
|
SED2_RE = "j/"
|
||
|
###########################################################################################
|
||
|
###########################################################################################
|
||
|
class TCPSED():
|
||
|
buffer_text=[]
|
||
|
buffer_nick=[]
|
||
|
#######################################################################################
|
||
|
#######################################################################################
|
||
|
def __init__(self):
|
||
|
return
|
||
|
#######################################################################################
|
||
|
#######################################################################################
|
||
|
def push(self,data,nick):
|
||
|
self.buffer_text=self.buffer_text[-1:]+self.buffer_text[:-1]
|
||
|
self.buffer_text[0]=data
|
||
|
self.buffer_nick=self.buffer_nick[-1:]+self.buffer_nick[:-1]
|
||
|
self.buffer_nick[0]=nick
|
||
|
#######################################################################################
|
||
|
#######################################################################################
|
||
|
###########################################################################################
|
||
|
###########################################################################################
|
||
|
@irc3.plugin
|
||
|
class Plugin:
|
||
|
#######################################################################################
|
||
|
#######################################################################################
|
||
|
def __init__(self, bot):
|
||
|
self.d=TCPSED()
|
||
|
for _ in range(2000):
|
||
|
self.d.buffer_text.append('')
|
||
|
self.d.buffer_nick.append('')
|
||
|
self.bot = bot
|
||
|
#######################################################################################
|
||
|
#######################################################################################
|
||
|
@irc3.event(irc3.rfc.PRIVMSG)
|
||
|
def on_privmsg_search_for_sed(self, mask=None, target=None, data=None, **kw):
|
||
|
if self.bot.config.nick == mask.nick:
|
||
|
return
|
||
|
if mask.nick.lower() == 'nickserv':
|
||
|
return
|
||
|
flag=0
|
||
|
offset = -1
|
||
|
offset = data.find(SED1_RE)
|
||
|
if not offset == 0:
|
||
|
offset = data.find(SED2_RE)
|
||
|
if offset == 0:
|
||
|
flag=1
|
||
|
if flag==0:
|
||
|
self.d.push(data,mask.nick)
|
||
|
return
|
||
|
_data=data.split('/')
|
||
|
_from=''
|
||
|
_to=''
|
||
|
_mode=''
|
||
|
try:
|
||
|
_from=_data[1]
|
||
|
_to=_data[2]
|
||
|
if len(_data) == 4:
|
||
|
if _data[3].lower() == 'g': _mode='g'
|
||
|
except Exception as e:
|
||
|
irc_message = f'TCPDIRECT/SED - Error: {e}'
|
||
|
self.bot.privmsg(target, self.bot.emo(irc_message))
|
||
|
return
|
||
|
itwist=-1
|
||
|
count=0
|
||
|
for i,_ in enumerate(self.d.buffer_text):
|
||
|
if not _ == '':
|
||
|
itwist=i
|
||
|
count = len([_i for _i in range(len(_)) if _.startswith(_from, _i)])
|
||
|
if count == 1:
|
||
|
self.d.buffer_text[i] = self.d.buffer_text[i].replace(_from,_to)
|
||
|
break
|
||
|
elif count > 1:
|
||
|
if _mode == 'g':
|
||
|
for y in range(count):
|
||
|
self.d.buffer_text[i] = self.d.buffer_text[i].replace(_from,_to)
|
||
|
break
|
||
|
else:
|
||
|
self.d.buffer_text[i] = self.d.buffer_text[i].replace(_from,_to,1)
|
||
|
break
|
||
|
if count != 0:
|
||
|
irc_message = "{}: {}".format(self.d.buffer_nick[itwist],self.d.buffer_text[itwist])
|
||
|
else:
|
||
|
irc_message = f"TCPDIRECT/SED - Error: no result for: {data}"
|
||
|
self.bot.privmsg(target, self.bot.emo(irc_message))
|
||
|
#######################################################################################
|
||
|
#######################################################################################
|
||
|
###########################################################################################
|
||
|
###########################################################################################
|