使用缓存

This commit is contained in:
2024-06-10 02:34:30 +08:00
parent f7c3d493ea
commit f9b11895e2
2 changed files with 14 additions and 14 deletions

View File

@@ -1,5 +1,6 @@
from asyncio import gather
from hashlib import md5 from hashlib import md5
from urllib.parse import urlunparse from urllib.parse import urlencode
from nonebot_plugin_alconna.uniseg import UniMessage from nonebot_plugin_alconna.uniseg import UniMessage
from nonebot_plugin_orm import get_session from nonebot_plugin_orm import get_session
@@ -27,7 +28,7 @@ async def _(nb_user: User, account: Player, event_session: EventSession, bot_inf
command_type='bind', command_type='bind',
command_args=[], command_args=[],
): ):
user = await account.user user, user_info = await gather(account.user, account.get_info())
async with get_session() as session: async with get_session() as session:
bind_status = await create_or_update_bind( bind_status = await create_or_update_bind(
session=session, session=session,
@@ -35,8 +36,8 @@ async def _(nb_user: User, account: Player, event_session: EventSession, bot_inf
game_platform=GAME_TYPE, game_platform=GAME_TYPE,
game_account=user.unique_identifier, game_account=user.unique_identifier,
) )
user_info = await account.get_info()
if bind_status in (BindStatus.SUCCESS, BindStatus.UPDATE): if bind_status in (BindStatus.SUCCESS, BindStatus.UPDATE):
netloc = get_self_netloc()
async with HostPage( async with HostPage(
await render( await render(
'v1/binding', 'v1/binding',
@@ -44,7 +45,7 @@ async def _(nb_user: User, account: Player, event_session: EventSession, bot_inf
platform='TETR.IO', platform='TETR.IO',
status='unknown', status='unknown',
user=People( user=People(
avatar=f'https://tetr.io/user-content/avatars/{user_info.data.user.id}.jpg?rv={user_info.data.user.avatar_revision}' avatar=f'http://{netloc}/host/resource/tetrio/avatars/{user.ID}?{urlencode({"revision": user_info.data.user.avatar_revision})}'
if user_info.data.user.avatar_revision is not None if user_info.data.user.avatar_revision is not None
else Avatar(type='identicon', hash=md5(user_info.data.user.id.encode()).hexdigest()), # noqa: S324 else Avatar(type='identicon', hash=md5(user_info.data.user.id.encode()).hexdigest()), # noqa: S324
name=user_info.data.user.username.upper(), name=user_info.data.user.username.upper(),
@@ -57,6 +58,4 @@ async def _(nb_user: User, account: Player, event_session: EventSession, bot_inf
), ),
) )
) as page_hash: ) as page_hash:
await UniMessage.image( await UniMessage.image(raw=await screenshot(f'http://{netloc}/host/{page_hash}.html')).finish()
raw=await screenshot(urlunparse(('http', get_self_netloc(), f'/host/{page_hash}.html', '', '', '')))
).finish()

View File

@@ -4,7 +4,7 @@ from datetime import date, datetime, timedelta, timezone
from hashlib import md5 from hashlib import md5
from math import ceil, floor from math import ceil, floor
from typing import ClassVar, TypeVar, overload from typing import ClassVar, TypeVar, overload
from urllib.parse import urlunparse from urllib.parse import urlencode
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
from aiofiles import open from aiofiles import open
@@ -256,12 +256,13 @@ async def make_query_image_v1(player: Player) -> bytes:
else: else:
sprint_value = 'N/A' sprint_value = 'N/A'
blitz_value = f'{blitz.endcontext.score:,}' if blitz is not None else 'N/A' blitz_value = f'{blitz.endcontext.score:,}' if blitz is not None else 'N/A'
netloc = get_self_netloc()
async with HostPage( async with HostPage(
page=await render( page=await render(
'v1/tetrio/info', 'v1/tetrio/info',
V1TemplateInfo( V1TemplateInfo(
user=V1TemplateUser( user=V1TemplateUser(
avatar=f'https://tetr.io/user-content/avatars/{user_info.data.user.id}.jpg?rv={user_info.data.user.avatar_revision}' avatar=f'http://{netloc}/host/resource/tetrio/avatars/{user.ID}?{urlencode({"revision": user_info.data.user.avatar_revision})}'
if user_info.data.user.avatar_revision is not None if user_info.data.user.avatar_revision is not None
else Avatar( else Avatar(
type='identicon', type='identicon',
@@ -305,7 +306,7 @@ async def make_query_image_v1(player: Player) -> bytes:
), ),
) )
) as page_hash: ) as page_hash:
return await screenshot(urlunparse(('http', get_self_netloc(), f'/host/{page_hash}.html', '', '', ''))) return await screenshot(f'http://{netloc}/host/{page_hash}.html')
N = TypeVar('N', int, float) N = TypeVar('N', int, float)
@@ -336,7 +337,7 @@ async def make_query_image_v2(player: Player) -> bytes:
play_time = f'{game_time:.0f}s' play_time = f'{game_time:.0f}s'
else: else:
play_time = game_time play_time = game_time
netloc = get_self_netloc()
async with HostPage( async with HostPage(
await render( await render(
'v2/tetrio/info', 'v2/tetrio/info',
@@ -345,10 +346,10 @@ async def make_query_image_v2(player: Player) -> bytes:
id=user.ID, id=user.ID,
name=user.name.upper(), name=user.name.upper(),
bio=user_info.data.user.bio, bio=user_info.data.user.bio,
banner=f'https://tetr.io/user-content/banners/{user_info.data.user.id}.jpg?rv={user_info.data.user.banner_revision}' banner=f'http://{netloc}/host/resource/tetrio/banners/{user.ID}?{urlencode({"revision": user_info.data.user.avatar_revision})}'
if user_info.data.user.banner_revision is not None and user_info.data.user.banner_revision != 0 if user_info.data.user.banner_revision is not None and user_info.data.user.banner_revision != 0
else None, else None,
avatar=f'https://tetr.io/user-content/avatars/{user_info.data.user.id}.jpg?rv={user_info.data.user.avatar_revision}' avatar=f'http://{netloc}/host/resource/tetrio/avatars/{user.ID}?{urlencode({"revision": user_info.data.user.avatar_revision})}'
if user_info.data.user.avatar_revision is not None if user_info.data.user.avatar_revision is not None
else Avatar( else Avatar(
type='identicon', type='identicon',
@@ -418,7 +419,7 @@ async def make_query_image_v2(player: Player) -> bytes:
), ),
), ),
) as page_hash: ) as page_hash:
return await screenshot(urlunparse(('http', get_self_netloc(), f'/host/{page_hash}.html', '', '', ''))) return await screenshot(f'http://{netloc}/host/{page_hash}.html')
async def make_query_text(player: Player) -> UniMessage: async def make_query_text(player: Player) -> UniMessage: