nonebot-plugin-l4d2-server 0.6.6__py3-none-any.whl → 1.0.0a1__py3-none-any.whl

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 (186) hide show
  1. nonebot_plugin_l4d2_server/__init__.py +9 -92
  2. nonebot_plugin_l4d2_server/__main__.py +90 -0
  3. nonebot_plugin_l4d2_server/config.py +30 -0
  4. nonebot_plugin_l4d2_server/data/L4D2/image/head/head.png +0 -0
  5. nonebot_plugin_l4d2_server/data/L4D2/image/header/logo.png +0 -0
  6. nonebot_plugin_l4d2_server/data/L4D2/image/header/player1.jpg +0 -0
  7. nonebot_plugin_l4d2_server/data/L4D2/image/template/anne.html +50 -42
  8. nonebot_plugin_l4d2_server/data/L4D2/image/template/back.png +0 -0
  9. nonebot_plugin_l4d2_server/data/L4D2/image/template/group_ip.html +1 -2
  10. nonebot_plugin_l4d2_server/data/L4D2/image/template/help.html +1 -2
  11. nonebot_plugin_l4d2_server/data/L4D2/image/template/help_dack.html +259 -221
  12. nonebot_plugin_l4d2_server/data/L4D2/image/template/ip.html +1 -2
  13. nonebot_plugin_l4d2_server/data/font/loli.ttf +0 -0
  14. nonebot_plugin_l4d2_server/data/icon//344/273/213/347/273/215.png +0 -0
  15. nonebot_plugin_l4d2_server/data/icon//344/273/273/345/212/241.png +0 -0
  16. nonebot_plugin_l4d2_server/data/icon//344/277/241/346/201/257.png +0 -0
  17. nonebot_plugin_l4d2_server/data/icon//345/205/254/345/221/212.png +0 -0
  18. nonebot_plugin_l4d2_server/data/icon//345/210/200/345/211/221.png +0 -0
  19. nonebot_plugin_l4d2_server/data/icon//345/210/207/346/215/242.png +0 -0
  20. nonebot_plugin_l4d2_server/data/icon//345/210/240/351/231/244.png +0 -0
  21. nonebot_plugin_l4d2_server/data/icon//345/210/267/346/226/260.png +0 -0
  22. nonebot_plugin_l4d2_server/data/icon//345/215/241/347/273/204.png +0 -0
  23. nonebot_plugin_l4d2_server/data/icon//345/223/252/351/207/214.png +0 -0
  24. nonebot_plugin_l4d2_server/data/icon//345/234/260/345/233/276.png +0 -0
  25. nonebot_plugin_l4d2_server/data/icon//345/257/274/345/205/245.png +0 -0
  26. nonebot_plugin_l4d2_server/data/icon//345/257/274/345/207/272.png +0 -0
  27. nonebot_plugin_l4d2_server/data/icon//345/275/261.png +0 -0
  28. nonebot_plugin_l4d2_server/data/icon//346/213/274/345/233/276.png +0 -0
  29. nonebot_plugin_l4d2_server/data/icon//346/216/242/347/264/242.png +0 -0
  30. nonebot_plugin_l4d2_server/data/icon//346/216/250/351/200/201.png +0 -0
  31. nonebot_plugin_l4d2_server/data/icon//346/224/266/351/233/206.png +0 -0
  32. nonebot_plugin_l4d2_server/data/icon//346/224/273/347/225/245.png +0 -0
  33. nonebot_plugin_l4d2_server/data/icon//346/233/264/346/226/260.png +0 -0
  34. nonebot_plugin_l4d2_server/data/icon//346/235/220/346/226/231.png +0 -0
  35. nonebot_plugin_l4d2_server/data/icon//346/237/245/350/257/242.png +0 -0
  36. nonebot_plugin_l4d2_server/data/icon//346/240/241/351/252/214.png +0 -0
  37. nonebot_plugin_l4d2_server/data/icon//346/257/217/346/234/210.png +0 -0
  38. nonebot_plugin_l4d2_server/data/icon//346/267/261/346/270/212.png +0 -0
  39. nonebot_plugin_l4d2_server/data/icon//346/267/273/345/212/240.png +0 -0
  40. nonebot_plugin_l4d2_server/data/icon//346/270/205/351/231/244.png +0 -0
  41. nonebot_plugin_l4d2_server/data/icon//347/212/266/346/200/201.png +0 -0
  42. nonebot_plugin_l4d2_server/data/icon//347/255/276/345/210/260.png +0 -0
  43. nonebot_plugin_l4d2_server/data/icon//347/273/221/345/256/232.png +0 -0
  44. nonebot_plugin_l4d2_server/data/icon//350/241/250.png +0 -0
  45. nonebot_plugin_l4d2_server/data/icon//350/241/250/346/203/205.png +0 -0
  46. nonebot_plugin_l4d2_server/data/icon//350/247/222/350/211/262.png +0 -0
  47. nonebot_plugin_l4d2_server/data/icon//350/256/260/345/275/225.png +0 -0
  48. nonebot_plugin_l4d2_server/data/icon//351/205/215/347/275/256.png +0 -0
  49. nonebot_plugin_l4d2_server/data/icon//351/207/215/345/220/257.png +0 -0
  50. nonebot_plugin_l4d2_server/data/img/l4d2.png +0 -0
  51. nonebot_plugin_l4d2_server/data/img/linux.png +0 -0
  52. nonebot_plugin_l4d2_server/data/img/vac.png +0 -0
  53. nonebot_plugin_l4d2_server/data/img/white.png +0 -0
  54. nonebot_plugin_l4d2_server/l4_help/Help.json +65 -0
  55. nonebot_plugin_l4d2_server/l4_help/__init__.py +57 -0
  56. nonebot_plugin_l4d2_server/l4_help/draw.py +206 -0
  57. nonebot_plugin_l4d2_server/l4_help/icon//344/273/213/347/273/215.png +0 -0
  58. nonebot_plugin_l4d2_server/l4_help/icon//344/273/273/345/212/241.png +0 -0
  59. nonebot_plugin_l4d2_server/l4_help/icon//344/277/241/346/201/257.png +0 -0
  60. nonebot_plugin_l4d2_server/l4_help/icon//345/205/254/345/221/212.png +0 -0
  61. nonebot_plugin_l4d2_server/l4_help/icon//345/210/200/345/211/221.png +0 -0
  62. nonebot_plugin_l4d2_server/l4_help/icon//345/210/207/346/215/242.png +0 -0
  63. nonebot_plugin_l4d2_server/l4_help/icon//345/210/240/351/231/244.png +0 -0
  64. nonebot_plugin_l4d2_server/l4_help/icon//345/210/267/346/226/260.png +0 -0
  65. nonebot_plugin_l4d2_server/l4_help/icon//345/215/241/347/273/204.png +0 -0
  66. nonebot_plugin_l4d2_server/l4_help/icon//345/223/252/351/207/214.png +0 -0
  67. nonebot_plugin_l4d2_server/l4_help/icon//345/234/260/345/233/276.png +0 -0
  68. nonebot_plugin_l4d2_server/l4_help/icon//345/257/274/345/205/245.png +0 -0
  69. nonebot_plugin_l4d2_server/l4_help/icon//345/257/274/345/207/272.png +0 -0
  70. nonebot_plugin_l4d2_server/l4_help/icon//345/275/261.png +0 -0
  71. nonebot_plugin_l4d2_server/l4_help/icon//346/213/274/345/233/276.png +0 -0
  72. nonebot_plugin_l4d2_server/l4_help/icon//346/216/242/347/264/242.png +0 -0
  73. nonebot_plugin_l4d2_server/l4_help/icon//346/216/250/351/200/201.png +0 -0
  74. nonebot_plugin_l4d2_server/l4_help/icon//346/224/266/351/233/206.png +0 -0
  75. nonebot_plugin_l4d2_server/l4_help/icon//346/224/273/347/225/245.png +0 -0
  76. nonebot_plugin_l4d2_server/l4_help/icon//346/233/264/346/226/260.png +0 -0
  77. nonebot_plugin_l4d2_server/l4_help/icon//346/235/220/346/226/231.png +0 -0
  78. nonebot_plugin_l4d2_server/l4_help/icon//346/237/245/350/257/242.png +0 -0
  79. nonebot_plugin_l4d2_server/l4_help/icon//346/240/241/351/252/214.png +0 -0
  80. nonebot_plugin_l4d2_server/l4_help/icon//346/257/217/346/234/210.png +0 -0
  81. nonebot_plugin_l4d2_server/l4_help/icon//346/267/261/346/270/212.png +0 -0
  82. nonebot_plugin_l4d2_server/l4_help/icon//346/267/273/345/212/240.png +0 -0
  83. nonebot_plugin_l4d2_server/l4_help/icon//346/270/205/351/231/244.png +0 -0
  84. nonebot_plugin_l4d2_server/l4_help/icon//347/212/266/346/200/201.png +0 -0
  85. nonebot_plugin_l4d2_server/l4_help/icon//347/255/276/345/210/260.png +0 -0
  86. nonebot_plugin_l4d2_server/l4_help/icon//347/273/221/345/256/232.png +0 -0
  87. nonebot_plugin_l4d2_server/l4_help/icon//350/241/250.png +0 -0
  88. nonebot_plugin_l4d2_server/l4_help/icon//350/241/250/346/203/205.png +0 -0
  89. nonebot_plugin_l4d2_server/l4_help/icon//350/247/222/350/211/262.png +0 -0
  90. nonebot_plugin_l4d2_server/l4_help/icon//350/256/260/345/275/225.png +0 -0
  91. nonebot_plugin_l4d2_server/l4_help/icon//351/205/215/347/275/256.png +0 -0
  92. nonebot_plugin_l4d2_server/l4_help/icon//351/207/215/345/220/257.png +0 -0
  93. nonebot_plugin_l4d2_server/l4_help/texture2d/badge.png +0 -0
  94. nonebot_plugin_l4d2_server/l4_help/texture2d/banner.png +0 -0
  95. nonebot_plugin_l4d2_server/l4_help/texture2d/bg.jpg +0 -0
  96. nonebot_plugin_l4d2_server/l4_help/texture2d/button.png +0 -0
  97. nonebot_plugin_l4d2_server/l4_help/texture2d/icon.png +0 -0
  98. nonebot_plugin_l4d2_server/l4_image/__init__.py +16 -0
  99. nonebot_plugin_l4d2_server/l4_image/convert.py +175 -0
  100. nonebot_plugin_l4d2_server/{l4d2_image → l4_image}/download.py +6 -30
  101. nonebot_plugin_l4d2_server/{l4d2_image/__init__.py → l4_image/html_img.py} +54 -45
  102. nonebot_plugin_l4d2_server/l4_image/image_tools.py +468 -0
  103. nonebot_plugin_l4d2_server/l4_image/img/anne/anne.html +60 -0
  104. nonebot_plugin_l4d2_server/l4_image/img/anne/back.png +0 -0
  105. nonebot_plugin_l4d2_server/l4_image/img/anne/group_ip.html +259 -0
  106. nonebot_plugin_l4d2_server/l4_image/img/anne/ip.html +55 -0
  107. nonebot_plugin_l4d2_server/l4_image/img/head/head.png +0 -0
  108. nonebot_plugin_l4d2_server/l4_image/img/header/logo.png +0 -0
  109. nonebot_plugin_l4d2_server/l4_image/img/header/player1.jpg +0 -0
  110. nonebot_plugin_l4d2_server/l4_image/img/template/Bocchi_The_Rock.html +312 -0
  111. nonebot_plugin_l4d2_server/l4_image/img/template/Bocchi_The_Rock.png +0 -0
  112. nonebot_plugin_l4d2_server/l4_image/img/template/HYPixel11pxU-2.ttf +0 -0
  113. nonebot_plugin_l4d2_server/l4_image/img/template/Pixel.html +350 -0
  114. nonebot_plugin_l4d2_server/l4_image/img/template/Pixel.png +0 -0
  115. nonebot_plugin_l4d2_server/l4_image/img/template/Rainbow.html +321 -0
  116. nonebot_plugin_l4d2_server/l4_image/img/template/Rainbow.png +0 -0
  117. nonebot_plugin_l4d2_server/l4_image/img/template/Tutumianhuatang-Bold-2.ttf +0 -0
  118. nonebot_plugin_l4d2_server/l4_image/img/template/bilibili.svg +1 -0
  119. nonebot_plugin_l4d2_server/l4_image/img/template/fingerprint.svg +15 -0
  120. nonebot_plugin_l4d2_server/l4_image/img/template/github.svg +1 -0
  121. nonebot_plugin_l4d2_server/l4_image/img/template/l.svg +9 -0
  122. nonebot_plugin_l4d2_server/l4_image/img/template/m.svg +1 -0
  123. nonebot_plugin_l4d2_server/l4_image/img/template/normal.html +257 -0
  124. nonebot_plugin_l4d2_server/l4_image/img/template/vue.css +531 -0
  125. nonebot_plugin_l4d2_server/l4_image/img/template/w.svg +1 -0
  126. nonebot_plugin_l4d2_server/l4_image/img/template//345/276/256/350/275/257/351/233/205/351/273/221.ttf +0 -0
  127. nonebot_plugin_l4d2_server/l4_image/model.py +15 -0
  128. nonebot_plugin_l4d2_server/{l4d2_image → l4_image}/vtfs.py +2 -0
  129. nonebot_plugin_l4d2_server/l4_request/__init__.py +84 -0
  130. nonebot_plugin_l4d2_server/l4_request/draw_msg.py +88 -0
  131. nonebot_plugin_l4d2_server/utils/api/api.py +4 -0
  132. nonebot_plugin_l4d2_server/utils/api/models.py +29 -0
  133. nonebot_plugin_l4d2_server/utils/api/request.py +119 -0
  134. nonebot_plugin_l4d2_server/utils/database/models.py +29 -0
  135. nonebot_plugin_l4d2_server/{l4d2_utils → utils}/utils.py +52 -55
  136. {nonebot_plugin_l4d2_server-0.6.6.dist-info → nonebot_plugin_l4d2_server-1.0.0a1.dist-info}/METADATA +47 -64
  137. nonebot_plugin_l4d2_server-1.0.0a1.dist-info/RECORD +144 -0
  138. {nonebot_plugin_l4d2_server-0.6.6.dist-info → nonebot_plugin_l4d2_server-1.0.0a1.dist-info}/WHEEL +1 -1
  139. nonebot_plugin_l4d2_server/l4d2_anne/__init__.py +0 -95
  140. nonebot_plugin_l4d2_server/l4d2_anne/analysis.py +0 -54
  141. nonebot_plugin_l4d2_server/l4d2_anne/anne_telecom.py +0 -79
  142. nonebot_plugin_l4d2_server/l4d2_anne/server.py +0 -47
  143. nonebot_plugin_l4d2_server/l4d2_anne/startand.py +0 -17
  144. nonebot_plugin_l4d2_server/l4d2_anne/utils.py +0 -294
  145. nonebot_plugin_l4d2_server/l4d2_data/__init__.py +0 -105
  146. nonebot_plugin_l4d2_server/l4d2_data/config.py +0 -18
  147. nonebot_plugin_l4d2_server/l4d2_data/database.py +0 -0
  148. nonebot_plugin_l4d2_server/l4d2_data/players.py +0 -100
  149. nonebot_plugin_l4d2_server/l4d2_data/serverip.py +0 -40
  150. nonebot_plugin_l4d2_server/l4d2_file/__init__.py +0 -222
  151. nonebot_plugin_l4d2_server/l4d2_file/ayromote.py +0 -64
  152. nonebot_plugin_l4d2_server/l4d2_file/input_json.py +0 -77
  153. nonebot_plugin_l4d2_server/l4d2_file/remote.py +0 -86
  154. nonebot_plugin_l4d2_server/l4d2_file/utils.py +0 -104
  155. nonebot_plugin_l4d2_server/l4d2_image/htmlimg.py +0 -18
  156. nonebot_plugin_l4d2_server/l4d2_image/images.py +0 -92
  157. nonebot_plugin_l4d2_server/l4d2_image/one.py +0 -44
  158. nonebot_plugin_l4d2_server/l4d2_image/send_image_tool.py +0 -32
  159. nonebot_plugin_l4d2_server/l4d2_image/steam.py +0 -63
  160. nonebot_plugin_l4d2_server/l4d2_push/__init__.py +0 -225
  161. nonebot_plugin_l4d2_server/l4d2_queries/__init__.py +0 -326
  162. nonebot_plugin_l4d2_server/l4d2_queries/himi.py +0 -113
  163. nonebot_plugin_l4d2_server/l4d2_queries/local_ip.py +0 -41
  164. nonebot_plugin_l4d2_server/l4d2_queries/qqgroup.py +0 -370
  165. nonebot_plugin_l4d2_server/l4d2_queries/send_msg.py +0 -131
  166. nonebot_plugin_l4d2_server/l4d2_queries/utils.py +0 -212
  167. nonebot_plugin_l4d2_server/l4d2_server/__init__.py +0 -118
  168. nonebot_plugin_l4d2_server/l4d2_server/index.py +0 -0
  169. nonebot_plugin_l4d2_server/l4d2_server/rcon.py +0 -53
  170. nonebot_plugin_l4d2_server/l4d2_server/workshop.py +0 -82
  171. nonebot_plugin_l4d2_server/l4d2_update/__init__.py +0 -137
  172. nonebot_plugin_l4d2_server/l4d2_update/draw_update_log.py +0 -45
  173. nonebot_plugin_l4d2_server/l4d2_update/restart.py +0 -69
  174. nonebot_plugin_l4d2_server/l4d2_update/update.py +0 -53
  175. nonebot_plugin_l4d2_server/l4d2_utils/classcal.py +0 -53
  176. nonebot_plugin_l4d2_server/l4d2_utils/command.py +0 -23
  177. nonebot_plugin_l4d2_server/l4d2_utils/config.py +0 -201
  178. nonebot_plugin_l4d2_server/l4d2_utils/message.py +0 -59
  179. nonebot_plugin_l4d2_server/l4d2_utils/rule.py +0 -35
  180. nonebot_plugin_l4d2_server/l4d2_utils/seach.py +0 -43
  181. nonebot_plugin_l4d2_server/l4d2_utils/txt_to_img.py +0 -32
  182. nonebot_plugin_l4d2_server/l4d2_web/web.py +0 -277
  183. nonebot_plugin_l4d2_server/l4d2_web/webUI.py +0 -506
  184. nonebot_plugin_l4d2_server/l4d2_web/webUI_s.py +0 -94
  185. nonebot_plugin_l4d2_server-0.6.6.dist-info/RECORD +0 -70
  186. {nonebot_plugin_l4d2_server-0.6.6.dist-info → nonebot_plugin_l4d2_server-1.0.0a1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,4 @@
1
+ anne_ban = "https://sb.trygek.com/"
2
+ """anne电信服网址,sourceban++"""
3
+ anne_rank = "https://sb.trygek.com/l4d_stats/"
4
+ AnneRankApi = f"{anne_rank}ranking/index.php?type=coop"
@@ -0,0 +1,29 @@
1
+ from typing import List, Optional, TypedDict
2
+
3
+ import a2s
4
+ from pydantic import BaseModel
5
+
6
+
7
+ class SourceBansInfo(BaseModel):
8
+ """source服务器信息"""
9
+
10
+ index: int
11
+ host: str
12
+ port: int
13
+
14
+
15
+ class NserverOut(TypedDict):
16
+ id: int
17
+ ip: str
18
+ host: str
19
+ port: int
20
+ version: Optional[str]
21
+
22
+
23
+ class OutServer(TypedDict):
24
+ server: a2s.SourceInfo
25
+ player: List[a2s.Player]
26
+ host: str
27
+ port: int
28
+ command: str
29
+ id_: int
@@ -0,0 +1,119 @@
1
+ import json as js
2
+ from copy import deepcopy
3
+ from typing import Any, Dict, List, Literal, Optional, Union
4
+
5
+ import a2s
6
+ from httpx import AsyncClient
7
+ from lxml import etree
8
+
9
+ from ..utils import split_maohao
10
+ from .api import anne_ban
11
+ from .models import SourceBansInfo
12
+
13
+
14
+ class L4D2Api:
15
+ ssl_verify = False
16
+ _HEADER: Dict[str, str] = { # noqa: RUF012
17
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
18
+ "(KHTML, like Gecko)"
19
+ "Chrome/126.0.0.0"
20
+ "Safari/537.36 Edg/126.0.0.0",
21
+ }
22
+
23
+ async def a2s_info(
24
+ self,
25
+ host: str,
26
+ port: int,
27
+ ) -> a2s.SourceInfo:
28
+ msg: a2s.SourceInfo = await a2s.ainfo((host, port))
29
+ return msg
30
+
31
+ async def a2s_players(
32
+ self,
33
+ host: str,
34
+ port: int,
35
+ ) -> List[a2s.Player]:
36
+ msg: List[a2s.Player] = await a2s.aplayers((host, port))
37
+ return msg
38
+
39
+ async def _server_request(
40
+ self,
41
+ url: str,
42
+ method: Literal["GET", "POST"] = "GET",
43
+ header: Dict[str, str] = _HEADER,
44
+ params: Optional[Dict[str, Any]] = None,
45
+ json: Optional[Dict[str, Any]] = None,
46
+ data: Optional[Dict[str, Any]] = None,
47
+ is_json: bool = True,
48
+ ) -> Union[Dict, int]:
49
+ header = deepcopy(self._HEADER)
50
+
51
+ if json is not None:
52
+ method = "POST"
53
+
54
+ async with AsyncClient(verify=self.ssl_verify) as client:
55
+ resp = await client.request(
56
+ method,
57
+ url=url,
58
+ headers=header,
59
+ params=params,
60
+ json=json,
61
+ data=data,
62
+ timeout=300,
63
+ )
64
+
65
+ if is_json:
66
+ try:
67
+ raw_data = await resp.json()
68
+ except: # noqa: E722
69
+ _raw_data = resp.text
70
+ try:
71
+ raw_data = js.loads(_raw_data)
72
+ except: # noqa: E722
73
+ raw_data = {
74
+ "result": {"error_code": -999, "data": _raw_data},
75
+ }
76
+ try:
77
+ if not raw_data["result"]:
78
+ return raw_data
79
+ except Exception:
80
+ return raw_data
81
+ if (
82
+ "result" in raw_data
83
+ and "error_code" in raw_data["result"]
84
+ and raw_data["code"] != 0
85
+ ):
86
+ return raw_data["result"]["error_code"]
87
+ return raw_data
88
+ html_content = resp.text
89
+ return etree.HTML(html_content)
90
+
91
+ async def get_sourceban(self, name: str, url: str = anne_ban):
92
+ tree = await self._server_request(
93
+ url=url,
94
+ is_json=False,
95
+ ) # type: ignore
96
+ name = name
97
+ # 检查响应状态码
98
+
99
+ target_element = tree.xpath(
100
+ "/html/body/main/div[3]/div[5]/div/div/table/tbody/tr",
101
+ )
102
+ server_list = []
103
+ # for tr in target_element:
104
+ for tr in target_element:
105
+ if tr.get("class") != "collapse":
106
+ continue
107
+ index = 0
108
+ for td in tr.xpath("./td"):
109
+ if td.get("id") is not None or td.text == "\n":
110
+ continue
111
+ index += 1
112
+ host, port = split_maohao(td.text)
113
+ server_list.append(SourceBansInfo(index=index, host=host, port=port))
114
+
115
+ # 通过一次请求,确定服务器的序号
116
+ return server_list
117
+
118
+
119
+ L4API = L4D2Api()
@@ -0,0 +1,29 @@
1
+ from pathlib import Path
2
+
3
+ from nonebot import on_command
4
+ from nonebot_plugin_datastore import get_plugin_data
5
+ from sqlalchemy.orm import Mapped, mapped_column
6
+
7
+ plugin_data = get_plugin_data()
8
+
9
+ # 定义模型
10
+ DATA = get_plugin_data()
11
+ DATA.set_migration_dir(Path("data/L4D2/") / "sql")
12
+
13
+
14
+ class SteamUser(DATA.Model):
15
+ """个人资料"""
16
+
17
+ SteamID: Mapped[str] = mapped_column(primary_key=True)
18
+ SteamID64: Mapped[str]
19
+ Name: Mapped[str]
20
+
21
+
22
+ matcher = on_command("test")
23
+
24
+ # 数据库相关操作
25
+ # @matcher.handle()
26
+ # async def handle(session: AsyncSession = Depends(get_session)):
27
+ # example = SteamUser(message="matcher")
28
+ # session.add(example)
29
+ # await session.commit()
@@ -1,19 +1,12 @@
1
1
  import json
2
+ import os
2
3
  import tempfile
3
4
  from pathlib import Path
4
5
  from typing import Any, Dict, List, Optional, Tuple
5
6
 
6
7
  import aiofiles
7
- import httpx
8
8
  from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, MessageEvent
9
9
  from nonebot.log import logger
10
- from nonebot.matcher import Matcher
11
-
12
- from ..l4d2_image.steam import url_to_byte
13
- from .config import l4_config, systems
14
-
15
- # from .rule import
16
- from .txt_to_img import mode_txt_to_img
17
10
 
18
11
 
19
12
  async def get_file(url: str, down_file: Path):
@@ -21,10 +14,7 @@ async def get_file(url: str, down_file: Path):
21
14
  下载指定Url到指定位置
22
15
  """
23
16
  try:
24
- if l4_config.l4_only:
25
- maps = await url_to_byte(url)
26
- else:
27
- maps = httpx.get(url).content # noqa: ASYNC100
17
+ maps = await url_to_byte(url)
28
18
  logger.info("已获取文件,尝试新建文件并写入")
29
19
  if maps:
30
20
  async with aiofiles.open(down_file, "wb") as mfile:
@@ -99,7 +89,7 @@ async def save_file(file: bytes, path_name):
99
89
 
100
90
  async def upload_file(bot: Bot, event: MessageEvent, file_data: bytes, filename: str):
101
91
  """上传临时文件"""
102
- if systems in ["win", "other"]:
92
+ if os.name == "nt":
103
93
  with tempfile.TemporaryDirectory() as temp_dir:
104
94
  async with aiofiles.open(Path(temp_dir) / filename, "wb") as f:
105
95
  await f.write(file_data)
@@ -118,23 +108,23 @@ async def upload_file(bot: Bot, event: MessageEvent, file_data: bytes, filename:
118
108
  name=filename,
119
109
  )
120
110
  (Path().joinpath(filename)).unlink()
121
- elif systems == "linux":
111
+ else:
122
112
  with tempfile.NamedTemporaryFile("wb+") as f:
123
113
  f.write(file_data)
124
- if isinstance(event, GroupMessageEvent):
125
- await bot.call_api(
126
- "upload_group_file",
127
- group_id=event.group_id,
128
- file=f.name,
129
- name=filename,
130
- )
131
- else:
132
- await bot.call_api(
133
- "upload_private_file",
134
- user_id=event.user_id,
135
- file=f.name,
136
- name=filename,
137
- )
114
+ if isinstance(event, GroupMessageEvent):
115
+ await bot.call_api(
116
+ "upload_group_file",
117
+ group_id=event.group_id,
118
+ file=f.name,
119
+ name=filename,
120
+ )
121
+ else:
122
+ await bot.call_api(
123
+ "upload_private_file",
124
+ user_id=event.user_id,
125
+ file=f.name,
126
+ name=filename,
127
+ )
138
128
 
139
129
 
140
130
  sub_menus = []
@@ -176,32 +166,39 @@ async def extract_last_digit(msg: str) -> Tuple[str, str]:
176
166
  return msg, ""
177
167
 
178
168
 
179
- async def str_to_picstr(push_msg: str, matcher: Matcher, keyword: Optional[str] = None):
180
- """判断图片输出还是正常输出"""
181
- if l4_config.l4_image:
182
- lines = push_msg.splitlines()
183
- first_str = lines[0]
184
- last_str = lines[-1]
185
- push_msg = "\n".join(lines[1:-1])
186
- if l4_config.l4_connect:
187
- await mode_txt_to_img(first_str, push_msg, last_str)
188
- else:
189
- await mode_txt_to_img(first_str, push_msg)
190
- else:
191
- if l4_config.l4_connect or keyword == "connect":
192
- await matcher.send(push_msg)
193
- else:
194
- await matcher.send("\n".join(push_msg.splitlines()[1:-2]))
195
-
196
-
197
- def split_maohao(msg: str) -> List[str]:
169
+ def split_maohao(msg: str) -> Tuple[str, int]:
198
170
  """分割大小写冒号"""
199
171
  if ":" in msg:
200
- msgs: List[str] = msg.split(":")
201
- elif ":" in msg:
202
- msgs: List[str] = msg.split(":")
203
- elif msg.replace(".", "").isdigit():
204
- msgs: List[str] = [msg, "20715"]
205
- else:
206
- msgs = []
207
- return [msgs[0], msgs[-1]]
172
+ return msg.split(":")[0], int(msg.split(":")[-1])
173
+ if ":" in msg:
174
+ return msg.split(":")[0], int(msg.split(":")[-1])
175
+ if msg.replace(".", "").isdigit():
176
+ return msg, 20715
177
+ return "", -1
178
+
179
+
180
+ import aiohttp
181
+
182
+ headers = {
183
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0", # noqa: E501
184
+ }
185
+
186
+
187
+ async def url_to_byte(url: str):
188
+ """获取URL数据的字节流"""
189
+
190
+ async with aiohttp.ClientSession() as session:
191
+ async with session.get(url, headers=headers, timeout=600) as response:
192
+ if response.status == 200:
193
+ return await response.read()
194
+ return None
195
+
196
+
197
+ async def url_to_msg(url: str):
198
+ """获取URL数据的字节流"""
199
+
200
+ async with aiohttp.ClientSession() as session:
201
+ async with session.get(url, headers=headers, timeout=600) as response:
202
+ if response.status == 200:
203
+ return await response.text()
204
+ return None
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-plugin-l4d2-server
3
- Version: 0.6.6
3
+ Version: 1.0.0a1
4
4
  Summary: L4D2 server related operations plugin for NoneBot2
5
- Keywords: steam game l4d2 nonebot2 plugin
5
+ Keywords: steam,game,l4d2,nonebot2,plugin
6
6
  Home-page: https://github.com/Agnes4m/nonebot_plugin_l4d2_server
7
7
  Author-Email: Agnes_Digital <Z735803792@163.com>
8
8
  License: GPLv3
@@ -16,29 +16,15 @@ Classifier: Operating System :: OS Independent
16
16
  Project-URL: Homepage, https://github.com/Agnes4m/nonebot_plugin_l4d2_server
17
17
  Requires-Python: <4.0,>=3.9
18
18
  Requires-Dist: nonebot2>=2.0.0
19
- Requires-Dist: nonebot-plugin-htmlrender==0.2.2
20
- Requires-Dist: nonebot_plugin_txt2img>=0.3.0
21
- Requires-Dist: nonebot-plugin-apscheduler>=0.2.0
22
- Requires-Dist: nonebot-adapter-onebot>=2.2.3
23
- Requires-Dist: nonebot-plugin-send-anything-anywhere>=0.2.7
24
- Requires-Dist: asyncio>=3.4.3
19
+ Requires-Dist: nonebot-plugin-htmlrender>=0.3.0
20
+ Requires-Dist: nonebot-adapter-onebot>=2.4.4
21
+ Requires-Dist: nonebot-plugin-alconna>=0.50.0
25
22
  Requires-Dist: aiohttp>=3.8.4
26
23
  Requires-Dist: jinja2>=3.0.0
27
24
  Requires-Dist: srctools>=2.3.9
28
25
  Requires-Dist: bs4==0.0.1
29
26
  Requires-Dist: httpx>=0.22.0
30
- Requires-Dist: rcon==2.1.0
31
- Requires-Dist: pillow<10.0.0
32
- Requires-Dist: pyunpack>=0.3.0
33
- Requires-Dist: ruamel.yaml==0.17.21
34
- Requires-Dist: rarfile>=4.0
35
- Requires-Dist: patool>=1.12
36
27
  Requires-Dist: python-a2s>=1.3.0
37
- Requires-Dist: amis-python>=1.0.6
38
- Requires-Dist: pandas>=1.5.2
39
- Requires-Dist: python-jose>=3.3.0
40
- Requires-Dist: gitpython>=3.1.27
41
- Requires-Dist: attrs>=23.1.0
42
28
  Description-Content-Type: text/markdown
43
29
 
44
30
  <!-- markdownlint-disable MD026 MD031 MD033 MD036 MD041 MD046 MD051 -->
@@ -50,7 +36,7 @@ Description-Content-Type: text/markdown
50
36
 
51
37
  <div align="center">
52
38
 
53
- # nonebot_plugin_l4d2_server 0.6
39
+ # nonebot_plugin_l4d2_server 1.0.0a1
54
40
 
55
41
  _✨Nonebot & Left 4 Dead 2 server操作✨_
56
42
  <div align = "center">
@@ -74,37 +60,29 @@ _✨Nonebot & Left 4 Dead 2 server操作✨_
74
60
  <img src="https://img.shields.io/pypi/dm/nonebot_plugin_l4d2_server" alt="pypi download">
75
61
  </a>
76
62
  <img src="https://img.shields.io/badge/python-3.9+-blue.svg" alt="python">
77
- <img src="https://img.shields.io/badge/nonebot-2.0.0-red.svg" alt="NoneBot">
63
+ <img src="https://img.shields.io/badge/nonebot-2.0.0+-red.svg" alt="NoneBot">
78
64
 
79
65
  </div>
80
66
 
81
- ## 顶置公告
67
+ ## 顶置公告(如果以前用0.x.x版本暂时别更新)
82
68
 
83
- - 文档暂时没时间更新ozr
69
+ - **版本** 1.x.x进行了破坏式更新,目前处于测试阶段,使用旧插件的不要更新
84
70
 
85
- - 如果你只是一个游戏玩家,你可以在[这里](#🌐-感谢)找一个游戏群加入游玩
71
+ ## 更改部分
86
72
 
87
- - 网页端管理端 `https://{ip}:{port}/l4d2`
88
-
89
- - 网页用户端 `https://{ip}:{port}/l4d2/user`
73
+ - 取消了网页控制台(没有卵用)
74
+ - 取消了自动重启(与其他插件功能重复)
75
+ - 取消了git拉取更新(nb规范用pypi)
76
+ - 增加pil和浏览器渲染做选择(可以选择pil以节省性能性能)
77
+ - 删除无用部分(依赖太多难以维护)
90
78
 
91
79
  ## 安装
92
80
 
93
81
  以下提到的方法 任选**其一** 即可
94
82
 
95
- <details open>
96
- <summary>[个人推荐] 使用 nb-cli 安装</summary>
97
- 在 nonebot2 项目插件文件夹中,输入以下指令克隆项目,并安装相关依赖(如果有虚拟环境,pip安装依赖需要进虚拟环境再安装,或者参考下方包管理器安装方法)
98
-
99
- ```bash
100
- https://github.com/Agnes4m/nonebot_plugin_l4d2_server
101
- pip install --no-install nonebot_plugin_l4d2_server
102
- ```
103
-
104
- </details>
105
83
 
106
84
  <details open>
107
- <summary>[新手推荐] 使用 nb-cli 安装</summary>
85
+ <summary>[推荐] 使用 nb-cli 安装</summary>
108
86
  在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装
109
87
 
110
88
  ```bash
@@ -153,24 +131,35 @@ conda install nonebot-plugin-l4d2-server
153
131
 
154
132
  ## 主要功能
155
133
 
156
- - 求生服务器-本地多路径操作(传地图)
157
- - 批量查询指定ip服务器状态和玩家
158
- - 创意工坊下载和喷漆制作
159
- - web控制台
160
- - [求生电信服anne](https://github.com/fantasylidong/CompetitiveWithAnne)[查询~](https://sb.trygek.com/l4d_stats/ranking/index.php)
134
+ - [ ] 求生服务器-本地多路径操作(传地图等)
135
+ - [ ] 批量查询指定ip服务器状态和玩家
136
+ - [ ] [求生电信服anne](https://github.com/fantasylidong/CompetitiveWithAnne)[查询~](https://sb.trygek.com/l4d_stats/ranking/index.php)
161
137
 
162
138
  ## [数据结构](./docs/standand.md)
163
139
 
164
- ## 🌐 默认服务器
165
-
166
- 适配公益服刷服器适配ip
167
-
168
- ## To do
169
-
170
- - [ ] 帮助图片
171
- - [ ] 网页控制台查看服务器地图
172
- - [ ] 网页控制台启动和关闭服务器
173
- - [ ] 网页控制台管理封禁用户
140
+ ## env设置
141
+
142
+ """bash
143
+ l4_anne: bool = False
144
+ """是否启用anne电信服相关功能"""
145
+ l4_enable: bool = True
146
+ """是否全局启用求生功能"""
147
+ l4_image: bool = False
148
+ """是否启用图片"""
149
+ l4_connect: bool = True
150
+ """是否在查服命令后加入connect ip"""
151
+ l4_path: str = "data/L4D2"
152
+ """插件数据路径"""
153
+ l4_players: int = 4
154
+ """查询总图的时候展示的用户数量"""
155
+ l4_style: str = "default"
156
+ """图片风格,可选包括以下,默认简洁
157
+ - 暗风格
158
+ - 孤独摇滚
159
+ - 电玩像素
160
+ - 缤纷彩虹
161
+ - 求生之路
162
+ """
174
163
 
175
164
  ## 其他
176
165
 
@@ -183,18 +172,12 @@ conda install nonebot-plugin-l4d2-server
183
172
  ## 🌐 感谢
184
173
 
185
174
  - [nonebot2](https://github.com/nonebot/nonebot2)- 聊天机器人的基础框架
186
- - [修仙](https://github.com/s52047qwas/nonebot_plugin_xiuxian)- 数据库参考
187
- - ~~[自己写的求生之路查询库](https://github.com/Agnes4m/VSQ)~~ (已弃用)
188
- - [@MeetWq](https://github.com/MeetWq)- 非常热心解答nonebot2相关的写法
189
- - [可爱小Q](https://github.com/MeetWq/mybot)- 服务器图片参考
190
- - [群聊学习](https://github.com/CMHopeSunshine/nonebot-plugin-learning-chat)- web控制台参考
191
- - [日向麻麻](https://github.com/Special-Week)- 配置优化参考
192
- - [gsuid](https://github.com/KimigaiiWuyi/GenshinUID)- readme和wiki的格式参考,以及3.1版本的更新和重启
193
- - 公益服刷服器 - 虽然不知道哪里来的,不过已经添加ip了
175
+ - [饼干](https://github.com/lgc2333) - 指导nonebot2框架的函数使用
176
+ - [wuyi](https://github.com/KimigaiiWuyi/) - 指导pil作图
177
+ - 水果 - html图片优化
178
+
194
179
  - 感谢以下服主大力支持
195
- - Michaela's | 机器人功能测试反馈 | [橘组多模式游戏群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=pUKFe4sSUMgLn0N84IhBtTzrdVzFxRLd&authKey=v8tdd3yys6VnK2WI%2F76fN85yfmHpdv%2Bfttj37n4DqnZMdyv9N6nUsyNyuk2QKoOR&noverify=0&group_code=578503081)
180
+ - Michaela's | 机器人功能测试反馈
196
181
  - 东 | 提供docker部署方法等建议 | [电信服anne游戏群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=6i7r5aJ7Jyg0ejby4rt9GWmFRF53nV1K&authKey=ekMsWepBZPL26%2BfJAG%2F95JD0fhvH39%2BIGVyKOvNlXVDbpIclJlly4kXqukL7JhWR&noverify=0&group_code=883237206)
197
- - 呆呆 | 提供三方地图的详细数据 | [呆呆组游戏群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=M5Ei0tYBgi3nwkh-8jfvo3gN5BMhPQGr&authKey=tb2Qa7ykUf5RAe3TBvOIA%2FWdlHAx6tqYXhyV95WqbZXoUx7lU2MRbod7nubiFw16&noverify=0&group_code=592944622)
198
- - 柠檬茶 | win端部署测试 | [竹服⭐纯净服游戏群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G8AkutNEmN9niNCjNJV8YE-vLv4h_EBz&authKey=wG%2BI6Cks4%2FcRGYYLjRNK0Kg4rMUy3BB7H9SKGjU465ktqKcb%2F6m7WxrSTJiX5bvk&noverify=0&group_code=283150432)
199
182
  - 迷茫 | 催命更新byd
200
183
  - ArcPav | 积极反馈bug,提供改进思路
@@ -0,0 +1,144 @@
1
+ nonebot_plugin_l4d2_server-1.0.0a1.dist-info/METADATA,sha256=xIY2oPpfBfe7iBzRj6auNuh6qbNpyOggidK--oHu3fM,6373
2
+ nonebot_plugin_l4d2_server-1.0.0a1.dist-info/WHEEL,sha256=rSwsxJWe3vzyR5HCwjWXQruDgschpei4h_giTm0dJVE,90
3
+ nonebot_plugin_l4d2_server-1.0.0a1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
4
+ nonebot_plugin_l4d2_server/__init__.py,sha256=eACLn9Fzz1k4IzfVfpl-WkPOwhzH5aYIp_cueoVzIHI,1599
5
+ nonebot_plugin_l4d2_server/__main__.py,sha256=bosiqFI2peWnw5mDZuN_KWBvKMkdwJh1G4pWc9hUdWA,2752
6
+ nonebot_plugin_l4d2_server/config.py,sha256=6GkphHYRfr0JbtcbZv2USaNzWLUHlwz7iRrajPbM4gQ,808
7
+ nonebot_plugin_l4d2_server/data/L4D2/image/head/head.png,sha256=9Vq73u2WnIcmO-5B5az1eGRkYnrUBRRUI5j0GmPvfV8,159682
8
+ nonebot_plugin_l4d2_server/data/L4D2/image/header/logo.png,sha256=kD9gXvAdTP7N6p9t-fNWuj_g8bOezwLaqR7sjWom-HQ,632955
9
+ nonebot_plugin_l4d2_server/data/L4D2/image/header/player1.jpg,sha256=-0C0KVi1knq9mjczkCJ75SxARZdHCUITmCy2H2CnQEc,406679
10
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/anne.html,sha256=ofZoPzzC4QJfmn-ZmvQb1bK6JQnWtSvkfgoogy03dJs,1651
11
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/back.png,sha256=ob9OrEJTL_TDg6nu_RMpLhYGl4y49MQ9YMrRfvbcd7Q,244322
12
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/fingerprint.svg,sha256=qtbdXb-5o62YQU2-LR4S9b7-ddKC1UOpJG4w8xDrytw,2135
13
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/group_ip.html,sha256=9av4NUDA7INCuC7uGaGqXBV1PQkaxZJg13C-PkTJAVA,7173
14
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/help.html,sha256=3YUEO6tZNiVG73KIRjAEcvcP3L9WxaY2UTYFw2_vkuQ,5796
15
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/help_dack.html,sha256=9T2-TRhJhUN0fyjdJXYWJ3YWs3XyhdZzOTh1uNfFnio,5826
16
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/ip.html,sha256=6i_JyCDGfLxTeLO_PC1EiRwiaJiI5MCkkTpNQXErQNM,1560
17
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/l.svg,sha256=I9iOeq-XqnWDECC7GqApV6Of3Tm26xmmYdchvXw2tAE,5506
18
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/m.svg,sha256=rnZwx2X1dXPiKFQvccBZqspDZzLUin5ylesv-rRy1lo,2408
19
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/vue.css,sha256=2sGjCFrR-3tFMB_x7l4K6k40tZ5JVzhWqD759cagYBA,7874
20
+ nonebot_plugin_l4d2_server/data/L4D2/image/template/w.svg,sha256=Rvem0xacHSByxPz2ihLkgbJLtXqEKllzzJRz-Q5wN5Q,486
21
+ nonebot_plugin_l4d2_server/data/font/loli.ttf,sha256=Yrh-RPoCrn1-NG94DR0x20ASXYUt8g3Ep6BCt3CdOFk,11125812
22
+ nonebot_plugin_l4d2_server/data/icon/介绍.png,sha256=5j7LNu7l_KS_WxvKSo_x-YgloqZnVydnBXb6sNO00Pk,2638
23
+ nonebot_plugin_l4d2_server/data/icon/任务.png,sha256=5Q34N9p2ForXlOkyCmxLvrXISaK7QJmiUadDpM83_CY,2617
24
+ nonebot_plugin_l4d2_server/data/icon/信息.png,sha256=Gm3XJCv114rAs7zdGm6MzHHYO2ogNKZfTZnvBCQGfCY,2963
25
+ nonebot_plugin_l4d2_server/data/icon/公告.png,sha256=aQk6Zlcvs8HL0yoI6qeTE1yWFM3DRligf-9GTYRsw-o,2562
26
+ nonebot_plugin_l4d2_server/data/icon/刀剑.png,sha256=Jnuclo1sx1UAs_zNZZtvXXkz1Wd6dThOhjkmm-Z2D9A,2840
27
+ nonebot_plugin_l4d2_server/data/icon/切换.png,sha256=zmADCczjcCCcA7VFOlPp-HegQ2phOSZL5tr9g_GhEmM,2754
28
+ nonebot_plugin_l4d2_server/data/icon/删除.png,sha256=A5m77Qrk4evAsXeRYp-npSuOqepTXbU7nBHQtBFigQE,2606
29
+ nonebot_plugin_l4d2_server/data/icon/刷新.png,sha256=BXFYUtQuaPIvzfDqMzJJ29VYNB81aH-HwvPjLft2fJM,2739
30
+ nonebot_plugin_l4d2_server/data/icon/卡组.png,sha256=tHl81n_86_6sGjWDhh6kcPFL5sOdfPg7TdjVwOf9gdg,3326
31
+ nonebot_plugin_l4d2_server/data/icon/哪里.png,sha256=UXE7r8GNljGgDbBmSHvStnDqkCxf72vLtzuHt8BDrYI,2760
32
+ nonebot_plugin_l4d2_server/data/icon/地图.png,sha256=5M-uHWd8saN_8QRiT7lK25tjzEwu_SC_QgLowNHjaWE,2760
33
+ nonebot_plugin_l4d2_server/data/icon/导入.png,sha256=Er021cuaL8Zl8Tcw0F7QNRVHTAQ-koc1Hc06TGPGlB8,2425
34
+ nonebot_plugin_l4d2_server/data/icon/导出.png,sha256=Ue_GeuiGSNeWi4Eetok_1980s0TDRFLoeZDbRZmywLk,2508
35
+ nonebot_plugin_l4d2_server/data/icon/影.png,sha256=mbY6CJgRYRmFzl3hWCb2KeX6wlEzi-d6wF75uc_650I,2485
36
+ nonebot_plugin_l4d2_server/data/icon/拼图.png,sha256=c_ek2VUOy-aKdSiemZfIBH6_pbbzeW-6OT9z2utWI-M,2781
37
+ nonebot_plugin_l4d2_server/data/icon/探索.png,sha256=Mm36w6o9l9dEsdR-bxoeT_oyRnuhyJFLh62Q73acMjo,3252
38
+ nonebot_plugin_l4d2_server/data/icon/推送.png,sha256=6H3pBwuZthWpZ_SF6Mcsp8em0LtOUeGz1sk2Q4COqSA,2634
39
+ nonebot_plugin_l4d2_server/data/icon/收集.png,sha256=LDMHklcffzsxrWiLjPsvGMdCuSgyeANT3YQbKtWYttU,2984
40
+ nonebot_plugin_l4d2_server/data/icon/攻略.png,sha256=A8wC6kq0YCXDTAp1tq_FCM5oVAi08uZJnDelb1HjY7c,3186
41
+ nonebot_plugin_l4d2_server/data/icon/更新.png,sha256=KezIp_aAn056MJL1HsuXqJbU-cNByA5bTZNuEcUSiwI,2746
42
+ nonebot_plugin_l4d2_server/data/icon/材料.png,sha256=fPFy_i5IbZmLMsRQXPgQP50Dnubr_ktz6pri8S8ta4A,2813
43
+ nonebot_plugin_l4d2_server/data/icon/查询.png,sha256=4XelJ-TbYa9wQtjB9s3WKwXiuksp8Xd_LRx_ubrM5LM,2703
44
+ nonebot_plugin_l4d2_server/data/icon/校验.png,sha256=1XKKmolHHEsNj6pxL2RHRxtajzC2opgtnzcx2TU7VKg,2933
45
+ nonebot_plugin_l4d2_server/data/icon/每月.png,sha256=vzGyOyIyt6XLQQEFgO61klrmvbGGGty5F1ji9FVSY2k,2630
46
+ nonebot_plugin_l4d2_server/data/icon/深渊.png,sha256=pd_58A-k8_ooMe65Gugn_7dEGihHwYCIj600fV4R6DI,2868
47
+ nonebot_plugin_l4d2_server/data/icon/添加.png,sha256=VfeXvPafL8zPsXmjGZYUxD_LQr6OQmytJyniM-ai7Kk,2694
48
+ nonebot_plugin_l4d2_server/data/icon/清除.png,sha256=ZzfpFoSWGDUT7qyHGMCZbkSbepUsOPe3gHlGrDNuMTQ,2507
49
+ nonebot_plugin_l4d2_server/data/icon/状态.png,sha256=wNfg7Xw5obfqukRXZvh8CmPIgiys7uwInhAXuputZcE,2625
50
+ nonebot_plugin_l4d2_server/data/icon/签到.png,sha256=iG9zlJq0WBQ5E1H9HQtnpK7drsqoBeqQnLOrQ8ZeSdU,2635
51
+ nonebot_plugin_l4d2_server/data/icon/绑定.png,sha256=GxGaryOzow9Kwz865oaFIb82OFJ0dXSEFnZsmpecjKI,2701
52
+ nonebot_plugin_l4d2_server/data/icon/表.png,sha256=YjTSd7WBH-6f-xdY5XlLb5vwGNjiHWYstswLOqt40Mg,2401
53
+ nonebot_plugin_l4d2_server/data/icon/表情.png,sha256=cTdAe_hQr1CH0ML4xrFeL6VctEbnBRknI_DMskSAzWA,2728
54
+ nonebot_plugin_l4d2_server/data/icon/角色.png,sha256=7C4uRi-Q2Wr6V_MwrTk5ducIP4oXh47t8Yr_3x1z06o,2490
55
+ nonebot_plugin_l4d2_server/data/icon/记录.png,sha256=zEZVPjIbx2uJi20pBpVdCZYmZi4psphPIhddTIzfsVo,2292
56
+ nonebot_plugin_l4d2_server/data/icon/配置.png,sha256=hpWqaVwLnhwc7Px8ZTfUIPpA6bGznVYroL6Zv9yCipw,3049
57
+ nonebot_plugin_l4d2_server/data/icon/重启.png,sha256=1-rexJPwQxrAUwWIqD5ghoPUrzIqj71DC5Vm4EMm0U8,2854
58
+ nonebot_plugin_l4d2_server/data/img/l4d2.png,sha256=h3W0d4lDEHZ0ZULTA3g3IMtUsfmsAVzFId8wRmWm4SA,814
59
+ nonebot_plugin_l4d2_server/data/img/linux.png,sha256=cH6qL7RXi0Fm7bvck-5yZjoQfWPYsK9X4ViWg9DDsO4,6027
60
+ nonebot_plugin_l4d2_server/data/img/vac.png,sha256=k7JsSEeIZyK5Jj0beiNPWrDLi4ZwvQXMqsiJ97vClJY,4497
61
+ nonebot_plugin_l4d2_server/data/img/white.png,sha256=Y_cFR-EPNvQtJadPy9h5CXWi0ePiNsnSfSTnwtrOyuM,2675
62
+ nonebot_plugin_l4d2_server/l4_help/Help.json,sha256=pRWli-Wgl07YmUYqLon8So_Mpb7XX-NjZ4FRTnQqO5g,1522
63
+ nonebot_plugin_l4d2_server/l4_help/__init__.py,sha256=UGUrRjleSjXtIrG4HvbAULMxV04Hj5WchgGCW0sPxtU,1535
64
+ nonebot_plugin_l4d2_server/l4_help/draw.py,sha256=y6yDPUnoZFvwly8cf7g9HRpT1JXTxyA9DC1TuvUinTM,6448
65
+ nonebot_plugin_l4d2_server/l4_help/icon/介绍.png,sha256=kXI6IcFXP9C57qBduD5pC7LIGWELPFYkLFywgZqhSb4,2640
66
+ nonebot_plugin_l4d2_server/l4_help/icon/任务.png,sha256=3V6NimQ8P6fBA0uMBdW4RarxYW5g6mG93B4UBB55uCI,2617
67
+ nonebot_plugin_l4d2_server/l4_help/icon/信息.png,sha256=CB2Dllb-6ht4xj5ErNdgVfIMi3g82XLQ_F_MTJ08R70,2963
68
+ nonebot_plugin_l4d2_server/l4_help/icon/公告.png,sha256=bNIUvn5v4CzUVKeL_udpK6ALkPA5ZVGylOxieGR8E3w,2561
69
+ nonebot_plugin_l4d2_server/l4_help/icon/刀剑.png,sha256=j4Td0pWf1yKs7E4SXAe_1rMll6tp9M9RtKMAY1AsVxI,2839
70
+ nonebot_plugin_l4d2_server/l4_help/icon/切换.png,sha256=WX9xfZjHi7EjsVHwhUfZLPcH-BWNEqNJ-7IKwXddfB4,2754
71
+ nonebot_plugin_l4d2_server/l4_help/icon/删除.png,sha256=Mbt3DThZZn9W3qB6AoS3sX9DbzVYhgT-2J0lY3pvy30,2607
72
+ nonebot_plugin_l4d2_server/l4_help/icon/刷新.png,sha256=B97dNIGyvyipWYt05sMTlBWOcKlqp7vViUeZWZQKx4o,2739
73
+ nonebot_plugin_l4d2_server/l4_help/icon/卡组.png,sha256=uTBt1Kvg5r7amKhLMdf-zZOH4PT7Re8kb2BHypm_2Qk,3326
74
+ nonebot_plugin_l4d2_server/l4_help/icon/哪里.png,sha256=Nsq9LQ7cYhVFO5pnEdpjRet3wvw2apYU_N9Tu6PNLjY,2759
75
+ nonebot_plugin_l4d2_server/l4_help/icon/地图.png,sha256=tSBCQvQBArjQzeGX9aD6hAIhysJNoSq7C9PAgfnY2x4,2758
76
+ nonebot_plugin_l4d2_server/l4_help/icon/导入.png,sha256=BKt7UxJEXw0xE4HQUgOZwT-ySizTs7froyaJWanwaUk,2427
77
+ nonebot_plugin_l4d2_server/l4_help/icon/导出.png,sha256=Ubhws1EPqNDl7FoZjT_sEoqAJEyvgiT9_2XJerX3X6Q,2508
78
+ nonebot_plugin_l4d2_server/l4_help/icon/影.png,sha256=XovEr4hp1EXuiukf3jc3IFMZch-4VE7BZfqN2yuETBg,2485
79
+ nonebot_plugin_l4d2_server/l4_help/icon/拼图.png,sha256=KGkkLHhTQ4NyP38qsXs3k6rod9pEge0qHcjfR7joYBg,2781
80
+ nonebot_plugin_l4d2_server/l4_help/icon/探索.png,sha256=yk2xF5J5bR2-zZN-VsVQsNW1D1fdB_0smK4uVpbrk_8,3252
81
+ nonebot_plugin_l4d2_server/l4_help/icon/推送.png,sha256=iznIhDpg2CrgMvH4tGYMocS98ISUwZWEUk5oZ4v75jM,2633
82
+ nonebot_plugin_l4d2_server/l4_help/icon/收集.png,sha256=-r19Dy2yKrrwJuCAEJoaKt7YYDok6HN3RPCOn9H-eYw,2983
83
+ nonebot_plugin_l4d2_server/l4_help/icon/攻略.png,sha256=OOGJ25IMNgJxm3zXctzdpBEfh4K388amLeFS2UL-YBA,3183
84
+ nonebot_plugin_l4d2_server/l4_help/icon/更新.png,sha256=wtClahgj88KtvhW2AkbiWympwfp6lCYYPFCR4NoukCY,2747
85
+ nonebot_plugin_l4d2_server/l4_help/icon/材料.png,sha256=LQekJRbcqUIiwj2sW1AhYvPh10WZhkKfjM1dHfia9P4,2812
86
+ nonebot_plugin_l4d2_server/l4_help/icon/查询.png,sha256=7X82UQTTxlslDmQeyJvOLOQsiHo1rQi-wzLrUbDJwnQ,2703
87
+ nonebot_plugin_l4d2_server/l4_help/icon/校验.png,sha256=GKkaAK5CQaTUQDIVadxkjx0Js_oPRCPLoQaqmXN5UDg,2933
88
+ nonebot_plugin_l4d2_server/l4_help/icon/每月.png,sha256=-rBLNAQvHP43dYdNMfGEJj-JFnUbX9vTPsQpmuaKyMI,2632
89
+ nonebot_plugin_l4d2_server/l4_help/icon/深渊.png,sha256=m98mJNCm1NdYiqcIqGqWCWw3dVHV6sp4HmxjtqE9_cs,2868
90
+ nonebot_plugin_l4d2_server/l4_help/icon/添加.png,sha256=9d2tsIMuzyKx4XoHp1Relj49gJCENMV5Xw6W0xP7RAI,2694
91
+ nonebot_plugin_l4d2_server/l4_help/icon/清除.png,sha256=9WZL0EBO90_rAiHsBzzJevpi_mVPpZEayE_gmXv7PM4,2507
92
+ nonebot_plugin_l4d2_server/l4_help/icon/状态.png,sha256=vOmLhCbSwCcV4Aucc1Mhuh2NaofNP80T6onCXFwuL5c,2624
93
+ nonebot_plugin_l4d2_server/l4_help/icon/签到.png,sha256=tSjuY2hP4l7BgpI0snrKl5hu0w1gJQTgcZKrBEydtUQ,2635
94
+ nonebot_plugin_l4d2_server/l4_help/icon/绑定.png,sha256=gYJND7ikGBgyciDhkszOKREA9FOqKlFdKylAI875giw,2699
95
+ nonebot_plugin_l4d2_server/l4_help/icon/表.png,sha256=S6QdUU7DC5tcMpNfsqhY7uEI8ka4Ml58KlF2pLjPvwI,2400
96
+ nonebot_plugin_l4d2_server/l4_help/icon/表情.png,sha256=N59vzxhntcITAOxWnLnZVJHiaPlPyfcWEjQS84O3_Sw,2728
97
+ nonebot_plugin_l4d2_server/l4_help/icon/角色.png,sha256=QD1Gx6PtdkPs0tQZTP1KO35LQJ0xd8Nzg0fc263BaZw,2491
98
+ nonebot_plugin_l4d2_server/l4_help/icon/记录.png,sha256=INkAb49mq-AqbaWxln_HBqYraRtvnK6iWUB6YSvx9Jo,2292
99
+ nonebot_plugin_l4d2_server/l4_help/icon/配置.png,sha256=nqGs6Pmifwb1gC9SXKnAeDUx3WPyHs0LxyJru9raXcU,3049
100
+ nonebot_plugin_l4d2_server/l4_help/icon/重启.png,sha256=3LvaUGE8YxpGh8Gw1uJxjo6N7eRHVb2rafG0jGkNgW4,2854
101
+ nonebot_plugin_l4d2_server/l4_help/texture2d/badge.png,sha256=UBbiUMJXpIEuD_UK1rABIXNYccaOi9JuZ5x3npdRLgM,7020
102
+ nonebot_plugin_l4d2_server/l4_help/texture2d/banner.png,sha256=UZxYRDRa4NloJDw0V_Om6_ssA--GYPswxvlCiOJNm8U,31164
103
+ nonebot_plugin_l4d2_server/l4_help/texture2d/bg.jpg,sha256=pr1eqsJjn5aB7MHZ3BIPb2zHXGajHN5xJS0M4hYMTvw,117356
104
+ nonebot_plugin_l4d2_server/l4_help/texture2d/button.png,sha256=JVEKinYjylKuFjjvtVU85JXZEnPy8xLy52XJfwb2GN4,11545
105
+ nonebot_plugin_l4d2_server/l4_help/texture2d/icon.png,sha256=s8Wgl9juiTQ9mjrB5szDlDPnDqL3MgsZWHHFQ9m8kDw,633494
106
+ nonebot_plugin_l4d2_server/l4_image/__init__.py,sha256=-mCRjC5XSJmdFwIVUAzccIpX9lNDrQ1rF37vytxYuQk,412
107
+ nonebot_plugin_l4d2_server/l4_image/convert.py,sha256=EyczOytb9k1EoPbZjBTSaUieLxqbXc4NRgpin1Sokso,3863
108
+ nonebot_plugin_l4d2_server/l4_image/download.py,sha256=65j_D-8X4M-rh16h5lN9I2m7zLnXcvJT3iXIVtk8MoY,3086
109
+ nonebot_plugin_l4d2_server/l4_image/html_img.py,sha256=sq80WRpaxPwh5a3FDRSquS9A1ljrr4JIjPmhSpHVZhw,4712
110
+ nonebot_plugin_l4d2_server/l4_image/image_tools.py,sha256=2kpnXlqFhX5jKADfcGWZ3mm3U8be8iDbA8b8hogMd9w,14478
111
+ nonebot_plugin_l4d2_server/l4_image/img/anne/anne.html,sha256=8JOUXoWdulhoP2Axy_omuSDafbduKDZ9Y8Rz2VZWTso,1590
112
+ nonebot_plugin_l4d2_server/l4_image/img/anne/back.png,sha256=vMUtqF1tr4nSY5HL39nn5f0z4HAeUkv_RVSDocHrPOA,244322
113
+ nonebot_plugin_l4d2_server/l4_image/img/anne/group_ip.html,sha256=0RCWB0q8Wx0NcKdVmGeVr2odaNzODNVCJK0jiQ826U8,7222
114
+ nonebot_plugin_l4d2_server/l4_image/img/anne/ip.html,sha256=hvKDc7ASbuaGxtx5Doavg5qa82K1vGq4bSapjrwrTy8,1611
115
+ nonebot_plugin_l4d2_server/l4_image/img/head/head.png,sha256=BWmp8_7-0beJNLrGgMP-apztpEVoQIZXoJdq5FQK_yw,159143
116
+ nonebot_plugin_l4d2_server/l4_image/img/header/logo.png,sha256=OEXeWUPeQRX_xs10dXbxdiIGfRzmq4yi8gN9TxG93Bs,632416
117
+ nonebot_plugin_l4d2_server/l4_image/img/header/player1.jpg,sha256=6rBnYb8CJw3x5bNi0gblZYll17s5pe8V3ItIqDyg26I,406140
118
+ nonebot_plugin_l4d2_server/l4_image/img/template/Bocchi_The_Rock.html,sha256=dCjhVAtayFwwA5e7XdX1ssBm2sPMIuV3KAddi1ko3G0,18924
119
+ nonebot_plugin_l4d2_server/l4_image/img/template/Bocchi_The_Rock.png,sha256=k4X_RLEdPccM9pZBWbQJnVI5TWTUDKJsHzRn96avd3A,392525
120
+ nonebot_plugin_l4d2_server/l4_image/img/template/HYPixel11pxU-2.ttf,sha256=RGJai1Y8AP8toBwIqq2EZyaBmRbRYPUpNu7f2ZWeDuk,2446828
121
+ nonebot_plugin_l4d2_server/l4_image/img/template/Pixel.html,sha256=57No2v1fghJ6Jkrh2oRQfVvapQ3yUP8_SfnREbsiBkU,19786
122
+ nonebot_plugin_l4d2_server/l4_image/img/template/Pixel.png,sha256=Rwh701eRD6aNbOnAFOj3dyPQgwohs7e7X8KdzRFyNVY,310313
123
+ nonebot_plugin_l4d2_server/l4_image/img/template/Rainbow.html,sha256=QkiQneLIUFVs_GzuiI_K9_KMGW9seNTYMmqZQrzP4w4,10050
124
+ nonebot_plugin_l4d2_server/l4_image/img/template/Rainbow.png,sha256=IXiRvU-H0stVXki2K-Iv7Oz7Aeh2-Z3yuvzc-78AOQk,59872
125
+ nonebot_plugin_l4d2_server/l4_image/img/template/Tutumianhuatang-Bold-2.ttf,sha256=rX7HSHSCpQ4mJYsGghvm3btXLabxcCEbLF52wKNDNAE,3090420
126
+ nonebot_plugin_l4d2_server/l4_image/img/template/bilibili.svg,sha256=v3u6R-HLoTHVI1qPCNopPWd_WYZ9L2YSqvvB-L6RZY8,1336
127
+ nonebot_plugin_l4d2_server/l4_image/img/template/fingerprint.svg,sha256=qtbdXb-5o62YQU2-LR4S9b7-ddKC1UOpJG4w8xDrytw,2135
128
+ nonebot_plugin_l4d2_server/l4_image/img/template/github.svg,sha256=Ev2CdWEyL4G-_bhZJ9vBZr5MEWjcgSR819mracoXjqc,1175
129
+ nonebot_plugin_l4d2_server/l4_image/img/template/l.svg,sha256=YbahWPd7uau6edcATiWrA8apYyrlKeTejuvRHwXkmLI,5484
130
+ nonebot_plugin_l4d2_server/l4_image/img/template/m.svg,sha256=JKosfpA8Jncw018dWHVzVR8orC48u3mMdzQovWAa91s,2428
131
+ nonebot_plugin_l4d2_server/l4_image/img/template/normal.html,sha256=p8RtKyo_nlKxuY_XxrCsNNBe5Pl8PInL8CXvOlXiH6I,16670
132
+ nonebot_plugin_l4d2_server/l4_image/img/template/vue.css,sha256=2sGjCFrR-3tFMB_x7l4K6k40tZ5JVzhWqD759cagYBA,7874
133
+ nonebot_plugin_l4d2_server/l4_image/img/template/w.svg,sha256=LnctC2mVwjdhRMiS9ffrjUX-9KGwqb6OMmpJXvVXl70,486
134
+ nonebot_plugin_l4d2_server/l4_image/img/template/微软雅黑.ttf,sha256=FUetpPih2PEvFU0iEAm5DpOJ6nfzkRyPq2SU5TPPDvI,21767952
135
+ nonebot_plugin_l4d2_server/l4_image/model.py,sha256=FGsCvf_BKbRNJUVy6I5BKnArMY-3JEIdqeX2gs93E5o,231
136
+ nonebot_plugin_l4d2_server/l4_image/vtfs.py,sha256=PS9mTCDvl5gXjXHgRTMh6U9zjTO1kQS8gIb3qb0IZDU,1457
137
+ nonebot_plugin_l4d2_server/l4_request/__init__.py,sha256=kbYge9jGVfliMBXKIsBwD4qEGk3nY63qlabrsEzKAgo,2876
138
+ nonebot_plugin_l4d2_server/l4_request/draw_msg.py,sha256=NoznyFT-bK90gEB1Y5SttDHtpS-BcvGpW2U8G0RJJUw,2804
139
+ nonebot_plugin_l4d2_server/utils/api/api.py,sha256=iO2jF-CmCGacEKKGkPk_xP1pW2zz6w_l-GgXBsCvdWg,179
140
+ nonebot_plugin_l4d2_server/utils/api/models.py,sha256=Cnw6pcq_3I1EOyAemAHTC5e0CmuM-nHYgLPtHeMIYYk,453
141
+ nonebot_plugin_l4d2_server/utils/api/request.py,sha256=2WFc4KUf-MaMF6BmiFPD9ziInnt9MxkLfqyFaGmeCxI,3599
142
+ nonebot_plugin_l4d2_server/utils/database/models.py,sha256=puhJaJNhU7kiZSSIS00rkaM8kQTZN9L3RiZFKxJrhMM,690
143
+ nonebot_plugin_l4d2_server/utils/utils.py,sha256=JOMDMxwxhJ2bYErgPP8_FbwFlwOO5GRIWWCF7As86ps,5610
144
+ nonebot_plugin_l4d2_server-1.0.0a1.dist-info/RECORD,,