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)