fix: avoid duplicate sends on NapCat timeout - #32
Conversation
Reviewer's Guide将特定的 OneBot/NapCat 超时错误在直接发送和转发发送场景中都归类为“不确定投递”而不是“硬失败”,为 NapCat 动作超时添加回归测试以防止重复发送图片,并在变更日志中记录该修复。 直接发送场景下 OneBot/NapCat 超时处理的时序图sequenceDiagram
participant ImageSender
participant SendStrategy
participant NapCatAdapter
participant SendAttemptResult
ImageSender->>SendStrategy: send_with_status(event, chain)
SendStrategy->>NapCatAdapter: send_group_msg
NapCatAdapter-->>SendStrategy: Exception retcode_1200
SendStrategy->>SendStrategy: _is_onebot_uncertain_delivery_error(exc)
SendStrategy->>SendAttemptResult: pending_delivery("onebot send confirmation timed out")
SendStrategy-->>ImageSender: SendAttemptResult
转发发送场景下 OneBot/NapCat 超时处理的时序图sequenceDiagram
participant ImageSender
participant SendStrategy
participant NapCatAdapter
participant SendAttemptResult
ImageSender->>SendStrategy: _send_nodes_direct_with_status(event, nodes)
SendStrategy->>NapCatAdapter: send_group_forward_msg
NapCatAdapter-->>SendStrategy: Exception retcode_1200
SendStrategy->>SendStrategy: _is_onebot_uncertain_delivery_error(exc)
SendStrategy->>SendAttemptResult: pending_delivery("forward onebot confirmation timed out")
SendStrategy-->>ImageSender: SendAttemptResult
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your Experience访问你的 dashboard 以:
Getting HelpOriginal review guide in EnglishReviewer's GuideClassifies specific OneBot/NapCat timeout errors as uncertain delivery instead of hard failures for both direct and forward sends, adds a regression test to prevent duplicate image sends on NapCat action timeouts, and documents the fix in the changelog. Sequence diagram for direct send OneBot/NapCat timeout handlingsequenceDiagram
participant ImageSender
participant SendStrategy
participant NapCatAdapter
participant SendAttemptResult
ImageSender->>SendStrategy: send_with_status(event, chain)
SendStrategy->>NapCatAdapter: send_group_msg
NapCatAdapter-->>SendStrategy: Exception retcode_1200
SendStrategy->>SendStrategy: _is_onebot_uncertain_delivery_error(exc)
SendStrategy->>SendAttemptResult: pending_delivery("onebot send confirmation timed out")
SendStrategy-->>ImageSender: SendAttemptResult
Sequence diagram for forward send OneBot/NapCat timeout handlingsequenceDiagram
participant ImageSender
participant SendStrategy
participant NapCatAdapter
participant SendAttemptResult
ImageSender->>SendStrategy: _send_nodes_direct_with_status(event, nodes)
SendStrategy->>NapCatAdapter: send_group_forward_msg
NapCatAdapter-->>SendStrategy: Exception retcode_1200
SendStrategy->>SendStrategy: _is_onebot_uncertain_delivery_error(exc)
SendStrategy->>SendAttemptResult: pending_delivery("forward onebot confirmation timed out")
SendStrategy-->>ImageSender: SendAttemptResult
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
📝 WalkthroughWalkthrough针对 OneBot/NapCat 平台,新增统一平台名提取函数与超时错误识别逻辑,使 ChangesNapCat 发送确认超时去重
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Hey - 我发现了 1 个问题,并留下了一些整体反馈:
- 建议收紧或更清晰地结构化
_is_onebot_uncertain_delivery_error的启发式逻辑(例如:匹配已知的子串模式或常量),以避免未来文案调整时不小心把不相关的错误也归类为“待投递”。 - 当前平台名的提取逻辑在“直接发送”和“转发发送”之间略有不一致;如果能统一到同一个辅助函数或模式,会让整体行为更容易理解和维护。
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- Consider tightening or structuring the `_is_onebot_uncertain_delivery_error` heuristics (e.g., matching against a known substring pattern or constants) so future wording changes don’t accidentally classify unrelated errors as pending delivery.
- The platform name extraction logic is slightly inconsistent between direct send and forward send; aligning on a single helper or pattern would make the behavior easier to reason about and maintain.
## Individual Comments
### Comment 1
<location path="tests/infrastructure/test_image_sender.py" line_range="214-190" />
<code_context>
+ mock_event.platform.name = "aiocqhttp"
</code_context>
<issue_to_address>
**suggestion (testing):** 考虑增加一个“负向测试”,验证非 OneBot 类的平台不会把相同的异常视为待投递
当前测试已经通过 `mock_event.platform.name = "aiocqhttp"` 覆盖了 OneBot 类平台的路径,请再补充一个使用非 OneBot 类平台名(例如你现有适配器栈里的另一个平台)的测试,其中同样的 `ActionTimeout` 会导致正常失败,而不是被标记为 `pending_delivery`。这样可以验证基于平台的分类逻辑,并防止未来的回归不小心把 OneBot/NapCat 的行为扩展到更广的平台范围。
建议的实现方式:
```python
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# OneBot-like platform: aiocqhttp should treat ActionTimeout as pending_delivery
mock_event.platform.name = "aiocqhttp"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = with_napcat_transport(
without_delivery_notices(sample_config_dict),
local_file_mode="always",
local_file_allowed_roots=[str(tmp_path / "shared")],
)
async def test_image_sender_action_timeout_on_non_onebot_platform_is_failure(
tmp_path: Path,
sample_config_dict: dict[str, Any],
mock_event: MagicMock,
) -> None:
"""
Non-OneBot-like platforms (e.g. telegram) should not classify ActionTimeout
as pending delivery; instead the send should fail normally.
"""
# Arrange
message = (
"Timeout: NTEvent serviceAndMethod:NodeIKernelMsgService/sendMsg "
"ListenerName:NodeIKernelMsgListener/onMsgInfoListUpdate EventRet:\n{}\n"
)
wording = message
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# Use a non-OneBot-like platform name from the existing adapter stack
mock_event.platform.name = "telegram"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = without_delivery_notices(
sample_config_dict,
)
# Act
image_sender = ImageSender(config_dict)
with pytest.raises(ActionTimeout):
await image_sender.send_image(mock_event, wording)
# Assert
# The failure should be a normal timeout; nothing should be marked as pending delivery
assert not getattr(mock_event, "pending_delivery", False)
```
1. 确认 `ImageSender`、`send_image` 以及 `pending_delivery` 属性(或同等标记)的名字与该测试模块内实际使用的保持一致;如果你的代码使用了不同的发送类、方法或标记字段来表示“待投递”,请相应调整。
2. 如果现有的 OneBot/NapCat 测试目前对“待投递”有特定的结构断言(例如:返回结果对象中带 `pending_delivery` 字段,或使用专门的状态枚举),请在这里镜像同样的结构,并断言平台 `"telegram"` 会产生正常失败,而不是该待投递状态。
3. 将 `"telegram"` 替换为你当前适配器栈中已经存在的其他非 OneBot 适配器名称(例如 `"kook"`、`"discord"` 等),以保持测试与实际支持的平台一致。
4. 如果非 OneBot 平台的“正常失败路径”是以不同方式暴露的(比如返回结果对象,而不是直接抛出 `ActionTimeout`),那就需要调整 `with pytest.raises(ActionTimeout)` 这段代码,使之匹配你的图片发送器实际暴露失败的方式,并断言它不会被标记为待投递。
</issue_to_address>Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Original comment in English
Hey - I've found 1 issue, and left some high level feedback:
- Consider tightening or structuring the
_is_onebot_uncertain_delivery_errorheuristics (e.g., matching against a known substring pattern or constants) so future wording changes don’t accidentally classify unrelated errors as pending delivery. - The platform name extraction logic is slightly inconsistent between direct send and forward send; aligning on a single helper or pattern would make the behavior easier to reason about and maintain.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- Consider tightening or structuring the `_is_onebot_uncertain_delivery_error` heuristics (e.g., matching against a known substring pattern or constants) so future wording changes don’t accidentally classify unrelated errors as pending delivery.
- The platform name extraction logic is slightly inconsistent between direct send and forward send; aligning on a single helper or pattern would make the behavior easier to reason about and maintain.
## Individual Comments
### Comment 1
<location path="tests/infrastructure/test_image_sender.py" line_range="214-190" />
<code_context>
+ mock_event.platform.name = "aiocqhttp"
</code_context>
<issue_to_address>
**suggestion (testing):** Consider a negative test showing non-OneBot-like platforms do not treat similar exceptions as pending delivery
Since this test covers the OneBot-like path via `mock_event.platform.name = "aiocqhttp"`, please also add a complementary test using a non-OneBot-like platform name (e.g., another adapter in your stack) where the same `ActionTimeout` results in a normal failure rather than `pending_delivery`. This will verify the platform-based classification and help prevent regressions that accidentally extend the OneBot/NapCat behavior more broadly.
Suggested implementation:
```python
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# OneBot-like platform: aiocqhttp should treat ActionTimeout as pending_delivery
mock_event.platform.name = "aiocqhttp"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = with_napcat_transport(
without_delivery_notices(sample_config_dict),
local_file_mode="always",
local_file_allowed_roots=[str(tmp_path / "shared")],
)
async def test_image_sender_action_timeout_on_non_onebot_platform_is_failure(
tmp_path: Path,
sample_config_dict: dict[str, Any],
mock_event: MagicMock,
) -> None:
"""
Non-OneBot-like platforms (e.g. telegram) should not classify ActionTimeout
as pending delivery; instead the send should fail normally.
"""
# Arrange
message = (
"Timeout: NTEvent serviceAndMethod:NodeIKernelMsgService/sendMsg "
"ListenerName:NodeIKernelMsgListener/onMsgInfoListUpdate EventRet:\n{}\n"
)
wording = message
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# Use a non-OneBot-like platform name from the existing adapter stack
mock_event.platform.name = "telegram"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = without_delivery_notices(
sample_config_dict,
)
# Act
image_sender = ImageSender(config_dict)
with pytest.raises(ActionTimeout):
await image_sender.send_image(mock_event, wording)
# Assert
# The failure should be a normal timeout; nothing should be marked as pending delivery
assert not getattr(mock_event, "pending_delivery", False)
```
1. Ensure the names `ImageSender`, `send_image`, and the `pending_delivery` attribute (or equivalent) match what is actually used in this test module; adjust them if your code uses a different sender class, method, or flag to indicate pending delivery.
2. If the existing OneBot/NapCat test currently asserts a specific structure for the "pending delivery" classification (e.g. a result object with a `pending_delivery` field or a dedicated status enum), mirror that structure here and assert that the platform `"telegram"` produces a normal failure instead of that pending-delivery classification.
3. Replace `"telegram"` with another non-OneBot adapter name already present in your stack (e.g. `"kook"`, `"discord"`, etc.) to keep the test aligned with the actual platforms supported by your infrastructure.
4. If the normal failure path for non-OneBot platforms is surfaced differently (for example, returning a result object instead of raising `ActionTimeout`), adapt the `with pytest.raises(ActionTimeout)` block to match the way your image sender exposes failures and then assert that it is not marked as pending delivery.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| @@ -190,6 +190,60 @@ async def test_send_images_treats_napcat_none_ack_as_pending( | |||
| mock_event.bot.call_action.assert_not_called() | |||
There was a problem hiding this comment.
suggestion (testing): 考虑增加一个“负向测试”,验证非 OneBot 类的平台不会把相同的异常视为待投递
当前测试已经通过 mock_event.platform.name = "aiocqhttp" 覆盖了 OneBot 类平台的路径,请再补充一个使用非 OneBot 类平台名(例如你现有适配器栈里的另一个平台)的测试,其中同样的 ActionTimeout 会导致正常失败,而不是被标记为 pending_delivery。这样可以验证基于平台的分类逻辑,并防止未来的回归不小心把 OneBot/NapCat 的行为扩展到更广的平台范围。
建议的实现方式:
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# OneBot-like platform: aiocqhttp should treat ActionTimeout as pending_delivery
mock_event.platform.name = "aiocqhttp"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = with_napcat_transport(
without_delivery_notices(sample_config_dict),
local_file_mode="always",
local_file_allowed_roots=[str(tmp_path / "shared")],
)
async def test_image_sender_action_timeout_on_non_onebot_platform_is_failure(
tmp_path: Path,
sample_config_dict: dict[str, Any],
mock_event: MagicMock,
) -> None:
"""
Non-OneBot-like platforms (e.g. telegram) should not classify ActionTimeout
as pending delivery; instead the send should fail normally.
"""
# Arrange
message = (
"Timeout: NTEvent serviceAndMethod:NodeIKernelMsgService/sendMsg "
"ListenerName:NodeIKernelMsgListener/onMsgInfoListUpdate EventRet:\n{}\n"
)
wording = message
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# Use a non-OneBot-like platform name from the existing adapter stack
mock_event.platform.name = "telegram"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = without_delivery_notices(
sample_config_dict,
)
# Act
image_sender = ImageSender(config_dict)
with pytest.raises(ActionTimeout):
await image_sender.send_image(mock_event, wording)
# Assert
# The failure should be a normal timeout; nothing should be marked as pending delivery
assert not getattr(mock_event, "pending_delivery", False)- 确认
ImageSender、send_image以及pending_delivery属性(或同等标记)的名字与该测试模块内实际使用的保持一致;如果你的代码使用了不同的发送类、方法或标记字段来表示“待投递”,请相应调整。 - 如果现有的 OneBot/NapCat 测试目前对“待投递”有特定的结构断言(例如:返回结果对象中带
pending_delivery字段,或使用专门的状态枚举),请在这里镜像同样的结构,并断言平台"telegram"会产生正常失败,而不是该待投递状态。 - 将
"telegram"替换为你当前适配器栈中已经存在的其他非 OneBot 适配器名称(例如"kook"、"discord"等),以保持测试与实际支持的平台一致。 - 如果非 OneBot 平台的“正常失败路径”是以不同方式暴露的(比如返回结果对象,而不是直接抛出
ActionTimeout),那就需要调整with pytest.raises(ActionTimeout)这段代码,使之匹配你的图片发送器实际暴露失败的方式,并断言它不会被标记为待投递。
Original comment in English
suggestion (testing): Consider a negative test showing non-OneBot-like platforms do not treat similar exceptions as pending delivery
Since this test covers the OneBot-like path via mock_event.platform.name = "aiocqhttp", please also add a complementary test using a non-OneBot-like platform name (e.g., another adapter in your stack) where the same ActionTimeout results in a normal failure rather than pending_delivery. This will verify the platform-based classification and help prevent regressions that accidentally extend the OneBot/NapCat behavior more broadly.
Suggested implementation:
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# OneBot-like platform: aiocqhttp should treat ActionTimeout as pending_delivery
mock_event.platform.name = "aiocqhttp"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = with_napcat_transport(
without_delivery_notices(sample_config_dict),
local_file_mode="always",
local_file_allowed_roots=[str(tmp_path / "shared")],
)
async def test_image_sender_action_timeout_on_non_onebot_platform_is_failure(
tmp_path: Path,
sample_config_dict: dict[str, Any],
mock_event: MagicMock,
) -> None:
"""
Non-OneBot-like platforms (e.g. telegram) should not classify ActionTimeout
as pending delivery; instead the send should fail normally.
"""
# Arrange
message = (
"Timeout: NTEvent serviceAndMethod:NodeIKernelMsgService/sendMsg "
"ListenerName:NodeIKernelMsgListener/onMsgInfoListUpdate EventRet:\n{}\n"
)
wording = message
context = MagicMock()
context.send_message = AsyncMock()
set_plugin_context(context)
# Use a non-OneBot-like platform name from the existing adapter stack
mock_event.platform.name = "telegram"
mock_event.get_group_id.return_value = "123456"
mock_event.get_sender_id.return_value = "654321"
mock_event.bot = MagicMock()
mock_event.bot.send_group_msg = AsyncMock(side_effect=ActionTimeout())
mock_event.bot.call_action = AsyncMock()
config_dict = without_delivery_notices(
sample_config_dict,
)
# Act
image_sender = ImageSender(config_dict)
with pytest.raises(ActionTimeout):
await image_sender.send_image(mock_event, wording)
# Assert
# The failure should be a normal timeout; nothing should be marked as pending delivery
assert not getattr(mock_event, "pending_delivery", False)- Ensure the names
ImageSender,send_image, and thepending_deliveryattribute (or equivalent) match what is actually used in this test module; adjust them if your code uses a different sender class, method, or flag to indicate pending delivery. - If the existing OneBot/NapCat test currently asserts a specific structure for the "pending delivery" classification (e.g. a result object with a
pending_deliveryfield or a dedicated status enum), mirror that structure here and assert that the platform"telegram"produces a normal failure instead of that pending-delivery classification. - Replace
"telegram"with another non-OneBot adapter name already present in your stack (e.g."kook","discord", etc.) to keep the test aligned with the actual platforms supported by your infrastructure. - If the normal failure path for non-OneBot platforms is surfaced differently (for example, returning a result object instead of raising
ActionTimeout), adapt thewith pytest.raises(ActionTimeout)block to match the way your image sender exposes failures and then assert that it is not marked as pending delivery.
b9ebdb0 to
fc705cc
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
tests/infrastructure/test_image_sender.py (1)
275-292: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win建议补充 ForwardSendStrategy 在 OneBot 平台的正向 pending 测试。
当前测试覆盖了
DirectSendStrategy的正向场景(test_send_images_treats_onebot_action_timeout_as_pending)和两种策略的负向场景,但缺少ForwardSendStrategy在 OneBot 平台上将OneBotActionTimeout判定为 pending 的正向用例。由于两条路径的异常处理是独立复制的而非共享,正向测试可以确保转发路径的 pending 判定不会回归。💡 建议的测试用例
+@pytest.mark.asyncio +async def test_forward_send_strategy_treats_onebot_action_timeout_as_pending( + mock_event, +) -> None: + """合并转发在 OneBot 平台将 NapCat/NTQQ timeout 归类为待确认投递。""" + context = MagicMock() + context.send_message = AsyncMock(side_effect=OneBotActionTimeout()) + strategy = ForwardSendStrategy(context) + + mock_event.platform.name = "aiocqhttp" + mock_event.get_self_id.return_value = "10000" + + result = await strategy.send_with_status( + mock_event, + [Comp.Image.fromBytes(b"image-data")], + ) + + assert result.accepted is True + assert result.pending is True🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/infrastructure/test_image_sender.py` around lines 275 - 292, The ForwardSendStrategy coverage is missing the positive OneBot pending case for OneBotActionTimeout, so add a test alongside test_forward_send_strategy_keeps_action_timeout_failure_on_non_onebot that uses a OneBot-like platform and verifies send_with_status returns pending=True and accepted=True behavior consistent with test_send_images_treats_onebot_action_timeout_as_pending. Use ForwardSendStrategy, send_with_status, and OneBotActionTimeout to locate the path and keep the non-OneBot negative test unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@tests/infrastructure/test_image_sender.py`:
- Around line 275-292: The ForwardSendStrategy coverage is missing the positive
OneBot pending case for OneBotActionTimeout, so add a test alongside
test_forward_send_strategy_keeps_action_timeout_failure_on_non_onebot that uses
a OneBot-like platform and verifies send_with_status returns pending=True and
accepted=True behavior consistent with
test_send_images_treats_onebot_action_timeout_as_pending. Use
ForwardSendStrategy, send_with_status, and OneBotActionTimeout to locate the
path and keep the non-OneBot negative test unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: c907ddf7-6b0b-4745-bc37-7cf5e6cc7d49
📒 Files selected for processing (3)
CHANGELOG.mdsrc/infrastructure/sending/send_strategies.pytests/infrastructure/test_image_sender.py
fc705cc to
9933daa
Compare
Fixes the remaining duplicate-image issue observed on production NapCat/aiocqhttp.
Diagnosis on
ssh atrishowed the deployed plugin was stillv2.1.1, and logs for the failing scenario hadcount=1anditems=1. The duplicate did not come from provider over-return. Instead,send_group_msgreturned retcode1200with NTQQsendMsgtimeout wording after rawfile://passthrough, and the plugin treated it as a confirmed failure, triggering normal/stream fallback for the same image.Modifications / 改动点
Treat OneBot/NapCat retcode
1200as pending delivery only when the platform is OneBot-like and the error text matches the known NTQQsendMsgtimeout markers.Keep unrelated retcode
1200errors, and the same NapCat wording on non-OneBot platforms, on the normal failure path instead of widening pending delivery to other adapters.Use one
_platform_name()helper across direct send and forward send so platform classification is consistent.Apply the uncertain-delivery classification to both direct send and forward send paths.
Add regression tests for the positive NapCat timeout cases, non-OneBot direct/forward negative cases, and unrelated OneBot retcode
1200wording.Document the narrowed NapCat timeout duplicate-send fix in
CHANGELOG.md.This is NOT a breaking change. / 这不是一个破坏性变更。
Screenshots or Test Results / 运行截图或测试结果
Checklist / 检查清单
😊 If there are new features added in the PR, I have discussed them with the authors through issues/emails, etc.
/ 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。
No new feature is added; this is a bugfix.
👀 My changes have been well-tested, and "Verification Steps" and "Screenshots" have been provided above.
/ 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”。
🤓 I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations in
requirements.txt./ 我确保没有引入新依赖库,或者引入了新依赖库的同时将其添加到
requirements.txt文件相应位置。😮 My changes do not introduce malicious code.
/ 我的更改没有引入恶意代码。