Exemple #1
0
def message(session, receiver_profile_id, message_text):
    """Отправка сообщения

    Keyword arguments:
    receiver_profile_id -- ID профиля которому будет отправлено сообщение
    session -- сессия залогиненого аккаунта
    message_text -- текст сообщения, что будет отправлен
    """
    # Данные для отправки сообщения
    data = {
        "ID": receiver_profile_id,
        "textcounter": len(message_text),
        "text": message_text,
        "sendto": "both",
        "SEND_MESSAGE": "YES"
    }
    # Отправка сообщения
    response = send_request(session=session,
                            method="POST",
                            link=f"https://www.natashaclub.com/compose.php"
                            f"?ID={receiver_profile_id}",
                            data=data)
    # Функция возвращает ответ сервера на запрос по отправке сообщения
    if response.status_code == 200:
        return True
    else:
        return False
Exemple #2
0
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)
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
def login(profile_login, password):
    """Функция для входа на сайт

    Keyword arguments:
    profile_login -- логин аккаунта
    password -- пароль аккаунта
    """
    # Создаем сессию для отправщика (не имея фиксированую сессию залогинено
    # аккаунта не получится отправить сообщение)
    session = requests.Session()

    # Данные для отправки POST запроса
    data = {
        "rememberme": "1",
        "imageField": "log in",
        "ID": profile_login,
        "Password": password
    }
    # Отправляем запрос для входа на сайт
    request = send_request(session=session,
                           method="POST",
                           link="https://www.natashaclub.com/member.php",
                           data=data)

    # Если успешно вошли на сайт, то должен создаться logtrackID для
    # залогиненого аккаунта
    if "logtrackID" in request.text:
        logtrack_id = request.text.split("'")[1]
        # Узнаем ID аккаунта, что вошел на сайт
        profile_id = logtrack_id.split("=")[1].split("&")[0]
        print("Successfully logged to the website!")
        # Функция возвращает ID аккаунта что вошел и его сессию
        return session, profile_id
    else:
        print("Wrong login or password!")
        # Функция возвращает False если логин или пароль оказались
        # неправильными
        return False