def profile_in_inbox(session, profile_id, inbox=True): """Отправка сообщения Keyword arguments: session -- сессия залогиненого аккаунта profile_id -- ID профиля которого мы ищем в Inbox """ # Ищем в Inbox сообщение профиля data = {"filterID": profile_id, "filterPPage": "20"} if inbox: link = "https://www.natashaclub.com/inbox.php" else: link = "https://www.natashaclub.com/outbox.php" response = send_request(session=session, method="POST", link=link, data=data) inbox_page = get_parsed_page(response) numbers = [ int(number.text) for number in inbox_page.find("td", class_="panel").find_all("b") ] # Эта переменная показывает общее количество сообщений от профиля, # что мы искали в инбоксе total_messages_in_inbox_from_profile = numbers[0] # Здесь показывается количетсво новых сообщений от этого профиля new_messages_in_inbox_from_profile = numbers[1] return total_messages_in_inbox_from_profile, \ new_messages_in_inbox_from_profile
def get_message_text(session, message_url: str): # get message text from link response = send_request(session=session, method="POST", link="https://www.natashaclub.com/" + message_url) message_page = get_parsed_page(response) message_text = message_page.find('td', class_='table').text message_text = text_format(message_text) return message_text
def dialog_page_upload(current_profile_session, data: dict, page: int, open_msg_count: int, chat_id: bytes, sender_id: str, inbox: bool, download_new: bool = False): data['page'] = page if inbox: link = "https://www.natashaclub.com/inbox.php" else: link = "https://www.natashaclub.com/outbox.php" response = send_request(session=current_profile_session, method="GET", link=link + "?page={page}&" "filterID={filterID}&" "filterPPage={filterPPage}".format(**data)) inbox_page = get_parsed_page(response) messages = [tr for tr in inbox_page.find_all('tr', class_='table')] messages = list(map(lambda x: [td for td in x.find_all('td')], messages)) messages = [col for col in messages if len(col) == 5 - int(not inbox)] for i in range(len(messages)): # if need to download less messages than exists on page if i == open_msg_count: break text_time = messages[i][3 - int(not inbox)].text time = datetime.strptime(text_time, " %Y-%m-%d %H:%M:%S ") text_preview = messages[i][4 - int(not inbox)].text message_url = messages[i][4 - int(not inbox)].find('a')["href"] if inbox: viewed = not messages[i][1 - int(not inbox)].contents[1]['src'] \ == '/templates/tmpl_nc/images_nc/new.gif' elif download_new: viewed = True else: viewed = not messages[i][1 - int(not inbox)].text == '\nNot read' if viewed or download_new: text = get_message_text(session=current_profile_session, message_url=message_url) else: text = text_preview db_message_create(chat_id=chat_id, send_time=time, viewed=viewed, sender=sender_id, text=text)
def limit_out(session, receiver_profile_id): """Бывает, что аккаунт который рассылает сообщения достигает лимита по рассылке. Это видно когда мы переходим на страницу какого-то профиля и нажимаем отправить бесплатное сообщение, тогда оно показывает что лимит исчерпан Keyword arguments: send_free_message_page -- страница, которая появляется при нажатии кнопи отправить сообщение """ response = send_request(session=session, method="GET", link="https://www.natashaclub.com/compose.php?ID" "=" + receiver_profile_id) send_free_message_page = get_parsed_page(response) text = send_free_message_page.find("div", id="ContentDiv").find( "td", class_="text").text if "Sorry, but you've reached your limit for today." in text: return True else: return False
def first_letter_sent(session, profile_id) -> bool: """При нажатии на кнопку (отправить письмо), может перейти на страницу где написано You can write only 1 first letter. И данного профиля может не быть в Inbox и Outbox. Поэтому создана такая вот дополнительная проверка Keyword arguments: session -- сессия залогиненого аккаунта profile_id -- ID профиля которому будем отсылать письмо """ response = send_request(session, method="GET", link="https://www.natashaclub.com/compose.php?ID" "=" + profile_id) compose_new_message_page = get_parsed_page(response) text = compose_new_message_page.find("td", class_="text").text if text == "You can write only 1 first letter": return True return False