def action_custom_callback(self, update: Update, state, project_id): 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 activity = DB.get_activity_by_project_id(project_id) project = DB.get_project_by_id(project_id) self.start_activity.start_activity(state['u_id'], activity['name'], update, delay=int(state['dur']), project=project) return False
def main_menu_format(self, message_text, update: Update, state): project = DB.get_project_by_id(state['p_id']) time = self.get_string_by_duration(float(DB.get_project_time(state['p_id'])['duration'])) is_active = bool(project['active']) name = project['name'].replace("_","\_") # name = name.replace("(", "\(") # name = name.replace(")", "\)") # name = name.replace(".", "\.") # name = name.replace("-", "\-") return message_text.format( project_name=name, activity_name=DB.get_activity_by_id(state['a'])['name'], time=time, status="🟢 *Проект активен*" if is_active else "🔴 *Проект не активен*" )
def is_stop_hidden(self, state, update): project = DB.get_project_by_id(state['p_id']) is_active = bool(project['active']) return not is_active
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")