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)
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)