Skip to content

Commit

Permalink
fix: 修复用户创建日期的时区问题
Browse files Browse the repository at this point in the history
  • Loading branch information
he0119 committed Aug 7, 2024
1 parent 6c2c4bd commit 330a2ed
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 33 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/

## [Unreleased]

### Fixed

- 修复用户创建日期的时区问题

### Changed

- 事件响应器现在将阻断事件的传播
Expand Down
2 changes: 1 addition & 1 deletion nonebot_plugin_user/matchers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()}",
]
)
)
Expand Down
6 changes: 4 additions & 2 deletions nonebot_plugin_user/models.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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:
Expand Down
25 changes: 13 additions & 12 deletions tests/test_bind_group.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
27 changes: 14 additions & 13 deletions tests/test_bind_private.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
11 changes: 6 additions & 5 deletions tests/test_user.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# ruff: noqa: E501
import pytest
from nonebot import get_adapter
from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 330a2ed

Please sign in to comment.