Ejemplo n.º 1
0
def handleChatCreate(server, user, packet):
    uid = packet.getNumber(DATA_UID, 0)
    who = server.getUser(uid)

    # First, create the new chat, adding the user.
    chat = server.createChat()
    chat.addUser(user)

    # Send the completed task with user info.
    reply = packet.response()
    reply.addInt32(DATA_CHATID, chat.id)
    reply.addNumber(DATA_UID, user.uid)
    reply.addString(DATA_NICK, user.nick)
    reply.addNumber(DATA_ICON, user.icon)
    reply.addNumber(DATA_STATUS, user.status)
    if user.color >= 0:
        reply.addInt32(DATA_COLOR, user.color)
    server.sendPacket(reply, user)

    if who and (who.uid != user.uid):
        # Add the specified user to the invite list.
        chat.addInvite(who)

        # Invite the specified user to the newly created chat.
        invite = HLPacket(HTLS_HDR_CHAT_INVITE)
        invite.addInt32(DATA_CHATID, chat.id)
        invite.addNumber(DATA_UID, user.uid)
        invite.addString(DATA_NICK, user.nick)
        server.sendPacket(invite, who)
Ejemplo n.º 2
0
def handleUserDisconnected(server, user):
    if user.valid:
        user.valid = False
        leave = HLPacket(HTLS_HDR_USER_LEAVE)
        leave.addNumber(DATA_UID, user.uid)
        server.sendPacket(leave)
        dispatcher.send(signal=user_leave, sender=server, server=server, user=user)
Ejemplo n.º 3
0
def handleChatInvite(server, user, packet):
    ref = packet.getNumber(DATA_CHATID, 0)
    uid = packet.getNumber(DATA_UID, 0)
    chat = server.getChat(ref)
    who = server.getUser(uid)

    if not who:
        raise HLException("Invalid user.")
    if not chat:
        raise HLException("Invalid chat.")
    if uid == user.uid:
        # Ignore self invitations.
        return
    if chat.hasInvite(who):
        # Ignore all invitations after the first.
        return
    if not chat.hasUser(user):
        raise HLException("You are not in this chat.")
    if chat.hasUser(who):
        # The specified user is already in the chat.
        return

    chat.addInvite(who)

    # Send the invitation to the specified user.
    invite = HLPacket(HTLS_HDR_CHAT_INVITE)
    invite.addInt32(DATA_CHATID, chat.id)
    invite.addNumber(DATA_UID, user.uid)
    invite.addString(DATA_NICK, user.nick)
    server.sendPacket(invite, who)
Ejemplo n.º 4
0
def handleIconSet(server, user, packet):
    iconData = packet.getBinary(DATA_GIFICON, b"")

    if certifyIcon(iconData):
        user.gif = iconData
        server.sendPacket(packet.response(), user)
        change = HLPacket(HTLS_HDR_ICON_CHANGE)
        change.addNumber(DATA_UID, user.uid)
        server.sendPacket(change)
Ejemplo n.º 5
0
def handle(server, user, args, ref):
    ids = str(args).strip().split()
    for id in ids:
        try:
            kick = HLPacket(HTLC_HDR_KICK)
            kick.addNumber(DATA_UID, int(id))
            dispatcher.send(signal=(packet_received, kick.type), sender=server, server=server, user=user, packet=kick)
        except ValueError:
            pass
        except HLException:
            pass
Ejemplo n.º 6
0
def handle(server, user, args, ref):
    chat = HLPacket(HTLC_HDR_CHAT)
    chat.addString(DATA_STRING, args)
    chat.addNumber(DATA_OPTION, 1)
    if ref > 0:
        chat.addInt32(DATA_CHATID, ref)
    dispatcher.send(signal=(packet_received, chat.type),
                    sender=server,
                    server=server,
                    user=user,
                    packet=chat)
Ejemplo n.º 7
0
def handleMessage(server, user, packet):
    uid = packet.getNumber(DATA_UID, 0)
    s = packet.getString(DATA_STRING, "")[:conf.MAX_MSG_LEN]

    if not server.getUser(uid):
        raise HLException("Invalid user.")

    msg = HLPacket(HTLS_HDR_MSG)
    msg.addNumber(DATA_UID, user.uid)
    msg.addString(DATA_NICK, user.nick)
    msg.addString(DATA_STRING, s)
    server.sendPacket(msg, uid)
    server.sendPacket(packet.response(), user)
Ejemplo n.º 8
0
def handleChatLeave(server, user, packet):
    ref = packet.getNumber(DATA_CHATID, 0)
    chat = server.getChat(ref)

    if not chat or not chat.hasUser(user):
        return

    chat.removeUser(user)
    if len(chat.users) > 0:
        leave = HLPacket(HTLS_HDR_CHAT_USER_LEAVE)
        leave.addInt32(DATA_CHATID, chat.id)
        leave.addNumber(DATA_UID, user.uid)
        for u in chat.users:
            server.sendPacket(leave, u)
    else:
        server.removeChat(chat.id)
Ejemplo n.º 9
0
def handle(server, user, args, ref):
    parts = str(args).strip().split()
    if len(parts) > 1:
        if user.hasPriv(PRIV_MODIFY_USERS):
            user = server.getUser(int(parts[0]))
            arg = parts[1]
        else:
            return
    else:
        arg = parts[0]
    try:
        otherUid = int(arg)
        otherUser = server.getUser(otherUid)
        user.gif = otherUser.gif
        change = HLPacket(HTLS_HDR_ICON_CHANGE)
        change.addNumber(DATA_UID, user.uid)
        server.sendPacket(change)
    except ValueError:
        getPage(arg).addCallback(gotIcon, user, server)
Ejemplo n.º 10
0
def handle(server, user, args, ref):
    parts = str(args).strip().split()
    try:
        if len(parts) > 1:
            if user.hasPriv(PRIV_MODIFY_USERS):
                user = server.getUser(int(parts[0]))
                sourceUser = server.getUser(int(parts[1]))
            else:
                return
        else:
            sourceUser = server.getUser(int(parts[0]))
        if user is None or sourceUser is None:
            return
        user.gif = sourceUser.gif
        user.color = sourceUser.color
        changeIcon = HLPacket(HTLS_HDR_ICON_CHANGE)
        changeIcon.addNumber(DATA_UID, user.uid)
        server.sendPacket(changeIcon)
        server.sendUserChange(user)
    except ValueError:
        pass
Ejemplo n.º 11
0
def handleChatJoin(server, user, packet):
    ref = packet.getNumber(DATA_CHATID, 0)
    chat = server.getChat(ref)

    if not chat:
        raise HLException("Invalid chat.")
    if not chat.hasInvite(user):
        raise HLException("You were not invited to this chat.")

    # Send a join packet to everyone in the chat.
    join = HLPacket(HTLS_HDR_CHAT_USER_CHANGE)
    join.addInt32(DATA_CHATID, chat.id)
    join.addNumber(DATA_UID, user.uid)
    join.addString(DATA_NICK, user.nick)
    join.addNumber(DATA_ICON, user.icon)
    join.addNumber(DATA_STATUS, user.status)
    if user.color >= 0:
        join.addInt32(DATA_COLOR, user.color)
    for u in chat.users:
        server.sendPacket(join, u)

    # Add the joiner to the chat.
    chat.addUser(user)
    chat.removeInvite(user)

    # Send the userlist back to the joiner.
    list = packet.response()
    for u in chat.users:
        list.addBinary(DATA_USER, u.flatten())
    list.addString(DATA_SUBJECT, chat.subject)
    server.sendPacket(list, user)
Ejemplo n.º 12
0
def handleUserDisconnected(server, user):
    deadChats = []
    # go through all the private chats removing this user
    # keep a list of dead chats to remove them all at once
    for chat in server.chats.values():
        if chat.hasInvite(user):
            chat.removeInvite(user)
        if chat.hasUser(user):
            chat.removeUser(user)
            if len(chat.users) > 0:
                # Send a chat leave to everyone left in the chat.
                leave = HLPacket(HTLS_HDR_CHAT_USER_LEAVE)
                leave.addInt32(DATA_CHATID, chat.id)
                leave.addNumber(DATA_UID, user.uid)
                for u in chat.users:
                    server.sendPacket(leave, u)
            else:
                # Otherwise, mark the chat as dead.
                deadChats.append(chat.id)
    # Now we can remove all the dead chats without modifying the list we were iterating through.
    for dead in deadChats:
        server.removeChat(dead)
Ejemplo n.º 13
0
 def sendUserChange(self, user):
     change = HLPacket(HTLS_HDR_USER_CHANGE)
     change.addNumber(DATA_UID, user.uid)
     change.addString(DATA_NICK, user.nick)
     change.addNumber(DATA_ICON, user.icon)
     change.addNumber(DATA_STATUS, user.status)
     if user.color >= 0:
         change.addInt32(DATA_COLOR, user.color)
     self.sendPacket(change, lambda c: c.context.valid)
Ejemplo n.º 14
0
def handleChat(server, user, packet):
    str = packet.getString(DATA_STRING, "")
    opt = packet.getNumber(DATA_OPTION, 0)
    ref = packet.getNumber(DATA_CHATID, 0)
    pchat = server.getChat(ref)

    if user.hasPriv(PRIV_SEND_CHAT) and (len(str.strip()) > 0):
        str = str.replace("\n", "\r")
        lines = str.split("\r")
        format = conf.CHAT_FORMAT
        prefix = conf.CHAT_PREFIX_LEN
        if conf.CHAT_PREFIX_ADD_NICK_LEN:
            prefix = prefix + len(user.nick)
        if opt > 0:
            format = conf.EMOTE_FORMAT
            prefix = conf.EMOTE_PREFIX_LEN + len(user.nick)
        for lineStr in lines:
            line = lineStr[:conf.MAX_CHAT_LEN]
            if (len(line.strip()) > 0) and (not _dispatchCommand(
                    server, user, line, ref)):
                f_str = format % (user.nick, line)
                chat = HLPacket(HTLS_HDR_CHAT)
                chat.addNumber(DATA_UID, user.uid)
                chat.addNumber(DATA_OFFSET, prefix)
                chat.addString(DATA_STRING, f_str)
                if opt > 0:
                    chat.addNumber(DATA_OPTION, opt)
                if pchat is not None:
                    # If this is meant for a private chat, add the chat ID
                    # and send it to everyone in the chat.
                    chat.addInt32(DATA_CHATID, pchat.id)
                    for u in pchat.users:
                        server.sendPacket(chat, u)
                else:
                    # Otherwise, send it to public chat (and log it).
                    server.sendPacket(
                        chat, lambda c: c.context.hasPriv(PRIV_READ_CHAT))
Ejemplo n.º 15
0
def gotIcon(data, user, server):
    if user and data and len(data) > 0 and certifyIcon(data):
        user.gif = data
        change = HLPacket(HTLS_HDR_ICON_CHANGE)
        change.addNumber(DATA_UID, user.uid)
        server.sendPacket(change)
Ejemplo n.º 16
0
 def sendMessage(self, msg, to):
     p = HLPacket(HTLC_HDR_MSG, self.nextTaskID())
     p.addString(DATA_STRING, msg)
     p.addNumber(DATA_UID, to)
     self.sendPacket(p)
     return self.taskDeferred()
Ejemplo n.º 17
0
def lastChanceAsshole(server, user):
    if len(user.gif) == 0 and len(server.defaultIcon) > 0:
        user.gif = server.defaultIcon
        change = HLPacket(HTLS_HDR_ICON_CHANGE)
        change.addNumber(DATA_UID, user.uid)
        server.sendPacket(change)