diff --git a/examples/asynchronous_telebot/download_file_example.py b/examples/asynchronous_telebot/download_file_example.py
new file mode 100644
index 0000000..5105d9d
--- /dev/null
+++ b/examples/asynchronous_telebot/download_file_example.py
@@ -0,0 +1,20 @@
+
+import telebot
+from telebot.async_telebot import AsyncTeleBot
+
+
+
+bot = AsyncTeleBot('TOKEN')
+
+
+@bot.message_handler(content_types=['photo'])
+async def new_message(message: telebot.types.Message):
+ result_message = await bot.send_message(message.chat.id, 'Downloading your photo...', parse_mode='HTML', disable_web_page_preview=True)
+ file_path = await bot.get_file(message.photo[-1].file_id)
+ downloaded_file = await bot.download_file(file_path.file_path)
+ with open('file.jpg', 'wb') as new_file:
+ new_file.write(downloaded_file)
+ await bot.edit_message_text(chat_id=message.chat.id, message_id=result_message.id, text='Done!', parse_mode='HTML')
+
+
+bot.polling(skip_pending=True)
diff --git a/examples/asynchronous_telebot/exception_handler.py b/examples/asynchronous_telebot/exception_handler.py
new file mode 100644
index 0000000..f1da60f
--- /dev/null
+++ b/examples/asynchronous_telebot/exception_handler.py
@@ -0,0 +1,27 @@
+
+import telebot
+from telebot.async_telebot import AsyncTeleBot
+
+
+import logging
+
+logger = telebot.logger
+telebot.logger.setLevel(logging.DEBUG) # Outputs debug messages to console.
+
+class ExceptionHandler(telebot.ExceptionHandler):
+ def handle(self, exception):
+ logger.error(exception)
+
+bot = AsyncTeleBot('TOKEN',exception_handler=ExceptionHandler())
+
+
+
+
+@bot.message_handler(commands=['photo'])
+async def photo_send(message: telebot.types.Message):
+ await bot.send_message(message.chat.id, 'Hi, this is an example of exception handlers.')
+ raise Exception('test') # Exception goes to ExceptionHandler if it is set
+
+
+
+bot.polling(skip_pending=True)
diff --git a/examples/asynchronous_telebot/middleware/flooding_middleware.py b/examples/asynchronous_telebot/middleware/flooding_middleware.py
new file mode 100644
index 0000000..de70702
--- /dev/null
+++ b/examples/asynchronous_telebot/middleware/flooding_middleware.py
@@ -0,0 +1,39 @@
+# Just a little example of middleware handlers
+
+import telebot
+from telebot.asyncio_handler_backends import BaseMiddleware
+from telebot.async_telebot import AsyncTeleBot
+from telebot.async_telebot import CancelUpdate
+bot = AsyncTeleBot('TOKEN')
+
+
+class SimpleMiddleware(BaseMiddleware):
+ def __init__(self, limit) -> None:
+ self.last_time = {}
+ self.limit = limit
+ self.update_types = ['message']
+ # Always specify update types, otherwise middlewares won't work
+
+
+ async def pre_process(self, message, data):
+ if not message.from_user.id in self.last_time:
+ # User is not in a dict, so lets add and cancel this function
+ self.last_time[message.from_user.id] = message.date
+ return
+ if message.date - self.last_time[message.from_user.id] < self.limit:
+ # User is flooding
+ await bot.send_message(message.chat.id, 'You are making request too often')
+ return CancelUpdate()
+ self.last_time[message.from_user.id] = message.date
+
+
+ async def post_process(self, message, data, exception):
+ pass
+
+bot.setup_middleware(SimpleMiddleware(2))
+
+@bot.message_handler(commands=['start'])
+async def start(message):
+ await bot.send_message(message.chat.id, 'Hello!')
+
+bot.polling()
\ No newline at end of file
diff --git a/examples/asynchronous_telebot/middleware/i18n.py b/examples/asynchronous_telebot/middleware/i18n.py
new file mode 100644
index 0000000..3c3196e
--- /dev/null
+++ b/examples/asynchronous_telebot/middleware/i18n.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+
+# This example shows how to implement i18n (internationalization) l10n (localization) to create
+# multi-language bots with middleware handler.
+#
+# Also, you could check language code in handler itself too.
+# But this example just to show the work of middlewares.
+
+import telebot
+from telebot.async_telebot import AsyncTeleBot
+from telebot import asyncio_handler_backends
+import logging
+
+logger = telebot.logger
+telebot.logger.setLevel(logging.DEBUG) # Outputs debug messages to console.
+
+TRANSLATIONS = {
+ 'hello': {
+ 'en': 'hello',
+ 'ru': 'привет',
+ 'uz': 'salom'
+ }
+}
+
+
+
+bot = AsyncTeleBot('TOKEN')
+
+
+class LanguageMiddleware(asyncio_handler_backends.BaseMiddleware):
+ def __init__(self):
+ self.update_types = ['message'] # Update types that will be handled by this middleware.
+ async def pre_process(self, message, data):
+ data['response'] = TRANSLATIONS['hello'][message.from_user.language_code]
+ async def post_process(self, message, data, exception):
+ if exception: # You can get exception occured in handler.
+ logger.exception(str(exception))
+
+bot.setup_middleware(LanguageMiddleware()) # do not forget to setup
+
+@bot.message_handler(commands=['start'])
+async def start(message, data: dict):
+ # you can get the data in handler too.
+ # Not necessary to create data parameter in handler function.
+ await bot.send_message(message.chat.id, data['response'])
+
+
+bot.polling()
diff --git a/examples/asynchronous_telebot/send_file_example.py b/examples/asynchronous_telebot/send_file_example.py
new file mode 100644
index 0000000..64e3047
--- /dev/null
+++ b/examples/asynchronous_telebot/send_file_example.py
@@ -0,0 +1,27 @@
+
+import telebot
+from telebot.async_telebot import AsyncTeleBot
+
+
+
+bot = AsyncTeleBot('1297441208:AAH-Z-YbiK_pQ1jTuHXYa-hA_PLZQVQ6qsw')
+
+
+@bot.message_handler(commands=['photo'])
+async def photo_send(message: telebot.types.Message):
+ with open('test.png', 'rb') as new_file:
+ await bot.send_photo(message.chat.id, new_file)
+
+@bot.message_handler(commands=['document'])
+async def document_send(message: telebot.types.Message):
+ with open('test.docx', 'rb') as new_file:
+ await bot.send_document(message.chat.id, new_file)
+
+@bot.message_handler(commands=['photos'])
+async def photos_send(message: telebot.types.Message):
+ with open('test.png', 'rb') as new_file, open('test2.png', 'rb') as new_file2:
+ await bot.send_media_group(message.chat.id, [telebot.types.InputMediaPhoto(new_file), telebot.types.InputMediaPhoto(new_file2)])
+
+
+
+bot.polling(skip_pending=True)