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))
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))
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))
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))
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))
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))
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))
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)
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))