__author__ = "Will Guaraldi <willg@bluesock.org>"
__version__ = "1.5 (15 January, 2004)"
__description__ = "Handles gagging of conversation items that span multiple lines."
import string
from lyntin import config, ansi, manager, utils, exported
from lyntin.modules import modutils
class PowergagData:
def __init__(self):
self._gags = []
self._gagging = 0
self._antigags = []
self._history = []
def addAntiPowergag(self, item):
if item not in self._antigags:
self._antigags.append(item)
def addPowergag(self, item):
if item not in self._gags:
self._gags.append(item)
def clear(self):
self._gags = []
def removeAntiPowergags(self, text):
badgags = utils.expand_text(text, self._antigags)
ret = []
for mem in badgags:
ret.append(mem)
self._antigags.remove(mem)
return ret
def removePowergags(self, text):
badgags = utils.expand_text(text, self._gags)
ret = []
for mem in badgags:
ret.append(mem)
self._gags.remove(mem)
return ret
def getPowergags(self):
list = self._gags
list.sort()
return list
def getPowergagHistory(self):
return self._history
def expand(self, text):
if len(text) > 0:
newtext = ansi.filter_ansi(text)
if self._gagging == 1:
if len(newtext) > 1 and (newtext[0:2] == " " or newtext[0] == '\t'):
tokens = ansi.split_ansi_from_text(text)
colors = []
text = []
for mem in tokens:
if ansi.is_color_token(mem):
colors.append(mem)
else:
text.append(mem)
colors = string.join(colors, "")
self._history.append(string.join(text, ""))
return colors
else:
self._gagging = 0
for mem in self._antigags:
if newtext.find(mem) != -1:
return text
for mem in self._gags:
if newtext.find(mem) != -1:
tokens = ansi.split_ansi_from_text(text)
colors = []
text = []
for mem in tokens:
if ansi.is_color_token(mem):
colors.append(mem)
else:
text.append(mem)
colors = string.join(colors, "")
self._gagging = 1
self._history.append(string.join(text, ""))
return colors
return text
def getAntiInfo(self, text=''):
listing = list(self._antigags)
if text:
listing = utils.expand_text(text, listing)
listing = ["antipowergag {%s}" % m for m in listing]
return listing
def getInfo(self, text=''):
listing = list(self._gags)
if text:
listing = utils.expand_text(text, listing)
listing = ["powergag {%s}" % m for m in listing]
return listing
def getStatus(self):
return ("%d powergags(s). %s antipowergag(s)."
% (len(self._gags), len(self._antigags)))
class PowergagManager(manager.Manager):
def __init__(self):
self._gags = {}
def addAntiPowergag(self, ses, item):
if not self._gags.has_key(ses):
self._gags[ses] = PowergagData()
self._gags[ses].addAntiPowergag(item)
def addPowergag(self, ses, item):
if not self._gags.has_key(ses):
self._gags[ses] = PowergagData()
self._gags[ses].addPowergag(item)
def clear(self, ses):
if self._gags.has_key(ses):
self._gags[ses].clear()
def removeAntiPowergags(self, ses, text):
if self._gags.has_key(ses):
return self._gags[ses].removeAntiPowergags(text)
return []
def removePowergags(self, ses, text):
if self._gags.has_key(ses):
return self._gags[ses].removePowergags(text)
return []
def getPowergagHistory(self, ses):
if self._gags.has_key(ses):
return self._gags[ses].getPowergagHistory()
return []
def getPowergag(self, ses):
if self._gags.has_key(ses):
return self._gags[ses].getPowergags()
return []
def getInfo(self, ses, text=''):
if self._gags.has_key(ses):
return self._gags[ses].getInfo(text)
return []
def getAntiInfo(self, ses, text=''):
if self._gags.has_key(ses):
return self._gags[ses].getAntiInfo(text)
return []
def getStatus(self, ses):
if self._gags.has_key(ses):
return self._gags[ses].getStatus()
return "0 powergags(s). 0 antipowergag(s)."
def expand(self, ses, text):
if self._gags.has_key(ses):
return self._gags[ses].expand(text)
return text
def persist(self, args):
ses = args["session"]
quiet = args["quiet"]
data = self.getInfo(ses) + self.getAntiInfo(ses)
if quiet == 1:
data = [m + " quiet={true}" for m in data]
return data
def mudfilter(self, args):
ses = args["session"]
text = args["dataadj"]
if exported.get_config("ignoresubs", ses, 0) == 0:
text = self.expand(ses, text)
return text
commands_dict = {}
def powergag_cmd(ses, args, input):
item = args["gag"]
quiet = args["quiet"]
pgm = exported.get_manager("powergag")
if not item:
data = pgm.getInfo(ses)
if not data:
data = ["powergag: no powergags defined."]
exported.write_message("powergags:\n" + "\n".join(data))
return
pgm.addPowergag(ses, item)
if not quiet:
exported.write_message("powergag: {%s} added." % (item))
commands_dict["powergag"] = (powergag_cmd, "gag= quiet:boolean=false")
def antipowergag_cmd(ses, args, input):
item = args["word"]
quiet = args["quiet"]
pgm = exported.get_manager("powergag")
if not item:
data = pgm.getAntiInfo(ses)
if not data:
data = ["antipowergag: no antipowergags defined."]
exported.write_message("antipowergags:\n" + "\n".join(data))
return
pgm.addAntiPowergag(ses, item)
if not quiet:
exported.write_message("powergag: {%s} added to antipowergag list." % (item))
commands_dict["antipowergag"] = (antipowergag_cmd, "word= quiet:boolean=false")
def powergaghist_cmd(ses, args, input):
count = args["count"]
count = 0 - count
pgm = exported.get_manager("powergag")
hist = pgm.getPowergagHistory(ses)
histlist = string.join(hist[count:], "")
exported.write_message("Powergagged:\n" + histlist)
commands_dict["powergaghist"] = (powergaghist_cmd, "count:int=30")
def unpowergag_cmd(ses, args, input):
func = exported.get_manager("powergag").removePowergags
modutils.unsomething_helper(args, func, ses, "powergag", "powergags")
commands_dict["unpowergag"] = (unpowergag_cmd, "str= quiet:boolean=false")
def unantipowergag_cmd(ses, args, input):
func = exported.get_manager("powergag").removeAntiPowergags
modutils.unsomething_helper(args, func, ses, "antipowergag", "antipowergags")
commands_dict["unantipowergag"] = (unantipowergag_cmd, "str= quiet:boolean=false")
pgm = None
def load():
global pgm
modutils.load_commands(commands_dict)
pgm = PowergagManager()
exported.add_manager("powergag", pgm)
exported.hook_register("mud_filter_hook", pgm.mudfilter, 49)
exported.hook_register("write_hook", pgm.persist)
def unload():
global pgm
modutils.unload_commands(commands_dict.keys())
exported.remove_manager("powergag")
exported.hook_unregister("mud_filter_hook", pgm.mudfilter)
exported.hook_unregister("write_hook", pgm.persist)