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