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 } publish_message(g.rds, content) for mem in memberIDs: content = { "group_id":gid, "member_id":mem, "name":Group.GROUP_EVENT_MEMBER_ADD } publish_message(g.rds, content) 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 upgrade_group(gid): """从普通群升级为超级群""" appid = request.appid group = Group.get_group(g._db, gid) members = Group.get_group_members(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") Group.update_group_super(g._db, gid, 1) content = "%d,%d,%d"%(gid, appid, 1) publish_message(g.rds, "group_upgrade", content) v = { "group_id":gid, "group_name":group['name'], "timestamp":int(time.time()), "super":1 } op = {"upgrade":v} send_group_notification(appid, gid, op, None) resp = {"success":True} return make_response(200, resp)
def get_groups(): appid = request.appid uid = request.uid groups = Group.get_groups(g._db, appid, uid) fields = request.args.get("fields", '') fields = fields.split(",") for obj in groups: gid = obj['id'] if "members" in fields: members = Group.get_group_members(g._db, gid) for m in members: name = User.get_user_name(g.rds, appid, m['uid']) m['name'] = name if name else '' if not m.get('nickname'): m['nickname'] = "" obj['members'] = members if "quiet" in fields: q = User.get_group_do_not_disturb(g.rds, appid, uid, gid) obj['do_not_disturb'] = bool(q) resp = {"data":groups} return make_response(200, resp)
def group_member_setting(gid, memberid): appid = request.appid uid = request.uid if uid != memberid: raise ResponseMeta(400, "setting other is forbidden") obj = json.loads(request.data) if obj.has_key('quiet'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['quiet']) elif obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id":gid, "timestamp":int(time.time()), "nickname":obj['nickname'], "member_id":uid } op = {"update_member_nickname":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "no action") resp = {"success":True} return make_response(200, resp)
def group_member_setting(gid, memberid): appid = request.appid uid = memberid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") obj = json.loads(request.data) if obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id": gid, "group_name": group['name'], "timestamp": int(time.time()), "nickname": obj['nickname'], "member_id": uid } op = {"update_member_nickname": v} send_group_notification(appid, gid, op, None) elif obj.has_key('mute'): mute = 1 if obj['mute'] else 0 Group.update_mute(g._db, gid, uid, mute) content = "%d,%d,%d" % (gid, memberid, mute) publish_message(g.rds, "group_member_mute", content) else: raise ResponseMeta(400, "no action") resp = {"success": True} return make_response(200, resp)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) 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 = map(lambda m:m['uid'] if type(m) == dict else m, 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 umysql.SQLError, e: #1062 duplicate member if e[0] != 1062: raise
def group_member_setting(gid, memberid): appid = request.appid uid = memberid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") obj = json.loads(request.data) if obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id":gid, "group_name":group['name'], "timestamp":int(time.time()), "nickname":obj['nickname'], "member_id":uid } op = {"update_member_nickname":v} send_group_notification(appid, gid, op, None) elif obj.has_key('mute'): mute = 1 if obj['mute'] else 0 Group.update_mute(g._db, gid, uid, mute) content = "%d,%d,%d" % (gid, memberid, mute) publish_message(g.rds, "group_member_mute", content) else: raise ResponseMeta(400, "no action") resp = {"success":True} return make_response(200, resp)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) 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 = map(lambda m: m['uid'] if type(m) == dict else m, 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, e: # 可能是重新加入群 # 1062 duplicate member if e[0] != 1062: raise
def upgrade_group(gid): """从普通群升级为超级群""" appid = request.appid group = Group.get_group(g._db, gid) members = Group.get_group_members(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") Group.update_group_super(g._db, gid, 1) content = "%d,%d,%d" % (gid, appid, 1) publish_message(g.rds, "group_upgrade", content) v = { "group_id": gid, "group_name": group['name'], "timestamp": int(time.time()), "super": 1 } op = {"upgrade": v} send_group_notification(appid, gid, op, None) resp = {"success": True} return make_response(200, resp)
def update_group(gid): appid = request.appid obj = json.loads(request.data) if obj.has_key('name'): name = obj["name"] Group.update_group_name(g._db, gid, name) v = { "group_id":gid, "timestamp":int(time.time()), "name":name } op = {"update_name":v} send_group_notification(appid, gid, op, None) elif obj.has_key('notice'): notice = obj["notice"] Group.update_group_notice(g._db, gid, notice) v = { "group_id":gid, "timestamp":int(time.time()), "notice":notice } op = {"update_notice":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "patch nothing") resp = {"success":True} return make_response(200, resp)
def update_group(gid): appid = request.appid obj = json.loads(request.data) if obj.has_key('name'): name = obj["name"] Group.update_group_name(g._db, gid, name) v = { "group_id":gid, "timestamp":int(time.time()), "name":name } op = {"update_name":v} send_group_notification(appid, gid, op, None) elif obj.has_key('notice'): notice = obj["notice"] Group.update_group_notice(g._db, gid, notice) v = { "group_id":gid, "timestamp":int(time.time()), "name":notice } op = {"update_notice":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "patch nothing") resp = {"success":True} return make_response(200, resp)
def update_group(gid): appid = request.appid obj = json.loads(request.data) name = obj["name"] Group.update_group_name(g._db, gid, name) v = {"group_id": gid, "timestamp": int(time.time()), "name": name} op = {"update_name": v} send_group_notification(appid, gid, op, None) return ""
def remove_group_member(appid, gid, memberid): Group.delete_group_member(g._imdb, gid, memberid) v = { "group_id":gid, "member_id":memberid, "timestamp":int(time.time()) } op = {"quit_group":v} send_group_notification(appid, gid, op, [memberid]) content = "%d,%d"%(gid,memberid) publish_message(g.rds, "group_member_remove", content)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) if type(obj) is dict: members = [obj["uid"]] else: members = obj if len(members) == 0: return "" #支持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, "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'] op = {"add_member": v} send_group_notification(appid, gid, op, [member_id]) content = { "group_id": gid, "member_id": member_id, "name": Group.GROUP_EVENT_MEMBER_ADD } publish_message(g.rds, content) resp = {"success": True} return make_response(200, resp)
def update_group(gid): appid = request.appid obj = json.loads(request.data) name = obj["name"] Group.update_group_name(g._db, gid, name) v = { "group_id":gid, "timestamp":int(time.time()), "name":name } op = {"update_name":v} send_group_notification(appid, gid, op, None) return ""
def get_group(gid): appid = request.appid uid = request.uid obj = Group.get_group(g._imdb, gid) members = Group.get_group_members(g._imdb, gid) for m in members: name = User.get_user_name(g.rds, appid, uid) m['name'] = name if name else '' obj['members'] = members q = User.get_user_notification_quiet(g.rds, appid, uid, gid) obj['quiet'] = bool(q) resp = {"data":obj} return make_response(200, resp)
def delete_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") members = obj if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") for m in members: if type(m) == int: member = {"uid":m} else: member = m remove_group_member(appid, gid, group['name'], member) resp = {"success":True} return make_response(200, resp)
def delete_group(gid): appid = request.appid Group.disband_group(g._imdb, gid) v = { "group_id":gid, "timestamp":int(time.time()) } op = {"disband":v} send_group_notification(appid, gid, op, None) content = "%d"%gid publish_message(g.rds, "group_disband", content) resp = {"success":True} return make_response(200, resp)
def create_group(): appid = request.appid obj = json.loads(request.data) master = obj["master"] name = obj["name"] is_super = obj["super"] if obj.has_key("super") 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 obj.has_key('group_id') else 0 #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = map(lambda m: m['uid'] if type(m) == dict else m, 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 = "%d,%d,%d" % (gid, appid, s) publish_message(g.rds, "group_create", content) for mem in memberIDs: content = "%d,%d" % (gid, mem) publish_message(g.rds, "group_member_add", content) 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 create_group(): appid = request.appid obj = json.loads(request.data) master = obj["master"] name = obj["name"] is_super = obj["super"] if obj.has_key("super") 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 obj.has_key('group_id') else 0 #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = map(lambda m:m['uid'] if type(m) == dict else m, 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 = "%d,%d,%d"%(gid, appid, s) publish_message(g.rds, "group_create", content) for mem in memberIDs: content = "%d,%d"%(gid, mem) publish_message(g.rds, "group_member_add", content) 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 delete_group(gid): appid = request.appid #群组管理员有权限解散群 master = Group.get_group_master(g._db, gid) if master != request.uid: raise ResponseMeta(400, "no authority") Group.disband_group(g._db, gid) v = {"group_id": gid, "timestamp": int(time.time())} op = {"disband": v} send_group_notification(appid, gid, op, None) content = {"group_id": gid, "name": Group.GROUP_EVENT_DISBAND} publish_message(g.rds, content) resp = {"success": True} return make_response(200, resp)
def remove_group_member(appid, gid, member): memberid = member['uid'] Group.delete_group_member(g._db, gid, memberid) v = { "group_id":gid, "member_id":memberid, "timestamp":int(time.time()) } if member.get('name'): v['name'] = member['name'] if member.get('avatar'): v['avatar'] = member['avatar'] op = {"quit_group":v} send_group_notification(appid, gid, op, [memberid]) content = "%d,%d"%(gid,memberid) publish_message(g.rds, "group_member_remove", content)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) if type(obj) is dict: members = [obj["uid"]] else: members = obj if len(members) == 0: return "" g._imdb.begin() for member_id in members: try: Group.add_group_member(g._imdb, gid, member_id) except umysql.SQLError, e: #1062 duplicate member if e[0] != 1062: raise
def remove_group_member(appid, gid, member): memberid = member['uid'] Group.delete_group_member(g._db, gid, memberid) v = {"group_id": gid, "member_id": memberid, "timestamp": int(time.time())} if member.get('name'): v['name'] = member['name'] if member.get('avatar'): v['avatar'] = member['avatar'] op = {"quit_group": v} send_group_notification(appid, gid, op, [memberid]) content = { "group_id": gid, "member_id": memberid, "name": Group.GROUP_EVENT_MEMBER_REMOVE } publish_message(g.rds, content)
def get_group(gid): appid = request.appid uid = request.uid obj = Group.get_group(g._db, gid) members = Group.get_group_members(g._db, gid) for m in members: name = User.get_user_name(g.rds, appid, m['uid']) m['name'] = name if name else '' if not m.get('nickname'): m['nickname'] = "" obj['members'] = members q = User.get_group_do_not_disturb(g.rds, appid, uid, gid) obj['do_not_disturb'] = bool(q) resp = {"data":obj} return make_response(200, resp)
def update_group(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") name = obj["name"] Group.update_group_name(g._db, gid, name) v = { "group_id":gid, "timestamp":int(time.time()), "name":name } op = {"update_name":v} send_group_notification(appid, gid, op, None) return ""
def delete_group(gid): appid = request.appid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") Group.disband_group(g._db, gid) v = { "group_id":gid, "group_name":group['name'], "timestamp":int(time.time()) } op = {"disband":v} send_group_notification(appid, gid, op, None) content = "%d"%gid publish_message(g.rds, "group_disband", content) resp = {"success":True} return make_response(200, resp)
def delete_group(gid): appid = request.appid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") Group.disband_group(g._db, gid) v = { "group_id": gid, "group_name": group['name'], "timestamp": int(time.time()) } op = {"disband": v} send_group_notification(appid, gid, op, None) content = "%d" % gid publish_message(g.rds, "group_disband", content) resp = {"success": True} return make_response(200, resp)
def add_group(): data = request.json try: auth_status, auth_user = au_ser.check_auth_token(request.headers) owner = auth_user if owner != data['username']: return s_vars.not_authorized, 401 cards = Card.query.filter(Card.card_id.in_(data['card_ids'])).all() if len(cards) < len(set(data['card_ids'])) or len(data['card_ids']) == 0: return s_vars.card_not_exist, 404 group = Group( owner=owner, group_id=id_gen(), title=data['title'], description=data['description'], icon_url=data['icon_url'] if 'icon_url' in list(data.keys()) else None, ) db.session.add(group) db.session.commit() result = {'group': group.__repr__(), 'cards_in_group': []} for card_id in list(set(data['card_ids'])): group_card = GroupCards(group_id=group.group_id, card_id=card_id) db.session.add(group_card) db.session.commit() result['cards_in_group'].append(group_card.__repr__()) try: user = user_model.User.query.filter_by(username=owner).first() send_mail(user.email, 'Successfully Created Group', '''Hi {}, Group \'{}\' has been successfully with below cards. {}'''.format(user.name, group.title, ', '.join([card.title for card in cards]))) except smtplib.SMTPException: return s_vars.mail_sending_failed, 501 except socket.gaierror: return s_vars.mail_sending_failed, 502 return jsonify({'result': result}), 200 except KeyError: return s_vars.bad_request, 400 except exc.IntegrityError: return jsonify({'result': 'Duplicate record'}), 409
def delete_group(gid): appid = request.appid #群组管理员有权限解散群 master = Group.get_group_master(g._db, gid) if master != request.uid: raise ResponseMeta(400, "no authority") Group.disband_group(g._db, gid) v = { "group_id":gid, "timestamp":int(time.time()) } op = {"disband":v} send_group_notification(appid, gid, op, None) content = "%d"%gid publish_message(g.rds, "group_disband", content) resp = {"success":True} return make_response(200, resp)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) if type(obj) is dict: members = [obj["uid"]] else: members = obj if len(members) == 0: return "" #支持members参数为对象数组 memberIDs = map(lambda m:m['uid'] if type(m) == dict else m, members) g._db.begin() for member_id in memberIDs: try: Group.add_group_member(g._db, gid, member_id) except umysql.SQLError, e: #1062 duplicate member if e[0] != 1062: raise
def leave_group_member(gid, memberid): appid = request.appid if hasattr(request, "uid") and request.uid > 0: #群组管理员或者成员本身有权限退出群 if memberid != request.uid: master = Group.get_group_master(g._imdb, gid) if master != request.uid: raise ResponseMeta(400, "no authority") remove_group_member(appid, gid, memberid) resp = {"success":True} return make_response(200, resp)
def leave_group_member(gid, memberid): appid = request.appid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") name = User.get_user_name(g.rds, appid, memberid) m = {"uid":memberid} if name: m['name'] = name remove_group_member(appid, gid, group['name'], m) resp = {"success":True} return make_response(200, resp)
def get_groups(): appid = request.appid uid = request.uid groups = Group.get_groups(g._imdb, appid, uid) fields = request.args.get("fields", '') fields = fields.split(",") for obj in groups: gid = obj['id'] if "members" in fields: members = Group.get_group_members(g._imdb, gid) for m in members: name = User.get_user_name(g.rds, appid, uid) m['name'] = name if name else '' obj['members'] = members if "quiet" in fields: q = User.get_user_notification_quiet(g.rds, appid, uid, gid) obj['quiet'] = bool(q) resp = {"data":groups} return make_response(200, resp)
def leave_group_member(gid, memberid): appid = request.appid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") name = User.get_user_name(g.rds, appid, memberid) m = {"uid": memberid} if name: m['name'] = name remove_group_member(appid, gid, group['name'], m) resp = {"success": True} return make_response(200, resp)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) if type(obj) is dict: members = [obj["uid"]] else: members = obj if len(members) == 0: return "" #支持members参数为对象数组 memberIDs = map(lambda m:m['uid'] if type(m) == dict else m, 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 umysql.SQLError, e: #1062 duplicate member if e[0] != 1062: raise
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) if type(obj) is dict: members = [obj["uid"]] else: members = obj if len(members) == 0: return "" #支持members参数为对象数组 memberIDs = map(lambda m:m['uid'] if type(m) == dict else m, 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, e: # 可能是重新加入群 #1062 duplicate member if e[0] != 1062: raise
def create_group(): appid = request.appid obj = json.loads(request.data) 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") #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = [m['uid'] if type(m) == dict else m for m in members] 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 } publish_message(g.rds, content) for mem in memberIDs: content = { "group_id": gid, "member_id": mem, "name": Group.GROUP_EVENT_MEMBER_ADD } publish_message(g.rds, content) 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 delete_group_member(gid): appid = request.appid if hasattr(request, "uid") and request.uid > 0: #群组管理员或者成员本身有权限退出群 master = Group.get_group_master(g._imdb, gid) if master != request.uid: raise ResponseMeta(400, "no authority") members = json.loads(request.data) if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") for memberid in members: remove_group_member(appid, gid, memberid) resp = {"success":True} return make_response(200, resp)
def delete_group_member(gid): appid = request.appid members = json.loads(request.data) if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") for m in members: if type(m) == int: member = {"uid": m} else: member = m remove_group_member(appid, gid, group['name'], member) resp = {"success": True} return make_response(200, resp)
def delete_group_member(gid): appid = request.appid members = json.loads(request.data) if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") for m in members: if type(m) == int: member = {"uid":m} else: member = m remove_group_member(appid, gid, group['name'], member) resp = {"success":True} return make_response(200, resp)
def delete_group_member(gid): appid = request.appid #群组管理员有权限删除群成员 master = Group.get_group_master(g._db, gid) if master != request.uid: raise ResponseMeta(400, "no authority") members = json.loads(request.data) if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") for m in members: if type(m) == int: member = {"uid": m} else: member = m remove_group_member(appid, gid, member) resp = {"success": True} return make_response(200, resp)
def delete_group_member(gid): appid = request.appid #群组管理员有权限删除群成员 master = Group.get_group_master(g._db, gid) if master != request.uid: raise ResponseMeta(400, "no authority") members = json.loads(request.data) if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") for m in members: if type(m) == int: member = {"uid":m} else: member = m remove_group_member(appid, gid, member) resp = {"success":True} 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]) content = { "group_id":gid, "member_id":member_id, "name":Group.GROUP_EVENT_MEMBER_ADD } publish_message(g.rds, content) resp = {"success":True} return make_response(200, resp)