为 TETR.IO 引入全局速率限制 (#481)

This commit is contained in:
呵呵です
2024-10-19 18:34:56 +08:00
committed by GitHub
parent c0540769c8
commit 61b5fcb137
2 changed files with 6 additions and 4 deletions

View File

@@ -1,5 +1,5 @@
from asyncio import Lock
from datetime import datetime, timezone
from datetime import datetime, timedelta, timezone
from typing import ClassVar
from weakref import WeakValueDictionary
@@ -9,12 +9,15 @@ from nonebot.log import logger
from yarl import URL
from ....config.config import config
from ....utils.limit import limit
from ....utils.request import Request
from .schemas.base import FailedModel, SuccessModel
UTC = timezone.utc
request = Request(config.tetris.proxy.tetrio or config.tetris.proxy.main)
request.request = limit(timedelta(seconds=1))(request.request)
class Cache:

View File

@@ -13,7 +13,6 @@ from nonebot_plugin_orm import get_session
from sqlalchemy import select
from ....utils.exception import RequestError
from ....utils.limit import limit
from ....utils.retry import retry
from .. import alc
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)
async def get_tetra_league_data() -> None:
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
results: list[BySuccessModel] = []
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
results.append(model)
if len(model.data.entries) < 100: # 分页值 # noqa: PLR2004