Skip to content

Commit 7a4a4fc

Browse files
committed
📝完善tj/zl/kl功能(仅限云服)
1 parent 66939f8 commit 7a4a4fc

3 files changed

Lines changed: 89 additions & 18 deletions

File tree

nonebot_plugin_l4d2_server/__main__.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@
5757
l4_connect = on_command("connect", aliases={"l4连接"})
5858
l4_find_player = on_command("l4find", aliases={"l4查找"})
5959

60-
ld_tj = on_command("tj", aliases={"探监"})
61-
ld_zl = on_command("zl")
62-
ld_kl = on_command("kl")
60+
6361
config_path = Path(config.l4_path) / "config.json"
6462

6563

@@ -265,16 +263,25 @@ async def _(args: Message = CommandArg()):
265263
await out_msg_out(f"修改成功,组名:{arg[0]},网址:{arg[1]}")
266264

267265

268-
@ld_tj.handle()
269-
async def _(matcher: Matcher):
270-
await matcher.send("正在寻找牢房信息")
271-
await matcher.finish(await tj_request("云", "tj"))
266+
if "云" in COMMAND:
267+
ld_tj = on_command("tj", aliases={"探监"})
268+
ld_zl = on_command("zl")
269+
ld_kl = on_command("kl")
270+
271+
@ld_tj.handle()
272+
async def _(matcher: Matcher):
273+
await matcher.send("正在寻找牢房信息")
274+
await matcher.finish(await tj_request("云", "tj"))
272275

276+
@ld_zl.handle()
277+
async def _(matcher: Matcher):
278+
await matcher.send("正在寻找牢房信息")
279+
await matcher.finish(await tj_request("云", "zl"))
273280

274-
@ld_zl.handle()
275-
async def _(matcher: Matcher):
276-
await matcher.send("正在寻找牢房信息")
277-
await matcher.finish(await tj_request("云", "zl"))
281+
@ld_kl.handle()
282+
async def _(matcher: Matcher):
283+
await matcher.send("正在寻找牢房信息")
284+
await matcher.finish(await tj_request("云", "kl"))
278285

279286

280287
## 以下为配置修改

nonebot_plugin_l4d2_server/l4_request/utils.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ async def _handle_single_server(
103103
async def _filter_servers(
104104
servers: list,
105105
tj_mode: str,
106-
map_type: str = "普通药役",
106+
map_type: Optional[list[str]] = None,
107107
) -> list:
108108
"""筛选符合条件的服务器
109109
Args:
@@ -113,28 +113,46 @@ async def _filter_servers(
113113
Returns:
114114
符合条件的服务器列表
115115
"""
116+
if map_type is None:
117+
map_type = ["普通药役", "硬核药役"]
116118
filtered = []
117119
for i in servers:
118120
ser_list = await L4API.a2s_info([(i["host"], i["port"])], is_player=True)
121+
119122
if not ser_list:
120123
continue
121124

122125
srv = ser_list[0][0]
123126
players = ser_list[0][1]
127+
logger.info(srv)
128+
logger.info(players)
129+
if srv.map_name == "无":
130+
continue
124131

125-
if tj_mode == "tj" and map_type in srv.map_name:
126-
score = sum(p.score for p in players[:4])
127-
t = srv.map_name.split("[")[-1].split("特")[0]
128-
if t.isdigit() and int(t) * 50 < score:
132+
if tj_mode == "tj" and any(
133+
map_type_value in srv.server_name for map_type_value in map_type
134+
):
135+
scores = [p.score for p in players[:4]]
136+
total_score = sum(scores)
137+
part_with_number = srv.server_name.split("[")[1].split("]")[0]
138+
t = part_with_number.split("特")[0]
139+
logger.info(t)
140+
logger.info(total_score)
141+
if t.isdigit() and int(t) * 10 < total_score:
129142
logger.info(
130-
f"符合TJ条件的服务器: {i['host']}:{i['port']}, 地图: {srv.map_name}, 分数: {score}",
143+
f"符合TJ条件的服务器: {i['host']}:{i['port']}, 地图: {srv.map_name}, 分数: {total_score}",
131144
)
132145
filtered.append(i)
133-
elif tj_mode == "zl" and map_type in srv.map_name and len(players) <= 4:
146+
elif tj_mode == "zl" and map_type in srv.server_name and len(players) <= 4:
134147
logger.info(
135148
f"符合ZL条件的服务器: {i['host']}:{i['port']}, 地图: {srv.map_name}, 玩家数: {len(players)}",
136149
)
137150
filtered.append(i)
151+
elif tj_mode == "kl" and len(players) == 0:
152+
logger.info(
153+
f"符合KL条件的服务器: {i['host']}:{i['port']}, 地图: {srv.map_name}, 玩家数: {len(players)}",
154+
)
155+
filtered.append(i)
138156
return filtered
139157

140158

nonebot_plugin_l4d2_server/utils/api/request.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,49 @@ def safe_find_all(
5959
return element.find_all(tag, class_=class_)
6060
return []
6161

62+
async def a2s_server_info(
63+
self,
64+
ip: Tuple[str, int],
65+
):
66+
try:
67+
server = await a2s.ainfo(
68+
ip,
69+
timeout=3,
70+
encoding="utf8",
71+
)
72+
73+
except (
74+
asyncio.exceptions.TimeoutError,
75+
ConnectionRefusedError,
76+
socket.gaierror,
77+
):
78+
server = a2s.SourceInfo(
79+
protocol=0,
80+
server_name="服务器无响应",
81+
map_name="无",
82+
folder="m",
83+
game="L4D2",
84+
app_id=114514,
85+
steam_id=0,
86+
player_count=0,
87+
max_players=0,
88+
bot_count=0,
89+
server_type="w",
90+
platform="w",
91+
password_protected=False,
92+
vac_enabled=False,
93+
version="1.0",
94+
edf=0,
95+
ping=0,
96+
)
97+
server.player_count = 0
98+
server.max_players = 0
99+
server.server_name = "服务器无响应"
100+
server.map_name = "无"
101+
server.folder = "m"
102+
server.vac_enabled = False
103+
return server
104+
62105
async def a2s_info(
63106
self,
64107
ip_list: List[Tuple[str, int]],
@@ -145,6 +188,7 @@ async def process_message(
145188
server.map_name = "无"
146189
server.folder = "m"
147190
server.vac_enabled = False
191+
is_player = False
148192

149193
if is_player:
150194
with contextlib.suppress(
@@ -153,6 +197,8 @@ async def process_message(
153197
socket.gaierror,
154198
):
155199
play = await a2s.aplayers(ip, timeout=3, encoding="utf8")
200+
else:
201+
play = []
156202
return server, play
157203

158204
async def _server_request(

0 commit comments

Comments
 (0)