Fixed mypy errors

This commit is contained in:
Alex Root Junior 2023-08-04 00:10:57 +03:00
parent 1ca1390bd2
commit 84f9667826
No known key found for this signature in database
GPG key ID: 074C1D455EBEA4AC
5 changed files with 271 additions and 29 deletions

View file

@ -1,195 +1,242 @@
answer:
method: sendMessage
code: &assert-chat |
assert self.chat is not None, "This method can be used only if chat is present in the message."
fill: &fill-answer
chat_id: self.chat.id
message_thread_id: self.message_thread_id if self.is_topic_message else None
reply:
method: sendMessage
code: *assert-chat
fill: &fill-reply
<<: *fill-answer
reply_to_message_id: self.message_id
answer_animation:
method: sendAnimation
code: *assert-chat
fill: *fill-answer
reply_animation:
method: sendAnimation
code: *assert-chat
fill: *fill-reply
answer_audio:
method: sendAudio
code: *assert-chat
fill: *fill-answer
reply_audio:
method: sendAudio
code: *assert-chat
fill: *fill-reply
answer_contact:
method: sendContact
code: *assert-chat
fill: *fill-answer
reply_contact:
method: sendContact
code: *assert-chat
fill: *fill-reply
answer_document:
method: sendDocument
code: *assert-chat
fill: *fill-answer
reply_document:
method: sendDocument
code: *assert-chat
fill: *fill-reply
answer_game:
method: sendGame
code: *assert-chat
fill: *fill-answer
reply_game:
method: sendGame
code: *assert-chat
fill: *fill-reply
answer_invoice:
method: sendInvoice
code: *assert-chat
fill: *fill-answer
reply_invoice:
method: sendInvoice
code: *assert-chat
fill: *fill-reply
answer_location:
method: sendLocation
code: *assert-chat
fill: *fill-answer
reply_location:
method: sendLocation
code: *assert-chat
fill: *fill-reply
answer_media_group:
method: sendMediaGroup
code: *assert-chat
fill: *fill-answer
reply_media_group:
method: sendMediaGroup
code: *assert-chat
fill: *fill-reply
answer_photo:
method: sendPhoto
code: *assert-chat
fill: *fill-answer
reply_photo:
method: sendPhoto
code: *assert-chat
fill: *fill-reply
answer_poll:
method: sendPoll
code: *assert-chat
fill: *fill-answer
reply_poll:
method: sendPoll
code: *assert-chat
fill: *fill-reply
answer_dice:
method: sendDice
code: *assert-chat
fill: *fill-answer
reply_dice:
method: sendDice
code: *assert-chat
fill: *fill-reply
answer_sticker:
method: sendSticker
code: *assert-chat
fill: *fill-answer
reply_sticker:
method: sendSticker
code: *assert-chat
fill: *fill-reply
answer_venue:
method: sendVenue
code: *assert-chat
fill: *fill-answer
reply_venue:
method: sendVenue
code: *assert-chat
fill: *fill-reply
answer_video:
method: sendVideo
code: *assert-chat
fill: *fill-answer
reply_video:
method: sendVideo
code: *assert-chat
fill: *fill-reply
answer_video_note:
method: sendVideoNote
code: *assert-chat
fill: *fill-answer
reply_video_note:
method: sendVideoNote
code: *assert-chat
fill: *fill-reply
answer_voice:
method: sendVoice
code: *assert-chat
fill: *fill-answer
reply_voice:
method: sendVoice
code: *assert-chat
fill: *fill-reply
copy_to:
method: copyMessage
code: *assert-chat
fill:
from_chat_id: self.chat.id
message_id: self.message_id
forward:
method: forwardMessage
code: *assert-chat
fill:
from_chat_id: self.chat.id
message_id: self.message_id
edit_text:
method: editMessageText
code: *assert-chat
fill: &message-target
chat_id: self.chat.id if self.chat else None
chat_id: self.chat.id
message_id: self.message_id
edit_media:
method: editMessageMedia
fill: *message-target
code: *assert-chat
edit_reply_markup:
method: editMessageReplyMarkup
code: *assert-chat
fill: *message-target
delete_reply_markup:
method: editMessageReplyMarkup
code: *assert-chat
fill:
<<: *message-target
reply_markup: None
edit_live_location:
method: editMessageLiveLocation
code: *assert-chat
fill: *message-target
stop_live_location:
method: stopMessageLiveLocation
code: *assert-chat
fill: *message-target
edit_caption:
method: editMessageCaption
code: *assert-chat
fill: *message-target
delete:
method: deleteMessage
code: *assert-chat
fill: *message-target
pin:
method: pinChatMessage
code: *assert-chat
fill: *message-target
unpin:
method: unpinChatMessage
code: *assert-chat
fill: *message-target

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, Any
from aiogram.types.base import TelegramObject
@ -23,6 +23,6 @@ class ErrorEvent(TelegramObject):
if TYPE_CHECKING:
def __init__(
__pydantic_self__, *, update: Update, exception: Exception, **__pydantic_kwargs
__pydantic_self__, *, update: Update, exception: Exception, **__pydantic_kwargs: Any
) -> None:
super().__init__(update=update, exception=exception, **__pydantic_kwargs)

View file

@ -1,7 +1,7 @@
from __future__ import annotations
import datetime
from typing import TYPE_CHECKING, Any, List, Optional, Union
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
from pydantic import Field
@ -559,6 +559,10 @@ class Message(TelegramObject):
from aiogram.methods import SendAnimation
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendAnimation(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -631,6 +635,10 @@ class Message(TelegramObject):
from aiogram.methods import SendAnimation
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendAnimation(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -701,6 +709,10 @@ class Message(TelegramObject):
from aiogram.methods import SendAudio
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendAudio(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -771,6 +783,10 @@ class Message(TelegramObject):
from aiogram.methods import SendAudio
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendAudio(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -831,6 +847,10 @@ class Message(TelegramObject):
from aiogram.methods import SendContact
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendContact(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -888,6 +908,10 @@ class Message(TelegramObject):
from aiogram.methods import SendContact
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendContact(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -948,6 +972,10 @@ class Message(TelegramObject):
from aiogram.methods import SendDocument
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendDocument(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1011,6 +1039,10 @@ class Message(TelegramObject):
from aiogram.methods import SendDocument
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendDocument(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1061,6 +1093,10 @@ class Message(TelegramObject):
from aiogram.methods import SendGame
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendGame(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1107,6 +1143,10 @@ class Message(TelegramObject):
from aiogram.methods import SendGame
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendGame(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1192,6 +1232,10 @@ class Message(TelegramObject):
from aiogram.methods import SendInvoice
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendInvoice(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1298,6 +1342,10 @@ class Message(TelegramObject):
from aiogram.methods import SendInvoice
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendInvoice(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1375,6 +1423,10 @@ class Message(TelegramObject):
from aiogram.methods import SendLocation
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendLocation(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1438,6 +1490,10 @@ class Message(TelegramObject):
from aiogram.methods import SendLocation
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendLocation(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1486,6 +1542,10 @@ class Message(TelegramObject):
from aiogram.methods import SendMediaGroup
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendMediaGroup(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1529,6 +1589,10 @@ class Message(TelegramObject):
from aiogram.methods import SendMediaGroup
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendMediaGroup(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1581,6 +1645,10 @@ class Message(TelegramObject):
from aiogram.methods import SendMessage
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendMessage(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1638,6 +1706,10 @@ class Message(TelegramObject):
from aiogram.methods import SendMessage
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendMessage(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1696,6 +1768,10 @@ class Message(TelegramObject):
from aiogram.methods import SendPhoto
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendPhoto(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1756,6 +1832,10 @@ class Message(TelegramObject):
from aiogram.methods import SendPhoto
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendPhoto(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1829,6 +1909,10 @@ class Message(TelegramObject):
from aiogram.methods import SendPoll
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendPoll(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1910,6 +1994,10 @@ class Message(TelegramObject):
from aiogram.methods import SendPoll
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendPoll(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -1968,6 +2056,10 @@ class Message(TelegramObject):
from aiogram.methods import SendDice
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendDice(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2016,6 +2108,10 @@ class Message(TelegramObject):
from aiogram.methods import SendDice
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendDice(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2065,6 +2161,10 @@ class Message(TelegramObject):
from aiogram.methods import SendSticker
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendSticker(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2116,6 +2216,10 @@ class Message(TelegramObject):
from aiogram.methods import SendSticker
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendSticker(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2178,6 +2282,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVenue
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVenue(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2247,6 +2355,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVenue
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVenue(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2319,6 +2431,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVideo
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVideo(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2394,6 +2510,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVideo
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVideo(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2456,6 +2576,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVideoNote
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVideoNote(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2513,6 +2637,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVideoNote
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVideoNote(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2571,6 +2699,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVoice
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVoice(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2631,6 +2763,10 @@ class Message(TelegramObject):
from aiogram.methods import SendVoice
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return SendVoice(
chat_id=self.chat.id,
message_thread_id=self.message_thread_id if self.is_topic_message else None,
@ -2672,14 +2808,14 @@ class Message(TelegramObject):
SendVoice,
]:
"""
Send copy of message.
Send copy of a message.
Is similar to :meth:`aiogram.client.bot.Bot.copy_message`
but returning the sent message instead of :class:`aiogram.types.message_id.MessageId`
.. note::
This method don't use the API method named `copyMessage` and
This method doesn't use the API method named `copyMessage` and
historically implemented before the similar method is added to API
:param chat_id:
@ -2707,7 +2843,7 @@ class Message(TelegramObject):
SendVoice,
)
kwargs = {
kwargs: Dict[str, Any] = {
"chat_id": chat_id,
"reply_markup": reply_markup or self.reply_markup,
"disable_notification": disable_notification,
@ -2715,38 +2851,48 @@ class Message(TelegramObject):
"message_thread_id": message_thread_id,
"allow_sending_without_reply": allow_sending_without_reply,
}
text = self.text or self.caption
entities = self.entities or self.caption_entities
if self.text:
return SendMessage(text=text, entities=entities, **kwargs).as_(self._bot)
return SendMessage(text=self.text, entities=self.entities, **kwargs).as_(self._bot)
if self.audio:
return SendAudio(
audio=self.audio.file_id,
caption=text,
caption=self.caption,
title=self.audio.title,
performer=self.audio.performer,
duration=self.audio.duration,
caption_entities=entities,
caption_entities=self.caption_entities,
**kwargs,
).as_(self._bot)
if self.animation:
return SendAnimation(
animation=self.animation.file_id, caption=text, caption_entities=entities, **kwargs
animation=self.animation.file_id,
caption=self.caption,
caption_entities=self.caption_entities,
**kwargs,
).as_(self._bot)
if self.document:
return SendDocument(
document=self.document.file_id, caption=text, caption_entities=entities, **kwargs
document=self.document.file_id,
caption=self.caption,
caption_entities=self.caption_entities,
**kwargs,
).as_(self._bot)
if self.photo:
return SendPhoto(
photo=self.photo[-1].file_id, caption=text, caption_entities=entities, **kwargs
photo=self.photo[-1].file_id,
caption=self.caption,
caption_entities=self.caption_entities,
**kwargs,
).as_(self._bot)
if self.sticker:
return SendSticker(sticker=self.sticker.file_id, **kwargs)
if self.video:
return SendVideo(
video=self.video.file_id, caption=text, caption_entities=entities, **kwargs
video=self.video.file_id,
caption=self.caption,
caption_entities=self.caption_entities,
**kwargs,
).as_(self._bot)
if self.video_note:
return SendVideoNote(video_note=self.video_note.file_id, **kwargs).as_(self._bot)
@ -2829,6 +2975,10 @@ class Message(TelegramObject):
from aiogram.methods import CopyMessage
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return CopyMessage(
from_chat_id=self.chat.id,
message_id=self.message_id,
@ -2879,8 +3029,12 @@ class Message(TelegramObject):
from aiogram.methods import EditMessageText
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return EditMessageText(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
text=text,
inline_message_id=inline_message_id,
@ -2965,8 +3119,12 @@ class Message(TelegramObject):
from aiogram.methods import EditMessageMedia
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return EditMessageMedia(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
media=media,
inline_message_id=inline_message_id,
@ -3000,8 +3158,12 @@ class Message(TelegramObject):
from aiogram.methods import EditMessageReplyMarkup
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return EditMessageReplyMarkup(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
inline_message_id=inline_message_id,
reply_markup=reply_markup,
@ -3033,8 +3195,12 @@ class Message(TelegramObject):
from aiogram.methods import EditMessageReplyMarkup
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return EditMessageReplyMarkup(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
reply_markup=None,
inline_message_id=inline_message_id,
@ -3077,8 +3243,12 @@ class Message(TelegramObject):
from aiogram.methods import EditMessageLiveLocation
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return EditMessageLiveLocation(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
latitude=latitude,
longitude=longitude,
@ -3116,8 +3286,12 @@ class Message(TelegramObject):
from aiogram.methods import StopMessageLiveLocation
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return StopMessageLiveLocation(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
inline_message_id=inline_message_id,
reply_markup=reply_markup,
@ -3156,8 +3330,12 @@ class Message(TelegramObject):
from aiogram.methods import EditMessageCaption
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return EditMessageCaption(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
inline_message_id=inline_message_id,
caption=caption,
@ -3207,8 +3385,12 @@ class Message(TelegramObject):
from aiogram.methods import DeleteMessage
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return DeleteMessage(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
**kwargs,
).as_(self._bot)
@ -3237,8 +3419,12 @@ class Message(TelegramObject):
from aiogram.methods import PinChatMessage
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return PinChatMessage(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
disable_notification=disable_notification,
**kwargs,
@ -3266,8 +3452,12 @@ class Message(TelegramObject):
from aiogram.methods import UnpinChatMessage
assert (
self.chat is not None
), "This method can be used only if chat is present in the message."
return UnpinChatMessage(
chat_id=self.chat.id if self.chat else None,
chat_id=self.chat.id,
message_id=self.message_id,
**kwargs,
).as_(self._bot)

View file

@ -98,6 +98,7 @@ class Text(Iterable[NodeType]):
return text, entities
def _render_entity(self, *, offset: int, length: int) -> MessageEntity:
assert self.type is not None, "Node without type can't be rendered as entity"
return MessageEntity(type=self.type, offset=offset, length=length, **self._params)
def as_kwargs(

View file

@ -1,5 +1,6 @@
from __future__ import annotations
from abc import ABC
from copy import deepcopy
from itertools import chain
from itertools import cycle as repeat_all
@ -14,6 +15,7 @@ from typing import (
Type,
TypeVar,
Union,
cast,
no_type_check,
)
@ -35,7 +37,7 @@ MIN_WIDTH = 1
MAX_BUTTONS = 100
class KeyboardBuilder(Generic[ButtonType]):
class KeyboardBuilder(Generic[ButtonType], ABC):
"""
Generic keyboard builder that helps to adjust your markup with defined shape of lines.
@ -243,8 +245,10 @@ class KeyboardBuilder(Generic[ButtonType]):
def as_markup(self, **kwargs: Any) -> Union[InlineKeyboardMarkup, ReplyKeyboardMarkup]:
if self._button_type is KeyboardButton:
return ReplyKeyboardMarkup(keyboard=self.export(), **kwargs)
return InlineKeyboardMarkup(inline_keyboard=self.export())
keyboard = cast(List[List[KeyboardButton]], self.export()) # type: ignore
return ReplyKeyboardMarkup(keyboard=keyboard, **kwargs)
inline_keyboard = cast(List[List[InlineKeyboardButton]], self.export()) # type: ignore
return InlineKeyboardMarkup(inline_keyboard=inline_keyboard)
def repeat_last(items: Iterable[T]) -> Generator[T, None, None]: