Beispiel #1
0
 def next(self, update:telegram.Update):
     try:
         self.text = self.get_text(update)
         
         action, value = self.text.split("::")
         
         if action.lower() == "nav":
             self.set_run('sf-start', int(value))
         elif action.lower() == "value":
             # if we should return on click then we do so
             if self.return_on_click:
                 return InputResponse(InputResponse.STOP, None, value)
             
             if self.multiple:
                 self.selected.append(value)
             else:
                 self.selected = value
         elif action.lower() == "ok":
             return InputResponse(InputResponse.STOP, None, self.selected)
         elif action.lower() == "cancel":
             return InputResponse(InputResponse.STOP, None, self.initial)
         
         return InputResponse(InputResponse.CONTINUE, None, None)
     except Exception as e:
         logger.exception(str(e))
Beispiel #2
0
    def next(self, update: telegram.Update):
        try:
            self.text = self.get_text(update)
            password = self.get_run('password', '')

            if self.text.lower() == "cancel":
                return InputResponse(InputResponse.ABORT,
                                     NextResponse(self.name))
            elif self.text.lower() == "ok":
                if len(password) < self.min_length or \
                   len(password) > self.max_length:
                    self.set_error(_("The password length should be betwwen {} and {}")\
                                   .format(self.min_length, self.max_length))
                    return InputResponse(InputResponse.CONTINUE,
                                         NextResponse(self.name))
                else:
                    return InputResponse(InputResponse.STOP,
                                         NextResponse(self.name), password)

            password += self.text
            self.set_run("password", password)
            return InputResponse(InputResponse.CONTINUE,
                                 NextResponse(self.name))

        except Exception as e:
            logger.exception(str(e))
Beispiel #3
0
    def menu(self, update: telegram.Update):
        try:
            self.text = self.get_text(update)
            password = self.get_run('password', '')

            message = _(
                "Tape your numeric password code.\n\nCurrent: {}").format(
                    '*' * len(password))

            error = self.get_error()
            if error:
                message += _("\n\nError: {}").format(error)

            replies = []
            for i in range(1, 4):
                row = []
                for j in range(3):
                    row.append(
                        InlineKeyboardButton(_(str(i + j)),
                                             callback_data=_(str(i + j))))
                replies.append(row)
            kbd = InlineKeyboardMarkup(replies)

            return InputResponse(InputResponse.CONTINUE,
                                 MenuResponse(message, kbd))

        except Exception as e:
            logger.exception(str(e))
Beispiel #4
0
    def next(self, update: telegram.Update):
        try:
            text = self.get_text(update)
            logger.debug("text {}", text)

            if text == '**ok**':
                value = self.get_run('value', None)
                self.set_run('value', None)
                return InputResponse(InputResponse.STOP, None, value=value)
            elif text == '**cancel**':
                return InputResponse(InputResponse.ABORT)

            is_good, value = self.validate_data(text)
            if not is_good:
                self.set_error(value)
            else:
                self.set_run('value', value)

            return InputResponse(InputResponse.CONTINUE, None, value)
        except Exception as e:
            logger.exception(str(e))
Beispiel #5
0
    def menu(self, update: telegram.Update):
        try:
            self.text = self.get_text(update)

            password1 = self.get_run('password1', None)
            if password1 is None:
                message = _("Please send your password")
                error = self.get_error()
                if error:
                    message += "\n\nError: {}".format(error)

                replies = [[
                    InlineKeyboardButton(_("Cancel"), callback_data="cancel")
                ]]
                kbd = InlineKeyboardMarkup(replies)
                return InputResponse(InputResponse.CONTINUE,
                                     MenuResponse(message, kbd))

            if self.ASK_TWICE:
                password2 = _("Please send again your password")
                error = self.get_error()
                if error:
                    message += "\n\nError: {}".format(error)
                replies = [[
                    InlineKeyboardButton(_("Cancel"), callback_data="cancel")
                ]]
                kbd = InlineKeyboardMarkup(replies)
                return InputResponse(InputResponse.CONTINUE,
                                     MenuResponse(message, kbd))

            message = _("Done!")
            replies = [[InlineKeyboardButton(_("OK"), callback_data="ok")]]
            kbd = InlineKeyboardMarkup(replies)

            return InputResponse(InputResponse.STOP,
                                 MenuResponse(message, kbd), password1)
        except Exception as e:
            logger.exception(str(e))
Beispiel #6
0
    def menu(self, update: telegram.Update):
        try:
            message = self.get_label(update)
            message += "\n\n" + self.get_current_value(update)

            error = self.get_error()
            if error:
                message += "\n\n" + error

            kbd = self.get_keyboard(update)

            menu_resp = MenuResponse(message, markup=kbd)
            resp = InputResponse(InputResponse.CONTINUE, menu_resp, None)
            return resp
        except Exception as e:
            logger.exception(str(e))
Beispiel #7
0
    def next(self, update: telegram.Update):
        try:
            self.text = self.get_text(update)
            self.dispatcher.bot.delete_message(
                update.effective_chat.id, update.effective_message.message_id)

            if self.text.lower() == 'ok':
                password1 = self.get_run('password1', None)
                return InputResponse(InputResponse.STOP,
                                     NextResponse(self.name), password1)
            elif self.text.lower() == 'cancel':
                return InputResponse(InputResponse.ABORT,
                                     NextResponse(self.name))

            if len(self.text) < self.min_length or len(
                    self.text) > self.max_length:
                self.set_error(_("The password length should be between {} and {}")\
                               .format(self.min_length, self.max_length))
                return InputResponse(InputResponse.CONTINUE,
                                     NextResponse(self.name))

            password1 = self.get_run('password1', None)
            if password1 is None:
                self.set_run('password1', self.text)
                return InputResponse(InputResponse.CONTINUE,
                                     NextResponse(self.name))

            password2 = self.get_run('password2', None)
            if password2 is None:
                if password1 != self.text:
                    self.set_error(_("The two password doesn't match. Retry"))
                    return InputResponse(InputResponse.CONTINUE,
                                         NextResponse(self.name))

                self.set_run('password2', self.text)
                return InputResponse(InputResponse.CONTINUE,
                                     NextResponse(self.name))
        except Exception as e:
            logger.exception(str(e))
Beispiel #8
0
 def return_as_hook(self, res, value=None):
     from ninagram.response import InputResponse
     if isinstance(res, InputResponse):
         return res
     else:
         return InputResponse(InputResponse.CONTINUE, res, value)
Beispiel #9
0
 def menu(self, update:telegram.Update):
     try:
         message = _("Please select a {}".format(self.name))
         replies = []
         start = self.get_run('sf-start', 0, insert=True)
         
         real_start = start * self.offset
         real_end = real_start + self.offset
         for row in self.choices[real_start:real_end]:
             if isinstance(row, tuple):
                 text, value = row
             elif isinstance(row, Model):
                 text = str(row)
                 value = str(row.id)
             else:
                 text = value = row
                 
             if self.multiple:
                 if value in self.selected:
                     text += " ✅"
             else:
                 if value == self.selected:
                     text += " ✅"
             
             replies.append([InlineKeyboardButton(_(text), callback_data="value::{}".format(value))])
             
         row = []
         if start > 0:
             row.append(InlineKeyboardButton(_("⏪"), callback_data="nav::{}".format(start-1)))
             
         all_pages = len(self.choices) // self.offset
         rest = len(self.choices) % self.offset
         range_max = min([all_pages, start+3])
                     
         inside = []
         for page in range(start+1, range_max+1):
             inside.append(page)
             
         avail = 3 - len(inside)
         if avail:
             for page in range(start-avail, start):
                 if page < 0:
                     continue
                 inside.append(page)
             
         inside = sorted(inside)
         for page in inside:
             row.append(InlineKeyboardButton(_("{}".format(page+1)),
                                              callback_data='nav::{}'.format(page)))
             
         if start > all_pages:
             pass
         elif start == all_pages and rest!=0:
             pass
         else:
             row.append(InlineKeyboardButton(_("⏩"), callback_data="nav::{}".format(start+1)))
             
         replies.append(row)
         
         replies.append([InlineKeyboardButton(_("OK"), callback_data="ok::ok"),
                         InlineKeyboardButton(_("Cancel"), callback_data="cancel::cancel")])
         kbd = InlineKeyboardMarkup(replies)
         
         return InputResponse(InputResponse.CONTINUE, MenuResponse(message, kbd), None)
     except Exception as e:
         logger.exception(str(e))