Пример #1
0
def check_if_number_exists(driver: WhatsAPIDriver, number: str) -> bool:
    """
    Function to check if a number exists on WhatsApp
    :param driver: driver object used for checking
    :param number: The number to check
    :return: True if the number exists, else false
    """
    try:
        driver.get_chat_from_phone_number(number, createIfNotFound=True)
        return True
    except ChatNotFoundError:
        return False
Пример #2
0
def send_message(num: int, msg: str, driver: WhatsAPIDriver):
    """
    Method to send a message to someone
    :param num: phone number to which message is to be sent
    :param msg: the message to be sent
    :param driver: WhatsApidDiver object using which whatsapp web is to be operated
    :return: string with name and link to chat
    """
    # get chat with user
    chat = driver.get_chat_from_phone_number(str(num), createIfNotFound=True)
    try:
        chat.send_message(msg)  # send message
    except (JsException, JavascriptException):
        pass
Пример #3
0
import os
from webwhatsapi import WhatsAPIDriver
profiledir = os.path.join('.', 'firefox_cache')
if not os.path.exists(profiledir):
    os.makedirs(profiledir)
driver = WhatsAPIDriver(profile=profiledir, headless=True)
print('login')
driver.wait_for_login()
driver.save_firefox_profile(remove_old=False)
print('start')
chat = driver.get_chat_from_phone_number('491xxxxxxxxxx')
driver.send_message_to_id(chat.id, 'This works')
Пример #4
0
profiledir = os.path.join(".", "firefox_cache")
if not os.path.exists(profiledir):
    os.makedirs(profiledir)
driver = WhatsAPIDriver(profile=profiledir,
                        client="remote",
                        command_executor=os.environ["SELENIUM"])

print("Waiting for QR")
driver.wait_for_login()
print("Saving session")
driver.save_firefox_profile(remove_old=False)
print("Bot started")

logo = "./docs/logo/logomark-01.png"

chat = driver.get_chat_from_phone_number(os.environ["MY_PHONE"])

chat.send_message_with_thumb(
    logo,
    "https://github.com/mukulhase/WebWhatsapp-Wrapper",
    "Whatsapp Wrapper!",
    "(Based on web.whatsapp.com)",
    """
    This package is used to provide a python interface for interacting with WhatsAPP Web to send and
     receive Whatsapp messages. It is based on the official Whatsapp Web Browser
      Application and uses Selenium browser automation to communicate with Whatsapp Web.
    https://github.com/mukulhase/WebWhatsapp-Wrapper
    """,
)
Пример #5
0
        if reloaded_contacts_set is not None and len(
                reloaded_contacts_set) > 0:
            logging.info("The contacts will be reloaded: " +
                         ','.join(sender_msisdn_list))
            for reload_contact_row in reloaded_contacts_set:

                reload_contact_row_id = reload_contact_row[0]
                reload_contact_row_sender = reload_contact_row[1]
                # Activating reload
                with db_conn.cursor() as cur:
                    cur.execute(activate_reload, (reload_contact_row_id, ))
                    db_conn.commit()

                try:
                    chat = driver.get_chat_from_phone_number(
                        reload_contact_row_sender)

                    # Creating directory set for photos if not exists
                    dirName = create_directory(reload_contact_row_sender)

                    # Load all earlier messages
                    logging.info("Loading earlier messages for: " +
                                 reload_contact_row_sender + "...")
                    if chat.are_all_messages_loaded() == False:
                        chat.load_all_earlier_messages()
                        logging.info("Earlier messages loaded for: " +
                                     reload_contact_row_sender)
                    else:
                        logging.info("All messages already loaded for: " +
                                     reload_contact_row_sender)
Пример #6
0
        assigner.assign_chat(agent_id, chat_id);
    
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.username_pw_set("rbpzxiof", "mY5QlIiDUZQD")
client.connect("m11.cloudmqtt.com", 18211, 60)

driver = WhatsAPIDriver(profile = "/home/user/.mozilla/firefox/mwad0hks.default")
print("Waiting for QR")
driver.wait_for_login()

print("Bot started")

chat = driver.get_chat_from_phone_number("27837548664")
print(chat.name)
print(chat.id)
#chat.load_earlier_messages()

    

print(assigner.get_agent_id("hello"))
print(assigner.get_agent_id(chat.id))

for message in chat.get_messages(include_notifications=True, include_me=True):
    topic = "brandon/{}".format(chat.id)
    print(topic)
    if not isinstance(message, MediaMessage):
        payload = "{}: {}".format(message.sender.get_safe_name(), message.content.encode('utf-8').strip())
        client.publish(topic, payload)
Пример #7
0
from webwhatsapi import WhatsAPIDriver

driver = WhatsAPIDriver(username="******")
print('get_unread: ',
      driver.get_unread(include_me=True, include_notifications=True))
print('get_contacts: ', driver.get_contacts())
# print('save_firefox_profile: ', driver.save_firefox_profile())
getChatFrom = driver.get_chat_from_phone_number(628999871008)
print('get_chat_from_phone_number: ', getChatFrom)
# print('get_all_messages_in_chat: ', driver.get_all_messages_in_chat(getChatFrom.id, include_me=True, include_notifications=True))
print(driver.get_qr())
print('get_all_chats: ', driver.get_all_chats())
print(driver.wait_for_login())
# print('get_safe_name', driver.get_safe_name())
print('get_unread: ', driver.get_unread())
# print('view_unread: ', driver.view_unread())
Пример #8
0
class Whatsapp(threading.Thread):
    def __init__(self, identifier):
        self.driver = WhatsAPIDriver(loadstyles=True)
        self.identifier = identifier
        self.messagesSent = 0
        self.messageQueue = []
        self.status = {}
        
        print("Waiting for QR")
        try:
            self.driver.wait_for_login()
            super(Whatsapp, self).__init__()
            self.setDaemon(True)
        except Exception as ex:
            print("Error", ex)

        print("New Browser Opened")
        
    def get_chat(self, phone):
        try:
            chat = self.driver.get_chat_from_phone_number(phone)
        except ChatNotFoundError:
            url = self.driver._URL+"/send?phone="+phone
            self.driver.driver.get(url)
            t.sleep(5)
            chat = self.driver.get_chat_from_phone_number(phone)
        return chat

    # Give timeout_after_sent to avoid being suspected as a spammer.
    # Assign high value after multithreading is implemented.
    def send_whatsapp_message(self, phone, message, chat_id=None):
        try:
            if chat_id is None:
                chat = self.get_chat(phone)
                self.driver.chat_send_message(chat.id, message)
            else:
                self.driver.send_message_to_id(chat_id, message)

            self.messagesSent += 1
        except ChatNotFoundError:
            # This means the given number is invalid.
            Logger.warning("Invalid phone number: " + str(phone) + " will be deleted")
            c = Contact.objects.get(phone=phone)
            c.delete()
            raise ChatNotFoundError
        except Exception as e:
            # This means browser is still not available even after 5 seconds.
            # But the number is not invalid.(= valid)
            Logger.error(repr(e))
            raise e

    def send_message_and_save_log(self):
        messages = Message.objects.all().filter(use=True).filter(broadcast=True)
        for m in messages:
            logs = Log.objects.all().filter(message_id=m.id).filter(sent=True)
            contacts_already_sent = []
            for l in logs:
                contacts_already_sent.append(l.contact_id)
            contacts_to_send = Contact.objects.all().exclude(id__in=contacts_already_sent)

            if len(contacts_to_send) > 0:
                # Save the log first so that the same contact cannot be used in another browsers.
                for contact in contacts_to_send:
                    newLogs = Log.objects.filter(message_id=m.id).filter(contact_id=contact.id).get_or_create(message_id=m.id, contact_id=contact.id, sent=False, sender_id=self.identifier, broadcasted=True)
                    if len(newLogs) > 0:
                        l = newLogs[0]
                    
                    try:
                        print("Try to send message: [phone(", contact.id, ": ", contact.phone, "), text(", m.id, ": ", m.text, ")", sep="")
                        # If no exception, update 'sent', 'sent_at'
                        self.send_whatsapp_message(contact.phone, m.text)
                        l.sent = True
                        l.sent_at = now()
                        l.save(update_fields=['sent', 'sent_at'])
                        # The reason returning here is: once the message is sent to anyone of contacts,
                        # then server should bring available contacts again, not iterating over the given list.
                        # Otherwise, there is no way to control server immediately after insert new messages, contacts to DB.
                        return
                    except Exception as e:
                        Logger.warning(repr(e))
                        # Wait when error occurred so that browser can be opened again.
                        t.sleep(5)

    def poll_unread(self):
        try:
            if self.driver.is_logged_in():
                # Spam only works when this server is used as a spammer.
                if apps.WhatsappConfig.spammer == 'true':
                    try:
                        self.send_message_and_save_log()
                    except Exception as e:
                        Logger.error(repr(e))
                # Otherwise, this server will fetch unread messages and send webhook.
                else:
                    data = []
                    
                    try:
                        Logger.debug("(" + self.identifier + "): get_unread()")
                        for messageGroup in self.driver.get_unread():
                            unread_messages = []
                            for m in messageGroup.messages:
                                unread_messages.append({
                                    "content": m.content,
                                    "timestamp": "{timestamp}".format(timestamp=m.timestamp)
                                })
                            data.append({ "chatId": messageGroup.chat.id, "unreadMessages": unread_messages })
                    except Exception as e:
                        Logger.error(repr(e))

                    # Doesn't have to make a request when there is no unread message.
                    if len(data) > 0:
                        payload = {'data': data}
                        webhook_url = apps.WhatsappConfig.api_endpoint + '/no_auth/whatsapp/webhook'
                        try:
                            print("Request:", webhook_url)
                            r = requests.post(webhook_url, json=payload, timeout=3)
                            print("Response:", r.text)
                        except Exception as e:
                            print("Tokotalk API(" + webhook_url + ") doesn't respond in 3 second", sep='')

        except Exception as e:
            Logger.error(repr(e))

    def run(self):
        while True:
            try:
                self.poll_unread()
            except Exception as e:
                Logger.debug(repr(e) + ": POLL FAILED")
            
            # in case the interval is not set in .env
            interval = 5
            if apps.WhatsappConfig.message_interval is not None:
                interval = int(apps.WhatsappConfig.message_interval)
            t.sleep(interval)
Пример #9
0
import os
import sys
import time

from webwhatsapi import WhatsAPIDriver

driver = WhatsAPIDriver(username="******")
for x in arr:
    chat = driver.get_chat_from_phone_number(x, True)
    driver.send_message_to_id(chat.id, "testando velocidade do envio")
Пример #10
0
print("Waiting for QR")
wppDriver.wait_for_login()

print("Bot started")
config = {
    'postgres': {
        'driver': 'postgres',
        'host': '35.247.235.153',
        'database': 'tbc_wpp',
        'user': '******',
        'password': '******',
    }
}

db = DatabaseManager(config)
Model.set_connection_resolver(db)


class Driver(Model):
    __table__ = 'drivers'
    pass


drivers = Driver.all()

print("Buscando motoristas...")

for x in drivers:
    chat = wppDriver.get_chat_from_phone_number(str(x.phone), True)
    wppDriver.send_message_to_id(chat.id, "testando velocidade do envio")
Пример #11
0
wppDriver.wait_for_login()

print("Bot started")
config = {
    'postgres': {
        'driver': 'postgres',
        'host': '35.247.235.153',
        'database': 'tbc_wpp',
        'user': '******',
        'password': '******',
    }
}

db = DatabaseManager(config)
Model.set_connection_resolver(db)



class Driver(Model):
	 __table__ = 'drivers'
	 pass

drivers = Driver.all()

print("Buscando motoristas...")


for x in drivers:
	chat = wppDriver.get_chat_from_phone_number(str(x.phone), True)
	wppDriver.send_message_to_id(chat.id, "testando velocidade do envio")