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

14 files changed

Lines changed: 315 additions & 11 deletions

File tree

examples/send_audio/__init__.py

Whitespace-only changes.

examples/send_audio/main.py

Lines changed: 35 additions & 0 deletions
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

Lines changed: 37 additions & 0 deletions
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

Lines changed: 35 additions & 0 deletions
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

Lines changed: 36 additions & 0 deletions
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

Lines changed: 45 additions & 6 deletions
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

Lines changed: 19 additions & 0 deletions
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)

0 commit comments

Comments
 (0)