def list_mp(list_id): list_ = List.get_by_id(list_id) list_ = List.get_by_id(list_.subscribed_by_id) mp = InlineKeyboardMarkup(row_width=1) for item in list_.items: if item.tag: s = "🔘 %s" % item.name else: s = "⚪ %s" % item.name mp.add( InlineKeyboardButton(s, callback_data="upd_list" + str(list_id) + "." + str(item.id))) if len(list_.items) > 0: mp.row( InlineKeyboardButton(_("➕ Add item"), callback_data="add_item_%i" % list_id), InlineKeyboardButton(_("🔗 Share"), switch_inline_query=list_.name), InlineKeyboardButton(_("❌ Delete item"), callback_data="delete_items_%i" % list_id), ) else: mp.row( InlineKeyboardButton(_("➕ Add item"), callback_data="add_item_%i" % list_id), InlineKeyboardButton(_("🔗 Share"), switch_inline_query=list_.name), ) return mp
def delete_items_mp(spotted: list, list_id): list_ = List.get_by_id(list_id) orig_list = List.get_by_id(list_.subscribed_by) mp = InlineKeyboardMarkup(row_width=1) for item in orig_list.items: spt = spotted.copy() if item.id in spotted: s = "💔 %s" % item.name spt.remove(item.id) else: s = "❤ %s" % item.name spt.append(item.id) cdata = "spt" + str(list_id) + '.' + ltos(spt) mp.add(InlineKeyboardButton(s, callback_data=cdata)) if len(spotted) == 0: mp.add( InlineKeyboardButton(_("🔙 Back"), callback_data="upd_list" + str(list_id) + '.')) else: mp.add( InlineKeyboardButton(_("❌ Delete"), callback_data="cmt" + str(list_id) + '.' + ltos(spotted))) return mp
def lists_delete(list_id): list = List.get_by_id(list_id=list_id) if list: list.delete() return ('', 204) else: return ('List not found', 404)
def add_item(msg): user = User.get_by_id(msg.chat.id) list_id = list_to_edition[user.id] list_ = List.get_by_id(list_id) orig_list = list_.subscribed_by items = [ Item(name=item_name, list_id=orig_list.id) for string in msg.text.split('\n') for item_name in string.split(',') if len(item_name) <= 255 ] if len(items) == 0: bot.send_message(msg.chat.id, _("Too long item name. Cancelled.")) else: bot.send_message(msg.chat.id, ngettext("Item created", "Items created", len(items)), parse_mode="markdown", reply_markup=mps.main_mp(msg.chat.id), disable_notification=True) Item.bulk_create(items) sent = bot.send_message(msg.chat.id, "📝 *%s*" % list_.name, reply_markup=mps.list_mp(list_id), parse_mode='markdown') list_.last_message_id = sent.message_id list_.save() for sub in orig_list.subs: if sub == list_: continue bot.edit_message_reply_markup(chat_id=sub.owner.id, message_id=sub.last_message_id, reply_markup=mps.list_mp(sub.id))
def lists_put(list_id): db_list = List.get_by_id(list_id) if db_list: db_list.name = request.get_json()['name'] db_list.save() return ('', 204) else: return ('List not found', 404)
def lists_get_by_id(list_id): list = List.get_by_id(list_id=list_id) if list: response = jsonify(list_api_model(list)) response.status_code = 200 return response else: return ('List not found', 404)
def commit_deleting(c): dot = c.data.find('.') list_id = int(c.data[3:dot]) list_ = List.get_by_id(list_id) spt_s = c.data[dot + 1:] spotted = [int(i) for i in spt_s.split(',')] Item.delete().where(Item.id.in_(spotted)).execute() for sub in List.select().where(List.subscribed_by == list_.subscribed_by): bot.edit_message_reply_markup(sub.owner.id, sub.last_message_id, reply_markup=mps.list_mp(sub.id))
def update_list(c): dot = c.data.find('.') list_id = int(c.data[8:dot]) list_ = List.get_by_id(list_id) if c.data[dot + 1:]: item_id = int(c.data[dot + 1:]) item = Item.get_by_id(item_id) item.tag = not item.tag item.save() for sub in List.select().where( List.subscribed_by == list_.subscribed_by): bot.edit_message_reply_markup(sub.owner.id, sub.last_message_id, reply_markup=mps.list_mp(list_id)) bot.answer_callback_query(c.id) else: bot.edit_message_reply_markup(c.message.chat.id, c.message.message_id, reply_markup=mps.list_mp(list_id))
def start(msg: types.Message): u_lang = msg.from_user.language_code if msg.from_user.language_code in const.languages else const.default_lang user, created = User.get_or_create(id=msg.from_user.id, defaults={ 'username': msg.from_user.username, 'first_name': msg.from_user.first_name, 'last_name': msg.from_user.last_name, 'language_code': u_lang }) params = msg.text.split(' ') if len(params) > 1 and params[1] == 'createlist': create_list(msg) elif len(params) > 1 and params[1].startswith("sub"): list_ = List.get_by_id(int(params[1][3:])) msg.text = f"📝 {list_.name}" new_list, created = List.get_or_create( name=list_.name, owner=user.id, defaults={"subscribed_by": list_}) if created: bot.send_message(msg.from_user.id, _("You subscribed to _{}_ list").format( list_.name), parse_mode='markdown', reply_markup=mps.main_mp(user.id)) text = f"🔗 📝 *{new_list.name}*" else: delete_message(msg.chat.id, list_.last_message_id) bot.send_message(msg.chat.id, _("You already have list with same name"), reply_markup=mps.main_mp(user.id)) text = f"📝 *{new_list.name}*" sent = bot.send_message(msg.chat.id, text, reply_markup=mps.list_mp(new_list.id), parse_mode='markdown') new_list.last_message_id = sent.message_id new_list.save() else: bot.send_message(msg.from_user.id, _("Hello. Create your first list."), reply_markup=mps.main_mp(user.id))
def post(self, version, service_slug): if not self.valid_version(version): self.error(404, "API Version %s not supported" % version) return service = Service.get_by_slug(service_slug) if not service: self.error(404, "Service %s does not exist" % service_slug) return name = self.request.get('name', default_value=None) description = self.request.get('description', default_value=None) list = self.request.get('list', default_value=None) if description: service.description = description if name: service.name = name if list: l = List.get_by_id(list) if l is None: self.error(400, "Can't find list with slug %s" % list) return service.list = l if "" == list: service.list = None list = "removed" if name or description or list: invalidate_cache() service.put() self.json(service.rest(self.base_url(version)))
def post(self, version): if not self.valid_version(version): self.error(404, "API Version %s not supported" % version) return name = self.request.get('name', default_value=None) description = self.request.get('description', default_value=None) slist = self.request.get('list', default_value=None) l = None if slist: l = List.get_by_id(slist) if not name: self.error(400, "Bad name: %s" % name) return if not description: self.error(400, "Bad description: %s" % description) return if slist and not l: self.error(400, "Bad list slug: %s" % slist) return slug = self.request.get('slug') or slugify.slugify(name) existing_s = Service.get_by_slug(slug) if existing_s: self.error(404, "A sevice with this name already exists") return s = Service(name=name, id=slug, description=description, list=l) s.put() invalidate_cache() self.response.set_status(201) self.json(s.rest(self.base_url(version)))
def enter_item(c): user = User.get_by_id(c.message.chat.id) list_id = int(c.data[9:]) list_ = List.get_by_id(list_id) original_list = list_.subscribed_by s = "📝 *%s*\n\n" % list_.name for item in original_list.items: if item.tag: s += "🔘 %s\n" % item.name else: s += "⚪ %s\n" % item.name s += _("*Insert new item to buy: *") bot.send_message(chat_id=user.id, text=s, reply_markup=types.ForceReply(), parse_mode='markdown') try: bot.delete_message(c.message.chat.id, list_.last_message_id) except telebot.apihelper.ApiException: pass list_to_edition.update({user.id: list_id}) bot.register_next_step_handler_by_chat_id(user.id, add_item)
def delete(self, list_id): list = List.get_by_id(int(list_id)) list.key.delete() self.response.headers['Content-Type'] = 'application/json' self.response.out.write(json.dumps({'ok': True}))