Compare commits

...

3 Commits

Author SHA1 Message Date
b60d8571d3 backoff 2025-07-04 15:22:58 +03:00
c9a334a615 Небольшая оптимизация 2025-07-04 13:44:00 +03:00
222ca919fc Добавлена заглушка 2025-07-01 21:31:46 +03:00
2 changed files with 17 additions and 14 deletions

View File

@@ -29,7 +29,9 @@ if TYPE_CHECKING:
webhook_app = FastAPI() webhook_app = FastAPI()
CONNECTION_RETRY_DELAY = 30 CONNECTION_RETRY_DELAY = 30
GET_UPDATES_RETRY_DELAY = 5
class Dispatcher: class Dispatcher:
@@ -77,8 +79,7 @@ class Dispatcher:
*routers: Роутеры для включения *routers: Роутеры для включения
""" """
for router in routers: self.routers += [r for r in routers]
self.routers.append(router)
async def __ready(self, bot: Bot): async def __ready(self, bot: Bot):
self.bot = bot self.bot = bot
@@ -86,10 +87,7 @@ class Dispatcher:
self.routers += [self] self.routers += [self]
handlers_count = 0 handlers_count = sum(len(router.event_handlers) for router in self.routers)
for router in self.routers:
for _ in router.event_handlers:
handlers_count += 1
logger_dp.info(f'{handlers_count} событий на обработку') logger_dp.info(f'{handlers_count} событий на обработку')
@@ -129,14 +127,13 @@ class Dispatcher:
result_data_kwargs=result_data_kwargs result_data_kwargs=result_data_kwargs
) )
if result == None or result == False: if result is None or result is False:
return return
elif result == True: elif result is True:
result = {} continue
for key, value in result.items(): result_data_kwargs.update(result)
result_data_kwargs[key] = value
return result_data_kwargs return result_data_kwargs
@@ -150,6 +147,7 @@ class Dispatcher:
try: try:
ids = event_object.get_ids() ids = event_object.get_ids()
memory_context = self.__get_memory_context(*ids) memory_context = self.__get_memory_context(*ids)
current_state = await memory_context.get_state()
kwargs = {'context': memory_context} kwargs = {'context': memory_context}
is_handled = False is_handled = False
@@ -178,8 +176,7 @@ class Dispatcher:
if not filter_attrs(event_object, *handler.filters): if not filter_attrs(event_object, *handler.filters):
continue continue
if not handler.state == await memory_context.get_state() \ if not handler.state == current_state and handler.state:
and handler.state:
continue continue
func_args = handler.func_event.__annotations__.keys() func_args = handler.func_event.__annotations__.keys()
@@ -224,7 +221,8 @@ class Dispatcher:
events = await self.bot.get_updates() events = await self.bot.get_updates()
if isinstance(events, Error): if isinstance(events, Error):
logger_dp.info(f'Ошибка при получении обновлений: {events}') logger_dp.info(f'Ошибка при получении обновлений: {events}, жду {GET_UPDATES_RETRY_DELAY} секунд')
await asyncio.sleep(GET_UPDATES_RETRY_DELAY)
continue continue
self.bot.marker_updates = events.get('marker') self.bot.marker_updates = events.get('marker')
@@ -236,6 +234,7 @@ class Dispatcher:
for event in processed_events: for event in processed_events:
await self.handle(event) await self.handle(event)
except ClientConnectorError: except ClientConnectorError:
logger_dp.error(f'Ошибка подключения, жду {CONNECTION_RETRY_DELAY} секунд') logger_dp.error(f'Ошибка подключения, жду {CONNECTION_RETRY_DELAY} секунд')
await asyncio.sleep(CONNECTION_RETRY_DELAY) await asyncio.sleep(CONNECTION_RETRY_DELAY)

View File

@@ -12,6 +12,10 @@ class BaseMiddleware:
event_object: UpdateUnion event_object: UpdateUnion
): ):
# пока что заглушка
if result_data_kwargs is None:
return {}
kwargs_temp = {'data': result_data_kwargs.copy()} kwargs_temp = {'data': result_data_kwargs.copy()}
for key in kwargs_temp.copy().keys(): for key in kwargs_temp.copy().keys():