diff --git a/aiogram/types/base.py b/aiogram/types/base.py index e291afe5..2770fd84 100644 --- a/aiogram/types/base.py +++ b/aiogram/types/base.py @@ -4,7 +4,6 @@ from typing import TypeVar from .fields import BaseField from ..utils import json -from ..utils.context import get_value PROPS_ATTR_NAME = '_props' VALUES_ATTR_NAME = '_values' @@ -187,15 +186,61 @@ class TelegramObject(metaclass=MetaTelegramObject): return self.as_json() def __getitem__(self, item): + """ + Item getter (by key) + + :param item: + :return: + """ if item in self.props: return self.props[item].get_value(self) raise KeyError(item) def __setitem__(self, key, value): + """ + Item setter (by key) + + :param key: + :param value: + :return: + """ if key in self.props: return self.props[key].set_value(self, value, self.conf.get('parent', None)) raise KeyError(key) def __contains__(self, item): + """ + Check key contains in that object + + :param item: + :return: + """ self.clean() return item in self.values + + def __iter__(self): + """ + Iterate over items + + :return: + """ + for item in self.to_python().items(): + yield item + + def iter_keys(self): + """ + Iterate over keys + + :return: + """ + for key, _ in self: + yield key + + def iter_values(self): + """ + Iterate over values + + :return: + """ + for _, value in self: + yield value diff --git a/aiogram/types/inline_keyboard.py b/aiogram/types/inline_keyboard.py index 636f101c..76c47e98 100644 --- a/aiogram/types/inline_keyboard.py +++ b/aiogram/types/inline_keyboard.py @@ -54,7 +54,7 @@ class InlineKeyboardMarkup(base.TelegramObject): """ btn_array = [] for button in args: - btn_array.append(button.to_json()) + btn_array.append(button.to_python()) self.inline_keyboard.append(btn_array) return self diff --git a/aiogram/types/reply_keyboard.py b/aiogram/types/reply_keyboard.py index c16bc496..27a595c2 100644 --- a/aiogram/types/reply_keyboard.py +++ b/aiogram/types/reply_keyboard.py @@ -41,7 +41,7 @@ class ReplyKeyboardMarkup(base.TelegramObject): elif isinstance(button, bytes): row.append({'text': button.decode('utf-8')}) else: - row.append(button.to_json()) + row.append(button.to_python()) if i % self.row_width == 0: self.keyboard.append(row) row = [] @@ -55,7 +55,7 @@ class ReplyKeyboardMarkup(base.TelegramObject): if isinstance(button, str): btn_array.append({'text': button}) else: - btn_array.append(button.to_json()) + btn_array.append(button.to_python()) self.keyboard.append(btn_array) return self diff --git a/docs/source/quick_start.rst b/docs/source/quick_start.rst index a9ff0890..c5ff7e9c 100644 --- a/docs/source/quick_start.rst +++ b/docs/source/quick_start.rst @@ -48,5 +48,9 @@ Summary bot = Bot(token='BOT TOKEN HERE') dp = Dispatcher(bot) + @dp.message_handler(commands=['start', 'help']) + async def send_welcome(message: types.Message): + await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.") + if __name__ == '__main__': executor.start_polling(dp)