def standup_start(token, channel_id, length): channel_all = storage.load_channel_all() ### ERROR: channel_id is not a valid channel. if channel_id not in channel_all: raise InputError() channel = channel_all[channel_id] standup = channel['standup'] ### ERROR: an active standup is currently running in this channel. if standup['is_active'] == True: raise InputError() ### we ensure that is_active is set to true AFTER finding the rest of the information. standup['length'] = length # finding time_finish (a Unix timestamp). now = helper.get_current_time_as_datetime() now_plus_length = now + datetime.timedelta(seconds=length) time_finish = helper.convert_datetime_to_unix_timestamp(now_plus_length) standup['time_finish'] = time_finish standup['message_queue'] = '' ### start standup. standup['is_active'] = True ### sleep for length seconds (during this period standup_send() calls will be successful). time.sleep(length) ### stop standup. standup['is_active'] = False ### send the standup['message_queue'] to the channel. message_functions.message_send(token, channel_id, standup['message_queue']) storage.save_channel_all(channel_all) return { 'time_finish': time_finish, }
def standup_start(token, channel_id, length): '''Starts a standup in a channel.''' database = get_data() database['standup_messages'] = [] ## set up a message list for stand up message email = find_token(token) for user in database["users"]: if user["email"] == email: check_token = True if check_token is False: raise AccessError(description='Invalid token') channel = find_channel(database, channel_id) if channel is None: # check standup start condition raise InputError(description='channel id is not a valid channel') if channel['standup_active']: raise InputError(description='standup is currently running in channel') time_start = time.time() channel['standup_active'] = time_start + length # save as time, otherwise none while time.time() < time_start + length: pass # stand_up/send message will be add into database['standup_messages'] channel['standup_active'] = None for i in database['standup_messages']: message_send(token, channel_id, i) database['standup_messages'].clear() # clear standup messages after standup is end store_data(database) return {time_start + length}
def test_message_send_long_string(): '''Can't send message with more than 1000 characters''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) with pytest.raises(InputError): message_send(token, channel_id['channel_id'], 'he' * 1000)
def send(): '''Function sends a message and plays hangman when /hangman is entered''' data = request.get_json() global HANGMAN_PLAY, TRACKER, CENSORED, SINGLE_WORD, GUESSES if HANGMAN_PLAY == 1 and data["message"].startswith('/guess'): guess = guess_sep(data["message"]) checked = check(guess[1], SINGLE_WORD, CENSORED) if guess[ 0] == 0: #/guess entered but not properly. e.g /guess or /guessX message = "Please type in guess correctly" elif guess[0] == 1: #No space provided after guess message = "No space provided after /guess" elif guess[0] == 2: #Guess entered correctly if checked[0] == 2: message = "You won! The word was " + SINGLE_WORD HANGMAN_PLAY = 0 TRACKER = 0 GUESSES = [] elif checked[0] == 1: #Correct guess. Reveal word message = checked[1] CENSORED = checked[1] if SINGLE_WORD == message: message = "You won! The word was " + SINGLE_WORD HANGMAN_PLAY = 0 TRACKER = 0 GUESSES = [] elif checked[0] == 0: #Wrong guess if guess[1] not in GUESSES: GUESSES.append(guess[1]) TRACKER += 1 message = "Wrong guess. Try again! You have " + str(9 - TRACKER)\ + " lives left and have guessed " + str(GUESSES) + " so far!" if 9 - TRACKER == 1: message = "Wrong guess. Try again! You have " + str(9 - TRACKER)\ + " life left and have guessed " + str(GUESSES) + " so far!" if TRACKER >= 9: message = "You ran out of lives. Game over :( The word was " + SINGLE_WORD HANGMAN_PLAY = 0 TRACKER = 0 GUESSES = [] return dumps(message_send(data["token"], data["channel_id"], message)) if data["message"] == "/hangman" and HANGMAN_PLAY == 0: HANGMAN_PLAY = 1 site = "http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain" response = requests.get(site) SINGLE_WORD = str( random.choice(response.content.splitlines()).decode("utf-8")) SINGLE_WORD = SINGLE_WORD.lower() CENSORED = censor(SINGLE_WORD) message = "Hangman game has begun! You have 9 lives, goodluck! Try to guess " + CENSORED return dumps(message_send(data["token"], data["channel_id"], message)) return dumps( message_send(data["token"], data["channel_id"], data["message"]))
def test_invalid_start_value(): '''Channel messages will not work if start value is bigger than total messages''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_send(token, channel_id['channel_id'], 'hi') with pytest.raises(InputError): channel_messages(token, channel_id['channel_id'], 2)
def test_channel_messages_invalid_channel_id(): '''Channel messages will not run with invalid channel ID''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_send(token, channel_id['channel_id'], 'hi') with pytest.raises(InputError): channel_messages(token, 2, 0)
def test_message_send_in_wrong_channel(): '''Send message in a channel that the user has not joined''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) assert channel_id['channel_id'] == 1 data_two = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token_two = data_two['token'] with pytest.raises(AccessError): message_send(token_two, channel_id['channel_id'], 'hello')
def test_messages_nonmember(): '''Channel messages will not work if there is non-channel member requesting''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_send(token, channel_id['channel_id'], 'Song Hayoung > Choi Yena') data_two = auth_register('*****@*****.**', 'cs1531', 'Yena', 'Choi') token_two = data_two['token'] with pytest.raises(AccessError): channel_messages(token_two, channel_id['channel_id'], 0)
def test_message_send(): '''Send a normal message such as 'Hello World''' data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') assert isinstance(message_id['message_id'], int) is True
def test_message_edit_empty(): '''If the message is edited into an empty string, it'll be deleted''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'UNSW < USYD') assert message_edit(token, message_id['message_id'], '') == {}
def test_message_react(): '''Message will be reacted on the chat''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') assert message_react(token, message_id['message_id'], 1) == {}
def test_message_remove(): '''This function will remove a message''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') assert message_remove(token, message_id['message_id']) == {}
def test_message_edit(): '''This function will edit the message into a non-empty string''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'UNSW < USYD') message_edit(token, message_id['message_id'], 'UNSW > USYD') assert message_edit(token, message_id['message_id'], 'UNSW > USYD') == {}
def test_message_invalid_react_id_in_react(): '''Message will be not reacted with invalid react id on the chat''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') with pytest.raises(InputError): message_react(token, message_id['message_id'], 2)
def message_send(): input_data = request.get_json() token = input_data['token'] channel_id = input_data['channel_id'] message = input_data['message'] returned_data = message_functions.message_send(token, channel_id, message) if returned_data == -1: return dumps({"code": -1}) return dumps({ 'message_id': returned_data['message_id'], })
def test_remove_twice(): '''Cannot remove a message twice''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') message_remove(token, message_id['message_id']) with pytest.raises(InputError): message_remove(token, message_id['message_id'])
def test_message_send_link(): '''A URL link will be sent as a string instead of an actual link''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message = 'https://www.google.com/' assert isinstance(message, str) is True message_id = message_send(token, channel_id['channel_id'], 'https://www.google.com/') assert isinstance(message_id['message_id'], int) is True
def test_message_invalid_pin(): '''Pinned message will not be pinned again''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') message_pin(token, message_id['message_id']) with pytest.raises(InputError): message_pin(token, message_id['message_id'])
def test_edit_other(): '''Cannot edit another user's message when not admin/owner''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'Hello World') data_two = auth_register('*****@*****.**', 'IZ*ONE', 'Yena', 'Choi') token_two = data_two['token'] channel_join(token_two, channel_id['channel_id']) with pytest.raises(AccessError): message_edit(token_two, message_id['message_id'], 'Promote IZ*ONE')
def test_channel_messages(): '''Shows one channel message after one was sent''' reset_data() data = auth_register('*****@*****.**', 'cs1531', 'Kevin', 'Trang') token = data['token'] channel_id = channels_create(token, 'Channel One', True) message_id = message_send(token, channel_id['channel_id'], 'hi') message_dict = channel_messages(token, channel_id['channel_id'], 0) assert message_dict['start'] == 0 assert message_dict['end'] == -1 assert message_dict['messages'][0]['message_id'] == message_id[ 'message_id']
def send_later(): '''Sends a message after a given time. Does not work''' data = request.get_json() return dumps( message_send(data["token"], data["channel_id"], data["message"]))