Esempio n. 1
0
def language_update_handler(user: User, update: Update,
                            context: CallbackContext):
    if update.message.text == get_language_token(user.language,
                                                 Tokens.LANGUAGE_ENGLISH):
        user.language = "en"
        session.commit()
        del context.user_data["state"]
        update.message.reply_text(
            get_language_token(user.language,
                               Tokens.LANGUAGE_CHANGE_SUCCESSFUL),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_main_keyboard_markup(user.language))
    elif update.message.text == get_language_token(user.language,
                                                   Tokens.LANGUAGE_TURKISH):
        user.language = "tr"
        session.commit()
        del context.user_data["state"]
        update.message.reply_text(
            get_language_token(user.language,
                               Tokens.LANGUAGE_CHANGE_SUCCESSFUL),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_main_keyboard_markup(user.language))
    else:
        update.message.reply_text(
            get_language_token(user.language,
                               Tokens.PLEASE_SELECT_VALID_LANGUAGE),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_language_selection_keyboard_markup(user.language))
Esempio n. 2
0
def get_review_type_keyboard_keyboard_markup(language: str):
    review_type_keyboard = [
        [get_language_token(language, Tokens.AGREE_NICE_EXAMPLE)],
        [get_language_token(language, Tokens.DO_NOT_LIKE_EXAMPLE)],
        [get_language_token(language, Tokens.SKIP_THIS_ONE)],
        [get_language_token(language, Tokens.QUIT_REVIEWING)]
    ]
    return telegram.ReplyKeyboardMarkup(review_type_keyboard)
Esempio n. 3
0
def language_change_handler(user: User, update: Update,
                            context: CallbackContext):
    context.user_data["state"] = "changing_language"
    update.message.reply_text(
        get_language_token(user.language, Tokens.SELECT_LANGUAGE),
        parse_mode=telegram.ParseMode.MARKDOWN,
        reply_markup=get_language_selection_keyboard_markup(user.language))
Esempio n. 4
0
def todays_mwe_handler(user: User, update: Update, context: CallbackContext):
    todays_mwe = mwe_helper.get_todays_mwe(user.language)
    update.message.reply_text(
        get_language_token(user.language, Tokens.TODAYS_MWE_REPLY_TEXT) %
        (todays_mwe.name, todays_mwe.meaning),
        parse_mode=telegram.ParseMode.MARKDOWN,
        reply_markup=get_main_keyboard_markup(user.language))
Esempio n. 5
0
def review_handler(user: User, update: Update, context: CallbackContext):
    submissions = session.query(Submission).filter(
        and_(Submission.user_id != user.id,
             Submission.language == user.language)).all()
    submissions = sorted(submissions,
                         key=lambda x: x.review_count,
                         reverse=True)
    submissions = [x for x in submissions if user_not_in_reviewers(x, user)]

    if len(submissions) > 0:
        todays_mwe = mwe_helper.get_todays_mwe(user.language)
        submission = submissions[0]

        submission_category_messages = {
            "together":
            get_language_token(user.language,
                               Tokens.FORM_SPECIAL_MEANING_TOGETHER) %
            get_mwe_words(todays_mwe),
            "separated":
            get_language_token(user.language, Tokens.ARE_WORDS_SEPARATED) %
            get_mwe_words(todays_mwe),
            "non-mwe":
            get_language_token(user.language,
                               Tokens.DOESNT_FORM_SPECIAL_MEANING_TOGETHER) %
            get_mwe_words(todays_mwe)
        }

        context.user_data["state"] = "review"
        context.user_data['submission'] = submission

        reply_message = get_language_token(
            user.language, Tokens.REVIEW_MESSAGE) % (
                submission.value,
                submission_category_messages[submission.category])
        update.message.reply_text(
            reply_message,
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_review_type_keyboard_keyboard_markup(
                user.language))
    else:
        if "state" in context.user_data:
            del context.user_data["state"]
        update.message.reply_text(
            get_language_token(user.language, Tokens.NO_EXAMPLES_TO_REVIEW),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_main_keyboard_markup(user.language))
Esempio n. 6
0
def submit_handler(user: User, update: Update, context: CallbackContext):
    todays_mwe = mwe_helper.get_todays_mwe(user.language)
    update.message.reply_text(
        get_language_token(user.language, Tokens.PLEASE_ENTER_EXAMPLE) %
        todays_mwe.name,
        parse_mode=telegram.ParseMode.MARKDOWN,
        reply_markup=telegram.ReplyKeyboardRemove())
    context.user_data["state"] = "submit_example"
Esempio n. 7
0
def submit_handler_4(user: User, update: Update, context: CallbackContext):
    todays_mwe = mwe_helper.get_todays_mwe(user.language)

    submit_category_1_submissions = [
        get_language_token(user.language, Tokens.WORDS_ARE_TOGETHER) %
        get_mwe_words(todays_mwe),
        get_language_token(user.language, Tokens.WORDS_ARE_SEPARATED) %
        get_mwe_words(todays_mwe),
    ]

    if update.message.text in submit_category_1_submissions:
        submission: Submission = context.user_data["submission"]
        if update.message.text == get_language_token(
                user.language,
                Tokens.WORDS_ARE_TOGETHER) % get_mwe_words(todays_mwe):
            submission.category = "together"
        elif update.message.text == get_language_token(
                user.language,
                Tokens.WORDS_ARE_SEPARATED) % get_mwe_words(todays_mwe):
            submission.category = "separated"
        submission.user = user
        submission.language = user.language
        submission.mwe = todays_mwe
        session.add(submission)
        session.commit()
        del context.user_data["submission"]
        del context.user_data["state"]
        if update.message.text == get_language_token(
                user.language,
                Tokens.WORDS_ARE_TOGETHER) % get_mwe_words(todays_mwe):
            update.message.reply_text(
                get_language_token(user.language, Tokens.THANKS_FOR_SUBMISSION)
                % (get_random_congrats_message(user.language), 10),
                parse_mode=telegram.ParseMode.MARKDOWN,
                reply_markup=get_main_keyboard_markup(user.language))
        elif update.message.text == get_language_token(
                user.language,
                Tokens.WORDS_ARE_SEPARATED) % get_mwe_words(todays_mwe):
            update.message.reply_text(
                get_language_token(user.language, Tokens.THANKS_FOR_SUBMISSION)
                % (get_random_congrats_message(user.language), 10),
                parse_mode=telegram.ParseMode.MARKDOWN,
                reply_markup=get_main_keyboard_markup(user.language))
    else:
        update.message.reply_text(
            get_language_token(user.language,
                               Tokens.ENTER_VALID_MWE_CATEGORY_1),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_submit_category_2_keyboard_markup(
                user.language, todays_mwe))
Esempio n. 8
0
def submit_handler_3(user: User, update: Update, context: CallbackContext):
    todays_mwe = mwe_helper.get_todays_mwe(user.language)

    submit_category_1_submissions = [
        get_language_token(user.language, Tokens.FORM_SPECIAL_MEANING_TOGETHER)
        % get_mwe_words(todays_mwe),
        get_language_token(user.language,
                           Tokens.DOESNT_FORM_SPECIAL_MEANING_TOGETHER) %
        get_mwe_words(todays_mwe),
    ]

    if update.message.text in submit_category_1_submissions:
        if update.message.text == submit_category_1_submissions[0]:
            update.message.reply_text(
                get_language_token(user.language, Tokens.ARE_WORDS_SEPARATED) %
                get_mwe_words(todays_mwe),
                parse_mode=telegram.ParseMode.MARKDOWN,
                reply_markup=get_submit_category_2_keyboard_markup(
                    user.language, todays_mwe))
            context.user_data["state"] = "submit_example_type_2"
        else:
            submission = context.user_data["submission"]
            submission.category = "non-mwe"
            submission.users_who_reviewed = ''
            submission.user = user
            submission.language = user.language
            submission.mwe = todays_mwe
            session.add(submission)
            session.commit()
            del context.user_data["state"]
            del context.user_data["submission"]
            update.message.reply_text(
                get_language_token(user.language, Tokens.THANKS_FOR_SUBMISSION)
                % (get_random_congrats_message(user.language), 30),
                parse_mode=telegram.ParseMode.MARKDOWN,
                reply_markup=get_main_keyboard_markup(user.language))
    else:
        update.message.reply_text(
            get_language_token(user.language,
                               Tokens.ENTER_VALID_MWE_CATEGORY_1),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_submit_category_1_keyboard_markup(
                user.language, todays_mwe))
Esempio n. 9
0
def submit_handler_2(user: User, update: Update, context: CallbackContext):
    todays_mwe = mwe_helper.get_todays_mwe(user.language)
    submission = Submission(value=update.message.text)
    context.user_data["submission"] = submission
    context.user_data["state"] = "submit_example_type_1"
    update.message.reply_text(
        get_language_token(user.language, Tokens.SPECIAL_MEANING) %
        todays_mwe.name,
        parse_mode=telegram.ParseMode.MARKDOWN,
        reply_markup=get_submit_category_1_keyboard_markup(
            user.language, todays_mwe))
Esempio n. 10
0
def get_main_keyboard_markup(language: str):
    main_keyboard = [
        [get_language_token(language, Tokens.TODAYS_MWE), get_language_token(language, Tokens.SUBMIT)],
        [get_language_token(language, Tokens.REVIEW), get_language_token(language, Tokens.SUGGEST_MWE)],
        [get_language_token(language, Tokens.SHOW_SCOREBOARD), get_language_token(language, Tokens.CHANGE_LANGUAGE)],
    ]
    return telegram.ReplyKeyboardMarkup(main_keyboard)
Esempio n. 11
0
def start(update: Update, context: CallbackContext):
    user = get_user_from_update(update)

    if "state" in context.user_data:
        del context.user_data["state"]
    if "submission" in context.user_data:
        del context.user_data["submission"]

    update.message.reply_text(
        get_language_token(user.language, Tokens.WELCOME_MESSAGE) %
        user.username,
        parse_mode=telegram.ParseMode.MARKDOWN,
        reply_markup=get_main_keyboard_markup(user.language))
Esempio n. 12
0
def message(update: Update, context: CallbackContext):
    try:
        user = get_user_from_update(update)

        if "state" in context.user_data:
            state = context.user_data["state"]
            if state == "changing_language":
                language_update_handler(user, update, context)
            elif state == "submit_example":
                submit_handler_2(user, update, context)
            elif state == "submit_example_type_1":
                submit_handler_3(user, update, context)
            elif state == "submit_example_type_2":
                submit_handler_4(user, update, context)
            elif state == "review":
                review_handler_2(user, update, context)

        else:
            if update.message.text == get_language_token(
                    user.language, Tokens.TODAYS_MWE):
                todays_mwe_handler(user, update, context)
            elif update.message.text == get_language_token(
                    user.language, Tokens.CHANGE_LANGUAGE):
                language_change_handler(user, update, context)
            elif update.message.text == get_language_token(
                    user.language, Tokens.SUBMIT):
                submit_handler(user, update, context)
            elif update.message.text == get_language_token(
                    user.language, Tokens.REVIEW):
                review_handler(user, update, context)
            elif update.message.text == get_language_token(
                    user.language, Tokens.SHOW_SCOREBOARD):
                show_scoreboard_handler(user, update, context)
            else:
                update.message.reply_text(
                    get_language_token(user.language,
                                       Tokens.ENTER_VALID_COMMAND),
                    parse_mode=telegram.ParseMode.MARKDOWN,
                    reply_markup=get_main_keyboard_markup(user.language))

    except Exception as ex:
        update.message.reply_text(str(ex))
Esempio n. 13
0
def show_scoreboard_handler(user: User, update: Update,
                            context: CallbackContext):
    user_scores = defaultdict(int)
    points_earned_for_submission = {
        "together": 10,
        "separated": 20,
        "non-mwe": 30
    }

    # user_i: User
    # for user_i in session.query(User).filter(User.language == user.language).all():
    #     submission: Submission
    #     for submission in session.query(Submission).filter(and_(Submission.user_id == user_i.id, Submission.language == user.language)).all():
    #         for review in session.query(Review).filter(and_(Review.submission_id == submission.id, Review.review_type == POSITIVE_REVIEW)).all():
    review: Review
    for review in session.query(Review).all():
        if review.submission.language == user.language and review.review_type == POSITIVE_REVIEW:
            points_earned = points_earned_for_submission[
                review.submission.category]
            user_scores[review.submission.user] += points_earned

    user_scores_list = list()
    for user_i in user_scores.keys():
        user_scores_list.append([user_i, user_scores[user_i]])

    user_scores_list.sort(key=lambda x: x[1])
    user_scores_list.reverse()

    if len(user_scores_list) > 0:
        scoreboard_message = get_language_token(user.language,
                                                Tokens.TOP_FIVE_USERS)
        user_appeared_in_first_five = False
        for i in range(0, 5):
            if i >= len(user_scores_list):
                break
            rankings = ["🥇", "🥈", "🥉", "4.", "5."]
            username = user_scores_list[i][0].username
            if user.id == user_scores_list[i][0].id:
                username = "******" % username
                user_appeared_in_first_five = True
            ranking = rankings[i]
            if user.id == user_scores_list[i][0].id:
                ranking = "*%s*" % ranking
            point = user_scores_list[i][1]
            scoreboard_message += "%s %s - %d" % (ranking, username,
                                                  point) + "\n"

        if not user_appeared_in_first_five:
            for i in range(len(user_scores_list)):
                if user_scores_list[i][0].id == user.id:
                    scoreboard_message += "...\n"
                    scoreboard_message += "%d. %s - %d" % (
                        i + 1, user.username, user_scores_list[i][1]) + "\n"

        update.message.reply_text(scoreboard_message,
                                  parse_mode=telegram.ParseMode.MARKDOWN,
                                  reply_markup=get_main_keyboard_markup(
                                      user.language))
    else:
        update.message.reply_text(
            get_language_token(user.language, Tokens.NO_SUBMISSIONS),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_main_keyboard_markup(user.language))
Esempio n. 14
0
def review_handler_2(user: User, update: Update, context: CallbackContext):
    review_types = [
        get_language_token(user.language, Tokens.AGREE_NICE_EXAMPLE),
        get_language_token(user.language, Tokens.DO_NOT_LIKE_EXAMPLE),
        get_language_token(user.language, Tokens.SKIP_THIS_ONE),
        get_language_token(user.language, Tokens.QUIT_REVIEWING)
    ]
    user = get_user_from_update(update)

    if update.message.text in review_types:
        submission = context.user_data["submission"]
        todays_mwe = mwe_helper.get_todays_mwe(user.language)

        points_earned_for_submission = {
            "together": 10,
            "separated": 20,
            "non-mwe": 30
        }

        if update.message.text == review_types[0]:
            points_earned = points_earned_for_submission[submission.category]
            reply_message = get_language_token(
                user.language, Tokens.SOMEONE_LOVED_YOUR_EXAMPLE) % (
                    get_random_congrats_message(user.language), points_earned)
            send_message_to_user(submission.user, reply_message)
            review = Review(user=user,
                            mwe=todays_mwe,
                            submission=submission,
                            review_type=POSITIVE_REVIEW)
            session.add(review)
            session.commit()
            review_handler(user, update, context)
        elif update.message.text == review_types[1]:
            review = Review(user=user,
                            mwe=todays_mwe,
                            submission=submission,
                            review_type=NEGATIVE_REVIEW)
            session.add(review)
            session.commit()
            review_handler(user, update, context)
        elif update.message.text == review_types[2]:
            review = Review(user=user,
                            mwe=todays_mwe,
                            submission=submission,
                            review_type=NEUTRAL_REVIEW)
            session.add(review)
            session.commit()
            review_handler(user, update, context)
        elif update.message.text == review_types[3]:
            del context.user_data["submission"]
            del context.user_data["state"]
            update.message.reply_text(
                get_language_token(user.language,
                                   Tokens.THANKS_FOR_CONTRIBUTION),
                parse_mode=telegram.ParseMode.MARKDOWN,
                reply_markup=get_main_keyboard_markup(user.language))
    else:
        update.message.reply_text(
            get_language_token(user.language,
                               Tokens.PLEASE_ENTER_VALID_REVIEW),
            parse_mode=telegram.ParseMode.MARKDOWN,
            reply_markup=get_review_type_keyboard_keyboard_markup(
                user.language))
Esempio n. 15
0
def get_submit_category_1_keyboard_markup(language: str, mwe: Mwe):
    submit_category_1_keyboard = [
        [get_language_token(language, Tokens.FORM_SPECIAL_MEANING_TOGETHER) % get_mwe_words(mwe)],
        [get_language_token(language, Tokens.DOESNT_FORM_SPECIAL_MEANING_TOGETHER) % get_mwe_words(mwe)],
    ]
    return telegram.ReplyKeyboardMarkup(submit_category_1_keyboard)
Esempio n. 16
0
def get_submit_category_2_keyboard_markup(language: str, mwe: Mwe):
    submit_category_2_keyboard = [
        [get_language_token(language, Tokens.WORDS_ARE_TOGETHER) % get_mwe_words(mwe)],
        [get_language_token(language, Tokens.WORDS_ARE_SEPARATED) % get_mwe_words(mwe)],
    ]
    return telegram.ReplyKeyboardMarkup(submit_category_2_keyboard)
Esempio n. 17
0
def load_test_data(update: Update, context: CallbackContext):
    user = get_user_from_update(update)

    turkan_s = add_user("turkan.s", "tr")
    gordon_f = add_user("gordon.f", "en")
    michael_j = add_user("michael.j", "en")
    elvis_p = add_user("elvis.p", "en")
    david_b = add_user("david.b", "en")
    donald_t = add_user("donald.t", "en")
    tarik_a = add_user("tarik.a", "tr")
    kemal_s = add_user("kemal.s", "tr")
    munir_o = add_user("munir.o", "tr")
    zeki_a = add_user("zeki.a", "tr")

    submission1 = add_submission_by_user(turkan_s, "İşte şimdi ayvayı yedim.",
                                         "together", "tr")
    submission2 = add_submission_by_user(gordon_f, "Will you give up please?",
                                         "together", "en")
    submission3 = add_submission_by_user(michael_j,
                                         "I finally gave up smoking.",
                                         "together", "en")
    submission4 = add_submission_by_user(
        elvis_p, "Give up now, you're not going to win this fight?",
        "together", "en")
    submission5 = add_submission_by_user(david_b,
                                         "They will not give that up to me?",
                                         "non-mwe", "en")
    submission6 = add_submission_by_user(donald_t, "Please give this up?",
                                         "separated", "en")
    submission7 = add_submission_by_user(tarik_a,
                                         "Ayvayı yedikten sonra doydum.",
                                         "non-mwe", "tr")
    submission8 = add_submission_by_user(kemal_s, "Ayvayı iyi yedik.",
                                         "separated", "tr")
    submission9 = add_submission_by_user(munir_o, "Ayvayı yedik yine.",
                                         "together", "tr")
    submission10 = add_submission_by_user(
        zeki_a, "Ayva ayva söyle bana, benden güzeli var mı dünyada?",
        "together", "tr")

    add_review_by_user(turkan_s, submission7, POSITIVE_REVIEW)
    add_review_by_user(turkan_s, submission8, POSITIVE_REVIEW)
    add_review_by_user(turkan_s, submission9, POSITIVE_REVIEW)
    add_review_by_user(turkan_s, submission10, NEGATIVE_REVIEW)
    add_review_by_user(tarik_a, submission1, POSITIVE_REVIEW)
    add_review_by_user(tarik_a, submission8, POSITIVE_REVIEW)
    add_review_by_user(tarik_a, submission9, POSITIVE_REVIEW)
    add_review_by_user(tarik_a, submission10, NEGATIVE_REVIEW)
    add_review_by_user(kemal_s, submission7, POSITIVE_REVIEW)
    add_review_by_user(kemal_s, submission1, POSITIVE_REVIEW)
    add_review_by_user(kemal_s, submission9, POSITIVE_REVIEW)
    add_review_by_user(kemal_s, submission10, NEGATIVE_REVIEW)
    add_review_by_user(munir_o, submission7, POSITIVE_REVIEW)
    add_review_by_user(munir_o, submission8, POSITIVE_REVIEW)
    add_review_by_user(munir_o, submission1, POSITIVE_REVIEW)
    add_review_by_user(munir_o, submission10, NEGATIVE_REVIEW)
    add_review_by_user(zeki_a, submission7, NEGATIVE_REVIEW)
    add_review_by_user(zeki_a, submission8, NEGATIVE_REVIEW)
    add_review_by_user(zeki_a, submission9, NEGATIVE_REVIEW)
    add_review_by_user(zeki_a, submission1, NEGATIVE_REVIEW)
    add_review_by_user(gordon_f, submission3, POSITIVE_REVIEW)
    add_review_by_user(gordon_f, submission4, POSITIVE_REVIEW)
    add_review_by_user(gordon_f, submission5, POSITIVE_REVIEW)
    add_review_by_user(gordon_f, submission6, POSITIVE_REVIEW)
    add_review_by_user(michael_j, submission2, POSITIVE_REVIEW)
    add_review_by_user(michael_j, submission4, POSITIVE_REVIEW)
    add_review_by_user(michael_j, submission5, POSITIVE_REVIEW)
    add_review_by_user(michael_j, submission6, POSITIVE_REVIEW)
    add_review_by_user(elvis_p, submission3, POSITIVE_REVIEW)
    add_review_by_user(elvis_p, submission2, POSITIVE_REVIEW)
    add_review_by_user(elvis_p, submission5, POSITIVE_REVIEW)
    add_review_by_user(elvis_p, submission6, POSITIVE_REVIEW)
    add_review_by_user(david_b, submission3, POSITIVE_REVIEW)
    add_review_by_user(david_b, submission4, POSITIVE_REVIEW)
    add_review_by_user(david_b, submission2, POSITIVE_REVIEW)
    add_review_by_user(david_b, submission6, POSITIVE_REVIEW)
    add_review_by_user(donald_t, submission3, POSITIVE_REVIEW)
    add_review_by_user(donald_t, submission4, POSITIVE_REVIEW)
    add_review_by_user(donald_t, submission5, POSITIVE_REVIEW)
    add_review_by_user(donald_t, submission6, POSITIVE_REVIEW)

    update.message.reply_text(
        get_language_token(user.language, Tokens.WELCOME_MESSAGE) %
        user.username,
        parse_mode=telegram.ParseMode.MARKDOWN,
        reply_markup=get_main_keyboard_markup(user.language))
Esempio n. 18
0
def get_language_selection_keyboard_markup(language: str):
    language_change_keyboard = [
        [get_language_token(language, Tokens.LANGUAGE_ENGLISH)],
        [get_language_token(language, Tokens.LANGUAGE_TURKISH)],
    ]
    return telegram.ReplyKeyboardMarkup(language_change_keyboard)