def process_func(msg, karma: Karma, label: str): reply_msg = msg.get('reply_message') reply_msg_from_id = reply_msg.get('from_id') if reply_msg_from_id < 0: return user = User.get(reply_msg_from_id) if not user: user = User(reply_msg_from_id) if karma == Karma.POSITIVE: user.ups += 1 log(label, f"{user.first_name} {user.last_name} ups +1 = {user.ups}") elif karma == Karma.NEGATIVE: user.downs += 1 log(label, f"{user.first_name} {user.last_name} downs +1 = {user.downs}") elif karma == Karma.BADS: user.bads += 1 log(label, f"{user.first_name} {user.last_name} bads +1 = {user.bads}") session.add(user) for att in list( filter(lambda x: x.get('type') == 'photo', reply_msg.get('attachments'))): picture = Picture.get(att.get('photo').get('id')) if picture: if karma == Karma.POSITIVE: picture.ups += 1 elif karma == Karma.NEGATIVE: picture.downs += 1 elif karma == Karma.BADS: picture.bads += 1 session.add(picture) session.commit()
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() 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): 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_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()