# lamechan.py - xchat python script which converts utf-8 to iso-8859-15 # Copyright (C) 2005 M. Neumann # # 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 2 # 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, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import xchat __module_name__ = "lamechan" __module_version__ = "fnord3" __module_description__ = "converts utf-8 back to iso-8859-15 in specified (lame) channels" # change this if you want to use a different target charset targetCharset = 'iso-8859-15' recursiveCall = False # this functions checks if the current channel is in the lamechannels-list def lameChannel(): lame = False curnetwork = xchat.get_info("network") curchannel = xchat.get_info("channel") for pair in lamechannels: if pair == [curnetwork, curchannel]: lame = True return lame # this function reencodes the data def recodeUTF(command, data): try: xchat.command(command + " " + data.decode('utf-8').encode(targetCharset)) except: xchat.command("echo lamechan: unable to handle \"" + data + "\"") return False return True # encoding of messages takes place in this function def sendmessage_cb(word, word_eol, userdata): global recursiveCall if recursiveCall == True: recursiveCall = False return xchat.EAT_NONE if lameChannel() == False: return xchat.EAT_NONE recursiveCall = True if recodeUTF("say",word_eol[0]) == False: recursiveCall = False return xchat.EAT_NONE return xchat.EAT_ALL # callback for the action-command def action_cb(word, word_eol, userdata): global recursiveCall if recursiveCall == True: recursiveCall = False return xchat.EAT_NONE if lameChannel() == False: return xchat.EAT_NONE recursiveCall = True if recodeUTF("me",word_eol[1]) == False: recursiveCall = False return xchat.EAT_NONE return xchat.EAT_ALL # callback for the topic-command def topic_cb(word, word_eol, userdata): global recursiveCall if recursiveCall == True: recursiveCall = False return xchat.EAT_NONE if lameChannel() == False: return xchat.EAT_NONE recursiveCall = True if recodeUTF("topic",word_eol[1]) == False: recursiveCall = False return xchat.EAT_NONE return xchat.EAT_ALL # callback for the /lamechan command def lamechan_cb(word, word_eol, userdata): network = xchat.get_info("network") channel = xchat.get_info("channel") if channel == None: print "lamechan error: channel == None" return xchat.EAT_ALL if network == None: print "lamechan error: network == None" return xchat.EAT_ALL if len(word) == 1: for pair in lamechannels: if pair == [network, channel]: print "this channel is lame" return xchat.EAT_ALL print "this channel is not lame" elif len(word) == 2: if word[1] == "on": for pair in lamechannels: if pair == [network, channel]: print "channel is already a lame channel" return xchat.EAT_ALL lamechannels.append([network, channel]) print "added " + channel + "@" + network + " to the lamechannels list" elif word[1] == "off": try: lamechannels.remove([network, channel]) print "removed " + channel + "@" + network + " from the lamechannels list" except ValueError: print "channel was no lame channel" elif word[1] == "list": if len(lamechannels) > 0: print "lame channels:" for pair in lamechannels: print pair[1] + "@" + pair[0] else: print "no lame channels in list" else: print "unknown option: " + word[1] return xchat.EAT_ALL # called when the script is unloaded (either manually or when closing xchat-2) def unload_cb(userdata): try: chanfile = open(xchat.get_info("xchatdir") + "/lamechannels", "w") if len(lamechannels) == 0: chanfile.close() return first = True for pair in lamechannels: if first: chanfile.write(pair[0] + " " + pair[1]) first = False else: chanfile.write("\n" + pair[0] + " " + pair[1]) chanfile.close() except IOError: print "lamechan error: can't write chanfile" # reading lamechannel-list lamechannels = [] try: chanfile = open(xchat.get_info("xchatdir") + "/lamechannels", "r") templist = chanfile.read().split("\n") chanfile.close() if not templist == ['']: for channel in templist: lamechannels.append(channel.split(" ")) del chanfile del templist except IOError: print "lamechan warning: can't read chanfile" # hooking the commands xchat.hook_command("", sendmessage_cb) xchat.hook_command("me", action_cb) xchat.hook_command("topic", topic_cb) xchat.hook_command("lamechan", lamechan_cb, help="/LAMECHAN {on|off|list}") xchat.hook_unload(unload_cb) print "lamechan loaded successfully"