Typing for handlers and add hello world to index page of docs

This commit is contained in:
jrootjunior 2019-12-12 12:49:52 +02:00
parent 9dc1e9ff1a
commit b30e4e77ad
3 changed files with 54 additions and 4 deletions

View file

@ -6,11 +6,17 @@ from aiogram.api.types import TelegramObject
class BaseHandlerMixin: class BaseHandlerMixin:
"""
Typed mixin. Do nothing.
"""
event: TelegramObject event: TelegramObject
data: Dict[str, Any] data: Dict[str, Any]
class _HandlerBotMixin(BaseHandlerMixin): class _HandlerBotMixin(BaseHandlerMixin):
"""
Mixin adds bot attribute
"""
@property @property
def bot(self) -> Bot: def bot(self) -> Bot:
if "bot" in self.data: if "bot" in self.data:
@ -19,7 +25,9 @@ class _HandlerBotMixin(BaseHandlerMixin):
class BaseHandler(_HandlerBotMixin, ABC): class BaseHandler(_HandlerBotMixin, ABC):
event: TelegramObject """
Base class for all class-based handlers
"""
def __init__(self, event: TelegramObject, **kwargs: Any) -> None: def __init__(self, event: TelegramObject, **kwargs: Any) -> None:
self.event = event self.event = event

View file

@ -1,7 +1,7 @@
from abc import ABC from abc import ABC
from typing import Optional from typing import Optional
from aiogram.api.types import Message from aiogram.api.types import Message, User, Chat
from aiogram.dispatcher.filters import CommandObject from aiogram.dispatcher.filters import CommandObject
from aiogram.dispatcher.handler.base import BaseHandler, BaseHandlerMixin from aiogram.dispatcher.handler.base import BaseHandler, BaseHandlerMixin
@ -10,11 +10,11 @@ class MessageHandler(BaseHandler, ABC):
event: Message event: Message
@property @property
def from_user(self): def from_user(self) -> User:
return self.event.from_user return self.event.from_user
@property @property
def chat(self): def chat(self) -> Chat:
return self.event.chat return self.event.chat

View file

@ -32,6 +32,48 @@ Documentation for version 3.0 [WIP] [^1]
- [Russian language](https://t.me/aiogram_ru) - [Russian language](https://t.me/aiogram_ru)
## Example
Simple usage
```python3
from aiogram import Bot, Dispatcher, types
from aiogram.dispatcher.handler import MessageHandler
TOKEN = "42:TOKEN"
dp = Dispatcher()
@dp.message_handler(commands=["start"])
class MyHandler(MessageHandler):
"""
This handler receive messages with /start command
"""
async def handle(self):
await self.bot.send_message(
chat_id=self.chat.id, text=f"<b>Hello, {self.from_user.full_name}!</b>"
)
@dp.message_handler(content_types=[types.ContentType.ANY])
async def echo_handler(message: types.Message, bot: Bot):
"""
Handler will forward received message back to the sender
"""
await bot.forward_message(
from_chat_id=message.chat.id, chat_id=message.chat.id, message_id=message.message_id
)
def main():
bot = Bot(TOKEN, parse_mode="HTML")
dp.run_polling(bot)
if __name__ == "__main__":
main()
```
## Task list for 3.0 ## Task list for 3.0
- [ ] Telegram API features - [ ] Telegram API features