예제 #1
0
    def get_activity_buttons(self, state, update: Update):
        def get_keyboard_by_names(names):
            keyboard = list()
            i = 0

            for name in names:
                button = {
                    "name": name,
                    "action": "select_activity",
                    "callback": True
                }

                if i % 2 == 0:
                    keyboard.append([button])
                else:
                    keyboard[i // 2].append(button)
                i += 1

            return keyboard

        if state['q'] == "":
            activity_names = DB.get_user_accessible_activities(
                state['u_id'], update.effective_chat.id)

            names = []

            counted = DB.count_user_activities(state['u_id'])

            for obj in counted:
                if obj['name'] in [x['name'] for x in activity_names]:
                    names.append(obj['name'])

            for activity in activity_names:
                if activity['name'] not in names and activity['id'] != 0:
                    names.append(activity['name'])
        else:
            names = [
                obj['name'] for obj in DB.get_user_activity_by_query(
                    update.effective_user.id, update.effective_chat.id,
                    state['q'])
            ]

            if 'Ничего' in names:
                names.remove('Ничего')

        i = self.IN_PAGE * (int(state['page']) - 1)

        return get_keyboard_by_names(names[i:i + 4])
예제 #2
0
    def start(self, update: Update, context: CallbackContext):

        temp = update.message.text.split(" ")

        if len(temp) > 1 and not temp[1].isdigit():
            activities = DB.get_user_activity_by_query(
                update.effective_user.id, update.effective_chat.id, temp[1])
            if len(activities) == 1:
                activity_name = activities[0]['name']

                self.start_activity(update.effective_user.id,
                                    activity_name,
                                    update,
                                    edit=False)
                return

        chat = DB.get_chat_by_id(update.effective_chat.id)

        if chat is None:
            keyboard = [[
                KeyboardButton(text="/help"),
                KeyboardButton(text="/start")
            ]]

            markup = ReplyKeyboardMarkup(keyboard=keyboard,
                                         one_time_keyboard=True,
                                         resize_keyboard=True)

            update.message.reply_text(
                text="👋 *Привет!*\n\n"
                "Я помогу тебе контролировать все твои занятия в течении дня и "
                "существенно улучшить твою продуктивность.\n\n"
                "📄 *Как пользоваться ботом* - /help\n"
                "▶️ *Выбрать и начать занятие* - /start",
                parse_mode="Markdown")

            # update.message.reply_text(
            #     text="🌟 Поздравляю! Для этого чата было начислено *30 дней* бесплатного *Premium*.\n\n"
            #          "_Узнать возможности Premium и продлить его можно в меню_ /chat",
            #     parse_mode="Markdown"
            # )
        else:
            self.send(update, context)

        DB.update_user_and_chat(update.message.from_user,
                                update.effective_chat)
예제 #3
0
    def is_next_hidden(self, state, update: Update):
        if state['q'] == "":
            length = len(
                DB.get_user_accessible_activities(
                    state['u_id'], update.effective_chat.id)) - 1
        else:
            names = [
                obj['name'] for obj in DB.get_user_activity_by_query(
                    update.effective_user.id, update.effective_chat.id,
                    state['q'])
            ]

            if 'Ничего' in names:
                names.remove('Ничего')

            length = len(names)

        page_count = ceil(length / self.IN_PAGE)

        if page_count <= int(state['page']):
            return True
        return False