Skip to content

Commit 99103c3

Browse files
authored
Merge pull request #7 from tejasahluwalia/master
Added functionality to send file, audio, video and sticker message from bot
2 parents 36c4cbd + 9ca10db commit 99103c3

File tree

14 files changed

+315
-11
lines changed

14 files changed

+315
-11
lines changed

examples/send_audio/__init__.py

Whitespace-only changes.

examples/send_audio/main.py

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from aiohttp import web
2+
3+
from waio import Bot, Dispatcher
4+
from waio.logs import loguru_filter
5+
from waio.types import Message
6+
7+
loguru_filter.set_level('DEBUG')
8+
9+
bot = Bot(
10+
apikey='API_KEY',
11+
src_name='SRC_NAME',
12+
phone_number=0000000000
13+
)
14+
15+
dp = Dispatcher(bot=bot)
16+
17+
18+
@dp.message_handler(commands=['start'])
19+
async def start_command(message: Message):
20+
await message.bot.send_audio(
21+
receiver=message.sender_number,
22+
url="https://www.buildquickbots.com/whatsapp/media/sample/audio/sample01.mp3"
23+
)
24+
25+
26+
async def handler_gupshup(request):
27+
event = await request.json()
28+
await dp.handle_event(event)
29+
return web.Response(status=200)
30+
31+
32+
if __name__ == "__main__":
33+
webhook = web.Application()
34+
webhook.add_routes([web.post('/api/v1/gupshup/hook', handler_gupshup)])
35+
web.run_app(webhook, port=8008)

examples/send_file/__init__.py

Whitespace-only changes.

examples/send_file/main.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from aiohttp import web
2+
3+
from waio import Bot, Dispatcher
4+
from waio.logs import loguru_filter
5+
from waio.types import Message
6+
7+
loguru_filter.set_level('DEBUG')
8+
9+
bot = Bot(
10+
apikey='API_KEY',
11+
src_name='SRC_NAME',
12+
phone_number=0000000000
13+
)
14+
15+
dp = Dispatcher(bot=bot)
16+
17+
18+
@dp.message_handler(commands=['start'])
19+
async def start_command(message: Message):
20+
await message.bot.send_file(
21+
receiver=message.sender_number,
22+
url='https://www.buildquickbots.com/whatsapp/media/sample/pdf/sample01.pdf',
23+
filename='test_file.pdf',
24+
caption='Test Caption'
25+
)
26+
27+
28+
async def handler_gupshup(request):
29+
event = await request.json()
30+
await dp.handle_event(event)
31+
return web.Response(status=200)
32+
33+
34+
if __name__ == "__main__":
35+
webhook = web.Application()
36+
webhook.add_routes([web.post('/api/v1/gupshup/hook', handler_gupshup)])
37+
web.run_app(webhook, port=8008)

examples/send_sticker/__init__.py

Whitespace-only changes.

examples/send_sticker/main.py

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from aiohttp import web
2+
3+
from waio import Bot, Dispatcher
4+
from waio.logs import loguru_filter
5+
from waio.types import Message
6+
7+
loguru_filter.set_level('DEBUG')
8+
9+
bot = Bot(
10+
apikey='API_KEY',
11+
src_name='SRC_NAME',
12+
phone_number=0000000000
13+
)
14+
15+
dp = Dispatcher(bot=bot)
16+
17+
18+
@dp.message_handler(commands=['start'])
19+
async def start_command(message: Message):
20+
await message.bot.send_sticker(
21+
receiver=message.sender_number,
22+
url="http://www.buildquickbots.com/whatsapp/stickers/SampleSticker01.webp",
23+
)
24+
25+
26+
async def handler_gupshup(request):
27+
event = await request.json()
28+
await dp.handle_event(event)
29+
return web.Response(status=200)
30+
31+
32+
if __name__ == "__main__":
33+
webhook = web.Application()
34+
webhook.add_routes([web.post('/api/v1/gupshup/hook', handler_gupshup)])
35+
web.run_app(webhook, port=8008)

examples/send_video/__init__.py

Whitespace-only changes.

examples/send_video/main.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from aiohttp import web
2+
3+
from waio import Bot, Dispatcher
4+
from waio.logs import loguru_filter
5+
from waio.types import Message
6+
7+
loguru_filter.set_level('DEBUG')
8+
9+
bot = Bot(
10+
apikey='API_KEY',
11+
src_name='SRC_NAME',
12+
phone_number=0000000000
13+
)
14+
15+
dp = Dispatcher(bot=bot)
16+
17+
18+
@dp.message_handler(commands=['start'])
19+
async def start_command(message: Message):
20+
await message.bot.send_video(
21+
receiver=message.sender_number,
22+
url="https://www.buildquickbots.com/whatsapp/media/sample/video/sample01.mp4",
23+
caption="Test video caption"
24+
)
25+
26+
27+
async def handler_gupshup(request):
28+
event = await request.json()
29+
await dp.handle_event(event)
30+
return web.Response(status=200)
31+
32+
33+
if __name__ == "__main__":
34+
webhook = web.Application()
35+
webhook.add_routes([web.post('/api/v1/gupshup/hook', handler_gupshup)])
36+
web.run_app(webhook, port=8008)

waio/bot.py

+45-6
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@
1010
from waio.keyboard.list import ListMessage
1111
from waio.keyboard.reply import QuickReply
1212
from waio.labeler import BotLabeler
13+
from waio.logs.logger import logger
1314
from waio.middleware import MiddlewareResponse
15+
from waio.models.audio import AudioModel
1416
from waio.models.enums import GupshupMethods
17+
from waio.models.file import FileModel
1518
from waio.models.image import ImageModel
19+
from waio.models.sticker import StickerModel
1620
from waio.models.text import MessageText
21+
from waio.models.video import VideoModel
1722
from waio.states.context import FSMContext
1823
from waio.storage.redis import RedisStorage
1924
from waio.types.message import Message
20-
from waio.logs.logger import logger
2125

2226

2327
class Bot(GupshupSettings, HTTPClient):
@@ -48,15 +52,50 @@ async def send_message(self, receiver: int, message: str):
4852
return await self._base_request(receiver=receiver, data=msg)
4953

5054
async def send_image(
51-
self,
52-
receiver: int,
53-
original_url: str,
54-
preview_url: Optional[str] = None,
55-
caption: Optional[str] = None,
55+
self,
56+
receiver: int,
57+
original_url: str,
58+
preview_url: Optional[str] = None,
59+
caption: Optional[str] = None,
5660
):
5761
image = ImageModel(original_url=original_url, preview_url=preview_url, caption=caption)
5862
return await self._base_request(receiver=receiver, data=image)
5963

64+
async def send_file(
65+
self,
66+
receiver: int,
67+
url: str,
68+
filename: str,
69+
caption: Optional[str] = None,
70+
):
71+
file = FileModel(url=url, filename=filename, caption=caption)
72+
return await self._base_request(receiver=receiver, data=file)
73+
74+
async def send_video(
75+
self,
76+
receiver: int,
77+
url: str,
78+
caption: Optional[str] = None,
79+
):
80+
video = VideoModel(url=url, caption=caption)
81+
return await self._base_request(receiver=receiver, data=video)
82+
83+
async def send_audio(
84+
self,
85+
receiver: int,
86+
url: str,
87+
):
88+
audio = AudioModel(url=url)
89+
return await self._base_request(receiver=receiver, data=audio)
90+
91+
async def send_sticker(
92+
self,
93+
receiver: int,
94+
url: str,
95+
):
96+
sticker = StickerModel(url=url)
97+
return await self._base_request(receiver=receiver, data=sticker)
98+
6099
async def send_list(self, receiver: int, keyboard: ListMessage):
61100
return await self._base_request(receiver=receiver, data=keyboard)
62101

waio/models/audio.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import ujson
2+
3+
4+
class AudioModel:
5+
def __init__(
6+
self,
7+
url: str,
8+
):
9+
self.type = 'audio'
10+
self.url = url
11+
12+
def dict(self):
13+
return {
14+
"type": self.type,
15+
"url": self.url,
16+
}
17+
18+
def json(self):
19+
return ujson.dumps(self.dict(), indent=2)

waio/models/file.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import Optional
2+
3+
import ujson
4+
5+
6+
class FileModel:
7+
def __init__(
8+
self,
9+
url: str,
10+
filename: str,
11+
caption: Optional[str] = None
12+
):
13+
self.type = 'file'
14+
self.url = url
15+
self.filename = filename
16+
self.caption = caption
17+
18+
def dict(self):
19+
return {
20+
"type": self.type,
21+
"url": self.url,
22+
"filename": self.filename,
23+
"caption": self.caption,
24+
}
25+
26+
def json(self):
27+
return ujson.dumps(self.dict(), indent=2)

waio/models/sticker.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import ujson
2+
3+
4+
class StickerModel:
5+
def __init__(
6+
self,
7+
url: str,
8+
):
9+
self.type = 'sticker'
10+
self.url = url
11+
12+
def dict(self):
13+
return {
14+
"type": self.type,
15+
"url": self.url,
16+
}
17+
18+
def json(self):
19+
return ujson.dumps(self.dict(), indent=2)

waio/models/video.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import Optional
2+
3+
import ujson
4+
5+
6+
class VideoModel:
7+
def __init__(
8+
self,
9+
url: str,
10+
caption: Optional[str] = None
11+
12+
):
13+
self.type = 'video'
14+
self.url = url
15+
self.caption = caption
16+
17+
def dict(self):
18+
return {
19+
"type": self.type,
20+
"url": self.url,
21+
"caption": self.caption,
22+
}
23+
24+
def json(self):
25+
return ujson.dumps(self.dict(), indent=2)

waio/protocols/bot.py

+37-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Optional
22
from typing import Protocol
3+
34
from waio.keyboard.list import ListMessage
45
from waio.keyboard.reply import QuickReply
56

@@ -16,10 +17,41 @@ async def send_reply(self, receiver: int, keyboard: QuickReply):
1617
"""Send reply message"""
1718

1819
async def send_image(
19-
self,
20-
receiver: int,
21-
original_url: str,
22-
preview_url: Optional[str] = None,
23-
caption: Optional[str] = None,
20+
self,
21+
receiver: int,
22+
original_url: str,
23+
preview_url: Optional[str] = None,
24+
caption: Optional[str] = None,
2425
):
2526
"""Send image message"""
27+
28+
async def send_file(
29+
self,
30+
receiver: int,
31+
url: str,
32+
filename: str,
33+
caption: Optional[str] = None,
34+
):
35+
"""Send file message"""
36+
37+
async def send_video(
38+
self,
39+
receiver: int,
40+
url: str,
41+
caption: Optional[str] = None,
42+
):
43+
"""Send video message"""
44+
45+
async def send_audio(
46+
self,
47+
receiver: int,
48+
url: str,
49+
):
50+
"""Send audio message"""
51+
52+
async def send_sticker(
53+
self,
54+
receiver: int,
55+
url: str,
56+
):
57+
"""Send sticker message"""

0 commit comments

Comments
 (0)