mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
✨ 为 TETR.IO 引入全局速率限制 (#481)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
from asyncio import Lock
|
from asyncio import Lock
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from typing import ClassVar
|
from typing import ClassVar
|
||||||
from weakref import WeakValueDictionary
|
from weakref import WeakValueDictionary
|
||||||
|
|
||||||
@@ -9,12 +9,15 @@ from nonebot.log import logger
|
|||||||
from yarl import URL
|
from yarl import URL
|
||||||
|
|
||||||
from ....config.config import config
|
from ....config.config import config
|
||||||
|
from ....utils.limit import limit
|
||||||
from ....utils.request import Request
|
from ....utils.request import Request
|
||||||
from .schemas.base import FailedModel, SuccessModel
|
from .schemas.base import FailedModel, SuccessModel
|
||||||
|
|
||||||
UTC = timezone.utc
|
UTC = timezone.utc
|
||||||
|
|
||||||
|
|
||||||
request = Request(config.tetris.proxy.tetrio or config.tetris.proxy.main)
|
request = Request(config.tetris.proxy.tetrio or config.tetris.proxy.main)
|
||||||
|
request.request = limit(timedelta(seconds=1))(request.request)
|
||||||
|
|
||||||
|
|
||||||
class Cache:
|
class Cache:
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ from nonebot_plugin_orm import get_session
|
|||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
from ....utils.exception import RequestError
|
from ....utils.exception import RequestError
|
||||||
from ....utils.limit import limit
|
|
||||||
from ....utils.retry import retry
|
from ....utils.retry import retry
|
||||||
from .. import alc
|
from .. import alc
|
||||||
from .. import command as base_command
|
from .. import command as base_command
|
||||||
@@ -84,11 +83,11 @@ def find_special_player(
|
|||||||
@scheduler.scheduled_job('cron', hour='0,6,12,18', minute=0)
|
@scheduler.scheduled_job('cron', hour='0,6,12,18', minute=0)
|
||||||
async def get_tetra_league_data() -> None:
|
async def get_tetra_league_data() -> None:
|
||||||
x_session_id = uuid4()
|
x_session_id = uuid4()
|
||||||
limit_by = retry(max_attempts=10, exception_type=RequestError)(limit(timedelta(seconds=1))(by))
|
retry_by = retry(max_attempts=10, exception_type=RequestError)(by)
|
||||||
prisecter = P(pri=9007199254740991, sec=9007199254740991, ter=9007199254740991) # * from ch.tetr.io
|
prisecter = P(pri=9007199254740991, sec=9007199254740991, ter=9007199254740991) # * from ch.tetr.io
|
||||||
results: list[BySuccessModel] = []
|
results: list[BySuccessModel] = []
|
||||||
while True:
|
while True:
|
||||||
model = await limit_by('league', Parameter(after=prisecter.to_prisecter(), limit=100), x_session_id)
|
model = await retry_by('league', Parameter(after=prisecter.to_prisecter(), limit=100), x_session_id)
|
||||||
prisecter = model.data.entries[-1].p
|
prisecter = model.data.entries[-1].p
|
||||||
results.append(model)
|
results.append(model)
|
||||||
if len(model.data.entries) < 100: # 分页值 # noqa: PLR2004
|
if len(model.data.entries) < 100: # 分页值 # noqa: PLR2004
|
||||||
|
|||||||
Reference in New Issue
Block a user