diff --git a/.gitignore b/.gitignore index b6e4761..668c254 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,14 @@ dmypy.json # Pyre type checker .pyre/ +.idea/$CACHE_FILE$ +.idea/.gitignore +.idea/aiogram-bot-template.iml +.idea/codeStyles/ +.idea/deployment.xml +.idea/dictionaries +.idea/inspectionProfiles/ +.idea/misc.xml +.idea/modules.xml +.idea/vagrant.xml +.idea/vcs.xml diff --git a/bot.py b/bot.py index 8560783..59f6cc3 100644 --- a/bot.py +++ b/bot.py @@ -17,6 +17,7 @@ dp = Dispatcher(bot, storage=storage) async def on_startup(web_app: web.Application): filters.setup(dp) middlewares.setup(dp) + handlers.errors.setup(dp) handlers.user.setup(dp) await dp.bot.delete_webhook() await dp.bot.set_webhook(config.WEBHOOK_URL) @@ -37,5 +38,5 @@ async def execute(req: web.Request) -> web.Response: if __name__ == '__main__': app = web.Application() app.on_startup.append(on_startup) - app.add_routes([web.post('/webhook/{token}', execute)]) + app.add_routes([web.post(config.WEBHOOK_PATH, execute)]) web.run_app(app, port=5151, host='localhost') diff --git a/data/config.py b/data/config.py index bd4c5c7..7555a33 100644 --- a/data/config.py +++ b/data/config.py @@ -1,5 +1,7 @@ BOT_TOKEN = '' -WEBHOOK_URL = '' +BASE_URL = 'https://example.com' # Webhook domain +WEBHOOK_PATH = f'/webhook/bot/{BOT_TOKEN}' +WEBHOOK_URL = f'{BASE_URL}{WEBHOOK_PATH}' admins = [] diff --git a/handlers/__init__.py b/handlers/__init__.py index f9b61db..f708952 100644 --- a/handlers/__init__.py +++ b/handlers/__init__.py @@ -1 +1,2 @@ +from . import errors from . import user diff --git a/handlers/errors/__init__.py b/handlers/errors/__init__.py new file mode 100644 index 0000000..614e0e6 --- /dev/null +++ b/handlers/errors/__init__.py @@ -0,0 +1,9 @@ +from aiogram import Dispatcher +from aiogram.utils import exceptions + +from .not_modified import message_not_modified, message_to_delete_not_found + + +def setup(dp: Dispatcher): + dp.register_errors_handler(message_not_modified, exception=exceptions.MessageNotModified) + dp.register_errors_handler(message_to_delete_not_found, exception=exceptions.MessageToDeleteNotFound) diff --git a/handlers/errors/not_modified.py b/handlers/errors/not_modified.py new file mode 100644 index 0000000..acfd50e --- /dev/null +++ b/handlers/errors/not_modified.py @@ -0,0 +1,10 @@ +from aiogram import types +from aiogram.utils import exceptions + + +async def message_not_modified(update: types.Update, error: exceptions.MessageNotModified): + return True + + +async def message_to_delete_not_found(update: types.Update, error: exceptions.MessageToDeleteNotFound): + return True diff --git a/keyboards/default/consts.py b/keyboards/default/consts.py new file mode 100644 index 0000000..3203ff2 --- /dev/null +++ b/keyboards/default/consts.py @@ -0,0 +1,15 @@ +from typing import List + +from aiogram.types import ReplyKeyboardMarkup, KeyboardButton + +from . import utils + + +class DefaultConstructor: + @staticmethod + def _create_kb(actions: List[str], schema: List[int]) -> ReplyKeyboardMarkup: + btns = [] + for a in actions: + btns.append(KeyboardButton(a)) + kb = utils.misc.arrange_default_schema(btns, schema) + return kb diff --git a/keyboards/default/utils/__init__.py b/keyboards/default/utils/__init__.py new file mode 100644 index 0000000..ab665e1 --- /dev/null +++ b/keyboards/default/utils/__init__.py @@ -0,0 +1 @@ +from . import misc diff --git a/keyboards/default/utils/misc.py b/keyboards/default/utils/misc.py new file mode 100644 index 0000000..a02b484 --- /dev/null +++ b/keyboards/default/utils/misc.py @@ -0,0 +1,17 @@ +from typing import List + +from aiogram.types import ReplyKeyboardMarkup, KeyboardButton + + +def arrange_default_schema(buttons: List[KeyboardButton], count: List[int]) -> ReplyKeyboardMarkup: + kb = ReplyKeyboardMarkup(resize_keyboard=True) + kb.row_width = max(count) + if sum(count) != len(buttons): + raise ValueError('Количество кнопок не совпадает со схемой') + tmplist = [] + for a in count: + tmplist.append([]) + for _ in range(a): + tmplist[-1].append(buttons.pop(0)) + kb.keyboard = tmplist + return kb diff --git a/keyboards/inline/utils/misc.py b/keyboards/inline/utils/misc.py index 2e3379c..7366f2e 100644 --- a/keyboards/inline/utils/misc.py +++ b/keyboards/inline/utils/misc.py @@ -5,13 +5,13 @@ from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup def arrange_inline_schema(buttons: List[InlineKeyboardButton], count: List[int]) -> InlineKeyboardMarkup: kb = InlineKeyboardMarkup() - btns = buttons kb.row_width = max(count) if sum(count) != len(buttons): raise ValueError('Количество кнопок не совпадает со схемой') - tmplist = [[InlineKeyboardButton('') for _ in range(count[i])] for i in range(len(count))] - for a in range(len(tmplist)): - for b in range(len(tmplist[a])): - tmplist[a][b] = btns.pop(0) + tmplist = [] + for a in count: + tmplist.append([]) + for _ in range(a): + tmplist[-1].append(buttons.pop(0)) kb.inline_keyboard = tmplist return kb diff --git a/requirements.txt b/requirements.txt index 387ea38..510d243 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ aiomysql==0.0.20 -aiogram==2.6.1 +aiogram==2.7 aiohttp==3.6.2 aioredis==1.3.1 loguru==0.4.1