Skip to content

Commit

Permalink
add
Browse files Browse the repository at this point in the history
add downloadFile, downloadMedia, takeScreenshot
  • Loading branch information
3mora2 committed Jun 12, 2024
1 parent a0944f1 commit 79788e6
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 5 deletions.
49 changes: 45 additions & 4 deletions WPP_Whatsapp/api/Whatsapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def __init__(self, session, threadsafe_browser, page, loop=None, version=None, w
self.options[key] = value

# self.autoCloseInterval = None
self.version = version # or self.options.get('whatsappVersion')
self.version = version # or self.options.get('whatsappVersion')
self.wa_js_version = wa_js_version
self.autoCloseCalled = False
self.isInitialized = False
Expand Down Expand Up @@ -99,6 +99,14 @@ async def afterPageScriptInjected(self):
"() => typeof window.WPP !== 'undefined' && WPP.conn.isRegistered()", page=self.page)
self.connected = is_authenticated

def downloadFile(self, data: str, timeout=120):
return self.ThreadsafeBrowser.run_threadsafe(self.downloadFile_, data, timeout_=timeout)

def downloadMedia(self, messageId: str | dict, timeout=120):
return self.ThreadsafeBrowser.run_threadsafe(self.downloadMedia_, messageId, timeout_=timeout)
def takeScreenshot(self, timeout_=120, **kwargs):
return self.ThreadsafeBrowser.run_threadsafe(self.takeScreenshot_,**kwargs, timeout_=timeout_)

def useHere(self, timeout=120):
return self.ThreadsafeBrowser.run_threadsafe(self.useHere_, timeout_=timeout)

Expand All @@ -114,20 +122,53 @@ def getMessages(self, chatId, params=None, timeout=120):
:param params: (count, id, direction)
:return:
"""
return self.ThreadsafeBrowser.run_threadsafe(self.getMessages_( chatId, params), timeout_=timeout)
return self.ThreadsafeBrowser.run_threadsafe(self.getMessages_(chatId, params), timeout_=timeout)

def rejectCall(self, callId="", timeout=120):
return self.ThreadsafeBrowser.run_threadsafe(self.rejectCall_( callId), timeout_=timeout)
return self.ThreadsafeBrowser.run_threadsafe(self.rejectCall_(callId), timeout_=timeout)

#############################
async def downloadFile_(self, data: str):
"""
/**
* Decrypts message file
* @param data Message object
* @returns Decrypted file buffer (null otherwise)
*/
"""
return await self.ThreadsafeBrowser.page_evaluate(
"(data) => WAPI.downloadFile(data)", data,
page=self.page)

async def downloadMedia_(self, messageId: str | dict):
"""
/**
* Download and returns the media content in base64 format
* @param messageId Message ou id
* @returns Base64 of media
*/
"""
if not isinstance(messageId, str):
messageId = messageId.get("id")
return await self.ThreadsafeBrowser.page_evaluate(
"async (messageId) => WPP.util.blobToBase64(await WPP.chat.downloadMedia(messageId))", messageId,
page=self.page)
async def takeScreenshot_(self, **kwargs):
return await self.ThreadsafeBrowser.create_task(
self.page.screenshot(**kwargs)
)



async def useHere_(self):
return await self.ThreadsafeBrowser.page_evaluate("() => WAPI.takeOver()", page=self.page)

async def logout_(self):
return await self.ThreadsafeBrowser.page_evaluate("() => WPP.conn.logout()", page=self.page)

async def getMessageById_(self, messageId):
return await self.ThreadsafeBrowser.page_evaluate("(messageId) => WAPI.getMessageById(messageId)", messageId, page=self.page)
return await self.ThreadsafeBrowser.page_evaluate("(messageId) => WAPI.getMessageById(messageId)", messageId,
page=self.page)

async def getMessages_(self, chatId, params=None):
"""
Expand Down
23 changes: 23 additions & 0 deletions examples/download.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from WPP_Whatsapp import Create

import logging

logger = logging.getLogger(name="WPP_Whatsapp")
logger.setLevel(logging.DEBUG)

# start client with your session name
your_session_name = "test"
creator = Create(session=your_session_name, browser="firefox")
client = creator.start()
# Now scan Whatsapp Qrcode in browser

# check state of login
if creator.state != 'CONNECTED':
raise Exception(creator.state)

message_id = "true_120363021849652757@g.us_3EB03B7A114A44955D2DBC_201016708170@c.us"

media = client.downloadMedia(message_id)
# OR
message = client.getMessageById(message_id)
media = client.downloadMedia(message)
1 change: 1 addition & 0 deletions examples/send_text_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@
@option dict
return dict -> {'id': 'true_**********@c.us_*************_out', 'ack': 3, 'sendMsgResult': {}}
"""
client.takeScreenshot()
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"the creation of any interaction, such as customer service, media sending, intelligence recognition "
"based on phrases artificial and many other things, use your imagination")

version = "0.2.8"
version = "0.3.0"

setup(
name="WPP_Whatsapp",
Expand Down

0 comments on commit 79788e6

Please sign in to comment.