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()
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())
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...")
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())
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())
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()
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())
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())
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())
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())
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()
def process_func(msg): peer_id = msg.get('peer_id') api.messages.send(peer_id=peer_id, message=bot_help, random_id=get_rand())
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()