mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
✨ 使用缓存
This commit is contained in:
@@ -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()
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user