コード例 #1
0
    async def update_streak(self, user_id):
        today = utilities.get_day_start()
        cur_studytime = await utilities.get_redis_score(
            self.redis_client, "daily_" + str(today), user_id)
        threshold = utilities.config["business"]["min_streak_time"]

        # A user must study for some minimal time to be considered having studied in a time interval
        if cur_studytime >= threshold:
            # We use a auto-expiring key to implement a fluid streak system - as long as user has studied in the past 24 hours, today the user will have streak
            # Note this grants users a grace period of 1 day
            streak_name = "has_streak_today_" + str(user_id)

            if not self.redis_client.exists(streak_name):
                yesterday = today - timedelta(days=1)
                yesterday_str = "daily_" + str(yesterday)

                # TODO: fix - will have to be 2 or find some way to do this if Redis has no logs
                # Make sure there has been a day since the start of the bot in case there is no logs in Redis (database gets reset)
                if yesterday - self.birthtime < timedelta(days=1):
                    reset = False
                else:
                    reset = (await utilities.get_redis_score(
                        self.redis_client, yesterday_str, user_id)) < threshold

                await self.add_streak(user_id, reset)

            self.redis_client.set(streak_name, 1)
            self.redis_client.expireat(streak_name,
                                       utilities.get_tomorrow_start())
コード例 #2
0
    async def update_streak(self, user_id):
        today = utilities.get_day_start()
        cur_studytime = await utilities.get_redis_score(
            self.redis_client, "daily_" + str(today), user_id)
        threshold = utilities.config["business"]["min_streak_time"]

        # A user must study for some minimal time to be considered having studied in a time interval
        if cur_studytime >= threshold:
            # We use a auto-expiring key to implement a fluid streak system - as long as user has studied in the past 24 hours, today the user will have streak
            streak_name = "has_streak_today_" + str(user_id)

            if not self.redis_client.exists(streak_name):
                yesterday = today - timedelta(days=1)
                yesterday_str = "daily_" + str(yesterday)

                # assuming there are redis logs
                reset = (await utilities.get_redis_score(
                    self.redis_client, yesterday_str, user_id)) < threshold
                await self.add_streak(user_id, reset)

            self.redis_client.set(streak_name, 1)
            self.redis_client.expireat(streak_name,
                                       utilities.get_tomorrow_start())
コード例 #3
0
    async def update_streak(self, user_id):
        today = utilities.get_day_start()
        cur_studytime = await utilities.get_redis_score(
            self.redis_client, "daily_" + str(today), user_id)
        threshold = utilities.config["business"]["min_streak_time"]
        if cur_studytime >= threshold:
            streak_name = "has_streak_today_" + str(user_id)

            if not self.redis_client.exists(streak_name):
                yesterday = today - timedelta(days=1)
                yesterday_str = "daily_" + str(yesterday)

                if yesterday - self.birthtime < timedelta(days=2):
                    reset = False
                else:
                    reset = await utilities.get_redis_score(
                        self.redis_client, yesterday_str, user_id) >= threshold

                await self.add_streak(user_id, reset)

            self.redis_client.set(streak_name, 1)
            self.redis_client.expireat(streak_name,
                                       utilities.get_tomorrow_start())
コード例 #4
0
def test_get_day_start_yesterday_leap_day():
    assert str(utilities.get_day_start()) == "2020-02-29 17:00:00"
コード例 #5
0
def test_get_day_start_today_after():
    assert str(utilities.get_day_start()) == "2020-01-01 17:00:00"
コード例 #6
0
def test_get_day_start_today_slightly_before():
    assert str(utilities.get_day_start()) == "2020-01-01 17:00:00"