Ejemplo n.º 1
0
 def get_scoreboard(language: Language) -> List[UserScore]:
     session = database.get_session()
     board = []
     if language == Language.TURKISH:
         users_sorted_by_score: List[User] = session \
             .query(User) \
             .filter(User.score_today_tr > 0) \
             .order_by(User.score_today_tr.desc()) \
             .all()
         for user in users_sorted_by_score:
             board.append(
                 UserScore(user.id, user.username, user.score_today_tr))
     elif language == Language.ENGLISH:
         users_sorted_by_score: List[User] = session \
             .query(User) \
             .filter(User.score_today_en > 0) \
             .order_by(User.score_today_en.desc()) \
             .all()
         for user in users_sorted_by_score:
             board.append(
                 UserScore(user.id, user.username, user.score_today_en))
     elif language == Language.ITALIAN:
         users_sorted_by_score: List[User] = session \
             .query(User) \
             .filter(User.score_today_it > 0) \
             .order_by(User.score_today_it.desc()) \
             .all()
         for user in users_sorted_by_score:
             board.append(
                 UserScore(user.id, user.username, user.score_today_it))
     return board
Ejemplo n.º 2
0
def unmute_everyone():
    mwelog.info("Unmuting everyone")
    all_users = get_all_users()
    for user in all_users:
        user.muted = False
    session = database.get_session()
    database.commit(session)
Ejemplo n.º 3
0
 def iterate(self, context: Optional[CallbackContext] = None):
     session = database.get_session()
     for language in Language.ENGLISH, Language.TURKISH, Language.ITALIAN:
         todays_mwe = get_todays_mwe(language)
         positive_together_count = session.query(Submission)\
             .filter(Submission.category == SubmissionCategory.POSITIVE_TOGETHER)\
             .filter(Submission.mwe == todays_mwe)\
             .count()
         negative_together_count = session.query(Submission)\
             .filter(Submission.category == SubmissionCategory.NEGATIVE_TOGETHER)\
             .filter(Submission.mwe == todays_mwe)\
             .count()
         diff = abs(positive_together_count - negative_together_count)
         if self.buffed_category[language] is None:
             if diff >= 15:
                 if positive_together_count < negative_together_count:
                     self.buffed_category[
                         language] = SubmissionCategory.POSITIVE_TOGETHER
                     notification_manager.send_idioms_worth_more(context)
                 else:
                     self.buffed_category[
                         language] = SubmissionCategory.NEGATIVE_TOGETHER
                     notification_manager.send_non_idioms_worth_more(
                         context)
         else:
             if diff < 10:
                 self.buffed_category[language] = None
Ejemplo n.º 4
0
def add_review(user: User, submission: Submission,
               category: ReviewCategory) -> Review:
    if user == submission.user:
        raise Exception("Review and submission user cannot be the same")
    review = Review(
        user=user,
        submission=submission,
        review_type=category,
        mwe=submission.mwe,
        created=datetime.now()
    )
    if category == ReviewCategory.LIKE:
        if submission.language == Language.ENGLISH:
            submission.user.score_today_en += submission.points
        elif submission.language == Language.TURKISH:
            submission.user.score_today_tr += submission.points
        elif submission.language == Language.ITALIAN:
            submission.user.score_today_it += submission.points
        submission.user.score += submission.points
        submission.score += submission.points
    user.score += submission_scores.get_review_score()
    if submission.language == Language.ENGLISH:
        user.score_today_en += submission_scores.get_review_score()
    elif submission.language == Language.TURKISH:
        user.score_today_tr += submission_scores.get_review_score()
    elif submission.language == Language.ITALIAN:
        user.score_today_it += submission_scores.get_review_score()
    session = database.get_session()
    session.add(review)
    database.commit(session)
    return review
Ejemplo n.º 5
0
def put_config(key: str, value: str):
    session = get_session()
    _c = session.query(config).filter_by(key=key).first()
    _c.value = value
    session.commit()
    session.close()
    return value
Ejemplo n.º 6
0
def achievements_handler(user: User, update: Update, context: CallbackContext):
    session = database.get_session()
    level, next_threshold = get_level(user.score)
    update.message.reply_html(
        user.language.get(Token.LEVEL_MESSAGE) %
        (user.score, level, next_threshold))

    today = datetime.now().date()
    user_submission_count_today = session.query(Submission)\
        .filter(and_(Submission.user == user, func.Date(Submission.created) == today))\
        .count()
    user_review_count_today = session.query(Review) \
        .filter(and_(Review.user == user, func.Date(Review.created) == today)) \
        .count()
    update.message.reply_html(
        user.language.get(Token.USER_DAILY_PLAY_DETAILS_MESSAGE) %
        (user_submission_count_today, user_review_count_today))

    user_achievements = get_user_achievements(user)

    update.message.reply_html(
        user.language.get(Token.UNLOCKED_ACHIEVEMENTS) + "\n" +
        print_unlocked_achievements(user, user_achievements))

    update.message.reply_html(
        user.language.get(Token.LOCKED_ACHIEVEMENTS) + "\n" +
        print_locked_achievements(user, user_achievements))

    if user.became_champion and user.email is None:
        update.message.reply_text(user.language.get(Token.CHAMP_BUT_NO_EMAIL))
Ejemplo n.º 7
0
def _process_review_achievements(user: User, update: Update):
    session = database.get_session()
    todays_mwe = get_todays_mwe(user.language)
    user_review_count_today = session.query(Review)\
        .filter(and_(Review.mwe == todays_mwe, Review.user == user)).count()
    if user_review_count_today == 10:
        award_achievement(user, AchievementType.REVIEW_LVL_1)
        update.message.reply_sticker(ACHIEVEMENT_STICKER)
        update.message.reply_html(
            user.language.get(Token.REVIEW_LVL_1_ACH_CONGRATS_MSG))
    if user_review_count_today == 20:
        award_achievement(user, AchievementType.REVIEW_LVL_2)
        update.message.reply_sticker(ACHIEVEMENT_STICKER)
        update.message.reply_html(
            user.language.get(Token.REVIEW_LVL_2_ACH_CONGRATS_MSG))
    if user_review_count_today == 40:
        award_achievement(user, AchievementType.REVIEW_LVL_3)
        update.message.reply_sticker(ACHIEVEMENT_STICKER)
        update.message.reply_html(
            user.language.get(Token.REVIEW_LVL_3_ACH_CONGRATS_MSG))
    if user_review_count_today == 80:
        award_achievement(user, AchievementType.REVIEW_LVL_4)
        update.message.reply_sticker(ACHIEVEMENT_STICKER)
        update.message.reply_html(
            user.language.get(Token.REVIEW_LVL_4_ACH_CONGRATS_MSG))
    if user_review_count_today == 160:
        award_achievement(user, AchievementType.REVIEW_LVL_5)
        update.message.reply_sticker(ACHIEVEMENT_STICKER)
        update.message.reply_html(
            user.language.get(Token.REVIEW_LVL_5_ACH_CONGRATS_MSG))
Ejemplo n.º 8
0
def get_log_all(log_type='bds'):
    session = get_session()
    if log_type is None:
        _c = session.query(bds_log).all()
    else:
        _c = session.query(bds_log).filter_by(log_type=log_type).all()
    session.close()
    return _c
Ejemplo n.º 9
0
def change_user_language(user: User, language: Language) -> None:
    session = database.get_session()
    user.language = language
    database.commit(session)
    mwelog.info("User {user_name} changed language to: {language}",
                user_name=user.username,
                user_id=user.id,
                language=str(user.language))
Ejemplo n.º 10
0
def flag_submission(user: User, submission_id: int, context: CallbackContext):
    if user.id == 1065263859:
        session = database.get_session()
        submission = session.query(Submission).filter(
            Submission.id == submission_id).first()
        submission.flagged = True
        database.commit(session)
        context.bot.send_message(user.id,
                                 f"Submission {submission_id} is flagged.")
Ejemplo n.º 11
0
def clear_scores_for_today():
    mwelog.info("Clearing scores for today")
    all_users = get_all_users()
    for user in all_users:
        user.score_today_en = 0
        user.score_today_tr = 0
        user.score_today_it = 0
    session = database.get_session()
    database.commit(session)
    scoreboard.clear()
Ejemplo n.º 12
0
def put_log(log_type: str, value: str, ignore=False):
    session = get_session()
    if ignore:
        value = '(ignore) ' + value
    else:
        _c = bds_log(time=datetime.now(), log=value, log_type=log_type)
        session.add(_c)
        session.commit()
        session.close()
    print(f'{log_type} > {value}')
Ejemplo n.º 13
0
def ban_user(user: User, user_id: int, context: CallbackContext):
    if user.id == 1065263859:
        session = database.get_session()
        banned_user = get_user(user_id)
        banned_user.banned = True
        for submission in session.query(Submission).filter(
                Submission.user == banned_user).all():
            submission.flagged = True
        database.commit()
        context.bot.send_message(user.id, f"User {user_id} is banned.")
Ejemplo n.º 14
0
def help_handler(user: User, update: Update, context: CallbackContext) -> None:
    context.bot.send_sticker(update.effective_chat.id, TIPS_FEDORA_STICKER)
    session = database.get_session()
    if not user.viewed_help:
        user.viewed_help = True
        database.commit(session)
    reply_to(user, update, user.language.get(Token.HELP_MESSAGE),
             Keyboard.main(user))
    reply_to(user, update, user.language.get(Token.DISCLAIMER),
             Keyboard.main(user))
Ejemplo n.º 15
0
def leave_team(userID: int):
    try:
        session = get_session()
        player = session.query(Player).filter(Player.id == userID).one()
        team_id = player.team_id
        player.team_id = None
        session.commit()
        session.close()
        return {'result': True, 'team_id': team_id}
    except NoResultFound:
        return {'result': False, 'team_id': team_id}
Ejemplo n.º 16
0
def init():
    session = get_session()
    for key in default:
        # noinspection PyBroadException
        try:
            _config = config(key=key, value=default[key])
            session.add(_config)
            session.commit()
        except:
            pass
    session.close()
Ejemplo n.º 17
0
 def api_get_all_config():
     session = get_session()
     _configs = session.query(config).all()
     session.close()
     configs = {}
     for v in _configs:
         configs[v.key] = v.value
     return self.get_body(body_code=200,
                          body_type='config_all',
                          body_content=configs,
                          body_msg='OK')
Ejemplo n.º 18
0
Archivo: mwe.py Proyecto: Dodiom/dodiom
def add_mwe(name: str, meaning: str,  language: Language, date: date,
            lemmas: List[str], category: MweCategory) -> None:
    session = database.get_session()
    mwe = Mwe(name=name,
              meaning=meaning,
              language=language,
              date=date,
              lemmas=lemmas,
              category=category)
    session.add(mwe)
    database.commit(session)
Ejemplo n.º 19
0
def create_team(leaderID: int):
    try:
        session = get_session()
        new_team = Team(leader_id=leaderID)
        session.add(new_team)
        session.commit()
        player = session.query(Player).filter(Player.id == leaderID).one()
        player.team_id = new_team.id
        session.commit()
        session.close()
        return {'result': True, 'team_id': new_team.id}
    except NoResultFound:
        return {'result': False, 'team_id': None}
Ejemplo n.º 20
0
def scoreboard_handler(user: User, update: Update, context: CallbackContext):
    scoreboard.send_to_user(user, update)
    todays_mwe = get_todays_mwe(user.language)
    session = database.get_session()
    submission_count_now = session.query(Submission).filter(
        Submission.mwe == todays_mwe).count()
    if submission_count_now < 100:
        update.message.reply_text(
            user.language.get(Token.TODAYS_TARGET) %
            (100 - submission_count_now))
    if user.became_champion and user.email is None:
        update.message.reply_text(user.language.get(Token.CHAMP_BUT_NO_EMAIL))
    update.message.reply_text(user.language.get(Token.SURVEY_MESSAGE))
Ejemplo n.º 21
0
def get_config(key: str):
    session = get_session()
    _c = session.query(config).filter_by(key=key).first()
    if (_c is None) and (key in default.keys()):
        _c = config(key=key, value=default[key])
        session.add(_c)
        session.commit()
        return get_config(key)
    session.close()
    if _c is None:
        return None
    else:
        return _c.value
Ejemplo n.º 22
0
def create_feedback_data_for_user(user: User) -> FeedbackData:
    data = FeedbackData()
    data.user = user
    data.review_count = len(user.reviews)
    data.submission_count = len(user.submissions)
    data.created = datetime.now()
    session = database.get_session()
    try:
        session.add(data)
        session.commit()
        return data
    except:
        session.rollback()
        raise
Ejemplo n.º 23
0
def join_team(userID: int, teamID: int = None, leaderID: int = None):
    try:
        session = get_session()
        if teamID is not None:
            team = session.query(Team).filter(Team.id == teamID).one()
        elif leaderID is not None:
            team = session.query(Team).filter(Team.leader_id == leaderID).one()
        player = session.query(Player).filter(Player.id == userID).one()
        player.team_id = team.id
        session.commit()
        session.close()
        return {'result': True, 'team_id': team.id}
    except NoResultFound:
        return {'result': False, 'team_id': None}
Ejemplo n.º 24
0
 def send_i_need_x_examples(self, context: CallbackContext):
     self._clear_old_notifications()
     language = mwexpress_config.language
     todays_mwe = get_todays_mwe(language)
     session = database.get_session()
     submission_count_now = session.query(Submission).filter(
         Submission.mwe == todays_mwe).count()
     if submission_count_now < 100:
         for user in get_all_users():
             self._send_notification(
                 context, user.id,
                 user.language.get(Token.TODAYS_TARGET) %
                 (100 - submission_count_now),
                 NotificationType.I_NEED_X_EXAMPLES, SAD_RAIN_STICKER)
             time.sleep(0.3)
Ejemplo n.º 25
0
def get_submissions_to_review(mwe: Mwe, user: User) -> List[Submission]:
    session = database.get_session()
    submissions = session.query(Submission) \
        .filter(Submission.user != user) \
        .filter(Submission.mwe == mwe) \
        .filter(Submission.flagged == False) \
        .all()
    reviews_made_by_user = session.query(Review) \
        .filter(Review.user == user) \
        .filter(Review.mwe == mwe) \
        .all()
    reviews_made_by_user_sub_ids = [
        x.submission_id for x in reviews_made_by_user
    ]
    submissions = sorted(submissions, key=lambda x: x.review_count)
    return [x for x in submissions if x.id not in reviews_made_by_user_sub_ids]
Ejemplo n.º 26
0
def get_user_from_update(update: Update) -> User:
    session = database.get_session()
    user = get_user(update.effective_user.id)

    if user is None:
        username = update.effective_user.username
        if username is None:
            username = update.effective_user.id
        return add_user_with_id(update.effective_user.id,
                                username,
                                mwexpress_config.language)
    else:
        if (user.username == str(user.id) or user.username is None) and update.effective_user.username is not None:
            user.username = update.effective_user.username
            database.commit(session)

    return user
Ejemplo n.º 27
0
def XBoxInput(update: Update, context: CallbackContext):
    context.bot.send_message(chat_id=update.effective_chat.id,
                             text="请稍等,我们正在绑定")
    if get_player_by_xbox_id(update.message.text) is None:
        session = get_session()
        session.add(
            Player(id=update.effective_user.id,
                   xbox_id=update.message.text,
                   tp_number=RANDOM_TP))
        session.commit()
        session.close()
        context.bot.send_message(chat_id=update.effective_chat.id, text="绑定成功")
        return ConversationHandler.END
    else:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text="此账号已经被别人绑定了哦!如果这是你的账号,请联系管理")
        return ConversationHandler.END
Ejemplo n.º 28
0
def join_team_callback(update: Update, context: CallbackContext):
    query = update.callback_query
    team_id = int(re.search(r'[0-9]*', query.data).group())
    session = get_session()
    player = get_player_by_player_id(query.from_user.id)
    team = session.query(Team).filter(Team.id == team_id).one_or_none()
    if player is None:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='加入失败!您未绑定玩家信息。',
                                 reply_to_message_id=update.message.message_id)
        return
    if team is None:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='不存在的队伍!',
                                 reply_to_message_id=update.message.message_id)
        return
    team_members = team.members
    if len(team_members) == TEAM_MEMBER_MAX:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='队伍已满!无法加入。',
                                 reply_to_message_id=update.message.message_id)
        return
    player.team_id = team_id
    session.commit()
    team_members = team.members
    text = ''
    leader = get_player_by_player_id(team.leader_id)
    keyboard = [
        InlineKeyboardButton('Join!!!',
                             callback_data=('join'.join(str(team.id))))
    ]
    for i in team_members:
        text.join(i.xbox_id + '\n')
    if len(team_members) == TEAM_MEMBER_MAX:
        context.bot.edit_message_text(chat_id=query.message.chat_id,
                                      message_id=query.message.message_id,
                                      text=('%s的队伍已满!现有成员:\n%s' %
                                            leader.xbox_id, text))
    else:
        context.bot.edit_message_text(
            chat_id=query.message.chat_id,
            message_id=query.message.message_id,
            text=('%s的队伍正在招募(%s/%s),现有成员:\n %s' % leader.xbox_id,
                  str(len(team_members)), str(TEAM_MEMBER_MAX), text),
            reply_markup=InlineKeyboardMarkup(keyboard))
Ejemplo n.º 29
0
def add_user(name: str, language: Language) -> User:
    user = User(
        username=name,
        language=language,
        viewed_help=False,
        viewed_todays_mwe_help=False,
        viewed_submission_help=False,
        viewed_review_help=False,
        score=0.0,
        score_today_en=0.0,
        score_today_tr=0.0,
        muted=False,
        created=datetime.now()
    )
    session = database.get_session()
    session.add(user)
    database.commit(session)
    return user
Ejemplo n.º 30
0
def rtp(update: Update, context: CallbackContext):
    user = update.message.from_user
    session = get_session()
    player = get_player_by_player_id(user.id)
    if player is None:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text="您没有绑定哦~请使用/bind [XboxID]进行绑定",
                                 reply_to_message_id=update.message.message_id)
    if player.TpNumber < RANDOM_TP:
        res = sendCommand('testfor \"%s\"' % player.XBoxID, '1')
        if not res['status']:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='服务器去火星了,等会儿再试试吧! 错误信息:' % res.msg,
                reply_to_message_id=update.message.message_id)
        elif res['content'][0]['log'] != 'No targets matched selector':
            player.TpNumber += 1
            session.commit()
            session.close()
            x = random.randint(30000, 70000) * -1  # 随机X轴
            z = random.randint(30000, 70000) * -1  # 随机Z轴
            sendCommand('effect \"%s\" resistance 15 5 true' % player.XBoxID,
                        '1')
            time.sleep(0.2)
            sendCommand('tp \"%s\" %s 120 %s' % (player.XBoxID, x, z), '0')
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                f'您已被传送至{x},120,{z}\n使用次数:{player.TpNumber}/{RANDOM_TP}\n传送本不易,且行且珍惜',
                reply_to_message_id=update.message.message_id)

        else:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='您当前不在线上!',
                reply_to_message_id=update.message.message_id)
    else:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='今日随机传送次数已用完,且行且珍惜',
                                 reply_to_message_id=update.message.message_id)