nonebot-adapter-qq 1.4.1__tar.gz → 1.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/PKG-INFO +1 -1
  2. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/bot.py +76 -44
  3. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/models/qq.py +3 -3
  4. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/pyproject.toml +2 -2
  5. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/LICENSE +0 -0
  6. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/README.md +0 -0
  7. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/__init__.py +0 -0
  8. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/adapter.py +0 -0
  9. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/compat.py +0 -0
  10. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/config.py +0 -0
  11. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/event.py +0 -0
  12. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/exception.py +0 -0
  13. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/message.py +0 -0
  14. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/models/__init__.py +0 -0
  15. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/models/common.py +0 -0
  16. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/models/guild.py +0 -0
  17. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/models/payload.py +0 -0
  18. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/permission.py +0 -0
  19. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/store.py +0 -0
  20. {nonebot_adapter_qq-1.4.1 → nonebot_adapter_qq-1.4.3}/nonebot/adapters/qq/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-adapter-qq
3
- Version: 1.4.1
3
+ Version: 1.4.3
4
4
  Summary: QQ adapter for nonebot2
5
5
  Home-page: https://github.com/nonebot/adapter-qq
6
6
  License: MIT
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from base64 import b64encode
2
3
  from typing_extensions import Never, override
3
4
  from datetime import datetime, timezone, timedelta
4
5
  from typing import (
@@ -15,9 +16,10 @@ from typing import (
15
16
  overload,
16
17
  )
17
18
 
19
+ from pydantic import BaseModel
18
20
  from nonebot.message import handle_event
19
- from pydantic import BaseModel, parse_obj_as
20
21
  from nonebot.drivers import Request, Response
22
+ from nonebot.compat import type_validate_python
21
23
 
22
24
  from nonebot.adapters import Bot as BaseBot
23
25
 
@@ -578,7 +580,7 @@ class Bot(BaseBot):
578
580
  "GET",
579
581
  self.adapter.get_api_base().joinpath("users/@me"),
580
582
  )
581
- return parse_obj_as(User, await self._request(request))
583
+ return type_validate_python(User, await self._request(request))
582
584
 
583
585
  @API
584
586
  async def guilds(
@@ -593,7 +595,7 @@ class Bot(BaseBot):
593
595
  self.adapter.get_api_base().joinpath("users", "@me", "guilds"),
594
596
  params=exclude_none({"before": before, "after": after, "limit": limit}),
595
597
  )
596
- return parse_obj_as(List[Guild], await self._request(request))
598
+ return type_validate_python(List[Guild], await self._request(request))
597
599
 
598
600
  # Guild API
599
601
  @API
@@ -602,7 +604,7 @@ class Bot(BaseBot):
602
604
  "GET",
603
605
  self.adapter.get_api_base().joinpath("guilds", guild_id),
604
606
  )
605
- return parse_obj_as(Guild, await self._request(request))
607
+ return type_validate_python(Guild, await self._request(request))
606
608
 
607
609
  # Channel API
608
610
  @API
@@ -611,7 +613,7 @@ class Bot(BaseBot):
611
613
  "GET",
612
614
  self.adapter.get_api_base().joinpath("guilds", guild_id, "channels"),
613
615
  )
614
- return parse_obj_as(List[Channel], await self._request(request))
616
+ return type_validate_python(List[Channel], await self._request(request))
615
617
 
616
618
  @API
617
619
  async def get_channel(self, *, channel_id: str) -> Channel:
@@ -619,7 +621,7 @@ class Bot(BaseBot):
619
621
  "GET",
620
622
  self.adapter.get_api_base().joinpath("channels", channel_id),
621
623
  )
622
- return parse_obj_as(Channel, await self._request(request))
624
+ return type_validate_python(Channel, await self._request(request))
623
625
 
624
626
  @API
625
627
  async def post_channels(
@@ -653,7 +655,7 @@ class Bot(BaseBot):
653
655
  }
654
656
  ),
655
657
  )
656
- return parse_obj_as(List[Channel], await self._request(request))
658
+ return type_validate_python(List[Channel], await self._request(request))
657
659
 
658
660
  @API
659
661
  async def patch_channel(
@@ -685,7 +687,7 @@ class Bot(BaseBot):
685
687
  }
686
688
  ),
687
689
  )
688
- return parse_obj_as(Channel, await self._request(request))
690
+ return type_validate_python(Channel, await self._request(request))
689
691
 
690
692
  @API
691
693
  async def delete_channel(self, *, channel_id: str) -> None:
@@ -709,7 +711,7 @@ class Bot(BaseBot):
709
711
  self.adapter.get_api_base().joinpath("guilds", guild_id, "members"),
710
712
  params=exclude_none({"after": after, "limit": limit}),
711
713
  )
712
- return parse_obj_as(List[Member], await self._request(request))
714
+ return type_validate_python(List[Member], await self._request(request))
713
715
 
714
716
  @API
715
717
  async def get_role_members(
@@ -727,7 +729,7 @@ class Bot(BaseBot):
727
729
  ),
728
730
  params=exclude_none({"start_index": start_index, "limit": limit}),
729
731
  )
730
- return parse_obj_as(GetRoleMembersReturn, await self._request(request))
732
+ return type_validate_python(GetRoleMembersReturn, await self._request(request))
731
733
 
732
734
  @API
733
735
  async def get_member(self, *, guild_id: str, user_id: str) -> Member:
@@ -737,7 +739,7 @@ class Bot(BaseBot):
737
739
  "guilds", guild_id, "members", user_id
738
740
  ),
739
741
  )
740
- return parse_obj_as(Member, await self._request(request))
742
+ return type_validate_python(Member, await self._request(request))
741
743
 
742
744
  @API
743
745
  async def delete_member(
@@ -769,7 +771,7 @@ class Bot(BaseBot):
769
771
  "GET",
770
772
  self.adapter.get_api_base().joinpath("guilds", guild_id, "roles"),
771
773
  )
772
- return parse_obj_as(GetGuildRolesReturn, await self._request(request))
774
+ return type_validate_python(GetGuildRolesReturn, await self._request(request))
773
775
 
774
776
  @API
775
777
  async def post_guild_role(
@@ -791,7 +793,7 @@ class Bot(BaseBot):
791
793
  }
792
794
  ),
793
795
  )
794
- return parse_obj_as(PostGuildRoleReturn, await self._request(request))
796
+ return type_validate_python(PostGuildRoleReturn, await self._request(request))
795
797
 
796
798
  @API
797
799
  async def patch_guild_role(
@@ -814,7 +816,7 @@ class Bot(BaseBot):
814
816
  }
815
817
  ),
816
818
  )
817
- return parse_obj_as(PatchGuildRoleReturn, await self._request(request))
819
+ return type_validate_python(PatchGuildRoleReturn, await self._request(request))
818
820
 
819
821
  @API
820
822
  async def delete_guild_role(self, *, guild_id: str, role_id: str) -> None:
@@ -871,7 +873,7 @@ class Bot(BaseBot):
871
873
  "channels", channel_id, "members", user_id, "permissions"
872
874
  ),
873
875
  )
874
- return parse_obj_as(ChannelPermissions, await self._request(request))
876
+ return type_validate_python(ChannelPermissions, await self._request(request))
875
877
 
876
878
  @API
877
879
  async def put_channel_permissions(
@@ -901,7 +903,7 @@ class Bot(BaseBot):
901
903
  "channels", channel_id, "roles", role_id, "permissions"
902
904
  ),
903
905
  )
904
- return parse_obj_as(ChannelPermissions, await self._request(request))
906
+ return type_validate_python(ChannelPermissions, await self._request(request))
905
907
 
906
908
  @API
907
909
  async def put_channel_roles_permissions(
@@ -935,7 +937,7 @@ class Bot(BaseBot):
935
937
  result = await self._request(request)
936
938
  if isinstance(result, dict) and "message" in result:
937
939
  result = result["message"]
938
- return parse_obj_as(GuildMessage, result)
940
+ return type_validate_python(GuildMessage, result)
939
941
 
940
942
  @staticmethod
941
943
  def _parse_send_message(data: Dict[str, Any]) -> Dict[str, Any]:
@@ -999,7 +1001,7 @@ class Bot(BaseBot):
999
1001
  self.adapter.get_api_base().joinpath("channels", channel_id, "messages"),
1000
1002
  **params,
1001
1003
  )
1002
- return parse_obj_as(GuildMessage, await self._request(request))
1004
+ return type_validate_python(GuildMessage, await self._request(request))
1003
1005
 
1004
1006
  @API
1005
1007
  async def delete_message(
@@ -1027,7 +1029,7 @@ class Bot(BaseBot):
1027
1029
  "guilds", guild_id, "message", "setting"
1028
1030
  ),
1029
1031
  )
1030
- return parse_obj_as(MessageSetting, await self._request(request))
1032
+ return type_validate_python(MessageSetting, await self._request(request))
1031
1033
 
1032
1034
  # DMS API
1033
1035
  @API
@@ -1039,7 +1041,7 @@ class Bot(BaseBot):
1039
1041
  {"recipient_id": recipient_id, "source_guild_id": source_guild_id}
1040
1042
  ),
1041
1043
  )
1042
- return parse_obj_as(DMS, await self._request(request))
1044
+ return type_validate_python(DMS, await self._request(request))
1043
1045
 
1044
1046
  @API
1045
1047
  async def post_dms_messages(
@@ -1076,7 +1078,7 @@ class Bot(BaseBot):
1076
1078
  self.adapter.get_api_base().joinpath("dms", guild_id, "messages"),
1077
1079
  **params,
1078
1080
  )
1079
- return parse_obj_as(GuildMessage, await self._request(request))
1081
+ return type_validate_python(GuildMessage, await self._request(request))
1080
1082
 
1081
1083
  @API
1082
1084
  async def delete_dms_message(
@@ -1173,7 +1175,7 @@ class Bot(BaseBot):
1173
1175
  }
1174
1176
  ),
1175
1177
  )
1176
- return parse_obj_as(List[int], await self._request(request))
1178
+ return type_validate_python(List[int], await self._request(request))
1177
1179
 
1178
1180
  # Announce API
1179
1181
  @API
@@ -1225,7 +1227,7 @@ class Bot(BaseBot):
1225
1227
  "channels", channel_id, "pins", message_id
1226
1228
  ),
1227
1229
  )
1228
- return parse_obj_as(PinsMessage, await self._request(request))
1230
+ return type_validate_python(PinsMessage, await self._request(request))
1229
1231
 
1230
1232
  @API
1231
1233
  async def delete_pins_message(self, *, channel_id: str, message_id: str) -> None:
@@ -1243,7 +1245,7 @@ class Bot(BaseBot):
1243
1245
  "GET",
1244
1246
  self.adapter.get_api_base().joinpath("channels", channel_id, "pins"),
1245
1247
  )
1246
- return parse_obj_as(PinsMessage, await self._request(request))
1248
+ return type_validate_python(PinsMessage, await self._request(request))
1247
1249
 
1248
1250
  # Schedule API
1249
1251
  @API
@@ -1258,7 +1260,7 @@ class Bot(BaseBot):
1258
1260
  self.adapter.get_api_base() / f"channels/{channel_id}/schedules",
1259
1261
  json=exclude_none({"since": since}),
1260
1262
  )
1261
- return parse_obj_as(List[Schedule], await self._request(request))
1263
+ return type_validate_python(List[Schedule], await self._request(request))
1262
1264
 
1263
1265
  @API
1264
1266
  async def get_schedule(self, *, channel_id: str, schedule_id: str) -> Schedule:
@@ -1268,7 +1270,7 @@ class Bot(BaseBot):
1268
1270
  "channels", channel_id, "schedules", schedule_id
1269
1271
  ),
1270
1272
  )
1271
- return parse_obj_as(Schedule, await self._request(request))
1273
+ return type_validate_python(Schedule, await self._request(request))
1272
1274
 
1273
1275
  @API
1274
1276
  async def post_schedule(
@@ -1310,7 +1312,7 @@ class Bot(BaseBot):
1310
1312
  )
1311
1313
  },
1312
1314
  )
1313
- return parse_obj_as(Schedule, await self._request(request))
1315
+ return type_validate_python(Schedule, await self._request(request))
1314
1316
 
1315
1317
  @API
1316
1318
  async def patch_schedule(
@@ -1357,7 +1359,7 @@ class Bot(BaseBot):
1357
1359
  )
1358
1360
  },
1359
1361
  )
1360
- return parse_obj_as(Schedule, await self._request(request))
1362
+ return type_validate_python(Schedule, await self._request(request))
1361
1363
 
1362
1364
  @API
1363
1365
  async def delete_schedule(self, *, channel_id: str, schedule_id: str) -> None:
@@ -1473,7 +1475,7 @@ class Bot(BaseBot):
1473
1475
  "GET",
1474
1476
  self.adapter.get_api_base().joinpath("channels", channel_id, "threads"),
1475
1477
  )
1476
- return parse_obj_as(GetThreadsListReturn, await self._request(request))
1478
+ return type_validate_python(GetThreadsListReturn, await self._request(request))
1477
1479
 
1478
1480
  @API
1479
1481
  async def get_thread(self, *, channel_id: str, thread_id: str) -> GetThreadReturn:
@@ -1483,7 +1485,7 @@ class Bot(BaseBot):
1483
1485
  "channels", channel_id, "threads", thread_id
1484
1486
  ),
1485
1487
  )
1486
- return parse_obj_as(GetThreadReturn, await self._request(request))
1488
+ return type_validate_python(GetThreadReturn, await self._request(request))
1487
1489
 
1488
1490
  @overload
1489
1491
  async def put_thread(
@@ -1529,7 +1531,7 @@ class Bot(BaseBot):
1529
1531
  }
1530
1532
  ),
1531
1533
  )
1532
- return parse_obj_as(PutThreadReturn, await self._request(request))
1534
+ return type_validate_python(PutThreadReturn, await self._request(request))
1533
1535
 
1534
1536
  @API
1535
1537
  async def delete_thread(self, *, channel_id: str, thread_id: str) -> None:
@@ -1550,7 +1552,9 @@ class Bot(BaseBot):
1550
1552
  "GET",
1551
1553
  self.adapter.get_api_base().joinpath("guilds", guild_id, "api_permission"),
1552
1554
  )
1553
- return parse_obj_as(GetGuildAPIPermissionReturn, await self._request(request))
1555
+ return type_validate_python(
1556
+ GetGuildAPIPermissionReturn, await self._request(request)
1557
+ )
1554
1558
 
1555
1559
  @API
1556
1560
  async def post_api_permission_demand(
@@ -1574,7 +1578,7 @@ class Bot(BaseBot):
1574
1578
  }
1575
1579
  ),
1576
1580
  )
1577
- return parse_obj_as(APIPermissionDemand, await self._request(request))
1581
+ return type_validate_python(APIPermissionDemand, await self._request(request))
1578
1582
 
1579
1583
  # WebSocket API
1580
1584
  @API
@@ -1583,7 +1587,7 @@ class Bot(BaseBot):
1583
1587
  "GET",
1584
1588
  self.adapter.get_api_base().joinpath("gateway"),
1585
1589
  )
1586
- return parse_obj_as(UrlGetReturn, await self._request(request))
1590
+ return type_validate_python(UrlGetReturn, await self._request(request))
1587
1591
 
1588
1592
  @API
1589
1593
  async def shard_url_get(self) -> ShardUrlGetReturn:
@@ -1591,7 +1595,7 @@ class Bot(BaseBot):
1591
1595
  "GET",
1592
1596
  self.adapter.get_api_base().joinpath("gateway", "bot"),
1593
1597
  )
1594
- return parse_obj_as(ShardUrlGetReturn, await self._request(request))
1598
+ return type_validate_python(ShardUrlGetReturn, await self._request(request))
1595
1599
 
1596
1600
  # Interaction API
1597
1601
  @API
@@ -1667,7 +1671,7 @@ class Bot(BaseBot):
1667
1671
  }
1668
1672
  ),
1669
1673
  )
1670
- return parse_obj_as(PostC2CMessagesReturn, await self._request(request))
1674
+ return type_validate_python(PostC2CMessagesReturn, await self._request(request))
1671
1675
 
1672
1676
  @API
1673
1677
  async def post_c2c_files(
@@ -1675,10 +1679,12 @@ class Bot(BaseBot):
1675
1679
  *,
1676
1680
  openid: str,
1677
1681
  file_type: Literal[1, 2, 3, 4],
1678
- url: str,
1682
+ url: Optional[str] = None,
1679
1683
  srv_send_msg: bool = True,
1680
- file_data: None = None,
1684
+ file_data: Optional[Union[str, bytes]] = None,
1681
1685
  ) -> PostC2CFilesReturn:
1686
+ if isinstance(file_data, bytes):
1687
+ file_data = b64encode(file_data).decode()
1682
1688
  request = Request(
1683
1689
  "POST",
1684
1690
  self.adapter.get_api_base().joinpath("v2", "users", openid, "files"),
@@ -1691,7 +1697,17 @@ class Bot(BaseBot):
1691
1697
  }
1692
1698
  ),
1693
1699
  )
1694
- return parse_obj_as(PostC2CFilesReturn, await self._request(request))
1700
+ return type_validate_python(PostC2CFilesReturn, await self._request(request))
1701
+
1702
+ @API
1703
+ async def delete_c2c_message(self, *, openid: str, message_id: str) -> None:
1704
+ request = Request(
1705
+ "DELETE",
1706
+ self.adapter.get_api_base().joinpath(
1707
+ "v2", "users", openid, "messages", message_id
1708
+ ),
1709
+ )
1710
+ return await self._request(request)
1695
1711
 
1696
1712
  # Group API
1697
1713
  @API
@@ -1757,7 +1773,9 @@ class Bot(BaseBot):
1757
1773
  }
1758
1774
  ),
1759
1775
  )
1760
- return parse_obj_as(PostGroupMessagesReturn, await self._request(request))
1776
+ return type_validate_python(
1777
+ PostGroupMessagesReturn, await self._request(request)
1778
+ )
1761
1779
 
1762
1780
  @API
1763
1781
  async def post_group_files(
@@ -1765,10 +1783,12 @@ class Bot(BaseBot):
1765
1783
  *,
1766
1784
  group_openid: str,
1767
1785
  file_type: Literal[1, 2, 3, 4],
1768
- url: str,
1786
+ url: Optional[str] = None,
1769
1787
  srv_send_msg: bool = True,
1770
- file_data: None = None,
1788
+ file_data: Optional[Union[str, bytes]] = None,
1771
1789
  ) -> PostGroupFilesReturn:
1790
+ if isinstance(file_data, bytes):
1791
+ file_data = b64encode(file_data).decode()
1772
1792
  request = Request(
1773
1793
  "POST",
1774
1794
  self.adapter.get_api_base().joinpath("v2", "groups", group_openid, "files"),
@@ -1781,7 +1801,17 @@ class Bot(BaseBot):
1781
1801
  }
1782
1802
  ),
1783
1803
  )
1784
- return parse_obj_as(PostGroupFilesReturn, await self._request(request))
1804
+ return type_validate_python(PostGroupFilesReturn, await self._request(request))
1805
+
1806
+ @API
1807
+ async def delete_group_message(self, *, group_openid: str, message_id: str) -> None:
1808
+ request = Request(
1809
+ "DELETE",
1810
+ self.adapter.get_api_base().joinpath(
1811
+ "v2", "groups", group_openid, "messages", message_id
1812
+ ),
1813
+ )
1814
+ return await self._request(request)
1785
1815
 
1786
1816
  @API
1787
1817
  async def post_group_members(
@@ -1796,4 +1826,6 @@ class Bot(BaseBot):
1796
1826
  self.adapter.get_api_base().joinpath("v2", "groups", group_id, "members"),
1797
1827
  json=exclude_none({"limit": limit, "start_index": start_index}),
1798
1828
  )
1799
- return parse_obj_as(PostGroupMembersReturn, await self._request(request))
1829
+ return type_validate_python(
1830
+ PostGroupMembersReturn, await self._request(request)
1831
+ )
@@ -20,9 +20,9 @@ class GroupMemberAuthor(BaseModel):
20
20
  class Attachment(BaseModel):
21
21
  content_type: str
22
22
  filename: Optional[str] = None
23
- height: Optional[str] = None
24
- width: Optional[str] = None
25
- size: Optional[str] = None
23
+ height: Optional[int] = None
24
+ width: Optional[int] = None
25
+ size: Optional[int] = None
26
26
  url: Optional[str] = None
27
27
 
28
28
  @field_validator("url", mode="after")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "nonebot-adapter-qq"
3
- version = "1.4.1"
3
+ version = "1.4.3"
4
4
  description = "QQ adapter for nonebot2"
5
5
  authors = ["yanyongyu <yyy@nonebot.dev>"]
6
6
  license = "MIT"
@@ -26,7 +26,7 @@ typing-extensions = ">=4.4.0, <5.0.0"
26
26
  pydantic = ">=1.10.0,<3.0.0,!=2.5.0,!=2.5.1"
27
27
 
28
28
  [tool.poetry.group.dev.dependencies]
29
- ruff = "^0.2.0"
29
+ ruff = "^0.3.0"
30
30
  isort = "^5.10.1"
31
31
  black = "^24.0.0"
32
32
  nonemoji = "^0.1.3"