From 330a2ed8817290ebd943f6c5ca4d54d36b271d8e Mon Sep 17 00:00:00 2001 From: uy_sun Date: Wed, 7 Aug 2024 19:37:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=97=A5=E6=9C=9F=E7=9A=84=E6=97=B6=E5=8C=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ nonebot_plugin_user/matchers.py | 2 +- nonebot_plugin_user/models.py | 6 ++++-- tests/test_bind_group.py | 25 +++++++++++++------------ tests/test_bind_private.py | 27 ++++++++++++++------------- tests/test_user.py | 11 ++++++----- 6 files changed, 42 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a368151..28b9863 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/ ## [Unreleased] +### Fixed + +- 修复用户创建日期的时区问题 + ### Changed - 事件响应器现在将阻断事件的传播 diff --git a/nonebot_plugin_user/matchers.py b/nonebot_plugin_user/matchers.py index 7e25c18..76aa602 100644 --- a/nonebot_plugin_user/matchers.py +++ b/nonebot_plugin_user/matchers.py @@ -47,7 +47,7 @@ async def _(session: UserSession, name: Match[str]): f"平台名:{session.platform}", f"平台 ID:{session.platform_id}", f"用户名:{session.user_name}", - f"创建日期:{session.created_at.strftime('%Y-%m-%d %H:%M:%S')}", + f"创建日期:{session.created_at.astimezone()}", ] ) ) diff --git a/nonebot_plugin_user/models.py b/nonebot_plugin_user/models.py index 0ad5fa6..96188f9 100644 --- a/nonebot_plugin_user/models.py +++ b/nonebot_plugin_user/models.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timezone from nonebot.compat import PYDANTIC_V2, ConfigDict from nonebot_plugin_orm import Model @@ -49,7 +49,9 @@ def user_name(self) -> str: @property def created_at(self) -> datetime: """用户创建日期""" - return self.user.created_at.astimezone() + + # 数据库中使用 UTC 保存时间 + return self.user.created_at.replace(tzinfo=timezone.utc) @property def platform_id(self) -> str: diff --git a/tests/test_bind_group.py b/tests/test_bind_group.py index 110c440..095aa5e 100644 --- a/tests/test_bind_group.py +++ b/tests/test_bind_group.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 from nonebot import get_adapter from nonebot.adapters.onebot.v11 import Adapter, Bot, Message from nonebug import App @@ -22,7 +23,7 @@ async def test_bind_group(app: App, patch_current_time, mocker: MockerFixture): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -35,7 +36,7 @@ async def test_bind_group(app: App, patch_current_time, mocker: MockerFixture): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -48,7 +49,7 @@ async def test_bind_group(app: App, patch_current_time, mocker: MockerFixture): ctx.receive_event(bot, event) ctx.should_call_send( event, - "命令 bind 可用于在多个平台间绑定用户数据。绑定过程中,原始平台的用户数据将完全保留,而目标平台的用户数据将被原始平台的数据所覆盖。\n请确认当前平台是你的目标平台,并在 5 分钟内使用你的账号在原始平台内向机器人发送以下文本:\n/bind nonebot/123456\n绑定完成后,你可以随时使用「bind -r」来解除绑定状态。", # noqa: E501 + "命令 bind 可用于在多个平台间绑定用户数据。绑定过程中,原始平台的用户数据将完全保留,而目标平台的用户数据将被原始平台的数据所覆盖。\n请确认当前平台是你的目标平台,并在 5 分钟内使用你的账号在原始平台内向机器人发送以下文本:\n/bind nonebot/123456\n绑定完成后,你可以随时使用「bind -r」来解除绑定状态。", True, ) ctx.should_finished(bind_cmd) @@ -63,7 +64,7 @@ async def test_bind_group(app: App, patch_current_time, mocker: MockerFixture): ctx.receive_event(bot, event) ctx.should_call_send( event, - "令牌核验成功!下面将进行第二步操作。\n请在 5 分钟内使用你的账号在目标平台内向机器人发送以下文本:\n/bind nonebot/123456\n注意:当前平台是你的原始平台,这里的用户数据将覆盖目标平台的数据。", # noqa: E501 + "令牌核验成功!下面将进行第二步操作。\n请在 5 分钟内使用你的账号在目标平台内向机器人发送以下文本:\n/bind nonebot/123456\n注意:当前平台是你的原始平台,这里的用户数据将覆盖目标平台的数据。", True, ) ctx.should_finished(bind_cmd) @@ -87,7 +88,7 @@ async def test_bind_group(app: App, patch_current_time, mocker: MockerFixture): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -100,7 +101,7 @@ async def test_bind_group(app: App, patch_current_time, mocker: MockerFixture): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -124,7 +125,7 @@ async def test_bind_group_different_user( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -137,7 +138,7 @@ async def test_bind_group_different_user( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -150,7 +151,7 @@ async def test_bind_group_different_user( ctx.receive_event(bot, event) ctx.should_call_send( event, - "命令 bind 可用于在多个平台间绑定用户数据。绑定过程中,原始平台的用户数据将完全保留,而目标平台的用户数据将被原始平台的数据所覆盖。\n请确认当前平台是你的目标平台,并在 5 分钟内使用你的账号在原始平台内向机器人发送以下文本:\n/bind nonebot/123456\n绑定完成后,你可以随时使用「bind -r」来解除绑定状态。", # noqa: E501 + "命令 bind 可用于在多个平台间绑定用户数据。绑定过程中,原始平台的用户数据将完全保留,而目标平台的用户数据将被原始平台的数据所覆盖。\n请确认当前平台是你的目标平台,并在 5 分钟内使用你的账号在原始平台内向机器人发送以下文本:\n/bind nonebot/123456\n绑定完成后,你可以随时使用「bind -r」来解除绑定状态。", True, ) ctx.should_finished(bind_cmd) @@ -165,7 +166,7 @@ async def test_bind_group_different_user( ctx.receive_event(bot, event) ctx.should_call_send( event, - "令牌核验成功!下面将进行第二步操作。\n请在 5 分钟内使用你的账号在目标平台内向机器人发送以下文本:\n/bind nonebot/123456\n注意:当前平台是你的原始平台,这里的用户数据将覆盖目标平台的数据。", # noqa: E501 + "令牌核验成功!下面将进行第二步操作。\n请在 5 分钟内使用你的账号在目标平台内向机器人发送以下文本:\n/bind nonebot/123456\n注意:当前平台是你的原始平台,这里的用户数据将覆盖目标平台的数据。", True, ) ctx.should_finished(bind_cmd) @@ -189,7 +190,7 @@ async def test_bind_group_different_user( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -202,7 +203,7 @@ async def test_bind_group_different_user( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) diff --git a/tests/test_bind_private.py b/tests/test_bind_private.py index 0c33a8b..e98de63 100644 --- a/tests/test_bind_private.py +++ b/tests/test_bind_private.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 from nonebot import get_adapter from nonebot.adapters.onebot.v11 import Adapter, Bot, Message from nonebug import App @@ -22,7 +23,7 @@ async def test_bind_private(app: App, patch_current_time, mocker: MockerFixture) ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -35,7 +36,7 @@ async def test_bind_private(app: App, patch_current_time, mocker: MockerFixture) ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -72,7 +73,7 @@ async def test_bind_private(app: App, patch_current_time, mocker: MockerFixture) ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -85,7 +86,7 @@ async def test_bind_private(app: App, patch_current_time, mocker: MockerFixture) ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -109,7 +110,7 @@ async def test_bind_private_invalid_token( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -122,7 +123,7 @@ async def test_bind_private_invalid_token( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -159,7 +160,7 @@ async def test_bind_private_invalid_token( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -172,7 +173,7 @@ async def test_bind_private_invalid_token( ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -188,7 +189,7 @@ async def test_bind_private_prefix(app: App, patch_current_time, mocker: MockerF mocked_random = mocker.patch("nonebot_plugin_user.matchers.random.randint") mocked_random.return_value = 123456 - with patch_current_time("2023-09-14 10:46:10", tick=False): + with patch_current_time("2023-09-14 18:46:10+08:00", tick=False): async with app.test_matcher(user_cmd) as ctx: adapter = get_adapter(Adapter) bot = ctx.create_bot(base=Bot, adapter=adapter) @@ -197,7 +198,7 @@ async def test_bind_private_prefix(app: App, patch_current_time, mocker: MockerF ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -210,7 +211,7 @@ async def test_bind_private_prefix(app: App, patch_current_time, mocker: MockerF ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -247,7 +248,7 @@ async def test_bind_private_prefix(app: App, patch_current_time, mocker: MockerF ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -260,7 +261,7 @@ async def test_bind_private_prefix(app: App, patch_current_time, mocker: MockerF ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) diff --git a/tests/test_user.py b/tests/test_user.py index 3e4b5fa..9fe2164 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 import pytest from nonebot import get_adapter from nonebot.adapters.onebot.v11 import Adapter, Bot, Message @@ -19,7 +20,7 @@ async def test_user(app: App, patch_current_time): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -32,7 +33,7 @@ async def test_user(app: App, patch_current_time): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -57,7 +58,7 @@ async def test_user_set_name(app: App, patch_current_time): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:qq-10\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -70,7 +71,7 @@ async def test_user_set_name(app: App, patch_current_time): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:1\n用户名:qq-1\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd) @@ -109,7 +110,7 @@ async def test_user_set_name(app: App, patch_current_time): ctx.receive_event(bot, event) ctx.should_call_send( event, - "平台名:qq\n平台 ID:10\n用户名:name\n创建日期:2023-09-14 10:46:10", + "平台名:qq\n平台 ID:10\n用户名:name\n创建日期:2023-09-14 18:46:10+08:00", True, ) ctx.should_finished(user_cmd)