Exemplo n.º 1
0
async def all_(sender: vq.Sender(), peer_id: vq.PeerID()):
    """
    Возвращает список всех заметок
    """
    query = vq.current.session.query(vq.current.Notes)

    important_notes = query.filter_by(owner_id=sender.id,
                                      important=True,
                                      done=False).all()

    undone_notes = query.filter_by(owner_id=sender.id,
                                   important=False,
                                   done=False).all()

    done_notes = query.filter_by(owner_id=sender.id, done=True).all()

    important_notes_list = _get_list(important_notes)
    undone_notes_list = _get_list(undone_notes)
    done_notes_list = _get_list(done_notes)

    document_text = config.DOCUMENT_TEXT_PATTERN.format(
        important_notes=important_notes_list,
        undone_notes=undone_notes_list,
        done_notes=done_notes_list)
    document = vq.Doc.message(document_text, peer_id=peer_id, type_="doc")
    document = await document(title="tasks.txt")

    return vq.Message(config.ANSWER, attachment=document)
Exemplo n.º 2
0
def done(id_: int, sender: vq.Sender()):
    """
    Помечает команду как "выполненное"
    """
    note = vq.current.Notes.fetch_by_id(id_=id_, owner_id=sender.id)
    if note is None:
        return config.ANSWER_NOT_EXIST.format(id=id_)

    note.done = True
    vq.current.session.add(note)
    vq.current.session.commit()

    return config.ANSWER.format(id=id_, text=note.text)
Exemplo n.º 3
0
def imp(id_: int, sender: vq.Sender()):
    """
    Помечает заметку как "важное"
    """
    note = vq.current.Notes.fetch_by_id(id_=id_, owner_id=sender.id)
    if note is None:
        return config.ANSWER_NOT_EXIST.format(id=id_)

    note.important = True
    vq.current.session.add(note)
    vq.current.session.commit()

    return config.ANSWER.format(id=id_, text=note.text)
Exemplo n.º 4
0
def add(text: str, sender: vq.Sender()):
    """
    Добавляет заметку в базу данных
    """
    note = vq.current.Notes(
        owner_id=sender.id,
        text=text,
    )
    vq.current.session.add(note)
    vq.current.session.commit()
    return config.ANSWER.format(
        id=note.id,
        text=text
    )
Exemplo n.º 5
0
def cmd_types(num: int, num_vq: vq.Integer(), word: vq.Word(),
              lit: vq.Literal("foo", "bar"), mention: vq.UserMention(),
              mentions: [vq.UserMention()], string: str, sender: vq.Sender()):
    """
    Check types working
    """
    assert num == 123
    assert num_vq == 456
    assert lit == "foo"
    assert isinstance(mention, vq.User)
    assert isinstance(mentions, list)
    assert string == "long string"

    assert isinstance(sender, vq.User)

    cache("cmd_types")
    return config.ANSWER
Exemplo n.º 6
0
async def urlcheck(api: vq.API, event: vq.Event(), sender: vq.Sender()):
    """
    Update data for user
    """
    link = re.fullmatch(config.LINK_PATTERN, event.object.message.text)

    if event.object.message.peer_id > vq.PEER:
        if not re.fullmatch(
                config.LINK_PATTERN, event.object.message.text) and not (
                    "action" in event.object.message
                    and event.object.message.action.type in
                    ("chat_invite_user", "chat_invite_user_by_link")):
            await api.messages.send(peer_id=event.object.message.peer_id,
                                    message=config.INVALID_LINK,
                                    random_id=0)
            await api.messages.remove_chat_user(
                chat_id=event.object.message.peer_id - vq.PEER,
                user_id=sender.id)
Exemplo n.º 7
0
async def annotypes1(sender: vq.Sender("verificate"),
                     event_brackets: vq.Event(), event: vq.Event, api: vq.API,
                     client_info_brackets: vq.ClientInfo(),
                     client_info: vq.ClientInfo):
    """
    Annotypes
    """

    assert client_info_brackets == client_info and isinstance(
        client_info, attrdict.AttrMap)
    assert api is vq.current.api
    assert event_brackets == event and isinstance(event, attrdict.AttrMap)

    user = await vq.User(user_id=sender.id).get_info("verificate")
    assert user.info == sender.info
    cache("annotypes1")

    return config.ANSWER
Exemplo n.º 8
0
async def addtolist(
        screen: vq.Word(), sender: vq.Sender(), event: vq.Event, api: vq.API):
    """
    Handler to command `addtolist`
    """
    info = await api.utils.resolve_screen_name(screen_name=screen)
    if not info or info.type != "group":
        await api.messages.send(peer_id=event.object.message.peer_id,
                                message=config.INVALID_LINK,
                                random_id=0)
        await api.messages.remove_chat_user(
            chat_id=event.object.message.peer_id - vq.PEER, user_id=sender.id)
        return
    # Последняя позиция пользователя
    last_seq = get(
        """
        SELECT MAX(seq)
        FROM last
        WHERE id = ? AND peer_id = ?;
        """, sender.id, event.object.message.peer_id)[0]
    # Максимальная позиция
    max_seq = get(
        """
        SELECT MAX(seq) FROM last WHERE peer_id = ?;
        """, event.object.message.peer_id)[0]

    # Если пользователь не писал сообщение
    if last_seq["MAX(seq)"] is None:
        post(
            """
            INSERT INTO last
            (id, peer_id, seq, group_id)
            VALUES
            (?, ?, ?, ?)
            """, sender.id, event.object.message.peer_id,
            max_seq["MAX(seq)"] + 1 if max_seq["MAX(seq)"] is not None else 1,
            info.object_id)
        return

    # Если не прошло DELAY сообщений
    if max_seq["MAX(seq)"] - last_seq["MAX(seq)"] < config.DELAY:
        await api.messages.send(peer_id=event.object.message.peer_id,
                                message=config.NOT_WAITED,
                                random_id=0)
        await api.messages.remove_chat_user(
            chat_id=event.object.message.peer_id - vq.PEER, user_id=sender.id)
        return

    group_ids = get(
        """
        SELECT group_id
        FROM last
        WHERE seq > ? AND seq < ? AND peer_id = ?;
        """, last_seq["MAX(seq)"], max_seq["MAX(seq)"] + 1,
        event.object.message.peer_id)
    subscribed = 0
    for group in group_ids:
        is_member = await api.groups.is_member(group_id=group.group_id,
                                               user_id=sender.id)
        if is_member:
            subscribed += 1

    # Если пользователь не подписался в достаточное количество групп
    if subscribed < config.DELAY:

        await api.messages.send(peer_id=event.object.message.peer_id,
                                message=config.LOW_SUBSCRIBED,
                                random_id=0)
        await api.messages.remove_chat_user(
            chat_id=event.object.message.peer_id - vq.PEER, user_id=sender.id)
        return

    # Все успешно. Обновляем данные в базе
    post(
        """
        INSERT INTO last
        (id, peer_id, seq, group_id)
        VALUES
        (?, ?, ?, ?)
        """, sender.id, event.object.message.peer_id, max_seq["MAX(seq)"] + 1,
        info.object_id)