def message_edit(token, message_id, message): data = getData() input_message_id = int(message_id) basic_info = getUserFromToken(token) flag_1 = False # Checks for permission. flag_2 = False # Checks if its the authorized user. for i in data['message_info']: if (i['message_id'] == input_message_id): if (message == ""): data['message_info'].remove(i) return {} for channel in data['channel_info']: if (channel['channel_id']) == i['channel_id']: for owner in channel['owner_members']: if (owner['u_id'] == basic_info['u_id']): flag_1 = True if (basic_info['permission_id'] != 3): flag_1 = True if (i['u_id'] == basic_info['u_id']): flag_2 = True if (flag_1 == False): raise AccessError('user has insufficient permissions') if (flag_2 == False): raise AccessError('user is not authorized') i['message'] = message return {}
def message_unpin(token, message_id): data = getData() input_message_id = int(message_id) basic_info = getUserFromToken(token) flag_1 = False # Checks for permission to unpin. flag_2 = False # Checks if message exists. flag_3 = False # Checks if the user is a member of the channel that the message is within. for message in data['message_info']: if (message['message_id'] == input_message_id): for channel in data['channel_info']: if (channel['channel_id']) == message['channel_id']: for owner in channel['owner_members']: if (owner['u_id'] == basic_info['u_id']): flag_1 = True for member in channel['all_members']: if (member['u_id'] == basic_info['u_id']): flag_3 = True if (basic_info['permission_id'] != 3): flag_1 = True if (flag_1 == False): raise ValueError('user has insufficient permissions') if (flag_3 == False): raise AccessError( 'user is not a member of the channel that the message is within' ) if (message['is_pinned'] == False): raise ValueError('message already unpinned') flag_2 = True message['is_pinned'] = False if (flag_2 == False): raise ValueError('message does not exist') return {}
def channel_join(token, channel_id): data = getData() basic_info = getUserFromToken(token) channel_id_integer = int(channel_id) flag_1 = False flag_2 = False for channel in data['channel_info']: if (channel_id_integer == channel['channel_id']): flag_1 = True if (channel['is_public'] == True): flag_2 = True all_users = {} all_users['u_id'] = basic_info['u_id'] all_users['name_first'] = basic_info['name_first'] all_users['name_last'] = basic_info['name_last'] channel['all_members'].append(all_users) else: for user in data['user_info']: if user['u_id'] == basic_info['u_id']: if user['permission_id'] != 3: flag_2 = True all_users = {} all_users['u_id'] = basic_info['u_id'] all_users['name_first'] = basic_info['name_first'] all_users['name_last'] = basic_info['name_last'] channel['all_members'].append(all_users) if (flag_1 == False): raise ValueError(description="channel_id is invalid") if (flag_2 == False): raise AccessError(description="cannot join channel as it is private") return {}
def message_send(token, channel_id, message): data = getData() channel_id_integer = int(channel_id) # message is more than 1000 characters if (len(message) > 1000): raise ValueError(description='message is exceeding the maximum') for user in data['channel_info']: if (channel_id_integer == user['channel_id']): for i in user['all_members']: basic_info = getUserFromToken(token) return_message_id = generateMessage_id(message_id) if (basic_info['u_id'] == i['u_id']): message_dict = {} message_dict['message_id'] = return_message_id message_dict['u_id'] = i['u_id'] message_dict['message'] = message message_dict['time_created'] = datetime.timestamp( datetime.now()) message_dict['time_sent'] = datetime.timestamp( datetime.now()) message_dict['reacts'] = [{ 'react_id': 1, 'u_ids': [], 'is_this_user_reacted': False }] message_dict['is_pinned'] = False message_dict['channel_id'] = channel_id_integer message_dict['is_unread'] = True data['message_info'].append(message_dict) return {'message_id': return_message_id} # if user is not in this channel currently raise AccessError('this user is not in this channel')
def channel_details(token, channel_id): data = getData() channel_id_integer = int(channel_id) flag_1 = False flag_2 = False # check if the channel ID is invalid for i in data['channel_info']: if (channel_id_integer == i['channel_id']): flag_1 = True channel = i # check if the user is not a member in this channel with channel_id for user in i['all_members']: basic_info = getUserFromToken(token) print(user) if (basic_info['u_id'] == user['u_id']): flag_2 = True if (flag_1 == False): raise ValueError(description='channel_id is invalid') if (flag_2 == False): raise AccessError(description='u_id is not in this channel') return { 'name': channel['name'], 'owner_members': channel['owner_members'], 'all_members': channel['all_members'] }
def channel_invite(token, channel_id, u_id): data = getData() basic_info = getUserFromToken(token) channel_id_integer = int(channel_id) u_id_integer = int(u_id) flag_1 = False flag_2 = False flag_3 = False # u_id is invalid for user in data['user_info']: if (u_id_integer == user['u_id']): flag_1 = True if (flag_1 == False): raise ValueError("u_id we want to invite is invalid") for channel in data['channel_info']: if (channel_id_integer == channel['channel_id']): flag_2 = True for i in channel['all_members']: if (i['u_id'] == basic_info['u_id']): flag_3 = True # invite this user into this channel users_all = {} users_all['u_id'] = u_id_integer users_all['name_first'] = user['name_first'] users_all['name_last'] = user['name_last'] channel['all_members'].append(users_all) if (flag_2 == False): raise ValueError(description="the channel_id is invalid") if (flag_3 == False): raise AccessError( description= "the authorised user is not already a member of this channel") return {}
def removeowners_channel(token, channel_id, u_id): data = getData() basic_info = getUserFromToken(token) channel_id_integer = int(channel_id) u_id_integer = int(u_id) flag_1 = False flag_2 = False flag_3 = False flag_4 = False for user in data['user_info']: if (u_id_integer == user['u_id']): flag_1 = True if (flag_1 == False): raise ValueError( description="u_id we want to remove as owner is invalid") for channel in data['channel_info']: if (channel_id_integer == channel['channel_id']): flag_2 = True for i in channel['owner_members']: if (i['u_id'] == u_id_integer): flag_3 = True for i in channel['owner_members']: if (i['u_id'] == basic_info['u_id']): flag_4 = True found = None for i in channel['owner_members']: if (i['u_id'] == basic_info['u_id'] and flag_3 == True): found = i if found != None: channel['owner_members'].remove(i) if (flag_2 == False): raise ValueError(description="channel id is not a valid channel") if (flag_3 == False): raise ValueError(description="user is not an owner of the channel") if (flag_4 == False): raise AccessError( description="the authorsied user is not an owner of the channel") return {}
def addowners_channel(token, channel_id, u_id): data = getData() basic_info = getUserFromToken(token) channel_id_integer = int(channel_id) u_id_integer = int(u_id) flag_1 = False flag_2 = False flag_3 = False flag_4 = False for user in data['user_info']: if (u_id_integer == user['u_id']): flag_1 = True if (flag_1 == False): raise ValueError(description="u_id we want to make owner is invalid") for channel in data['channel_info']: if (channel_id_integer == channel['channel_id']): flag_2 = True for i in channel['owner_members']: if (i['u_id'] == u_id_integer): flag_3 = True for i in channel['owner_members']: if (i['u_id'] == basic_info['u_id']): flag_4 = True for i in channel['owner_members']: if (i['u_id'] == basic_info['u_id'] and flag_3 == False): owner = {} owner['u_id'] = u_id_integer owner['name_first'] = user['name_first'] owner['name_last'] = user['name_last'] channel['owner_members'].append(owner) if (flag_2 == False): raise ValueError(description="channel id is not a valid channel") if (flag_3 == True): raise ValueError(description="user is already an owner of the channel") if (flag_4 == False): raise AccessError( description="the authorsied user is not an owner of the channel") return {}
def sendlater_message(token, channel_id, message, time_sent): data = getData() channel_id_integer = int(channel_id) time_sent_integer = float(time_sent) time_now = datetime.utcnow().replace(tzinfo=timezone.utc).timestamp() return_message_id = generateMessage_id(message_id) # if the time_sent is time in the past if (time_sent_integer < time_now): raise ValueError('the time sent is a time in the past') # if message's length is more than 1000 if (len(message) > 1000): raise ValueError('message is more than 1000') flag = False for i in data['channel_info']: if (i['channel_id'] == channel_id_integer): flag = True # if the channel_id is invalid if (flag == False): raise ValueError('the channel_id is invalid') for user in data['channel_info']: for i in user['all_members']: basic_info = getUserFromToken(token) if (basic_info['u_id'] == i['u_id']): message_dict = {} message_dict['message_id'] = return_message_id message_dict['message'] = message message_dict['time_created'] = datetime.timestamp( datetime.now()) message_dict['time_sent'] = float(time_sent) / 1000 message_dict['react_id'] = 0 message_dict['is_pinned'] = True message_dict['channel_id'] = channel_id_integer message_dict['is_unread'] = True message_dict['u_id'] = i['u_id'] data['message_info'].append(message_dict) return {'message_id': return_message_id} # the authorised user is not in this channel currently raise AccessError('this user is not current in this channel')
def channel_messages(token, channel_id, start): data = getData() channel_id = int(channel_id) start = int(start) basic_info = getUserFromToken(token) flag_1 = False flag_2 = False return_list = [] # check if the channel_id doesn't exist for i in data['channel_info']: if (channel_id == i['channel_id']): flag_1 = True # check if the user is not a member in this channel with channel_id for user in i['all_members']: if (basic_info['u_id'] == user['u_id']): flag_2 = True if (flag_1 == False): raise ValueError(description='channel_id is invalid') if (flag_2 == False): raise AccessError(description='u_id is not in this channel') if (start > len(data['message_info'])): raise ValueError( description='start is greater than the total number of messages') ch_msgs = [ msg for msg in data['message_info'] if msg['channel_id'] == channel_id ] ch_msgs.sort(key=lambda msg: msg['time_created']) for ix, msg in enumerate(ch_msgs): if (ix + 1 >= start): if msg['time_sent'] < datetime.timestamp(datetime.now()): return_list.append({ 'u_id': msg['u_id'], 'message': msg['message'], 'time_created': msg['time_created'], 'is_unread': msg['is_unread'] }) return {'messages': return_list, 'start': start, 'end': start + 50}
def message_remove(token, message_id): data = getData() input_message_id = int(message_id) basic_info = getUserFromToken(token) flag_1 = False # Checks for owner permission. flag_2 = False # Checks if message exists for msg in data['message_info']: if (msg['message_id'] == input_message_id): for channel in data['channel_info']: if (channel['channel_id']) == msg['channel_id']: for owner in channel['owner_members']: if (owner['u_id'] == basic_info['u_id']): flag_1 = True if (basic_info['permission_id'] != 3): flag_1 = True if (msg['u_id'] == basic_info['u_id']): flag_1 = True if (flag_1 == False): raise AccessError('user has insufficient permissions') flag_2 = True data['message_info'].remove(msg) if (flag_2 == False): raise ValueError('message does not exist') return {}