Advertisement
Aluf

Chatango-Chatlib.py

Feb 1st, 2015
510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.99 KB | None | 0 0
  1. Imports
  2. """
  3. MM = __name__
  4. utils = MM.libary.load('utils')
  5. from .underscore import _
  6. import time
  7. import urllib
  8. import re
  9. """
  10. Utility
  11. """
  12.  
  13.  
  14. def makePremium(num):
  15.        return {
  16.                media: (num & 16) == 16,
  17.                bg: (num & 8) == 8
  18.        }
  19.  
  20.  
  21. def makeUser(name, alias, id, key, ip):
  22.        return {
  23.                name: (name.lower() if name != "" else None),
  24.                alias: (alias if alias != "" else None),
  25.                id: (id if id != "" else None),
  26.                key: (key if key != "" else None),
  27.                ip: (ip if ip != "" else None)
  28.        }
  29.  
  30.  
  31. """
  32. Frame parsing
  33. """
  34.  
  35.  
  36. class frameTypesRoom:
  37.        def ok(owner, myuid, mystatus, myname, jointime, myip, mods):
  38.                return {
  39.                        type: "ok",
  40.                        owner: owner,
  41.                        myuid: myuid,
  42.                        mystatus: mystatus,
  43.                        jointime: jointime,
  44.                        myip: myip,
  45.                        mods: mods.split(";")
  46.                }
  47.  
  48.        def inited():
  49.                return {type: "inited"}
  50.  
  51.        def premium(premium, expire):
  52.                return {
  53.                        type: "premium",
  54.                        premium: makePremium(premium),
  55.                        expire: int(expire, 16)
  56.                }
  57.  
  58.        def pwdok():
  59.                return {type: "pwdok"}
  60.  
  61.        def badlogin():
  62.                return {type: "badlogin"}
  63.  
  64.        def logoutok():
  65.                return {type: "logoutok"}
  66.  
  67.        def tb(seconds): # Might give time occasionally need to check
  68.                return {type: "tb", seconds: seconds}
  69.  
  70.        def show_fw(): # saem as tb
  71.                return {type: "show_fw"}
  72.  
  73.        def fw(): # Removed?
  74.                return {type: "fw"}
  75.  
  76.        def end_fw():
  77.                return {type: "end_fw"}
  78.  
  79.        def show_tb(seconds):
  80.                return {type: "show_tb", seconds: seconds}
  81.  
  82.        def delete(msgid):
  83.                return {type: "delete", msgid: msgid}
  84.  
  85.        def deleteall():
  86.                return {type: "deleteall", msgids: _.toArray(*args)}
  87.  
  88.        def clearall(answer):
  89.                return {type: "clearall", answer: answer}
  90.  
  91.        def mods(mods):
  92.                return {type: "mods", mods: _.toArray(*args)}
  93.  
  94.        def i(time, name, alias, user_id, user_key, msgid, ip, prem, _noidea):
  95.                return {
  96.                        time: float(time),
  97.                        type: "i",
  98.                        user: makeUser(name, alias, user_id, user_key, ip),
  99.                        id: msgid,
  100.                        premium: makePremium(int(prem, 10)),
  101.                        body: _.toArray(*args)[9].join(":")
  102.                }
  103.  
  104.        def b(time, name, alias, user_id, user_key, number, ip, prem):
  105.                return {
  106.                        time: float(time),
  107.                        type: "b",
  108.                        user: makeUser(name, alias, user_id, user_key, ip),
  109.                        number: number,
  110.                        id: False,
  111.                        premium: makePremium(int(prem, 10)),
  112.                        body: _.toArray(*args)[9].join(":")
  113.                }
  114.  
  115.        def u(msgnum, msgid):
  116.                return {type: "u", number: msgnum, msgid: msgid}
  117.  
  118.        def n(num):
  119.                return {type: "n", count: int(num, 16)}
  120.  
  121.        def blocked(key, ip, name, by, time):
  122.                ban = makeUser(name, "", "", key, ip)
  123.                ban.time = float(time)
  124.                ban.by = by
  125.                return {
  126.                        type: "blocked",
  127.                        ban: ban
  128.                }
  129.  
  130.        def unblocked():
  131.                args = _.toArray(*args)
  132.                unban = {
  133.                        key: args.pop(0),
  134.                        ip: args.pop(0),
  135.                        time: int(args.pop(), 16),
  136.                        by: args.pop()
  137.                }
  138.                name = args.join(':').split(';')
  139.                unban.name = name.pop(0)
  140.                if len(name) > 0:
  141.                        unban.extra = _.map(name, lambda row : {key: row.split(';')[0], ip: row.split(';')[1], name: row.split(';')[2]})
  142.                return {
  143.                        type: "unblocked",
  144.                        unban: unban
  145.                }
  146.  
  147.        # Blocklist is overwriting multiple bans, can stay that way.
  148.        def blocklist():
  149.                # need to test
  150.                if len(_.filter(_.toArray(*args), lambda x: x)) == 0: return {type: "blocklist", bans: {}}
  151.                bans = _.reduce(_.toArray(*args).join(':').split(';'), lambda args: {args.split(':')[2]: _.extend({time: float(args.split(':')[3]), by: args.split(':')[4]}, makeUser(args.split(':')[2], "", "", args.split(':')[0], args.split(':')[1]))},{})
  152.                return {
  153.                        type: "blocklist",
  154.                        bans: bans
  155.                }
  156.  
  157.        def unblocklist():
  158.                # need to test
  159.                unbans = _.reduce(_.toArray(*args).join(':').split(';'), lambda args: {args.split(':')[2]: _.extend({time: float(args.split(':')[3]), by: args.split(':')[4]}, makeUser(args.split(':')[2], "", "", args.split(':')[0], args.split(':')[1]))},{})
  160.                return {
  161.                        type: "unblocklist",
  162.                        unbans: unbans
  163.                }
  164.  
  165.        def bansearchresult(_noidea, name, ip, key, by, date):
  166.                if name == None:
  167.                        return {type: "bansearchresult", result: False}
  168.                result = makeUser(name, "", "", key, ip)
  169.                result.time = round(time.time(_.toArray(*args).slice(5).join(":"))/1000)
  170.                result.by = by
  171.                return {type: "bansearchresult", result: result}
  172.  
  173.        def g_participants():
  174.                users = _.reduce(_.toArray(*args).join(':').split(';'), lambda args: {args.split(':')[0]: _.extend({sess: args.split(':')[0], time: float(args.split(':')[1])}, makeUser(utils.getAnonName(args.split(':')[2], float(args.split(':')[1])) if args.split(':')[3] == None and args.split(':')[4] == None else '#'+args.split(':')[4] if args.split(':')[3] == None and args.split(':')[4] != None else args.split(':')[3], "" if args.split(':')[4] == None else args.split(':')[4], args.split(':')[2], "", ""))}, {})
  175.                return {
  176.                        type: "g_participants",
  177.                        users: users
  178.                }
  179.  
  180.        def participant(mode, sess, user_id, name, alias, ip, time):
  181.                user = makeUser(utils.getAnonName(user_id, float(time)) if name == None and alias == None else '#'+alias if name == None and alias != None else name, "" if alias == None else alias, user_id, "", "")
  182.                user.time = float(time)
  183.                user.sess = sess
  184.                return {
  185.                        type: "participant",
  186.                        mode: ("leave" if mode == "0" else "join" if mode == "1" else "change" if mode == "2" else None),
  187.                        user: user
  188.                }
  189.  
  190.        def updateprofile(name):
  191.                return {
  192.                        type: "g_participants",
  193.                        name: name
  194.                }
  195.  
  196.        def getbannedwords(partly, exact):
  197.                return {
  198.                        type: "getbannedwords",
  199.                        partly: _.filter(urllib.unquote(partly).decode('utf-8').split(','), lambda x: x),
  200.                        exact: _.filter(urllib.unquote(exact).decode('utf-8').split(','), lambda x: x)
  201.                }
  202.  
  203.        def bw(partly, exact):
  204.                return {
  205.                        type: "getbannedwords",
  206.                        partly: _.filter(urllib.unquote(partly).decode('utf-8').split(','), lambda x: x),
  207.                        exact: _.filter(urllib.unquote(exact).decode('utf-8').split(','), lambda x: x)
  208.                }
  209.  
  210.        def ubw():
  211.                return {type: "ubw"}
  212.  
  213.  
  214. class frameTypesPM:
  215.        def OK():
  216.                return {type: "ok"}
  217.  
  218.        def settings(a, disabe_idle_time, b, allow_anon, c, email_offline_msg):
  219.                return {
  220.                        type: "settings",
  221.                        disabe_idle_time: disabe_idle_time == "on",
  222.                        allow_anon: allow_anon == "on",
  223.                        email_offline_msg: email_offline_msg == "on"
  224.                }
  225.  
  226.        def wl():
  227.                args = _.toArray(*args)
  228.                contacts = []
  229.                for i in range(0, len(args), 4):
  230.                        contacts.push({
  231.                                name: args[i],
  232.                                time: args[i+1],
  233.                                state: args[i+2],
  234.                                idle: args[i+3]
  235.                        })
  236.                return {type: "wl", contacts: contacts}
  237.  
  238.        def premium(prem, time):
  239.                return {
  240.                        type: "premium",
  241.                        premium: makePremium(int(prem, 10)),
  242.                        time: float(time)
  243.                }
  244.  
  245.        def idleupdate(name, state):
  246.                return {
  247.                        type: "idleupdate",
  248.                        name: name,
  249.                        state: 'online' if state == "1" else 'idle'
  250.                }
  251.  
  252.        def msg(name, alias, prem, time):
  253.                return {
  254.                        type: "msg",
  255.                        time: float(time),
  256.                        user: makeUser(name, alias, '', '', ''),
  257.                        premium: makePremium(int(prem, 10)),
  258.                        body: _.toArray(*args).slice(5).join(":")
  259.                }
  260.  
  261.        def msgoff(name, alias, prem, time):
  262.                return {
  263.                        type: "msgoff",
  264.                        time: float(time),
  265.                        user: makeUser(name, alias, '', '', ''),
  266.                        premium: makePremium(int(prem, 10)),
  267.                        body: _.toArray(*args).slice(5).join(":")
  268.                }
  269.  
  270.        def status(name, time, state):
  271.                return {
  272.                        type: "status",
  273.                        name: name,
  274.                        time: float(time),
  275.                        state: state
  276.                }
  277.  
  278.        def wloffline(name, time):
  279.                return {
  280.                        type: "wloffline",
  281.                        name: name,
  282.                        time: float(time)
  283.                }
  284.  
  285.        def wlonline(name, time):
  286.                return {
  287.                        type: "wlonline",
  288.                        name: name,
  289.                        time: float(time)
  290.                }
  291.  
  292.        def reload_profile(name):
  293.                return {
  294.                        type: "reload_profile",
  295.                        name: name
  296.                }
  297.  
  298.        def wladd(name, state, time):
  299.                return {
  300.                        type: "wladd",
  301.                        name: name,
  302.                        state: state,
  303.                        time: float(time)
  304.                }
  305.  
  306.        def connect(name, time, state):
  307.                return {
  308.                        type: "connect",
  309.                        name: name,
  310.                        time: int(time),
  311.                        state: state
  312.                }
  313.  
  314.        def show_fw():
  315.                return {type: "show_fw"}
  316.  
  317.  
  318. def parseFramePM(data):
  319.        data = re.sub("[\\r\\n\\0]+$", "", data)
  320.        tmp = data.split(":")
  321.        cmd = tmp[0]
  322.        args = tmp.slice(1)
  323.        if hasattr(frameTypesPM, cmd):
  324.                return frameTypesPM[cmd].extend(args)
  325.        else:
  326.                return None
  327.  
  328.  
  329. def parseFrameRoom(data):
  330.        data = re.sub("[\\r\\n\\0]+$", "", data)
  331.        tmp = data.split(":")
  332.        cmd = tmp[0]
  333.        args = tmp.slice(1)
  334.        if hasattr(frameTypesRoom, cmd):
  335.                return frameTypesRoom[cmd].extend(args)
  336.        else:
  337.                return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement