예제 #1
0
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,
    }
예제 #2
0
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}
예제 #3
0
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)
예제 #4
0
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"]))
예제 #5
0
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)
예제 #6
0
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)
예제 #7
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')
예제 #8
0
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)
예제 #9
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
예제 #10
0
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'], '') == {}
예제 #11
0
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) == {}
예제 #12
0
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']) == {}
예제 #13
0
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') == {}
예제 #14
0
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)
예제 #15
0
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'],
    })
예제 #16
0
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'])
예제 #17
0
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
예제 #18
0
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'])
예제 #19
0
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')
예제 #20
0
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']
예제 #21
0
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"]))