def message_edit(token, message_id, message): data = getData() #Test for valid token flag = 0 for user in data['users']: if str(user['token']) == token and token != None: u_id = user['u_id'] perm_id = user['permission_id'] flag = 1 if flag == 0: myexcept.token_error() send_Success = False flag = 0 for findchannel in data['channels']: for findmessage in findchannel['messages']: channel_id = findchannel['channel_id'] if str(findmessage['message_id']) == message_id: # checking if token is channel owner for channel in data['channels']: if channel['channel_id'] == channel_id: for owner in channel['owner_members']: if owner['u_id'] == u_id: send_Success = True if findmessage['u_id'] == u_id: if perm_id == '1' or perm_id == '2' or send_Success: flag = 1 findmessage['message'] = message updateData(data) return {} if flag == 0: myexcept.edit_message_denied()
def channels_list(token): data_new = getData() flag = 0 #Test for valid token for i in data_new['users']: if i['token'] == token and token != None: u_id = i['u_id'] flag = 1 if flag == 0: myexcept.token_error() answer = [] for channels in data_new['channels']: valid = 0 for members in channels['all_members']: if members['u_id'] == u_id: valid = 1 if valid == 1: temp = {} temp['name'] = channels['channel_name'] temp['channel_id'] = channels['channel_id'] answer.append(temp) return answer
def admin_userperm_change(token, u_id, permission_id): data = getData() #Test for valid token valid_token = False for user in data['users']: if user['token'] == token and token != None: perm_id = user['permission_id'] valid_token = True if valid_token == False: myexcept.token_error() if permission_id != '1' and permission_id != '2' and permission_id != '3': myexcept.invalid_permission_id() if perm_id != '1' and perm_id != '2': myexcept.edit_permission_denied() user_found = False for user in data['users']: if user['u_id'] == u_id: user_found = True user['permission_id'] = permission_id updateData(data) return {} if user_found == False: myexcept.invalid_user()
def channel_details(token, channel_id): data = getData() #Test for valid token flag = 0 for user in data['users']: if user['token'] == token and token != None: u_id = user['u_id'] flag = 1 if flag == 0: myexcept.token_error() flag = 0 flag2 = 0 for channel in data['channels']: if channel['channel_id'] == channel_id: flag = 1 for member in channel['all_members']: if member['u_id'] == u_id: flag2 = 1 answer = { 'name': channel['channel_name'], 'owner_members': channel['owner_members'], 'all_members': channel['all_members'] } return answer if flag == 0 or flag2 == 0: myexcept.member_not_in_channel()
def message_sendlater(token, channel_id, messsage, time_sent): data = getData() #Test for valid message if len(message) > 1000: myexcept.invalid_message() #Test for valid token flag = 0 for user in data['users']: if str(user['token']) == token and token != None: u_id = user['u_id'] flag = 1 if flag == 0: myexcept.token_error() #Test for valid time format = '%Y-%m-%d %H:%M:%S' present_time = datetime.now() send_time = datetime.strptime(time_sent, format) convert_present_time = datetime.strftime(present_time, format) present = datetime.strptime(convert_present_time, format) if send_time < present: myexcept.invalid_time() tdelta = send_time - present sendlater_time = present + timedelta(minutes=1) + tdelta delay_time = (sendlater_time - present).total_seconds() #Test if channel_id is valid and that user is in the channel_id channel_found = 0 member_found = 0 for channel in data['channels']: if str(channel['channel_id']) == channel_id: channel_found = 1 for member in channel['all_members']: if member['u_id'] == u_id: member_found = 1 time.sleep(delay_time) answer = { 'message_id': 1, 'u_id': u_id, 'message': message, 'time_created': datetime.now(), 'reacts': {}, 'is_pinned': False } channel['messages'].append(answer) sendlater = {'message_id': answer['message_id']} updateData(data) return sendlater if channel_found == 0: myexcept.channel_not_found() elif member_found == 0: myexcept.member_not_in_channel()
def message_react(token, message_id, react_id): data_new = getData() flag = 0 #Test for valid token for i in data_new['users']: if i['token'] == token and token != None: u_id = i['u_id'] flag = 1 if flag == 0: myexcept.token_error() #Test if message_id exists message_found = 0 member_found = 0 for j in data_new['channels']: #Finding the message for k in j['messages']: if k['message_id'] == message_id: message_uid = k['u_id'] message_found = 1 #Testing to see if user is in the channel and has owner permission for l in j['all_members']: if l['u_id'] == u_id: member_found = 1 if member_found == 0: myexcept.member_not_in_channel() react_check = 0 for react in k['reacts']: if len(react) != 0 and react['react_id'] == react_id: react_check = 1 if u_id in react['u_ids']: myexcept.message_already_reacted() react['u_ids'].append(u_id) if message_uid == u_id: react['is_this_user_reacted'] = True else: react['is_this_user_reacted'] = False if react_check == 0: answer = {} answer['react_id'] = react_id answer['u_ids'] = [u_id] if message_uid == u_id: answer['is_this_user_reacted'] = True else: answer['is_this_user_reacted'] = False k['reacts'].append(answer) answer = {} updateData(data_new) return answer if message_found == 0: myexcept.message_not_found()
def channel_invite(token, channel_id, u_id): data = getData() # checking that token is a valid user authorised_user_exists = False for user in data['users']: if str(user['token']) == token and token != None: auth_u_id = user['u_id'] perm_id = user['permission_id'] authorised_user_exists = True if authorised_user_exists == False: myexcept.token_error() # checking that u_id is a valid user member_exists = False for user in data['users']: if user['u_id'] == u_id: name_first = user['first_name'] name_last = user['last_name'] member_exists = True if member_exists == False: myexcept.invalid_user() token_is_member = False valid_channel = False # checking authorised user is already a member of the channel for channel in data['channels']: if channel['channel_id'] == channel_id: valid_channel = True for member in channel['all_members']: if member['u_id'] == auth_u_id: token_is_member = True if valid_channel == False: myexcept.channel_not_found() if token_is_member == False: myexcept.authorised_member_not_in_channel() # adding user to channel for channel in data['channels']: if channel['channel_id'] == channel_id: add_user = { 'u_id': u_id, 'name_first': name_first, 'name_last': name_last } channel['all_members'].append(add_user) if perm_id == '1' or perm_id == '2': channel['owner_members'].append(add_user) updateData(data) return {}
def channel_removeowner(token, channel_id, u_id): data = getData() found_Token = False found_User = False # finding token and user data for user in data['users']: if str(user['token']) == token: tu_id = user['u_id'] found_Token = True if str(user['u_id']) == u_id: name_first = user['first_name'] name_last = user['last_name'] found_User = True if found_Token == False: myexcept.token_error() if found_User == False: myexcept.invalid_user() found_Token = False found_User = False # checking user and token belongs to an owner for channel in data['channels']: if str(channel['channel_id']) == channel_id: for owner in channel['owner_members']: if owner['u_id'] == tu_id: found_Token = True if str(owner['u_id']) == u_id: found_User = True if found_Token == False: myexcept.authorised_member_not_admin() if found_User == False: myexcept.user_not_owner() send_Success = False # remove user from owner_members list for channel in data['channels']: if str(channel['channel_id']) == channel_id: channel['owner_members'].remove({ 'u_id': u_id, 'name_first': name_first, 'name_last': name_last }) send_Success = True updateData(data) return {} if send_Success == False: myexcept.channel_not_found()
def standup_start(token, channel_id): data = getData() #Test for valid token token_valid = False for user in data['users']: if str(user['token']) == token and token != None: u_id = user['u_id'] token_valid = True if token_valid == False: myexcept.token_error() now = datetime.now() present_time_str = datetime.strftime(now, '%H:%M') present_time = datetime.strptime(present_time_str, '%H:%M') present_time_dict = {'time_finish': present_time_str} standup_end = present_time + timedelta(minutes=15) standup_end_dict = {'time_finish': standup_end} channel_found = False member_found = False for channel in data['channels']: if str(channel['channel_id']) == channel_id: channel_found = True if channel['standup_active'] == True: myexcept.active_stand_up() for member in channel['all_members']: if member['u_id'] == u_id: member_found = True channel['standup_active'] == True # can't input more messages but can test for 1 message while present_time_dict != standup_end_dict: now_update = datetime.now() present_time_str = datetime.strftime( now_update, '%H:%M') present_time_dict = {'time_finish': present_time_str} timerAction() return sendSuccess(standup_end_dict) if channel_found == False: myexcept.channel_name_invalid() if member_found == False: myexcept.member_not_in_channel()
def user_profile(token, u_id): #Send Success data_new = getData() if testToken(token) == False: myexcept.token_error() for i in data_new['users']: if i['u_id'] == u_id: answer = {} answer['email'] = i['email'] answer['first_name'] = i['first_name'] answer['last_name'] = i['last_name'] answer['handle_str'] = i['handle_str'] return answer myexcept.invalid_user()
def channel_addowner(token, channel_id, u_id): data = getData() send_Success = False found_Token = False # finding user data for user in data['users']: if str(user['u_id']) == u_id: name_first = user['first_name'] name_last = user['last_name'] send_Success = True if str(user['token']) == token: tu_id = user['u_id'] found_Token = True if send_Success == False: myexcept.invalid_user() if found_Token == False: myexcept.token_error() send_Success = False # checking token belongs to an owner for channel in data['channels']: if str(channel['channel_id']) == channel_id: for owner in channel['owner_members']: if owner['u_id'] == tu_id: send_Success = True if send_Success == False: myexcept.token_error() send_Success = False # adding user to owner_members list for channel in data['channels']: if str(channel['channel_id']) == channel_id: channel['owner_members'].append({ 'u_id': u_id, 'name_first': name_first, 'name_last': name_last }) send_Success = True updateData(data) return {} if send_Success == False: myexcept.channel_not_found()
def message_remove(token, message_id): data = getData() #Test for valid token flag = 0 for user in data['users']: if str(user['token']) == token and token != None: u_id = user['u_id'] perm_id = user['permission_id'] flag = 1 if flag == 0: myexcept.token_error() # find channel_id for channel in data['channels']: for message in channel['messages']: channel_id = channel['channel_id'] if str(message['message_id']) == message_id: break # checking token belongs to an owner send_Success = False for channel in data['channels']: if channel['channel_id'] == channel_id: for owner in channel['owner_members']: if owner['u_id'] == u_id: send_Success = True if send_Success == False: raise ValueError("token does not belong to an owner.") send_Success = False for channel in data['channels']: for message in channel['messages']: if str(message['message_id']) == message_id: if message['u_id'] == u_id: send_Success = True channel['messages'].remove(message) updateData(data) return {} if send_Success == False: raise ValueError( "You cannot edit other users message, or message no longer exists." )
def message_unreact(token, message_id, react_id): data_new = getData() flag = 0 #Test for valid token for i in data_new['users']: if i['token'] == token and token != None: u_id = i['u_id'] flag = 1 if flag == 0: myexcept.token_error() #Test if message_id exists message_found = 0 member_found = 0 for j in data_new['channels']: #Finding the message for k in j['messages']: if k['message_id'] == message_id: message_uid = k['u_id'] message_found = 1 #Testing to see if user is in the channel and has owner permission for l in j['all_members']: if l['u_id'] == u_id: member_found = 1 if member_found == 0: myexcept.member_not_in_channel() react_check = 0 for react in k['reacts']: react_dic = react if str(react['react_id']) == react_id: print(f"\n\n\n\n\n {react_dic} \n\n\n\n\n\n") k['reacts'].remove(react_dic) react_check = 1 if message_uid == u_id: react['is_this_user_reacted'] = False if react_check == 0: myexcept.message_already_unreacted() answer = {} updateData(data_new) return answer if message_found == 0: myexcept.invalid_message_id()
def user_profile_setname(token, name_first, name_last): if len(name_first) >= 50 or len(name_first) <= 1: myexcept.name_first_invalid() if len(name_last) >= 50 or len(name_last) <= 1: myexcept.name_last_invalid() flag = 0 data_new = getData() for i in data_new['users']: if i['token'] == token: i['first_name'] = name_first i['last_name'] = name_last flag = 1 answer = {} updateData(data_new) return answer if flag == 0: myexcept.token_error()
def channels_create(token, name, is_public): data = getData() valid_user = False # ValueError when name is more than 20 characters long as per the specs if len(name) > 20: myexcept.channel_name_invalid() for users in data['users']: if users['token'] == token: name_first = users['first_name'] name_last = users['last_name'] u_id = users['u_id'] valid_user = True if valid_user == False: myexcept.token_error() # assuming that channel_id's are randomly generated channel_id = randint(0, 10000) channels_list = data['channels'] channels_list.append({ 'channel_id': channel_id, 'channel_name': name, 'is_public': is_public, 'owner_members': [{ 'u_id': u_id, 'name_first': name_first, 'name_last': name_last }], 'all_members': [{ 'u_id': u_id, 'name_first': name_first, 'name_last': name_last }], 'messages': [] }) updateData(data) return {'channel_id': channel_id}
def user_profile_setemail(token, email): data_new = getData() email_used = 0 for t in data_new['users']: if t['email'] == email: email_used = 1 if email_used == 1: myexcept.registered_email() flag = 0 for i in data_new['users']: if i['token'] == token: if check(email) == False: myexcept.invalid_email() i['email'] = email flag = 1 answer = {} updateData(data_new) return answer if flag == 0: myexcept.token_error()
def message_send(token, channel_id, message): if len(message) > 1000: myexcept.invalid_message() data_new = getData() flag = 0 #Test for valid token for i in data_new['users']: if i['token'] == token and token != None: u_id = i['u_id'] flag = 1 if flag == 0: myexcept.token_error() #Test if channel_id is valid and that user is in the channel_id channel_found = 0 member_found = 0 for j in data_new['channels']: if j['channel_id'] == channel_id: channel_found = 1 for k in j['all_members']: if k['u_id'] == u_id: member_found = 1 answer = {} # assuming message_id is randomly generated message_id = randint(0, 1000000) answer['message_id'] = message_id answer['u_id'] = u_id answer['message'] = message answer['time_created'] = "12:04" answer['reacts'] = [] answer['is_pinned'] = False j['messages'].append(answer) updateData(data_new) return {'message_id': message_id} if channel_found == 0: myexcept.channel_not_found() elif member_found == 0: myexcept.member_not_in_channel()
def search(token, query_str): data_new = getData() flag = 0 #Test for valid token for i in data_new['users']: if i['token'] == token and token != None: u_id = i['u_id'] flag = 1 if flag == 0: myexcept.token_error() answer = [] #search through channels, find the channels that the user is in for j in data_new['channels']: for members in j['all_members']: if members['u_id'] == u_id: #This is a channel that the user is in for messages in j['messages']: if query_str in messages['message']: answer.append(messages) #search through all messages and find prefix (if contains) return answer
def channel_leave(token, channel_id): data_new = getData() flag = 0 #Test for valid token for i in data_new['users']: if i['token'] == token and token != None: u_id = i['u_id'] flag = 1 if flag == 0: myexcept.token_error() member_found = 0 channel_found = 0 for channels in data_new['channels']: if channels['channel_id'] == channel_id: channel_found = 1 for members in channels['all_members']: member_count = len(channels['all_members']) if members['u_id'] == u_id: member_found = 1 if members in channels['owner_members']: channels['owner_members'].remove(members) channels['all_members'].remove(members) if member_count == 1: data['channels'].remove(channels) answer = {} updateData(data_new) return answer if channel_found == 0: myexcept.channel_not_found() if member_found == 0: myexcept.member_not_in_channel() answer = {} return answer
def user_profile_sethandle(token, handle_str): if len(handle_str) >= 20 or len(handle_str) <= 3: raise myexcept.invalid_handle_str() data_new = getData() handle_str_used = 0 for t in data_new['users']: if t['handle_str'] == handle_str: handle_str_used = 1 if handle_str_used == 1: myexcept.registered_email() flag = 0 for i in data_new['users']: if i['token'] == token and token != None: i['handle_str'] = handle_str flag = 1 answer = {} updateData(data_new) return answer if flag == 0: myexcept.token_error()
def standup_send(token, channel_id, message): data = getData() token_valid = False for user in data['users']: if str(user['token']) == token and token != None: u_id = user['u_id'] token_valid = True if token_valid == False: myexcept.token_error() if len(message) > 1000: myexcept.invalid_message() channel_found = False member_found = False standup_queue = [] for channel in data['channels']: if str(channel['channel_id']) == channel_id: channel_found = True if channel['standup_active'] == False: myexcept.inactive_stand_up() for member in channel['all_members']: if member['u_id'] == u_id: member_found = True standup_start.standup_start(token, channel_id) standup_queue.append(message) return sendSuccess({}) if channel_found == False: myexcept.channel_name_invalid() if member_found == False: myexcept.member_not_in_channel()
def channel_join(token, channel_id): data = getData() #Test for valid token flag = 0 for user in data['users']: # If token is valid, get user's u_id, first name, last name if user['token'] == token and token != None: u_id = user['u_id'] name_first = user['first_name'] name_last = user['last_name'] perm_id = user['permission_id'] flag = 1 if flag == 0: myexcept.token_error() channel_found = 0 member_not_found = 0 # search for the channel with channel_id for channel in data['channels']: if channel['channel_id'] == channel_id: if channel['is_public'] == False: if perm_id == '1' or perm_id == '2': channel_found = 1 # search in channel members, if the user is not already in the channel for member in channel['all_members']: if member['u_id'] != u_id: member_not_found = 1 add_user = { 'u_id': u_id, 'name_first': name_first, 'name_last': name_last } channel['all_members'].append(add_user) channel['owner_members'].append(add_user) return {} else: myexcept.private_channel_denied() elif channel['is_public'] == True: channel_found = 1 # search in channel members, if the user is not already in the channel for member in channel['all_members']: if member['u_id'] != u_id: member_not_found = 1 if perm_id == '1' or perm_id == '2': p_id = '1' else: p_id = '2' add_user = { 'u_id': u_id, 'name_first': name_first, 'name_last': name_last } channel['all_members'].append(add_user) updateData(data) return {} if channel_found == 0: myexcept.channel_not_found() elif member_not_found == 0: myexcept.member_in_channel()