mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
#564: Added possibility to use allowed_updates argument in Polling mode
This commit is contained in:
parent
79c59b34f9
commit
69e4ecc606
4 changed files with 36 additions and 9 deletions
|
|
@ -43,5 +43,5 @@ __all__ = (
|
||||||
'utils',
|
'utils',
|
||||||
)
|
)
|
||||||
|
|
||||||
__version__ = '2.12.1'
|
__version__ = '2.12.2'
|
||||||
__api_version__ = '5.1'
|
__api_version__ = '5.1'
|
||||||
|
|
|
||||||
|
|
@ -340,7 +340,8 @@ class Dispatcher(DataMixin, ContextInstanceMixin):
|
||||||
limit=None,
|
limit=None,
|
||||||
reset_webhook=None,
|
reset_webhook=None,
|
||||||
fast: typing.Optional[bool] = True,
|
fast: typing.Optional[bool] = True,
|
||||||
error_sleep: int = 5):
|
error_sleep: int = 5,
|
||||||
|
allowed_updates: typing.Optional[typing.List[str]] = None):
|
||||||
"""
|
"""
|
||||||
Start long-polling
|
Start long-polling
|
||||||
|
|
||||||
|
|
@ -349,6 +350,8 @@ class Dispatcher(DataMixin, ContextInstanceMixin):
|
||||||
:param limit:
|
:param limit:
|
||||||
:param reset_webhook:
|
:param reset_webhook:
|
||||||
:param fast:
|
:param fast:
|
||||||
|
:param error_sleep:
|
||||||
|
:param allowed_updates:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
if self._polling:
|
if self._polling:
|
||||||
|
|
@ -377,10 +380,15 @@ class Dispatcher(DataMixin, ContextInstanceMixin):
|
||||||
while self._polling:
|
while self._polling:
|
||||||
try:
|
try:
|
||||||
with self.bot.request_timeout(request_timeout):
|
with self.bot.request_timeout(request_timeout):
|
||||||
updates = await self.bot.get_updates(limit=limit, offset=offset, timeout=timeout)
|
updates = await self.bot.get_updates(
|
||||||
|
limit=limit,
|
||||||
|
offset=offset,
|
||||||
|
timeout=timeout,
|
||||||
|
allowed_updates=allowed_updates
|
||||||
|
)
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
break
|
break
|
||||||
except:
|
except Exception as e:
|
||||||
log.exception('Cause exception while getting updates.')
|
log.exception('Cause exception while getting updates.')
|
||||||
await asyncio.sleep(error_sleep)
|
await asyncio.sleep(error_sleep)
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from functools import lru_cache
|
||||||
|
|
||||||
from . import base
|
from . import base
|
||||||
from . import fields
|
from . import fields
|
||||||
from .callback_query import CallbackQuery
|
from .callback_query import CallbackQuery
|
||||||
|
|
@ -72,3 +74,9 @@ class AllowedUpdates(helper.Helper):
|
||||||
"Use `CHOSEN_INLINE_RESULT`",
|
"Use `CHOSEN_INLINE_RESULT`",
|
||||||
new_value_getter=lambda cls: cls.CHOSEN_INLINE_RESULT,
|
new_value_getter=lambda cls: cls.CHOSEN_INLINE_RESULT,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@lru_cache(1)
|
||||||
|
def default(cls):
|
||||||
|
excluded = cls.CHAT_MEMBER + cls.MY_CHAT_MEMBER
|
||||||
|
return list(filter(lambda item: item not in excluded, cls.all()))
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import asyncio
|
||||||
import datetime
|
import datetime
|
||||||
import functools
|
import functools
|
||||||
import secrets
|
import secrets
|
||||||
from typing import Callable, Union, Optional, Any
|
from typing import Callable, Union, Optional, Any, List
|
||||||
from warnings import warn
|
from warnings import warn
|
||||||
|
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
|
|
@ -23,7 +23,8 @@ def _setup_callbacks(executor: 'Executor', on_startup=None, on_shutdown=None):
|
||||||
|
|
||||||
|
|
||||||
def start_polling(dispatcher, *, loop=None, skip_updates=False, reset_webhook=True,
|
def start_polling(dispatcher, *, loop=None, skip_updates=False, reset_webhook=True,
|
||||||
on_startup=None, on_shutdown=None, timeout=20, relax=0.1, fast=True):
|
on_startup=None, on_shutdown=None, timeout=20, relax=0.1, fast=True,
|
||||||
|
allowed_updates: Optional[List[str]] = None):
|
||||||
"""
|
"""
|
||||||
Start bot in long-polling mode
|
Start bot in long-polling mode
|
||||||
|
|
||||||
|
|
@ -34,11 +35,20 @@ def start_polling(dispatcher, *, loop=None, skip_updates=False, reset_webhook=Tr
|
||||||
:param on_startup:
|
:param on_startup:
|
||||||
:param on_shutdown:
|
:param on_shutdown:
|
||||||
:param timeout:
|
:param timeout:
|
||||||
|
:param relax:
|
||||||
|
:param fast:
|
||||||
|
:param allowed_updates:
|
||||||
"""
|
"""
|
||||||
executor = Executor(dispatcher, skip_updates=skip_updates, loop=loop)
|
executor = Executor(dispatcher, skip_updates=skip_updates, loop=loop)
|
||||||
_setup_callbacks(executor, on_startup, on_shutdown)
|
_setup_callbacks(executor, on_startup, on_shutdown)
|
||||||
|
|
||||||
executor.start_polling(reset_webhook=reset_webhook, timeout=timeout, relax=relax, fast=fast)
|
executor.start_polling(
|
||||||
|
reset_webhook=reset_webhook,
|
||||||
|
timeout=timeout,
|
||||||
|
relax=relax,
|
||||||
|
fast=fast,
|
||||||
|
allowed_updates=allowed_updates
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def set_webhook(dispatcher: Dispatcher, webhook_path: str, *, loop: Optional[asyncio.AbstractEventLoop] = None,
|
def set_webhook(dispatcher: Dispatcher, webhook_path: str, *, loop: Optional[asyncio.AbstractEventLoop] = None,
|
||||||
|
|
@ -295,7 +305,8 @@ class Executor:
|
||||||
self.set_webhook(webhook_path=webhook_path, request_handler=request_handler, route_name=route_name)
|
self.set_webhook(webhook_path=webhook_path, request_handler=request_handler, route_name=route_name)
|
||||||
self.run_app(**kwargs)
|
self.run_app(**kwargs)
|
||||||
|
|
||||||
def start_polling(self, reset_webhook=None, timeout=20, relax=0.1, fast=True):
|
def start_polling(self, reset_webhook=None, timeout=20, relax=0.1, fast=True,
|
||||||
|
allowed_updates: Optional[List[str]] = None):
|
||||||
"""
|
"""
|
||||||
Start bot in long-polling mode
|
Start bot in long-polling mode
|
||||||
|
|
||||||
|
|
@ -308,7 +319,7 @@ class Executor:
|
||||||
try:
|
try:
|
||||||
loop.run_until_complete(self._startup_polling())
|
loop.run_until_complete(self._startup_polling())
|
||||||
loop.create_task(self.dispatcher.start_polling(reset_webhook=reset_webhook, timeout=timeout,
|
loop.create_task(self.dispatcher.start_polling(reset_webhook=reset_webhook, timeout=timeout,
|
||||||
relax=relax, fast=fast))
|
relax=relax, fast=fast, allowed_updates=allowed_updates))
|
||||||
loop.run_forever()
|
loop.run_forever()
|
||||||
except (KeyboardInterrupt, SystemExit):
|
except (KeyboardInterrupt, SystemExit):
|
||||||
# loop.stop()
|
# loop.stop()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue