def message_send(token, channel_id, message): # only the user who is in the channel can send message check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) auid = auser_dic['u_id'] check_validchannel(channel_dic) check_auser_not_in_channel(auid, channel_dic['all_members']) check_message_length(message) c_messages = channel_dic['messages'] m_id = helper_send_message(c_messages, message, auid) # append the m_id into the message list after sending return {'message_id': m_id}
def standup_active(token, channel_id): # 1. the channel should be valid # 2. authorised user should be in the channel auser_dic = get_user_from_token(token) auid = auser_dic['u_id'] channel_dic = get_channel_from_cid(channel_id) check_validchannel(channel_dic) check_auser_not_in_channel(auid, channel_dic['all_members']) if not channel_dic['standup_is_active']: return {'is_active': False, 'time_finish': None} return { 'is_active': True, 'time_finish': channel_dic['standup_time_finish'] }
def channel_details(token, channel_id): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) check_validchannel(channel_dic) # check_auser_not_in_channel (auser_dic['u_id'], channel_dic['all_members']) name = channel_dic['name'] owner_members = get_members_details(channel_dic['owner_members']) all_members = get_members_details(channel_dic['all_members']) return { 'name': name, 'owner_members': owner_members, 'all_members': all_members }
def channel_invite(token, channel_id, u_id): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) check_validchannel(channel_dic) members = channel_dic['all_members'] check_auser_not_in_channel(auser_dic['u_id'], members) uid_dic = get_user_from_uid(u_id) # add this user in the channel if this user is not a member of the channel check_validuid(uid_dic) if u_id in members: raise ValueError("the invited user already in channel") members.append(u_id) return {}
def channel_removeowner(token, channel_id, u_id): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) check_validchannel(channel_dic) check_auser_permission_of_channel(auser_dic, channel_dic) # only the owner can remove an owner, remove oneself is okay if u_id not in channel_dic['owner_members']: raise ValueError("The user with uid is not a owner of this channel") check_only_owner(channel_dic) # add uid to the owner of the channel channel_dic['owner_members'].remove(u_id) return {}
def channel_messages(token, channel_id, start): check_tokenlogin(token) #set up the initial value max = 50 returned_least_recent = -1 channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) check_validchannel(channel_dic) check_auser_not_in_channel(auser_dic['u_id'], channel_dic['all_members']) # check if the start is valid total_messages = len(channel_dic['messages']) return_messages = [] if total_messages == 0: return {'messages': return_messages, 'start': start, 'end': -1} if start > total_messages: raise ValueError( 'Start is greater than the total number of messages in the channel' ) counter = start end = start + max # get the messages between start and end # if end > total, just get the messages between start and last message while counter < end and counter < total_messages: return_messages.append(channel_dic['messages'][counter]) counter = counter + 1 # if this function has returned the least recent messages in the channel # returns -1 in "end" to indicate there are no more messages to load after this return. if start == total_messages: end = returned_least_recent # else return the counter of last message in the list of returned messages else: end = counter return {'messages': return_messages, 'start': start, 'end': end}
def channel_addowner(token, channel_id, u_id): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) check_validchannel(channel_dic) check_auser_permission_of_channel(auser_dic, channel_dic) check_uid_not_in_channel(u_id, channel_dic) if u_id in channel_dic['owner_members']: raise ValueError( "The user with uid is already a owner of this channel") # add uid to the owner of the channel channel_dic['owner_members'].append(u_id) return {}
def channel_join(token, channel_id): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) # check error check_validchannel(channel_dic) auid = auser_dic['u_id'] check_auser_in_channel(auid, channel_dic['all_members']) # when channel_id refers to a channel that is private # when the authorised user is not an admin if not channel_dic['is_public'] and not helper_check_user_admin(auser_dic): raise AccessError("channel is private") # add the auser to channel channel_dic['all_members'].append(auid) return {}
def message_sendlater(token, channel_id, message, time_send): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) auid = auser_dic['u_id'] check_validchannel(channel_dic) check_auser_not_in_channel(auid, channel_dic['all_members']) check_message_length(message) second = (convert_date(time_send) - datetime.utcnow()).total_seconds() if second < 0: raise ValueError("Time sent is a time in the past.") timer = CustomTimer(second, helper_send_message, (channel_dic['messages'], message, auid)) # timer = threading.Timer(second, message_send(token, channel_id, message)) timer.start() m_id = timer.join() print(m_id) return {'message_id': m_id}
def channel_leave(token, channel_id): check_tokenlogin(token) channel_dic = get_channel_from_cid(channel_id) auser_dic = get_user_from_token(token) # check error check_validchannel(channel_dic) auser_uid = auser_dic['u_id'] channel_all_members = channel_dic['all_members'] check_auser_not_in_channel(auser_uid, channel_all_members) # the auser leave the channel channel_all_members.remove(auser_uid) owners = channel_dic['owner_members'] # if auser is a owner of channel, remove auser from owner list of this channel if auser_uid in owners: check_only_owner(channel_dic) owners.remove(auser_uid) return {}
def standup_send(token, channel_id, message): # 1. the channel should be valid # 2. authorised user should be in the channel # 3. the message should be valid auser_dic = get_user_from_token(token) auid = auser_dic['u_id'] auser_firstname = auser_dic['name_first'] channel_dic = get_channel_from_cid(channel_id) check_message_length(message) check_validchannel(channel_dic) check_auser_not_in_channel(auid, channel_dic['all_members']) if not channel_dic['standup_is_active']: raise ValueError( "An active standup is not currently running in this channel") channel_dic['standup_messages'] = str( channel_dic['standup_messages']) + str(auser_firstname) + " : " + str( message) + "\n" return {}
def standup_start(token, channel_id, length): # 1. the authorised user should be in this channel # 2. the channel should be valid # 3. there can be only one standup at the same time in one channel auser_dic = get_user_from_token(token) auid = auser_dic['u_id'] channel_dic = get_channel_from_cid(channel_id) check_validchannel(channel_dic) check_auser_not_in_channel(auid, channel_dic['all_members']) if channel_dic['standup_is_active']: raise ValueError( "An active standup is currently running in this channel") channel_dic['standup_is_active'] = True finish_time = int(datetime.datetime.now().strftime("%s")) + length channel_dic['standup_time_finish'] = finish_time timer = CustomTimer(length, helper_standup, (channel_dic, auid)) timer.start() return {'time_finish': finish_time}