Пример #1
0
async def play_game(message):
    print("{} play game".format(message.chat.username))
    user_data = UserData(message.chat.id)
    print(user_data.get_count_answers())
    if user_data.get_count_answers() != 0:
        db_worker = SQLither(config.database_name)
        db_worker.insert_answer(message.chat.id, user_data.get_question_id(), message.text)
        db_worker.update_last_activity(message.chat.id, time.time())
        db_worker.close()	

    if user_data.get_count_answers() >= Questions.get_questions_limit():
        markup = types.ReplyKeyboardMarkup(one_time_keyboard=False, resize_keyboard=True)
        markup.add(string_worker.get_yes_button())
        markup.add(string_worker.get_no_button())
        await send_message(message.chat.id, string_worker.get_ask_feedback(), reply_markup=markup)
        user_data.delete()
        return 

    next_question_id = Questions.get_next_random_question_id(user_data.get_answers_id())
    user_data.set_question_id(next_question_id)
    question_text = Questions.get_question(next_question_id)
    if Questions.is_time_to_praise(user_data.get_count_answers()):
        await send_message(message.chat.id, string_worker.get_praise(user_data.get_count_answers()))
    user_data.save()
    await send_message(message.chat.id, "<b>{}.</b> {}".format(user_data.get_count_answers(), question_text), parse_mode='HTML')

    if Questions.is_gif_time(user_data.get_count_answers()):
        await asyncio.sleep(10)
        await bot.send_chat_action(message.chat.id, 'upload_video')
        await asyncio.sleep(5)
        await bot.send_video(message.chat.id, config.pic_begin_game)
Пример #2
0
def test_is_image_present(stored_username, stored_img_name, username, img_name,
                          expected):
    from server import is_image_present
    user = LogIn(username=stored_username)
    user.save()
    user_data = UserData(username=user, image_name=[stored_img_name])
    user_data.save()
    value = is_image_present(username, img_name)
    assert expected == value
    UserData.objects.raw({"_id": stored_username}).delete()
    LogIn.objects.raw({"_id": stored_username}).delete()
Пример #3
0
def test_is_first_upload(stored_username, username, expected):
    from server import is_first_upload
    user = LogIn(username=stored_username)
    user.save()
    user_data = UserData(username=user,
                         image_name=['.'],
                         image=['.'],
                         processing_time=['.'],
                         image_size=['.'],
                         hist_data=['.'],
                         upload_date=['.'])
    user_data.save()
    value = is_first_upload(username)
    assert expected == value
    UserData.objects.raw({"_id": stored_username}).delete()
    LogIn.objects.raw({"_id": stored_username}).delete()
Пример #4
0
def test_inverted_image_upload(username, filepath, expected):
    from server import inverted_image_upload
    user = LogIn(username=username)
    user.save()
    user_data = UserData(username=user,
                         image_name=['.'],
                         image=['.'],
                         processing_time=['.'],
                         image_size=['.'],
                         hist_data=['.'],
                         upload_date=['.'])
    user_data.save()
    inverted_image_upload(username, filepath)
    users = UserData.objects.raw({"_id": username})
    stored_name = ''
    for user in users:
        stored_name = user.image_name
    assert expected == stored_name[1]
    UserData.objects.raw({"_id": username}).delete()
    LogIn.objects.raw({"_id": username}).delete()
Пример #5
0
async def handle_main_menu_input(message: types.Message):
    if not message.chat.id in config.admins:
        user_data = UserData(message.chat.id)
        if user_data.is_active:
            return
        user_data.set_is_active(True)
        user_data.save()
        if message.text == string_worker.get_yes_button(
        ) or message.text == string_worker.get_no_button():
            feedback = 0
            if message.text == string_worker.get_yes_button():
                feedback = 1
            db_worker = SQLither(config.database_name)
            db_worker.insert_feedback(message.chat.id, feedback)
            db_worker.close()
            print("{} set {} feedback".format(message.chat.username, feedback))
            user_data.set_question_id(-1)
            user_data.save()
            await send_message(message.chat.id,
                               string_worker.get_result_message(),
                               reply_markup=types.ReplyKeyboardRemove())
            await result(message)
        else:
            await play_game(message)
        user_data = UserData(message.chat.id)
        user_data.set_is_active(False)
        user_data.save()
    else:
        if message.text == string_worker.get_list_users_button():
            db_worker = SQLither(config.database_name)
            utils.generate_list_users(db_worker)
            db_worker.close()
            await bot.send_document(message.chat.id,
                                    open(config.users_file, 'rb'))
        # elif message.text == string_worker.get_delete_data_button():

        # 	db_worker = SQLither(config.database_name)
        # 	users = db_worker.select_real_users_in_bot()
        # 	for user in users:
        # 		user_data = UserData(user.get_user_id())
        # 		user_data.delete()
        # 	db_worker.delete_all_data()
        # 	db_worker.close()
        # 	await send_message(message.chat.id, 'Данные удалено')
        elif message.text == 'Start cheering users :)':
            await start_cheering_real_users()
Пример #6
0
def original_upload(username, filepath):
    """Performs encoding and uploads to database along with associated data
       metrics (upload time, processing time, histogram, size). Checks to see
       if username is already associated with a UserData document and uploads
       accordingly.

    Args:
        username (str): username to upload to in database
        filepath (str): filepath of image to be processed and encoded

    Returns:
        None
    """
    # Read original image from filepath
    image = skimage.io.imread(filepath)

    # Process image and encode it.
    start_time = time.time()
    image_encode = encode_array(image)
    processing_time = str(time.time() - start_time)

    # Create image name
    image_name = img_name_from_filepath(filepath, "_original")

    # Calc image size
    image_size = get_num_pixels(image)

    # Get date and time
    upload_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f")

    # Calc histogram data. Produces {"red": ndarray, "green....}
    # Use each color spectrum for analysis via processing, then
    # concatenate back together with img = np.dstack(red, green, blue)
    hist_data = pixel_histogram(image)
    hist_encode = encode_dict(hist_data)

    # Check if previous images exist
    if is_first_upload(username):
        # If first upload, create document
        user = UserData(username=username,
                        image_name=[image_name],
                        image=[image_encode],
                        processing_time=[processing_time],
                        image_size=[image_size],
                        hist_data=[hist_encode],
                        upload_date=[upload_date])
        user.save()
    else:
        # Save image to database
        UserData.objects.raw({
            "_id": username
        }).update({
            "$push": {
                "image_name": image_name,
                "image": image_encode,
                "processing_time": processing_time,
                "image_size": image_size,
                "hist_data": hist_encode,
                "upload_date": upload_date
            }
        })
    return
Пример #7
0
async def start(message: types.Message):

    print("{} has id {}".format(message.chat.username, message.chat.id))

    # for question in Questions.questions:
    # 	await send_message(message.chat.id, question, parse_mode='HTML')

    if message.chat.id in config.admins:
        markup = types.ReplyKeyboardMarkup(one_time_keyboard=False,
                                           resize_keyboard=True)
        markup.add(string_worker.get_list_users_button())
        # markup.add(string_worker.get_delete_data_button())

        await send_message(message.chat.id,
                           string_worker.get_instructions(),
                           parse_mode='HTML',
                           reply_markup=markup)

        return
    else:
        # user_data = UserData(message.chat.id)
        # user_data.delete()
        user_data = UserData(message.chat.id)
        user_data.set_is_active(True)
        user_data.save()
        db_worker = SQLither(config.database_name)
        if db_worker.is_user_exist(message.chat.id):
            await send_message(message.chat.id,
                               string_worker.get_pass_one_time())
            return
        else:
            db_worker.update_last_activity(message.chat.id, time.time())
            db_worker.insert_user(message.chat.id, message.chat.first_name,
                                  message.chat.last_name,
                                  message.chat.username)
        db_worker.close()

        markup = types.ReplyKeyboardRemove()

        await send_message(message.chat.id,
                           string_worker.get_hello(),
                           parse_mode='HTML',
                           reply_markup=markup)

        await asyncio.sleep(10)
        await bot.send_chat_action(message.chat.id, 'upload_video')
        await asyncio.sleep(5)
        await bot.send_video(message.chat.id, config.pic_begin_game)

        await asyncio.sleep(5)

        next_question_id = Questions.get_next_random_question_id(
            user_data.get_answers_id())
        user_data.set_question_id(next_question_id)
        question_text = Questions.get_question(next_question_id)
        await send_message(message.chat.id,
                           "<b>{}.</b> {}".format(
                               user_data.get_count_answers(), question_text),
                           parse_mode='HTML')
        user_data.set_is_active(False)
        user_data.save()