예제 #1
0
def create_group():
    appid = request.appid
    obj = request.get_json(force=True, silent=True, cache=False)
    if obj is None:
        logging.debug("json decode err:%s", e)
        raise ResponseMeta(400, "json decode error")

    master = obj["master"]
    name = obj["name"]
    is_super = obj["super"] if "super" in obj else False
    members = obj["members"]

    if hasattr(request, 'uid') and request.uid != master:
        raise ResponseMeta(400, "master must be self")

    gid = 0
    if config.EXTERNAL_GROUP_ID:
        gid = obj['group_id'] if 'group_id' in obj else 0

    #支持members参数为对象数组
    #[{uid:"", name:"", avatar:"可选"}, ...]
    memberIDs = [m['uid'] if type(m) == dict else m for m in members]

    if gid > 0:
        gid = Group.create_group_ext(g._db, gid, appid, master, name, is_super,
                                     memberIDs)
    else:
        gid = Group.create_group(g._db, appid, master, name, is_super,
                                 memberIDs)

    s = 1 if is_super else 0

    content = {
        "group_id": gid,
        "app_id": appid,
        "super": s,
        "name": Group.GROUP_EVENT_CREATE
    }
    Group.publish_create_event(g.rds, appid, gid, is_super)

    for mem in memberIDs:
        content = {
            "group_id": gid,
            "member_id": mem,
            "name": Group.GROUP_EVENT_MEMBER_ADD
        }
        Group.publish_member_add_event(g.rds, gid, mem)

    v = {
        "group_id": gid,
        "master": master,
        "name": name,
        "members": members,
        "timestamp": int(time.time())
    }
    op = {"create": v}
    send_group_notification(appid, gid, op, members)

    resp = {"data": {"group_id": gid}}
    return make_response(200, resp)
예제 #2
0
def add_group_member(gid):
    appid = request.appid
    obj = request.get_json(force=True, silent=True, cache=False)
    if obj is None:
        logging.debug("json decode err:%s", e)
        raise ResponseMeta(400, "json decode error")
    inviter = None
    if type(obj) is dict:
        if 'members' in obj:
            members = obj['members']
            inviter = obj.get('inviter')
        else:
            members = [obj]
    else:
        members = obj

    if len(members) == 0:
        return ""

    group = Group.get_group(g._db, gid)
    if not group:
        raise ResponseMeta(400, "group non exists")

    # 支持members参数为对象数组
    memberIDs = [m['uid'] if type(m) == dict else m for m in members]

    g._db.begin()
    for member_id in memberIDs:
        try:
            Group.add_group_member(g._db, gid, member_id)
            User.reset_group_synckey(g.rds, appid, member_id, gid)
        except pymysql.err.IntegrityError as e:
            # 可能是重新加入群
            #1062 duplicate member
            if e.args[0] != 1062:
                raise

    g._db.commit()

    for m in members:
        member_id = m['uid'] if type(m) == dict else m
        v = {
            "group_id": gid,
            "group_name": group['name'],
            "member_id": member_id,
            "timestamp": int(time.time())
        }
        if type(m) == dict and m.get('name'):
            v['name'] = m['name']
        if type(m) == dict and m.get('avatar'):
            v['avatar'] = m['avatar']
        if inviter:
            v['inviter'] = inviter

        op = {"add_member": v}
        send_group_notification(appid, gid, op, [member_id])

        Group.publish_member_add_event(g.rds, gid, member_id)

    resp = {"success": True}
    return make_response(200, resp)