Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
 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)
Beispiel #4
0
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))
Beispiel #5
0
 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)
Beispiel #6
0
 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)
Beispiel #7
0
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))
Beispiel #8
0
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))
Beispiel #9
0
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))
Beispiel #10
0
    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)))
Beispiel #11
0
    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)))
Beispiel #12
0
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}))