diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 758ffb5..0bf599c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,9 @@ jobs: - name: ruff 静态检查 run: uv run ruff check src tests examples + - name: ruff 格式检查 + run: uv run ruff format --check src tests examples + - name: pyright 类型检查 run: uv run pyright diff --git a/src/qqbotsdk/api/channel.py b/src/qqbotsdk/api/channel.py index 509110e..79146d2 100644 --- a/src/qqbotsdk/api/channel.py +++ b/src/qqbotsdk/api/channel.py @@ -87,9 +87,7 @@ class ChannelApi(BaseApi): """ return await self.get(f"/channels/{channel_id}/members/{user_id}/permissions") - async def get_channel_role_permissions( - self, channel_id: str, role_id: str - ) -> dict: + async def get_channel_role_permissions(self, channel_id: str, role_id: str) -> dict: """获取子频道指定身份组的权限(GET .../roles/{role_id}/permissions)。""" return await self.get(f"/channels/{channel_id}/roles/{role_id}/permissions") diff --git a/src/qqbotsdk/api/group.py b/src/qqbotsdk/api/group.py index e731d77..1bc8352 100644 --- a/src/qqbotsdk/api/group.py +++ b/src/qqbotsdk/api/group.py @@ -31,7 +31,9 @@ class GroupApi(BaseApi): """ return await self.get(f"/v2/groups/{group_openid}/info") - async def get_group_members(self, group_openid: str, cursor: str | None = None) -> dict: + async def get_group_members( + self, group_openid: str, cursor: str | None = None + ) -> dict: """获取群成员列表(GET /v2/groups/{group_openid}/members)。 每次最多返回 30 条,翻页透传上次响应的 next_cursor(空串=末页)。 @@ -44,9 +46,7 @@ class GroupApi(BaseApi): 返回昵称、角色(member/owner/admin)、入群时间等。 """ - return await self.get( - f"/v2/groups/{group_openid}/members/{member_openid}" - ) + return await self.get(f"/v2/groups/{group_openid}/members/{member_openid}") async def get_group_bot_state(self, group_openid: str) -> dict: """获取机器人在指定群内的状态(GET .../bot_state)。 @@ -247,7 +247,9 @@ class GroupApi(BaseApi): 对策略关联的全部群发起全量扫描,命中白名单号码的入群申请自动 审批通过;异步执行,约 10 分钟完成。 """ - return await self.post(f"/v2/groups/join_approval_strategy/{strategy_id}/execute") + return await self.post( + f"/v2/groups/join_approval_strategy/{strategy_id}/execute" + ) async def update_join_approval_strategy_whitelist( self, strategy_id: str, op: str, whitelist_users: list[str] diff --git a/src/qqbotsdk/api/guild.py b/src/qqbotsdk/api/guild.py index e73127d..427bc28 100644 --- a/src/qqbotsdk/api/guild.py +++ b/src/qqbotsdk/api/guild.py @@ -247,9 +247,7 @@ class GuildApi(BaseApi): 需要管理员权限(同身份组的成员也可操作)。 """ - return await self.put( - f"/guilds/{guild_id}/members/{user_id}/roles/{role_id}" - ) + return await self.put(f"/guilds/{guild_id}/members/{user_id}/roles/{role_id}") async def remove_guild_member_role( self, guild_id: str, user_id: str, role_id: str diff --git a/tests/test_api.py b/tests/test_api.py index 4393f72..6e39628 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -298,7 +298,9 @@ async def test_chunked_upload_group_and_c2c(): await api.prepare_c2c_upload("U1", **common) assert cap["call"][:2] == ("POST", "/v2/users/U1/upload_prepare") - await api.finish_c2c_upload_part("U1", "up1", part_index=1, block_size=4096, md5="p1") + await api.finish_c2c_upload_part( + "U1", "up1", part_index=1, block_size=4096, md5="p1" + ) method, path, kwargs = cap["call"] assert (method, path) == ("POST", "/v2/users/U1/upload_part_finish") assert kwargs["json"] == { @@ -377,16 +379,18 @@ async def test_group_join_request_flow(): assert (method, path) == ("GET", "/v2/groups/G1/join_request_list") assert kwargs["params"] == {"limit": 10} - await api.review_group_join_request( - "G1", "M1", "approve", join_request_id="j1" - ) + await api.review_group_join_request("G1", "M1", "approve", join_request_id="j1") method, path, kwargs = cap["call"] assert (method, path) == ("POST", "/v2/groups/G1/approval_join_request/M1") assert kwargs["json"] == {"op": "approve", "join_request_id": "j1"} await api.review_group_join_request( - "G1", "M1", "decline", join_request_id="j1", - reject_reason="广告", add_to_member_blacklist=True, + "G1", + "M1", + "decline", + join_request_id="j1", + reject_reason="广告", + add_to_member_blacklist=True, ) body = cap["call"][2]["json"] assert body == { @@ -689,7 +693,9 @@ async def test_guild_members_mutes_and_api_permission(): await api.get_guild_members("GID") assert cap["call"][:2] == ("GET", "/guilds/GID/members") - await api.remove_guild_member("GID", "U1", add_blacklist=True, delete_history_msg_days=7) + await api.remove_guild_member( + "GID", "U1", add_blacklist=True, delete_history_msg_days=7 + ) method, path, kwargs = cap["call"] assert (method, path) == ("DELETE", "/guilds/GID/members/U1") assert kwargs["json"] == {"add_blacklist": True, "delete_history_msg_days": 7} @@ -717,7 +723,9 @@ async def test_guild_members_mutes_and_api_permission(): await api.get_guild_api_permissions("GID") assert cap["call"][:2] == ("GET", "/guilds/GID/api_permission") - await api.create_api_permission_demand("GID", "C1", "/channels/x/messages", "POST", "d") + await api.create_api_permission_demand( + "GID", "C1", "/channels/x/messages", "POST", "d" + ) method, path, kwargs = cap["call"] assert (method, path) == ("POST", "/guilds/GID/api_permission/demand") assert kwargs["json"] == {