예제 #1
0
    def done(self, update: Update, state):
        if update.callback_query is not None and update.callback_query.from_user.id != int(state['u_id']):
            update.callback_query.answer(text="Меню было вызвано другим пользователем.", show_alert=True)
            return False

        if state['a'] == '0':
            update.callback_query.answer(text="Ты не выбрал занятие.", show_alert=True)
            return False

        if int(state['dur']) == 0:
            update.callback_query.answer(text="Продолжительность не должна быть равна нулю.", show_alert=True)
            return False

        activity = DB.get_activity_by_id(state['a'])

        project = DB.get_active_project(state['u_id'], activity['name'])

        if project is not None:
            DB.add_activity(state['u_id'], state['a'], int(state['dur'])/60, project['id'])
        else:
            DB.add_activity(state['u_id'], state['a'], int(state['dur'])/60, None)

        string = ""

        if project is not None:
            name = project['name'].replace("_", "\_")
            name = name.replace("(", "\(")
            name = name.replace(")", "\)")
            name = name.replace(".", "\.")
            name = name.replace("-", "\-")

            string = "\n📂 *Проект:* _%s_" % name


        update.callback_query.edit_message_text(
            text="✅ Ты добавил _{}_ к занятию *{}*\.\n{}".format(
                self.get_string_by_duration(int(state['dur'])).replace("-", "\-"),
                DB.get_activity_by_id(int(state['a']))['name'].replace("_", "\_"),
                string
            ),
            parse_mode="MarkdownV2"
        )

        return False
예제 #2
0
    def start_activity(self,
                       user_id,
                       name,
                       update: Update,
                       penalty=0,
                       edit=True,
                       delay=0,
                       project=None):
        active_activity = DB.get_active_activity(user_id)

        stopped_activity = None

        duration = 0

        if active_activity is not None:
            data_now = datetime.datetime.now()
            data_start = datetime.datetime.strptime(
                active_activity['start_time'], '%Y-%m-%d %H:%M:%S')
            duration = (data_now - data_start).seconds / 3600 - penalty / 60

            stopped_activity = active_activity
            stopped_activity['duration'] = duration

        if project is None:
            project = DB.get_active_project(user_id, name)

        if project is not None:
            DB.start_activity(user_id, name, duration, project['id'],
                              update.effective_chat.id, delay)
        else:
            DB.start_activity(user_id, name, duration, None,
                              update.effective_chat.id, delay)

        if stopped_activity is not None and stopped_activity[
                'activity_id'] != 0:
            if edit and update:
                func = update.callback_query.message.reply_to_message.reply_text
            else:
                func = update.message.reply_text

            ac_name = stopped_activity['name'].replace("_", "\_")
            ac_name = ac_name.replace("(", "\(")
            ac_name = ac_name.replace(")", "\)")
            ac_name = ac_name.replace("-", "\-")
            ac_name = ac_name.replace(".", "\.")

            project_string = ""

            if stopped_activity['project_id'] is not None:
                stopped_project = DB.get_project_by_id(
                    stopped_activity['project_id'])

                pr_name = stopped_project['name'].replace("_", "\_")
                pr_name = pr_name.replace("(", "\(")
                pr_name = pr_name.replace(")", "\)")
                pr_name = pr_name.replace(".", "\.")
                pr_name = pr_name.replace("-", "\-")

                project_string = "📂 *Проект:* _%s_\n" % pr_name

            day_activities = DB.get_user_activities_by_day(user_id, 0)

            sum_duration = 0

            for activity in day_activities:
                if activity['activity_id'] == stopped_activity['activity_id']:
                    if any([
                            stopped_activity['project_id'] is None,
                            stopped_activity['project_id'] ==
                            activity['project_id']
                    ]):
                        sum_duration += activity['sum']

            func(
                text=
                "✅ Занятие завершено \({}\)\n{}\n⏱ Продолжительность: {}\.\n😎 Всего за сутки: {}\."
                .format(
                    ac_name,
                    project_string,
                    self.get_string_by_duration(stopped_activity['duration']),
                    self.get_string_by_duration(sum_duration),
                ),
                parse_mode="MarkdownV2")

        if name != "Ничего":
            string = ""

            if project is not None:
                pr_name = project['name'].replace("_", "\_")
                pr_name = pr_name.replace("(", "\(")
                pr_name = pr_name.replace(")", "\)")
                pr_name = pr_name.replace(".", "\.")
                pr_name = pr_name.replace("-", "\-")

                string = "\n📂 *Проект:* _%s_" % pr_name

            ac_name = name.replace("_", "\_")
            ac_name = ac_name.replace("(", "\(")
            ac_name = ac_name.replace(")", "\)")
            ac_name = ac_name.replace("-", "\-")
            ac_name = ac_name.replace(".", "\.")

            delay_str = ""

            if delay > 0:
                delay_str = "\n\n⏱ \+%s мин\." % delay

            text = "🧾 Ты начал занятие \"{}\"\.{}{}\n\n⏹ Остановить: /stop".format(
                ac_name, string, delay_str)

            if update.callback_query is not None:
                update.callback_query.message.edit_text(
                    text=text, parse_mode="MarkdownV2")
            else:
                update.effective_message.reply_text(text=text,
                                                    parse_mode="MarkdownV2")