From bf9657dfc58b3b4081193b424a09eed98dc52c3f Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Fri, 2 Jun 2017 23:24:28 +0300 Subject: [PATCH] Add steps and downloads example. --- examples/steps_and_downloading_file.py | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 examples/steps_and_downloading_file.py diff --git a/examples/steps_and_downloading_file.py b/examples/steps_and_downloading_file.py new file mode 100644 index 00000000..9e2f720b --- /dev/null +++ b/examples/steps_and_downloading_file.py @@ -0,0 +1,65 @@ +import asyncio +import logging + +from aiogram import Bot, types +from aiogram.dispatcher import Dispatcher +from aiogram.types import ContentType + +API_TOKEN = 'BOT TOKEN HERE' + +logging.basicConfig(level=logging.INFO) + +loop = asyncio.get_event_loop() +bot = Bot(token=API_TOKEN, loop=loop) +dp = Dispatcher(bot) + + +@dp.message_handler(commands=['start']) +async def send_welcome(message): + await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.") + + +@dp.message_handler(commands=['sticker']) +async def save_sticker(message): + async def handle_bad_message(msg): + """ + Handler for unknown messages + """ + await msg.reply('That is not a sticker!') + + # Create an reply markup (ForceReply) + markup = types.ForceReply(selective=True) + + # Send reply to user + await message.reply('Please send me a sticker.', reply_markup=markup) + + # Wait next message + # It can only be a sticker + msg = await dp.next_message(message, + content_types=[ContentType.STICKER], + otherwise=handle_bad_message) + + # Download file to memory (io.BytesIO) + photo = await bot.download_file(msg.sticker.file_id) + # And you can use other syntax: + # photo = io.BytesIO() + # await bot.download_file(msg.sticker.file_id, photo) + # Or use filename for download file to filesystem: + # await bot.download_file(msg.sticker.file_id, 'sticker.webp') + + # Send photo to user + await bot.send_photo(message.chat.id, photo, caption=msg.sticker.emoji, + reply_to_message_id=message.message_id) + + +async def main(): + count = await dp.skip_updates() + print(f"Skipped {count} updates.") + await dp.start_pooling() + + +if __name__ == '__main__': + try: + loop.run_until_complete(main()) + except KeyboardInterrupt: + loop.stop()