Add fullRoomJid option to allow normal looking channel names

This commit is contained in:
Travis Burtrum 2015-11-27 23:17:01 -05:00
parent 001447ea38
commit ae71564c3b
1 changed files with 41 additions and 21 deletions

View File

@ -74,6 +74,8 @@ class ClientThread(Thread):
""" """
Thread.__init__(self) Thread.__init__(self)
self.fullRoomJid = False
self.component = component self.component = component
self.socket = socket self.socket = socket
@ -142,6 +144,22 @@ class ClientThread(Thread):
fixednick = fixednick.replace('@', '_') fixednick = fixednick.replace('@', '_')
return fixednick return fixednick
def fixChannel(self, channel):
# fix roomname
if self.fullRoomJid:
return channel
channel = unicode(channel)
return channel[0:channel.find('@')]
def fixChannelCommand(self, arguments):
# do the opposite of fixChannel() above, and strip #
if self.fullRoomJid:
return arguments[1:]
if ' ' in arguments:
return arguments[1:].replace(' ', "@%s " % (self.muc_server), 1)
else:
return "%s@%s" % (arguments[1:], self.muc_server)
def makeHostFromJID(self, jid): def makeHostFromJID(self, jid):
""" builds the host part from a given jid """ builds the host part from a given jid
@ -269,7 +287,7 @@ class ClientThread(Thread):
msg = ':%s!%s JOIN :#%s' % ( msg = ':%s!%s JOIN :#%s' % (
nick, nick,
self.makeHostFromJID(jid), self.makeHostFromJID(jid),
channel) self.fixChannel(channel))
self.sendToIRC(msg) self.sendToIRC(msg)
role = self.mucs[channel][jid]['role'] role = self.mucs[channel][jid]['role']
@ -289,8 +307,9 @@ class ClientThread(Thread):
""" """
snick = self.nickname snick = self.nickname
lines = list() lines = list()
lines.append(':%s JOIN :#%s'% (snick, room_jid)) channel = self.fixChannel(room_jid)
lines.append(':%s MODE #%s +n' % (self.server, room_jid)) lines.append(':%s JOIN :#%s'% (snick, channel))
lines.append(':%s MODE #%s +n' % (self.server, channel))
for jid in self.mucs[room_jid].iterkeys(): for jid in self.mucs[room_jid].iterkeys():
nick = snick nick = snick
@ -300,8 +319,8 @@ class ClientThread(Thread):
nick = "@%s" % nick nick = "@%s" % nick
elif self.mucs[room_jid][jid]['role'] == 'participant': elif self.mucs[room_jid][jid]['role'] == 'participant':
nick = "+%s" % nick nick = "+%s" % nick
lines.append(':%s 353 %s = #%s :%s' % (self.server, snick, room_jid, nick)) lines.append(':%s 353 %s = #%s :%s' % (self.server, snick, channel, nick))
lines.append(':%s 366 %s #%s :End of /NAMES list.'% (self.server, snick, room_jid)) lines.append(':%s 366 %s #%s :End of /NAMES list.'% (self.server, snick, channel))
while lines: while lines:
msg = lines.pop(0) msg = lines.pop(0)
self.sendToIRC(msg) self.sendToIRC(msg)
@ -318,7 +337,7 @@ class ClientThread(Thread):
msg = ':%s!%s PART #%s :%s' % ( msg = ':%s!%s PART #%s :%s' % (
nick, nick,
self.makeHostFromJID(jid), self.makeHostFromJID(jid),
jid.getStripped(), self.fixChannel(jid.getStripped()),
text) text)
self.sendToIRC(msg) self.sendToIRC(msg)
@ -363,7 +382,7 @@ class ClientThread(Thread):
line = self.makeIRCACTION(line) line = self.makeIRCACTION(line)
if is_muc and not is_private: if is_muc and not is_private:
msg = ':%s!%s PRIVMSG #%s :%s' % (nick, self.makeHostFromJID(jid), jid.getStripped(), line) msg = ':%s!%s PRIVMSG #%s :%s' % (nick, self.makeHostFromJID(jid), self.fixChannel(jid.getStripped()), line)
else: else:
msg = ':%s!%s PRIVMSG %s :%s' % (nick, self.makeHostFromJID(jid), self.nickname,line) msg = ':%s!%s PRIVMSG %s :%s' % (nick, self.makeHostFromJID(jid), self.nickname,line)
messages.append(msg) messages.append(msg)
@ -379,7 +398,7 @@ class ClientThread(Thread):
@param topic: the topic @param topic: the topic
""" """
nick = self.makeNickFromJID(jid, True) nick = self.makeNickFromJID(jid, True)
msg =':%s!%s TOPIC #%s :%s' % (nick, self.makeHostFromJID(jid), jid.getStripped(), topic) msg =':%s!%s TOPIC #%s :%s' % (nick, self.makeHostFromJID(jid), self.fixChannel(jid.getStripped()), topic)
self.sendToIRC(msg) self.sendToIRC(msg)
def ircCommandMODEMUC(self, room_jid, args): def ircCommandMODEMUC(self, room_jid, args):
@ -391,9 +410,10 @@ class ClientThread(Thread):
@param args: arguments of the mode @param args: arguments of the mode
""" """
nick = self.nickname nick = self.nickname
msg = ':%s 324 %s #%s %s' % (self.server, nick, room_jid, args) channel = self.fixChannel(room_jid)
msg = ':%s 324 %s #%s %s' % (self.server, nick, channel, args)
self.sendToIRC(msg) self.sendToIRC(msg)
msg = ':%s 329 %s #%s %s' % (self.server, nick, room_jid, '1031538353') msg = ':%s 329 %s #%s %s' % (self.server, nick, channel, '1031538353')
self.sendToIRC(msg) self.sendToIRC(msg)
def ircCommandMODEMUCBANLIST(self, room_jid): def ircCommandMODEMUCBANLIST(self, room_jid):
@ -403,7 +423,7 @@ class ClientThread(Thread):
@param room_jid: JID of the room @param room_jid: JID of the room
""" """
nick = self.nickname nick = self.nickname
msg = ':%s 368 %s #%s :End of Channel Ban List' % (self.server, nick, room_jid) msg = ':%s 368 %s #%s :End of Channel Ban List' % (self.server, nick, self.fixChannel(room_jid))
self.sendToIRC(msg) self.sendToIRC(msg)
def ircCommandMODEMUCUSER(self, giver, taker, args): def ircCommandMODEMUCUSER(self, giver, taker, args):
@ -419,7 +439,7 @@ class ClientThread(Thread):
""" """
msg = ':%s!%s MODE #%s %s %s' % (self.makeNickFromJID(giver, True), msg = ':%s!%s MODE #%s %s %s' % (self.makeNickFromJID(giver, True),
self.makeHostFromJID(giver), self.makeHostFromJID(giver),
taker.getStripped(), self.fixChannel(taker.getStripped()),
args, args,
self.makeNickFromJID(taker, True)) self.makeNickFromJID(taker, True))
self.sendToIRC(msg) self.sendToIRC(msg)
@ -492,7 +512,7 @@ class ClientThread(Thread):
text = 'No text' text = 'No text'
msg = ':%s %s %s #%s :%s' % ( msg = ':%s %s %s #%s :%s' % (
self.server, number, self.nickname, room, text) self.server, number, self.nickname, self.fixChannel(room), text)
self.sendToIRC(msg) self.sendToIRC(msg)
self.ircCommandERROR(errormess) self.ircCommandERROR(errormess)
@ -504,12 +524,13 @@ class ClientThread(Thread):
@param users: list of users @param users: list of users
@param room_jid: the JID of the room @param room_jid: the JID of the room
""" """
channel = self.fixChannel(room_jid)
for user in users: for user in users:
nick = self.makeNickFromJID(user, True), nick = self.makeNickFromJID(user, True),
msg = ':%s 352 %s #%s %s %s %s %s %s :0 %s' % ( msg = ':%s 352 %s #%s %s %s %s %s %s :0 %s' % (
self.server, self.server,
self.nickname, self.nickname,
room_jid, channel,
user.getResource(), user.getResource(),
user.getDomain(), user.getDomain(),
self.server, self.server,
@ -518,7 +539,7 @@ class ClientThread(Thread):
self.fixNick(user.getResource())) self.fixNick(user.getResource()))
self.sendToIRC(msg) self.sendToIRC(msg)
msg = ':%s 315 %s #%s :End of /WHO list.' % (self.server, self.nickname, room_jid) msg = ':%s 315 %s #%s :End of /WHO list.' % (self.server, self.nickname, channel)
self.sendToIRC(msg) self.sendToIRC(msg)
def ircCommandWHOIS(self, jid): def ircCommandWHOIS(self, jid):
@ -1298,8 +1319,8 @@ class ClientThread(Thread):
arguments = args[1] arguments = args[1]
arguments = arguments.strip() arguments = arguments.strip()
MUC = arguments.startswith('#') MUC = arguments.startswith('#')
if (MUC): if MUC:
arguments = arguments[1:] arguments = self.fixChannelCommand(arguments)
if self.nickname is None: if self.nickname is None:
if command == 'NICK': if command == 'NICK':
@ -1327,10 +1348,9 @@ class ClientThread(Thread):
if len(arguments) == 2: if len(arguments) == 2:
password = arguments[1] password = arguments[1]
if room.find('@') > 0: if self.fullRoomJid and not room.endswith("@%s" % self.muc_server):
self.printDebug("Joining room with full jid unsupported") room = "%s@%s" % (room, self.muc_server)
return
room = "%s@%s" % (room, self.muc_server)
room = room.lower() # todo: is this valid? room = room.lower() # todo: is this valid?
if room in self.mucs.keys(): # already in MUC if room in self.mucs.keys(): # already in MUC
return return