def initial_state(self, update: Update): if update.message.reply_to_message is None: text = update.message.text.split() if len(text) > 1 and text[1][0] == '@': user = DB.get_by_username(text[1][1:]) else: user = DB.get_user_by_id(update.message.from_user.id) else: print(update.message.reply_to_message.from_user.username) user = DB.get_user_by_id( update.message.reply_to_message.from_user.id) if user is None: return {} else: return {"user_id": user['user_id']}
def plot_time_with_benefit(self, user_id, con): activities = pd.read_sql_query( "SELECT * from activities a JOIN activity_names an ON a.activity_id=an.id WHERE an.challenge=1 AND a.user_id=" + str(user_id), con) # activities = activities.merge(self.activity_names[['id', 'challenge', 'name']], left_on="activity_id", right_on="id", # how="inner") activities['date'] = activities.start_time.apply( lambda x: pd.Timestamp(x).strftime("%m-%d-%y")) grouped = activities[~activities.activity_id.isin([0, 9])].groupby( by=["date", "name"]).duration.sum() range_ = pd.date_range( end=pd.to_datetime("today").strftime("%m/%d/%y"), periods=14) indicies = pd.Series(range_).apply( lambda x: pd.Timestamp(x).strftime("%m-%d-%y")) sns.set() ax = grouped.loc[indicies, :].unstack().plot(kind='bar', figsize=(10, 10), stacked=True) ax.set_xlabel('Дата') ax.set_ylabel('Время с пользой (часов)') ax.set_title('Время с пользой по дням пользователя %s' % (DB.get_user_by_id(user_id)['username']))
def plot_all_time(self, user_id, con): activities = pd.read_sql_query( "SELECT * from activities a JOIN activity_names an ON a.activity_id=an.id WHERE a.user_id=" + str(user_id), con) activities['date'] = activities.start_time.apply( lambda x: pd.Timestamp(x).strftime("%m-%d-%y")) grouped = activities[~activities.activity_id.isin([0, 9])].groupby( by=["date", "name"]).duration.sum() range_ = pd.date_range( end=pd.to_datetime("today").strftime("%m/%d/%y"), periods=14) indicies = pd.Series(range_).apply( lambda x: pd.Timestamp(x).strftime("%m-%d-%y")) sns.set() ax = grouped.loc[indicies, :].unstack().plot(kind='bar', figsize=(10, 10), stacked=True) ax.set_xlabel('Дата') ax.set_ylabel('Время (часов)') ax.set_title('Все занятия пользователя %s' % (DB.get_user_by_id(user_id)['username']))
def sleep_menu_format(self, message_text, update: Update, state): user = DB.get_user_by_id(state['user_id']) duration = Data.get_average_sleep_duration(state['user_id']) start_sleep = Data.get_average_sleep_start_time(state['user_id']) wake_up = Data.get_average_wake_up_time(user['user_id']) return message_text.format( username=user['username'].replace("_", " "), average_duration="_{} ± {}_".format(*duration), average_wake_up="_{} ± {}_".format(*wake_up), average_sleep_start="_{} ± {}_".format(*start_sleep))
def main_menu_format(self, message_text, update: Update, state): user = DB.get_user_by_id(state['user_id']) active_task = DB.get_active_task_user(user['user_id']) task_icon = "🟢" if active_task['active'] else "🔴" return message_text.format( username=user['username'].replace("_", "\_"), task_icon=task_icon, active_task=active_task['name'], task_time=active_task['time'], today=DB.get_user_useful_time(user['user_id'], 'today'), week=DB.get_user_useful_time(user['user_id'], 'week'), month=DB.get_user_useful_time(user['user_id'], 'month'), all=DB.get_user_useful_time(user['user_id'], 'all'))
def toggle_tag(self, update: Update, context: CallbackContext): user = DB.get_user_by_id(update.message.from_user.id) if user['tag']: DB.disable_tag(update.message.from_user.id) update.message.reply_text( "☑️ *Ты выключил теги\. Вернуть можешь командой:*\n" "/toggle\_tag", parse_mode="MarkdownV2") else: DB.enable_tag(update.message.from_user.id) update.message.reply_text( "☑️ *Ты включил теги\. Выключить можешь командой:*\n" "/toggle\_tag", parse_mode="MarkdownV2")