为 TETR.IO config record 添加命令历史记录

This commit is contained in:
2024-06-26 19:54:14 +08:00
parent c705610c1d
commit 01e85960fa
3 changed files with 77 additions and 41 deletions

View File

@@ -1,20 +1,30 @@
from nonebot_plugin_alconna.uniseg import UniMessage from nonebot_plugin_alconna.uniseg import UniMessage
from nonebot_plugin_orm import async_scoped_session from nonebot_plugin_orm import async_scoped_session
from nonebot_plugin_session import EventSession # type: ignore[import-untyped]
from nonebot_plugin_session_orm import get_session_persist_id # type: ignore[import-untyped]
from nonebot_plugin_user import User # type: ignore[import-untyped] from nonebot_plugin_user import User # type: ignore[import-untyped]
from sqlalchemy import select from sqlalchemy import select
from ...db import trigger
from . import alc from . import alc
from .constant import GAME_TYPE
from .models import TETRIOUserConfig from .models import TETRIOUserConfig
from .typing import Template from .typing import Template
@alc.assign('TETRIO.config') @alc.assign('TETRIO.config')
async def _(user: User, session: async_scoped_session, template: Template): async def _(user: User, session: async_scoped_session, event_session: EventSession, template: Template):
config = (await session.scalars(select(TETRIOUserConfig).where(TETRIOUserConfig.id == user.id))).one_or_none() async with trigger(
if config is None: session_persist_id=await get_session_persist_id(event_session),
config = TETRIOUserConfig(id=user.id, query_template=template) game_platform=GAME_TYPE,
session.add(config) command_type='config',
else: command_args=[],
config.query_template = template ):
await session.commit() config = (await session.scalars(select(TETRIOUserConfig).where(TETRIOUserConfig.id == user.id))).one_or_none()
await UniMessage('配置成功').finish() if config is None:
config = TETRIOUserConfig(id=user.id, query_template=template)
session.add(config)
else:
config.query_template = template
await session.commit()
await UniMessage('配置成功').finish()

View File

@@ -9,9 +9,10 @@ from nonebot_plugin_alconna import At
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
from nonebot_plugin_session import EventSession # type: ignore[import-untyped] from nonebot_plugin_session import EventSession # type: ignore[import-untyped]
from nonebot_plugin_session_orm import get_session_persist_id # type: ignore[import-untyped]
from nonebot_plugin_user import get_user # type: ignore[import-untyped] from nonebot_plugin_user import get_user # type: ignore[import-untyped]
from ....db import query_bind_info from ....db import query_bind_info, trigger
from ....utils.exception import RecordNotFoundError from ....utils.exception import RecordNotFoundError
from ....utils.host import HostPage, get_self_netloc from ....utils.host import HostPage, get_self_netloc
from ....utils.metrics import get_metrics from ....utils.metrics import get_metrics
@@ -34,24 +35,36 @@ async def _(
target: At | Me, target: At | Me,
event_session: EventSession, event_session: EventSession,
): ):
async with get_session() as session: async with trigger(
bind = await query_bind_info( session_persist_id=await get_session_persist_id(event_session),
session=session, game_platform=GAME_TYPE,
user=await get_user( command_type='bind',
event_session.platform, target.target if isinstance(target, At) else event.get_user_id() command_args=[],
), ):
game_platform=GAME_TYPE, async with get_session() as session:
) bind = await query_bind_info(
if bind is None: session=session,
await matcher.finish('未查询到绑定信息') user=await get_user(
message = UniMessage(CANT_VERIFY_MESSAGE) event_session.platform, target.target if isinstance(target, At) else event.get_user_id()
player = Player(user_id=bind.game_account, trust=True) ),
await (message + UniMessage.image(raw=await make_blitz_image(player))).finish() game_platform=GAME_TYPE,
)
if bind is None:
await matcher.finish('未查询到绑定信息')
message = UniMessage(CANT_VERIFY_MESSAGE)
player = Player(user_id=bind.game_account, trust=True)
await (message + UniMessage.image(raw=await make_blitz_image(player))).finish()
@alc.assign('TETRIO.record.blitz') @alc.assign('TETRIO.record.blitz')
async def _(account: Player): async def _(account: Player, event_session: EventSession):
await UniMessage.image(raw=await make_blitz_image(account)).finish() async with trigger(
session_persist_id=await get_session_persist_id(event_session),
game_platform=GAME_TYPE,
command_type='bind',
command_args=[],
):
await UniMessage.image(raw=await make_blitz_image(account)).finish()
async def make_blitz_image(player: Player) -> bytes: async def make_blitz_image(player: Player) -> bytes:

View File

@@ -9,9 +9,10 @@ from nonebot_plugin_alconna import At
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
from nonebot_plugin_session import EventSession # type: ignore[import-untyped] from nonebot_plugin_session import EventSession # type: ignore[import-untyped]
from nonebot_plugin_session_orm import get_session_persist_id # type: ignore[import-untyped]
from nonebot_plugin_user import get_user # type: ignore[import-untyped] from nonebot_plugin_user import get_user # type: ignore[import-untyped]
from ....db import query_bind_info from ....db import query_bind_info, trigger
from ....utils.exception import RecordNotFoundError from ....utils.exception import RecordNotFoundError
from ....utils.host import HostPage, get_self_netloc from ....utils.host import HostPage, get_self_netloc
from ....utils.metrics import get_metrics from ....utils.metrics import get_metrics
@@ -34,24 +35,36 @@ async def _(
target: At | Me, target: At | Me,
event_session: EventSession, event_session: EventSession,
): ):
async with get_session() as session: async with trigger(
bind = await query_bind_info( session_persist_id=await get_session_persist_id(event_session),
session=session, game_platform=GAME_TYPE,
user=await get_user( command_type='bind',
event_session.platform, target.target if isinstance(target, At) else event.get_user_id() command_args=[],
), ):
game_platform=GAME_TYPE, async with get_session() as session:
) bind = await query_bind_info(
if bind is None: session=session,
await matcher.finish('未查询到绑定信息') user=await get_user(
message = UniMessage(CANT_VERIFY_MESSAGE) event_session.platform, target.target if isinstance(target, At) else event.get_user_id()
player = Player(user_id=bind.game_account, trust=True) ),
await (message + UniMessage.image(raw=await make_sprint_image(player))).finish() game_platform=GAME_TYPE,
)
if bind is None:
await matcher.finish('未查询到绑定信息')
message = UniMessage(CANT_VERIFY_MESSAGE)
player = Player(user_id=bind.game_account, trust=True)
await (message + UniMessage.image(raw=await make_sprint_image(player))).finish()
@alc.assign('TETRIO.record.sprint') @alc.assign('TETRIO.record.sprint')
async def _(account: Player): async def _(account: Player, event_session: EventSession):
await UniMessage.image(raw=await make_sprint_image(account)).finish() async with trigger(
session_persist_id=await get_session_persist_id(event_session),
game_platform=GAME_TYPE,
command_type='bind',
command_args=[],
):
await UniMessage.image(raw=await make_sprint_image(account)).finish()
async def make_sprint_image(player: Player) -> bytes: async def make_sprint_image(player: Player) -> bytes: