コード例 #1
0
def process_func(msg, count: int = 1):
    peer_id = msg.get('peer_id')
    if count < 1:
        api.messages.send(
            peer_id=peer_id,
            message="Количество фото не может быть меньше одного",
            random_id=get_rand())
    if count > 10:
        api.messages.send(peer_id=peer_id,
                          message="Количество фото не может быть больше 10",
                          random_id=get_rand())
    local_session = session_factory()
    random_pics: List[Picture] = [
        Picture.get_random_pic(local_session) for _ in range(0, count)
    ]
    api_string = ",".join([
        random_pic.get_api_string(peer_id, local_session)
        for random_pic in random_pics
    ])
    formatted_time = ", ".join(
        [format_vrp_time(random_pic.add_time) for random_pic in random_pics])
    api.messages.send(peer_id=peer_id,
                      message=formatted_time,
                      random_id=get_rand(),
                      attachment=api_string)
    local_session.close()
コード例 #2
0
def process_func(msg):
    peer_id = msg.get('peer_id')
    message = Phrase.get_all_str()
    api.messages.send(peer_id=peer_id,
                      message=message
                      if message != "" and message else "Нет ни одной фразы!",
                      random_id=get_rand())
コード例 #3
0
def process_func(msg):
    peer_id = msg.get('peer_id')
    api.messages.send(peer_id=peer_id,
                      message="Готово",
                      random_id=get_rand())
    log(label, "Exiting...")
    raise Exception("Exiting...")
コード例 #4
0
def process_func(msg):
    peer_id = msg.get('peer_id')
    random_text = get_random_text(random.choice(balabola_phrases),
                                  random.choice(list(StylesEnum)))
    if random_text:
        phrase = random_text
    else:
        phrase = random.choice(mashup_phrases)
    api.messages.send(peer_id=peer_id, message=phrase, random_id=get_rand())
コード例 #5
0
def process_func(msg):
    text = msg.get('text')
    phrase_id = int(
        text.replace("Баян, убери фразу", "").replace("Баян, удали фразу",
                                                      "").replace('\n', ''))
    session.delete(Phrase.get(phrase_id))
    session.commit()
    peer_id = msg.get('peer_id')
    api.messages.send(peer_id=peer_id, message="Удалил", random_id=get_rand())
コード例 #6
0
def process_func(msg):
    peer_id = msg.get('peer_id')
    local_session = session_factory()
    random_audio: RawLink = RawLink.get_random_audio(local_session)
    formatted_time = format_vrp_time(random_audio.add_time)
    audio_api_str: str = random_audio.get_api_string(peer_id=peer_id)
    api.messages.send(peer_id=peer_id,
                      message=formatted_time,
                      random_id=get_rand(),
                      attachments=audio_api_str)
    local_session.close()
コード例 #7
0
def process_func(msg):
    text = msg.get('text')
    user_id = int(msg.get('from_id'))
    phrase_text = text.replace("Баян, добавь фразу",
                               "").replace("Баян, новая фраза",
                                           "").strip().capitalize()
    if not User.get(user_id):
        session.add(User(user_id))
        session.commit()
    session.add(Phrase(text=phrase_text, user_id=user_id))
    session.commit()
    peer_id = msg.get('peer_id')
    api.messages.send(peer_id=peer_id, message="Добавил", random_id=get_rand())
コード例 #8
0
def process_func(msg):
    peer_id = msg.get('peer_id')
    local_session = session_factory()
    month_start_dt = get_month_start()
    pictures_from_month_start = Picture.get_all_from_date_ordered(
        month_start_dt, local_session, limit=10)
    attachment_strings = list(
        map(lambda x: x.get_api_string(peer_id), pictures_from_month_start))
    local_session.close()
    api.messages.send(peer_id=peer_id,
                      message="Топ за месяц",
                      attachment=','.join(attachment_strings),
                      random_id=get_rand())
コード例 #9
0
ファイル: users_best_handler.py プロジェクト: Werozel/SeenBot
def process_func(msg):
    peer_id = msg.get('peer_id')
    local_session = session_factory()
    user_id: int = msg.get('from_id')
    user: Optional[User] = User.get(user_id, local_session)
    best_pictures = Picture.get_best_for_user(user_id, local_session, limit=10)
    attachment_strings = list(
        map(lambda x: x.get_api_string(peer_id), best_pictures))
    local_session.close()
    api.messages.send(peer_id=peer_id,
                      message=f"{user.get_formatted_name()}: топ",
                      attachment=','.join(attachment_strings),
                      random_id=get_rand())
コード例 #10
0
ファイル: show_karma_handler.py プロジェクト: Werozel/SeenBot
def process_func(msg):
    users = session.query(User).order_by().all()
    stats: list = list(
        map(
            lambda x: x.show_stat(),
            sorted(users,
                   reverse=True,
                   key=lambda user: (user.ups / user.downs) *
                   (user.ups + user.downs) if user.downs > 0 else 0)))
    stat_str = '\n'.join(stats)
    peer_id = msg.get('peer_id')
    api.messages.send(peer_id=peer_id,
                      message=stat_str + f" ",
                      random_id=get_rand())
コード例 #11
0
ファイル: raw_links_handler.py プロジェクト: Werozel/SeenBot
def process_func(msg):
    peer_id = msg.get('peer_id')
    atts = list(
        filter(
            lambda x: x.get('type') in ['audio', 'video'],
            msg.get('attachments') + get_attachments(msg.get('fwd_messages'))))
    for att in atts:
        type = att.get('type')
        obj = att.get(type)
        owner_id = att.get('owner_id')
        id = obj.get('id')
        existing_obj: RawLink = RawLink.get(id)
        if existing_obj and existing_obj.owner_id == owner_id:
            orig_user: User = User.get(existing_obj.user_id)
            orig_user.downs += 1
            session.add(orig_user)
            seen_message = Phrase.get_random().split(':')[1].strip() + '\n'
            seen_message += f'Отправил  {orig_user.first_name}' \
                            f' {orig_user.last_name}  в' \
                            f'  {format_time(existing_obj.add_time)}\n'
            api.messages.send(peer_id=peer_id,
                              message=seen_message,
                              random_id=get_rand())
            session.add(orig_user)
        else:
            raw_link_id = obj.get('id')
            if RawLink.get(raw_link_id) is None:
                new_raw_link_obj = RawLink(id=raw_link_id,
                                           type=type,
                                           owner_id=obj.get('owner_id'),
                                           access_key=obj.get('access_key'),
                                           track_code=obj.get('track_code'),
                                           url=obj.get('url'),
                                           user_id=msg.get('from_id'))
                session.add(new_raw_link_obj)
    session.commit()
コード例 #12
0
def process_func(msg):
    peer_id = msg.get('peer_id')
    api.messages.send(peer_id=peer_id, message=bot_help, random_id=get_rand())
コード例 #13
0
ファイル: picture_handler.py プロジェクト: Werozel/SeenBot
def process_pic(msg) -> None:
    # Getting all the attachments even in forwarded messages
    attachments = msg.get('attachments') + get_attachments(
        msg.get('fwd_messages'))
    # Leaving only the photos
    photos = list(
        map(lambda x: x.get('photo'),
            list(filter(lambda x: x.get('type') == 'photo', attachments))))
    # New thread - new session
    outer_session = session_factory()
    sender_id = msg.get('from_id')
    # Getting the user from DB or creating a new one
    user: User = outer_session.query(User).filter(User.id == sender_id).first()
    if not User:
        user = User(sender_id)
        outer_session.add(user)
        outer_session.commit()
    user.all_pics += len(photos)
    # Message that will be sent to chat if picture has been already seen
    seen_message = Phrase.get_random().split(':')[1].strip() + '\n'

    seen: int = 0
    start_time = time.time()
    # Count of seen pictures
    for pic in photos:
        sizes = pic.get('sizes')  # All sizes for this picture
        pic_id = pic.get('id')

        # Checking if a max size of this picture has been already seen
        result = was_seen(sizes)

        if result.get('result'):
            # Already seen
            seen += 1
            picture_size: PictureSize = result.get('simpic')
            local_session = session_factory()
            picture: Picture = Picture.get(
                picture_size.pic_id) if picture_size else None
            user.bads += picture.bads
            orig_user: User = User.get(picture.user_id,
                                       local_session) if picture else None
            if orig_user:
                seen_message += f'Отправил  {orig_user.first_name}' \
                                f' {orig_user.last_name}  в' \
                                f'  {format_time(picture_size.add_time)}\n'
            local_session.close()
        else:
            # New picture
            # Adding it to the DB
            picture = Picture(pic_id, sender_id, pic.get('owner_id'),
                              pic.get('access_key'))
            outer_session.add(picture)
            outer_session.commit()
            for size in sizes:
                outer_session.add(
                    PictureSize(pic_id, size.get('type'), size.get('url')))
            outer_session.add(PicMessage(sender_id, pic_id, msg.get('text')))
            outer_session.commit()

    end_time = time.time()
    log(label, f"Checked in {end_time - start_time}")

    # Adding negative carma for each seen picture

    # Sending a message if any picture was not new
    if seen > 0:
        log(label,
            f"{user.first_name} {user.last_name} downs +1 = {user.downs}")
        user.downs += 1
        peer_id = msg.get('peer_id')
        api.messages.send(peer_id=peer_id,
                          message=seen_message,
                          random_id=get_rand())

    outer_session.add(user)
    outer_session.commit()
    outer_session.close()