nonebot-plugin-l4d2-server 0.5.1__py3-none-any.whl → 0.5.2__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 (48) hide show
  1. LICENSE +674 -674
  2. README.md +364 -359
  3. nonebot_plugin_l4d2_server/__init__.py +1 -1
  4. nonebot_plugin_l4d2_server/chrome.py +44 -44
  5. nonebot_plugin_l4d2_server/command.py +232 -232
  6. nonebot_plugin_l4d2_server/config.py +210 -210
  7. nonebot_plugin_l4d2_server/data/L4D2/image/template/anne.html +60 -60
  8. nonebot_plugin_l4d2_server/data/L4D2/image/template/fingerprint.svg +15 -15
  9. nonebot_plugin_l4d2_server/data/L4D2/image/template/help.html +233 -233
  10. nonebot_plugin_l4d2_server/data/L4D2/image/template/help_dack.html +231 -231
  11. nonebot_plugin_l4d2_server/data/L4D2/image/template/ip.html +48 -48
  12. nonebot_plugin_l4d2_server/data/L4D2/image/template/l.svg +9 -9
  13. nonebot_plugin_l4d2_server/l4d2_anne/__init__.py +251 -251
  14. nonebot_plugin_l4d2_server/l4d2_anne/analysis.py +51 -51
  15. nonebot_plugin_l4d2_server/l4d2_anne/anne_telecom.py +75 -75
  16. nonebot_plugin_l4d2_server/l4d2_anne/server.py +65 -65
  17. nonebot_plugin_l4d2_server/l4d2_anne/startand.py +17 -17
  18. nonebot_plugin_l4d2_server/l4d2_data/__init__.py +91 -91
  19. nonebot_plugin_l4d2_server/l4d2_data/config.py +17 -17
  20. nonebot_plugin_l4d2_server/l4d2_data/players.py +87 -87
  21. nonebot_plugin_l4d2_server/l4d2_data/serverip.py +32 -32
  22. nonebot_plugin_l4d2_server/l4d2_file/__init__.py +122 -122
  23. nonebot_plugin_l4d2_server/l4d2_file/ayromote.py +56 -56
  24. nonebot_plugin_l4d2_server/l4d2_file/remote.py +63 -63
  25. nonebot_plugin_l4d2_server/l4d2_image/__init__.py +103 -103
  26. nonebot_plugin_l4d2_server/l4d2_image/download.py +101 -101
  27. nonebot_plugin_l4d2_server/l4d2_image/htmlimg.py +32 -32
  28. nonebot_plugin_l4d2_server/l4d2_image/send_image_tool.py +32 -32
  29. nonebot_plugin_l4d2_server/l4d2_image/steam.py +83 -83
  30. nonebot_plugin_l4d2_server/l4d2_image/vtfs.py +40 -40
  31. nonebot_plugin_l4d2_server/l4d2_queries/__init__.py +114 -114
  32. nonebot_plugin_l4d2_server/l4d2_queries/api.py +43 -43
  33. nonebot_plugin_l4d2_server/l4d2_queries/ohter.py +35 -35
  34. nonebot_plugin_l4d2_server/l4d2_queries/qqgroup.py +288 -288
  35. nonebot_plugin_l4d2_server/l4d2_server/__init__.py +61 -61
  36. nonebot_plugin_l4d2_server/l4d2_server/rcon.py +28 -28
  37. nonebot_plugin_l4d2_server/l4d2_server/workshop.py +50 -50
  38. nonebot_plugin_l4d2_server/l4d2_web/web.py +234 -252
  39. nonebot_plugin_l4d2_server/l4d2_web/webUI.py +241 -245
  40. nonebot_plugin_l4d2_server/message.py +58 -58
  41. nonebot_plugin_l4d2_server/seach.py +33 -33
  42. nonebot_plugin_l4d2_server/txt_to_img.py +64 -64
  43. nonebot_plugin_l4d2_server/utils.py +272 -272
  44. {nonebot_plugin_l4d2_server-0.5.1.dist-info → nonebot_plugin_l4d2_server-0.5.2.dist-info}/LICENSE +674 -674
  45. {nonebot_plugin_l4d2_server-0.5.1.dist-info → nonebot_plugin_l4d2_server-0.5.2.dist-info}/METADATA +6 -1
  46. nonebot_plugin_l4d2_server-0.5.2.dist-info/RECORD +54 -0
  47. {nonebot_plugin_l4d2_server-0.5.1.dist-info → nonebot_plugin_l4d2_server-0.5.2.dist-info}/WHEEL +1 -1
  48. nonebot_plugin_l4d2_server-0.5.1.dist-info/RECORD +0 -54
@@ -1,211 +1,211 @@
1
- from pathlib import Path
2
- from typing import List,Dict,Union
3
- import ast
4
- import platform
5
- import os
6
- from ruamel import yaml
7
- from pydantic import Extra,BaseModel,Field
8
- try:
9
- import ujson as json
10
- except:
11
- import json
12
-
13
- from nonebot.permission import SUPERUSER
14
- from nonebot import get_driver
15
- from nonebot.log import logger
16
- from nonebot.adapters.onebot.v11.permission import (
17
- GROUP_ADMIN,
18
- GROUP_OWNER,
19
- PRIVATE_FRIEND,
20
- )
21
-
22
- from .l4d2_queries.ohter import ALL_HOST
23
- from .l4d2_queries.api import seach_map,map_dict_to_str
24
- file_format = (".vpk",".zip",".7z",'rar')
25
- # 权限
26
-
27
- driver = get_driver()
28
- COMMAND_START = list[driver.config.command_start]
29
- try:
30
- NICKNAME: str = list(driver.config.nickname)[0]
31
- except Exception:
32
- NICKNAME = 'bot'
33
- CHECK_FILE:int = 0
34
-
35
-
36
- reMaster = SUPERUSER | GROUP_OWNER
37
- Master = SUPERUSER | GROUP_ADMIN | GROUP_OWNER
38
- ADMINISTRATOR = SUPERUSER | GROUP_ADMIN | GROUP_OWNER | PRIVATE_FRIEND
39
- # file 填写求生服务器所在路径
40
-
41
-
42
-
43
-
44
- CONFIG_PATH = Path() / 'data' / 'L4D2' / 'l4d2.yml'
45
- CONFIG_PATH.parent.mkdir(parents=True, exist_ok=True)
46
-
47
- class L4d2GroupConfig(BaseModel):
48
- enable: bool = Field(True, alias='是否启用求生功能')
49
- map_master: List[str] = Field([], alias='分群地图管理员')
50
-
51
- def update(self, **kwargs):
52
- for key, value in kwargs.items():
53
- if key in self.__fields__:
54
- self.__setattr__(key, value)
55
-
56
- class L4d2Config(BaseModel):
57
- total_enable: bool = Field(True, alias='是否全局启用求生功能')
58
- map_path: List[str] = Field([], alias='求生地图路径')
59
- web_username: str = Field('l4d2', alias='后台管理用户名')
60
- web_password: str = Field('admin', alias='后台管理密码')
61
- l4_style: str = Field("standard", alias='图片风格')
62
- # l4_file: List[str] = Field( ["/home/ubuntu/l4d2/coop"], alias='本地求生服务器地址')
63
- # l4_host: List[str] = Field(['127.0.0.1'], alias='求生服务器地址')
64
- # l4_port: List[str] = Field(['20715'], alias='求生服务器端口')
65
- # l4_rcon: List[str] = Field(['114514'], alias='求生服务器rcon密码')
66
-
67
- l4_ipall: List[Dict[str,Union[str,int,bool]]] = Field(
68
- [{
69
- 'id_rank':'1',
70
- 'place': False,
71
- 'location':'C:\\l4d2',
72
- 'host':'127.0.0.1',
73
- 'port':'20715',
74
- 'rcon':'114514',
75
- 'server_id':'本地地图',
76
- },{
77
- 'id_rank':'2',
78
- 'place': True,
79
- 'location':'/home/unbuntu/coop',
80
- 'host':'11.4.51.4',
81
- 'port':'20715',
82
- 'rcon':'9191810',
83
- 'account':'root',
84
- 'password':'114514',
85
- 'server_id':'远程地图',
86
- }],
87
- alias='l4服务器ip集合')
88
- web_secret_key: str = Field('49c294d32f69b732ef6447c18379451ce1738922a75cd1d4812ef150318a2ed0',
89
- alias='后台管理token密钥')
90
- l4_master: List[str] = Field(['114514919'], alias='求生地图全局管理员qq')
91
- # l4_ip:bool = Field(False, alias='查询地图是否显示ip')
92
- l4_font: str = Field('simsun.ttc', alias='字体')
93
- l4_only:bool = Field(False, alias='下载地图是是否阻碍其他指令')
94
- l4_tag: List[str] = Field(['呆呆','橘'], alias='查服的名')
95
- l4_key: str = Field('q1145149191810', alias='key')
96
- group_config: Dict[int, L4d2GroupConfig] = Field({}, alias='分群配置')
97
-
98
- def update(self, **kwargs):
99
- for key, value in kwargs.items():
100
- if key in self.__fields__:
101
- self.__setattr__(key, value)
102
-
103
- class L4d2ConfigManager:
104
-
105
- def __init__(self):
106
- self.file_path = CONFIG_PATH
107
- if self.file_path.exists():
108
- self.config = L4d2Config.parse_obj(
109
- yaml.load(self.file_path.read_text(encoding='utf-8'), Loader=yaml.Loader))
110
- else:
111
- self.config = L4d2Config()
112
- self.save()
113
-
114
- def get_group_config(self, group_id: int) -> L4d2GroupConfig:
115
- if group_id not in self.config.group_config:
116
- self.config.group_config[group_id] = L4d2GroupConfig()
117
- self.save()
118
- return self.config.group_config[group_id]
119
-
120
- @property
121
- def config_list(self) -> List[str]:
122
- return list(self.config.dict(by_alias=True).keys())
123
-
124
- def save(self):
125
- with self.file_path.open('w', encoding='utf-8') as f:
126
- yaml.dump(
127
- self.config.dict(by_alias=True),
128
- f,
129
- indent=2,
130
- Dumper=yaml.RoundTripDumper,
131
- allow_unicode=True)
132
-
133
- # 参数设置为全局变量
134
- global config_manager,l4_config
135
- config_manager = L4d2ConfigManager()
136
- l4_config = config_manager.config
137
-
138
- class UserModel(BaseModel):
139
- username: str
140
- password: str
141
-
142
-
143
- '''
144
- 地图路径
145
- '''
146
- vpk_path = "left4dead2/addons"
147
-
148
-
149
- PLAYERSDATA = Path() / "data/L4D2/image/players"
150
- """用户数据路径"""
151
- TEXT_PATH = Path(__file__).parent / 'data/L4D2/image'
152
- """图片存储路径"""
153
- TEXT_XPATH = Path() / 'data/L4D2/image'
154
- """内置图片路径"""
155
-
156
-
157
-
158
- PLAYERSDATA = Path() / "data/L4D2/sql"
159
- """数据库路径"""
160
- DATASQLITE = Path().parent / "data/L4D2/sql/L4D2.db"
161
- """数据库!"""
162
-
163
- table_data = ["L4d2_players","L4D2_server"]
164
- """数据库表"""
165
- L4d2_players_tag = ['qq', 'nickname', 'steamid']
166
- """数据库表1"""
167
- L4d2_server_tag = ['id','qqgroup', 'host', 'port', 'rcon']
168
- """数据库表2"""
169
- L4d2_INTEGER = ['id','qq','qqgroup','port']
170
- """INITEGER的表头"""
171
- L4d2_TEXT = ['nickname','steamid','host','rcon','path']
172
- """TEXT的表头"""
173
- L4d2_BOOLEAN = ['use']
174
- """BOOLEAN的表头"""
175
-
176
- tables_columns = {
177
- table_data[0]:L4d2_players_tag,
178
- table_data[1]:L4d2_server_tag
179
- }
180
-
181
- # 求生anne服务器
182
- anne_url = "https://server.trygek.com/"
183
-
184
- gamemode_list = [
185
- '纯净',
186
- '魔改战役',
187
- '多特',
188
- '魔改多特',
189
- '写专',
190
- '对抗',
191
- '魔改对抗',
192
- '药役',
193
- '药抗',
194
- '包抗',
195
- '绝境',
196
- '死专',
197
- 'ast',
198
- '清道夫',
199
- ]
200
-
201
- # 系统
202
- if platform.system() == 'Windows':
203
- systems:str = 'win'
204
- elif platform.system() == 'Linux':
205
- systems:str = 'linux'
206
- else:
207
- systems:str = 'others'
208
- ANNE_IP = {}
209
-
210
-
1
+ from pathlib import Path
2
+ from typing import List,Dict,Union
3
+ import ast
4
+ import platform
5
+ import os
6
+ from ruamel import yaml
7
+ from pydantic import Extra,BaseModel,Field
8
+ try:
9
+ import ujson as json
10
+ except:
11
+ import json
12
+
13
+ from nonebot.permission import SUPERUSER
14
+ from nonebot import get_driver
15
+ from nonebot.log import logger
16
+ from nonebot.adapters.onebot.v11.permission import (
17
+ GROUP_ADMIN,
18
+ GROUP_OWNER,
19
+ PRIVATE_FRIEND,
20
+ )
21
+
22
+ from .l4d2_queries.ohter import ALL_HOST
23
+ from .l4d2_queries.api import seach_map,map_dict_to_str
24
+ file_format = (".vpk",".zip",".7z",'rar')
25
+ # 权限
26
+
27
+ driver = get_driver()
28
+ COMMAND_START = list[driver.config.command_start]
29
+ try:
30
+ NICKNAME: str = list(driver.config.nickname)[0]
31
+ except Exception:
32
+ NICKNAME = 'bot'
33
+ CHECK_FILE:int = 0
34
+
35
+
36
+ reMaster = SUPERUSER | GROUP_OWNER
37
+ Master = SUPERUSER | GROUP_ADMIN | GROUP_OWNER
38
+ ADMINISTRATOR = SUPERUSER | GROUP_ADMIN | GROUP_OWNER | PRIVATE_FRIEND
39
+ # file 填写求生服务器所在路径
40
+
41
+
42
+
43
+
44
+ CONFIG_PATH = Path() / 'data' / 'L4D2' / 'l4d2.yml'
45
+ CONFIG_PATH.parent.mkdir(parents=True, exist_ok=True)
46
+
47
+ class L4d2GroupConfig(BaseModel):
48
+ enable: bool = Field(True, alias='是否启用求生功能')
49
+ map_master: List[str] = Field([], alias='分群地图管理员')
50
+
51
+ def update(self, **kwargs):
52
+ for key, value in kwargs.items():
53
+ if key in self.__fields__:
54
+ self.__setattr__(key, value)
55
+
56
+ class L4d2Config(BaseModel):
57
+ total_enable: bool = Field(True, alias='是否全局启用求生功能')
58
+ map_path: List[str] = Field([], alias='求生地图路径')
59
+ web_username: str = Field('l4d2', alias='后台管理用户名')
60
+ web_password: str = Field('admin', alias='后台管理密码')
61
+ l4_style: str = Field("standard", alias='图片风格')
62
+ # l4_file: List[str] = Field( ["/home/ubuntu/l4d2/coop"], alias='本地求生服务器地址')
63
+ # l4_host: List[str] = Field(['127.0.0.1'], alias='求生服务器地址')
64
+ # l4_port: List[str] = Field(['20715'], alias='求生服务器端口')
65
+ # l4_rcon: List[str] = Field(['114514'], alias='求生服务器rcon密码')
66
+
67
+ l4_ipall: List[Dict[str,Union[str,int,bool]]] = Field(
68
+ [{
69
+ 'id_rank':'1',
70
+ 'place': False,
71
+ 'location':'C:\\l4d2',
72
+ 'host':'127.0.0.1',
73
+ 'port':'20715',
74
+ 'rcon':'114514',
75
+ 'server_id':'本地地图',
76
+ },{
77
+ 'id_rank':'2',
78
+ 'place': True,
79
+ 'location':'/home/unbuntu/coop',
80
+ 'host':'11.4.51.4',
81
+ 'port':'20715',
82
+ 'rcon':'9191810',
83
+ 'account':'root',
84
+ 'password':'114514',
85
+ 'server_id':'远程地图',
86
+ }],
87
+ alias='l4服务器ip集合')
88
+ web_secret_key: str = Field('49c294d32f69b732ef6447c18379451ce1738922a75cd1d4812ef150318a2ed0',
89
+ alias='后台管理token密钥')
90
+ l4_master: List[str] = Field(['114514919'], alias='求生地图全局管理员qq')
91
+ # l4_ip:bool = Field(False, alias='查询地图是否显示ip')
92
+ l4_font: str = Field('simsun.ttc', alias='字体')
93
+ l4_only:bool = Field(False, alias='下载地图是是否阻碍其他指令')
94
+ l4_tag: List[str] = Field(['呆呆','橘'], alias='查服的名')
95
+ l4_key: str = Field('q1145149191810', alias='key')
96
+ group_config: Dict[int, L4d2GroupConfig] = Field({}, alias='分群配置')
97
+
98
+ def update(self, **kwargs):
99
+ for key, value in kwargs.items():
100
+ if key in self.__fields__:
101
+ self.__setattr__(key, value)
102
+
103
+ class L4d2ConfigManager:
104
+
105
+ def __init__(self):
106
+ self.file_path = CONFIG_PATH
107
+ if self.file_path.exists():
108
+ self.config = L4d2Config.parse_obj(
109
+ yaml.load(self.file_path.read_text(encoding='utf-8'), Loader=yaml.Loader))
110
+ else:
111
+ self.config = L4d2Config()
112
+ self.save()
113
+
114
+ def get_group_config(self, group_id: int) -> L4d2GroupConfig:
115
+ if group_id not in self.config.group_config:
116
+ self.config.group_config[group_id] = L4d2GroupConfig()
117
+ self.save()
118
+ return self.config.group_config[group_id]
119
+
120
+ @property
121
+ def config_list(self) -> List[str]:
122
+ return list(self.config.dict(by_alias=True).keys())
123
+
124
+ def save(self):
125
+ with self.file_path.open('w', encoding='utf-8') as f:
126
+ yaml.dump(
127
+ self.config.dict(by_alias=True),
128
+ f,
129
+ indent=2,
130
+ Dumper=yaml.RoundTripDumper,
131
+ allow_unicode=True)
132
+
133
+ # 参数设置为全局变量
134
+ global config_manager,l4_config
135
+ config_manager = L4d2ConfigManager()
136
+ l4_config = config_manager.config
137
+
138
+ class UserModel(BaseModel):
139
+ username: str
140
+ password: str
141
+
142
+
143
+ '''
144
+ 地图路径
145
+ '''
146
+ vpk_path = "left4dead2/addons"
147
+
148
+
149
+ PLAYERSDATA = Path() / "data/L4D2/image/players"
150
+ """用户数据路径"""
151
+ TEXT_PATH = Path(__file__).parent / 'data/L4D2/image'
152
+ """图片存储路径"""
153
+ TEXT_XPATH = Path() / 'data/L4D2/image'
154
+ """内置图片路径"""
155
+
156
+
157
+
158
+ PLAYERSDATA = Path() / "data/L4D2/sql"
159
+ """数据库路径"""
160
+ DATASQLITE = Path().parent / "data/L4D2/sql/L4D2.db"
161
+ """数据库!"""
162
+
163
+ table_data = ["L4d2_players","L4D2_server"]
164
+ """数据库表"""
165
+ L4d2_players_tag = ['qq', 'nickname', 'steamid']
166
+ """数据库表1"""
167
+ L4d2_server_tag = ['id','qqgroup', 'host', 'port', 'rcon']
168
+ """数据库表2"""
169
+ L4d2_INTEGER = ['id','qq','qqgroup','port']
170
+ """INITEGER的表头"""
171
+ L4d2_TEXT = ['nickname','steamid','host','rcon','path']
172
+ """TEXT的表头"""
173
+ L4d2_BOOLEAN = ['use']
174
+ """BOOLEAN的表头"""
175
+
176
+ tables_columns = {
177
+ table_data[0]:L4d2_players_tag,
178
+ table_data[1]:L4d2_server_tag
179
+ }
180
+
181
+ # 求生anne服务器
182
+ anne_url = "https://server.trygek.com/"
183
+
184
+ gamemode_list = [
185
+ '纯净',
186
+ '魔改战役',
187
+ '多特',
188
+ '魔改多特',
189
+ '写专',
190
+ '对抗',
191
+ '魔改对抗',
192
+ '药役',
193
+ '药抗',
194
+ '包抗',
195
+ '绝境',
196
+ '死专',
197
+ 'ast',
198
+ '清道夫',
199
+ ]
200
+
201
+ # 系统
202
+ if platform.system() == 'Windows':
203
+ systems:str = 'win'
204
+ elif platform.system() == 'Linux':
205
+ systems:str = 'linux'
206
+ else:
207
+ systems:str = 'others'
208
+ ANNE_IP = {}
209
+
210
+
211
211
 
@@ -1,60 +1,60 @@
1
- <!DOCTYPE html>
2
- <head>
3
- <link rel="stylesheet" type="text/css" href="vue.css">
4
- </head>
5
- </br>
6
- <body style="background-image: url('back.png'); background-size: cover;">
7
- <font color="yellow">
8
- {% for item in data %}
9
- <h1 ><center>求生药役anne电信服数据</center></h1>
10
- <div class="scissors" style="border-top:1px dashed orange;">
11
- </div><h3><center>
12
- {% for msg_one in item.one_msg %}
13
- {{ msg_one }}<br>
14
- {% endfor %}</center></h3>
15
- </font>
16
- <div class="scissors" style="border-top:1px dashed orange;">
17
- </div>
18
- <div class="myinfo">
19
- <table class="transparent-bg">
20
- <tbody>
21
- <tr>
22
- <td rowspan="6">
23
- <img src={{item.header}} width="200" height="200" style="border-radius: 50%;">
24
- </td>
25
- <td>昵&emsp;&emsp;称 | {{item.name}}</td>
26
- <td>Steam id | {{item.Steam_ID}}</td>
27
- </tr>
28
- <tr>
29
- <td>游玩时间 | {{item.play_time}}</td>
30
- <td>最后上线 | {{item.last_online}}</td>
31
- </tr>
32
- <tr>
33
- <td>排&emsp;&emsp;行 | {{item.rank}}</td>
34
-
35
- <td>分&emsp;&emsp;数 | {{item.points}}</td>
36
- </tr>
37
- <tr>
38
- <td>分数 / 分 | {{item.point_min}}</td>
39
- <td>小僵尸数 | {{item.killed}}</td>
40
- </tr>
41
- <tr>
42
- <td>爆&emsp;&emsp;头 | {{item.shut}}</td>
43
- <td>爆&nbsp; 头&nbsp; 率 | {{item.out}}</td>
44
- </tr>
45
- <tr>
46
- <td>游玩次数 | {{item.playtimes}}</td>
47
- <td>救&nbsp; 援&nbsp; 关 | {{item.last_one}}</td>
48
- </tr>
49
- </tbody>
50
- </table>
51
- </div>
52
- <font color="yellow">
53
- {% endfor %}
54
- <h5><center>©爱丽数码</center></br>
55
- <center>
56
- github.com/Agnes4m/nonebot_plugin_l4d2_server
57
- </center>
58
- </h5>
59
- </font>
60
- </body>
1
+ <!DOCTYPE html>
2
+ <head>
3
+ <link rel="stylesheet" type="text/css" href="vue.css">
4
+ </head>
5
+ </br>
6
+ <body style="background-image: url('back.png'); background-size: cover;">
7
+ <font color="yellow">
8
+ {% for item in data %}
9
+ <h1 ><center>求生药役anne电信服数据</center></h1>
10
+ <div class="scissors" style="border-top:1px dashed orange;">
11
+ </div><h3><center>
12
+ {% for msg_one in item.one_msg %}
13
+ {{ msg_one }}<br>
14
+ {% endfor %}</center></h3>
15
+ </font>
16
+ <div class="scissors" style="border-top:1px dashed orange;">
17
+ </div>
18
+ <div class="myinfo">
19
+ <table class="transparent-bg">
20
+ <tbody>
21
+ <tr>
22
+ <td rowspan="6">
23
+ <img src={{item.header}} width="200" height="200" style="border-radius: 50%;">
24
+ </td>
25
+ <td>昵&emsp;&emsp;称 | {{item.name}}</td>
26
+ <td>Steam id | {{item.Steam_ID}}</td>
27
+ </tr>
28
+ <tr>
29
+ <td>游玩时间 | {{item.play_time}}</td>
30
+ <td>最后上线 | {{item.last_online}}</td>
31
+ </tr>
32
+ <tr>
33
+ <td>排&emsp;&emsp;行 | {{item.rank}}</td>
34
+
35
+ <td>分&emsp;&emsp;数 | {{item.points}}</td>
36
+ </tr>
37
+ <tr>
38
+ <td>分数 / 分 | {{item.point_min}}</td>
39
+ <td>小僵尸数 | {{item.killed}}</td>
40
+ </tr>
41
+ <tr>
42
+ <td>爆&emsp;&emsp;头 | {{item.shut}}</td>
43
+ <td>爆&nbsp; 头&nbsp; 率 | {{item.out}}</td>
44
+ </tr>
45
+ <tr>
46
+ <td>游玩次数 | {{item.playtimes}}</td>
47
+ <td>救&nbsp; 援&nbsp; 关 | {{item.last_one}}</td>
48
+ </tr>
49
+ </tbody>
50
+ </table>
51
+ </div>
52
+ <font color="yellow">
53
+ {% endfor %}
54
+ <h5><center>©爱丽数码</center></br>
55
+ <center>
56
+ github.com/Agnes4m/nonebot_plugin_l4d2_server
57
+ </center>
58
+ </h5>
59
+ </font>
60
+ </body>
@@ -1,15 +1,15 @@
1
- <svg
2
- aria-hidden="true"
3
- focusable="false"
4
- data-prefix="fas"
5
- data-icon="fingerprint"
6
- class="svg-inline--fa fa-fingerprint mr-2"
7
- role="img"
8
- xmlns="http://www.w3.org/2000/svg"
9
- viewBox="0 0 512 512"
10
- >
11
- <path
12
- fill="currentColor"
13
- d="M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"
14
- ></path>
15
- </svg>
1
+ <svg
2
+ aria-hidden="true"
3
+ focusable="false"
4
+ data-prefix="fas"
5
+ data-icon="fingerprint"
6
+ class="svg-inline--fa fa-fingerprint mr-2"
7
+ role="img"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ viewBox="0 0 512 512"
10
+ >
11
+ <path
12
+ fill="currentColor"
13
+ d="M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"
14
+ ></path>
15
+ </svg>