Examples/dev 3x multi file (#1254)

* Add multi-file bot example

This commit adds a multi-file bot example to the repository. .

* Refactor: Clean up code formatting for consistency

* add Changelog

* Refactor bot code, fix changelog version
This commit is contained in:
Kostiantyn Kriuchkov 2023-08-13 18:00:59 +03:00 committed by GitHub
parent f87deea4fb
commit fac0a533b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 72 additions and 0 deletions

1
CHANGES/1254.doc.rst Normal file
View file

@ -0,0 +1 @@
This update includes the addition of a multi-file bot example to the repository.

View file

@ -0,0 +1,32 @@
import asyncio
import logging
from os import getenv
from handlers.echo import echo_router
from handlers.start import start_router
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
# Bot token can be obtained via https://t.me/BotFather
TOKEN = getenv("BOT_TOKEN")
async def main() -> None:
# Dispatcher is a root router
dp = Dispatcher()
# Register all the routers from handlers package
dp.include_routers(
start_router,
echo_router,
)
# Initialize Bot instance with a default parse mode which will be passed to all API calls
bot = Bot(TOKEN, parse_mode=ParseMode.HTML)
# And the run events dispatching
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())

View file

@ -0,0 +1,21 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message
# For each module with handlers we can create a separate router.
echo_router = Router()
@echo_router.message()
async def echo_handler(message: Message) -> None:
"""
Handler will forward receive a message back to the sender
By default, message handler will handle all message types (like a text, photo, sticker etc.)
"""
try:
# Send a copy of the received message
await message.send_copy(chat_id=message.chat.id)
except TypeError:
# But not all the types is supported to be copied so need to handle it
await message.answer("Nice try!")

View file

@ -0,0 +1,18 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message
start_router = Router()
@start_router.message(Command("start"))
async def command_start_handler(message: Message) -> None:
"""
This handler receives messages with `/start` command
"""
# Most event objects have aliases for API methods that can be called in events' context
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
# and the target chat will be passed to :ref:`aiogram.methods.send_message.SendMessage`
# method automatically or call API method directly via
# Bot instance: `bot.send_message(chat_id=message.chat.id, ...)`
await message.answer(f"Hello, <b>{message.from_user.full_name}!</b>")