Add fullRoomJid option to allow normal looking channel names
This commit is contained in:
parent
001447ea38
commit
ae71564c3b
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue