nonebot-plugin-l4d2-server 0.5.0__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 (49) hide show
  1. LICENSE +674 -674
  2. README.md +365 -349
  3. nonebot_plugin_l4d2_server/__init__.py +1 -1
  4. nonebot_plugin_l4d2_server/chrome.py +45 -0
  5. nonebot_plugin_l4d2_server/command.py +232 -233
  6. nonebot_plugin_l4d2_server/config.py +210 -318
  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/data/L4D2/image/template/vue.css +530 -530
  14. nonebot_plugin_l4d2_server/l4d2_anne/__init__.py +251 -251
  15. nonebot_plugin_l4d2_server/l4d2_anne/analysis.py +51 -51
  16. nonebot_plugin_l4d2_server/l4d2_anne/anne_telecom.py +75 -75
  17. nonebot_plugin_l4d2_server/l4d2_anne/server.py +65 -65
  18. nonebot_plugin_l4d2_server/l4d2_anne/startand.py +17 -17
  19. nonebot_plugin_l4d2_server/l4d2_data/__init__.py +91 -91
  20. nonebot_plugin_l4d2_server/l4d2_data/config.py +17 -17
  21. nonebot_plugin_l4d2_server/l4d2_data/players.py +87 -87
  22. nonebot_plugin_l4d2_server/l4d2_data/serverip.py +32 -32
  23. nonebot_plugin_l4d2_server/l4d2_file/__init__.py +122 -122
  24. nonebot_plugin_l4d2_server/l4d2_file/ayromote.py +56 -56
  25. nonebot_plugin_l4d2_server/l4d2_file/remote.py +63 -66
  26. nonebot_plugin_l4d2_server/l4d2_image/__init__.py +103 -103
  27. nonebot_plugin_l4d2_server/l4d2_image/download.py +101 -101
  28. nonebot_plugin_l4d2_server/l4d2_image/htmlimg.py +32 -32
  29. nonebot_plugin_l4d2_server/l4d2_image/send_image_tool.py +32 -32
  30. nonebot_plugin_l4d2_server/l4d2_image/steam.py +83 -83
  31. nonebot_plugin_l4d2_server/l4d2_image/vtfs.py +40 -40
  32. nonebot_plugin_l4d2_server/l4d2_queries/__init__.py +114 -114
  33. nonebot_plugin_l4d2_server/l4d2_queries/api.py +43 -43
  34. nonebot_plugin_l4d2_server/l4d2_queries/ohter.py +35 -25
  35. nonebot_plugin_l4d2_server/l4d2_queries/qqgroup.py +288 -288
  36. nonebot_plugin_l4d2_server/l4d2_server/__init__.py +61 -61
  37. nonebot_plugin_l4d2_server/l4d2_server/rcon.py +28 -28
  38. nonebot_plugin_l4d2_server/l4d2_server/workshop.py +50 -50
  39. nonebot_plugin_l4d2_server/l4d2_web/web.py +234 -234
  40. nonebot_plugin_l4d2_server/l4d2_web/webUI.py +241 -241
  41. nonebot_plugin_l4d2_server/message.py +58 -58
  42. nonebot_plugin_l4d2_server/seach.py +33 -33
  43. nonebot_plugin_l4d2_server/txt_to_img.py +64 -64
  44. nonebot_plugin_l4d2_server/utils.py +272 -272
  45. {nonebot_plugin_l4d2_server-0.5.0.dist-info → nonebot_plugin_l4d2_server-0.5.2.dist-info}/LICENSE +674 -674
  46. {nonebot_plugin_l4d2_server-0.5.0.dist-info → nonebot_plugin_l4d2_server-0.5.2.dist-info}/METADATA +47 -32
  47. nonebot_plugin_l4d2_server-0.5.2.dist-info/RECORD +54 -0
  48. nonebot_plugin_l4d2_server-0.5.0.dist-info/RECORD +0 -53
  49. {nonebot_plugin_l4d2_server-0.5.0.dist-info → nonebot_plugin_l4d2_server-0.5.2.dist-info}/WHEEL +0 -0
@@ -1,25 +1,35 @@
1
- try:
2
- import ujson as json
3
- except:
4
- import json
5
- from pathlib import Path
6
- from typing import Dict,List
7
- import os
8
-
9
- BOT_DIR = os.path.dirname(os.path.abspath(__file__))
10
- filename = 'data/L4D2/l4d2.json'
11
- global_file = Path(Path(__file__).parent.parent,filename)
12
- def load_josn():
13
- # 本地模块
14
- try:
15
- LOCAL_HOST:dict = json.load(open(
16
- filename, "r", encoding="utf8"))
17
- except IOError or FileNotFoundError:
18
- os.makedirs(os.path.dirname(filename), exist_ok=True)
19
- data = {}
20
- with open(filename, "w") as f:
21
- json.dump(data, f)
22
- LOCAL_HOST:dict = {}
23
- return LOCAL_HOST
24
-
25
- ALL_HOST:Dict[str, List[dict]] = load_josn()
1
+ try:
2
+ import ujson as json
3
+ except:
4
+ import json
5
+ from pathlib import Path
6
+ from typing import Dict,List
7
+ import os
8
+
9
+ BOT_DIR = os.path.dirname(os.path.abspath(__file__))
10
+ filename = 'data/L4D2/l4d2.json'
11
+ global_file = Path(Path(__file__).parent.parent,filename)
12
+ def load_josn():
13
+ # 本地模块
14
+ try:
15
+ LOCAL_HOST:dict = json.load(open(
16
+ filename, "r", encoding="utf8"))
17
+ except IOError or FileNotFoundError:
18
+ os.makedirs(os.path.dirname(filename), exist_ok=True)
19
+ data = {}
20
+ with open(filename, "w") as f:
21
+ json.dump(data, f)
22
+ LOCAL_HOST:dict = {}
23
+ try:
24
+ # 获取所有json文件的路径
25
+ json_files = Path('data/L4D2/l4d2').glob('*.json')
26
+
27
+ # 将所有json文件中的字典对象合并为一个字典
28
+ for file_path in json_files:
29
+ with open(file_path, 'r', encoding='utf-8') as f:
30
+ LOCAL_HOST.update(json.load(f))
31
+ except:
32
+ pass
33
+ return LOCAL_HOST
34
+
35
+ ALL_HOST:Dict[str, List[dict]] = load_josn()
@@ -1,288 +1,288 @@
1
- from ..l4d2_data.serverip import L4D2Server
2
- from ..l4d2_image import server_ip_pic
3
- from . import queries,player_queries,queries_dict,player_queries_anne_dict,msg_ip_to_list,server_rule_dict
4
- from nonebot.log import logger
5
- import random
6
- import asyncio
7
- import re
8
- from ..message import PRISON,QUEREN,KAILAO
9
- from .ohter import ALL_HOST
10
- from typing import List,Dict
11
- try:
12
- import ujson as json
13
- except:
14
- import json
15
- si = L4D2Server()
16
- errors = (ConnectionRefusedError,ConnectionResetError,asyncio.exceptions.TimeoutError,OSError)
17
- # errors = (TypeError,KeyError,ValueError,ConnectionResetError,TimeoutError)
18
-
19
- async def get_qqgroup_ip_msg(qqgroup):
20
- """首先,获取qq群订阅数据,再依次queries返回ip原标"""
21
- ip_list = await si.query_server_ip(qqgroup)
22
- return ip_list
23
-
24
- async def bind_group_ip(group:int,host:str,port:int):
25
- ip_list = await si.query_server_ip(group)
26
- if (host,port) in ip_list:
27
- return "本群已添加过该ip辣"
28
- await si.bind_server_ip(group,host,port)
29
- return "绑定成功喵,新增ip" + host
30
-
31
- async def del_group_ip(group:int,number:int):
32
- number = int(number)
33
- logger.info(number)
34
- try:
35
- groups,host,port = await si.query_number(number)
36
- except TypeError:
37
- return '没有这个序号哦'
38
- if groups != group:
39
- return "本群可没有订阅过这个ip"
40
- await si.del_server_ip(number)
41
- return "取消成功喵,已删除序号" + str(number)
42
-
43
- async def qq_ip_queries(msg:List[tuple]):
44
- """输入一个ip的二元元组组成的列表,返回一个输出消息的列表
45
- 未来作图这里重置"""
46
- messsage = ""
47
- for i in msg:
48
- number,qqgroup,host,port = i
49
- msg2 = await player_queries(host,port)
50
- msg1 = await queries(host,port)
51
- messsage += '序号、'+ str(number) + '\n' + msg1 + msg2 + '--------------------\n'
52
- return messsage
53
-
54
-
55
- async def qq_ip_querie(msg: list,igr:bool = True):
56
- msg_list = []
57
- tasks = [] # 用来保存异步任务
58
- if msg != []:
59
- for i in msg:
60
- try:
61
- number, host, port = i
62
- qqgroup = ''
63
- except ValueError:
64
- number, qqgroup, host, port = i
65
- finally:
66
- # 将异步任务添加到任务列表中
67
- tasks.append(asyncio.create_task(process_message(number, host, port, msg_list,qqgroup,igr)))
68
- # 等待所有异步任务完成
69
- await asyncio.gather(*tasks)
70
- # 对msg_list按照number顺序排序
71
- msg_list.sort(key=lambda x: x['number'])
72
- for i in msg_list:
73
- print(i)
74
- break
75
- result = {'msg_list': msg_list}
76
-
77
- else:
78
- result = {}
79
- return result
80
-
81
-
82
- async def qq_ip_queries_pic(msg: list,igr = False):
83
- result = await qq_ip_querie(msg,igr)
84
- if 'msg_list' in result:
85
- pic = await server_ip_pic(result['msg_list'])
86
- else:
87
- pic = None
88
- return pic
89
-
90
-
91
-
92
-
93
- async def process_message(number, host, port, msg_list:list,igr:bool,qqgroup = ''):
94
- try:
95
- msg2 = await player_queries_anne_dict(host, port)
96
- msg1 = await queries_dict(host, port)
97
- msg3 = await server_rule_dict(host, port)
98
- msg1.update({'Players':msg2,'number':number,})
99
- msg1.update(msg3)
100
- if qqgroup:
101
- msg1.update({'tag':qqgroup})
102
- msg_list.append(msg1)
103
- except errors:
104
- if igr:
105
- pass
106
- else:
107
- # 空白字典
108
- null_dict = {key: 'null' for key in ['name', 'map_', 'players', 'max_players', 'rank_players', 'ping']}
109
- null_dict.update({'number':number,'ip':f'{host}:{port}','Players':[]})
110
- msg_list.append(null_dict)
111
-
112
-
113
-
114
- async def get_tan_jian(msg:List[tuple],mode:int):
115
- """获取anne列表抽一个"""
116
- msg_list = []
117
- random.shuffle(msg)
118
- for i in msg:
119
- number,host,port = i
120
- try:
121
- if mode == 1:
122
- # 探监
123
- msg2 = await player_queries_anne_dict(host,port)
124
- point = 0
125
- for i in msg2:
126
- point += int(i['Score'])
127
- logger.info(point)
128
- msg1 = await queries_dict(host,port)
129
- sp:str = msg1['name']
130
- if '特' not in sp:
131
- continue
132
- sp = int(sp.split('特')[0].split('[')[-1])
133
- points = point/4
134
- if points/sp <10:
135
- continue
136
- if 'HT' in msg1['name']:
137
- continue
138
- msg1.update({'Players':msg2})
139
- msg1.update({'ranks':point})
140
- ips = f'{host}:{str(port)}'
141
- msg1.update({'ips':ips})
142
- # msg1是一行数据完整的字典
143
- msg_list.append(msg1)
144
- if mode == 2:
145
- # 坐牢
146
- # try:
147
- msg1 = await queries_dict(host,port)
148
- if '普通药役' in msg1['name']:
149
- if '缺人' in msg1['name']:
150
- msg2 = await player_queries_anne_dict(host,port)
151
- msg1.update({'Players':msg2})
152
- ips = f'{host}:{str(port)}'
153
- msg1.update({'ips':ips})
154
- # msg1是一行数据完整的字典
155
- else:
156
- continue
157
- else:
158
- continue
159
- msg_list.append(msg1)
160
- if mode == 3:
161
- # 开牢
162
- msg1 = await queries_dict(host,port)
163
- if '[' not in msg1['name']:
164
- msg2 = await player_queries_anne_dict(host,port)
165
- msg1.update({'Players':msg2})
166
- ips = f'{host}:{str(port)}'
167
- msg1.update({'ips':ips})
168
- # msg1是一行数据完整的字典
169
- msg_list.append(msg1)
170
- except errors:
171
- continue
172
- if msg_list != []:
173
- break
174
- # 随机选一个牢房
175
- logger.info(msg_list)
176
- if len(msg_list) == 0:
177
- return '暂时没有这种牢房捏'
178
- logger.info(len(msg_list))
179
- mse = msg_list[0]
180
- message:str = ''
181
- if mode == 1:
182
- ranks = mse['ranks']
183
- if ranks <= 300 :
184
- message = random.choice(PRISON[1])
185
- if 300 < ranks <= 450 :
186
- message = random.choice(PRISON[2])
187
- if ranks > 450 :
188
- message = random.choice(PRISON[3])
189
- if mode == 2:
190
- player_point = mse['players']
191
- if player_point == '1':
192
- message = random.choice(QUEREN[1])
193
- elif player_point == '2':
194
- message = random.choice(QUEREN[2])
195
- elif player_point == '3':
196
- message = random.choice(QUEREN[3])
197
- else:
198
- message = random.choice(QUEREN[4])
199
- if mode == 3:
200
- message = random.choice(KAILAO)
201
- message += '\n' + '名称:' + mse['name'] + '\n'
202
- message += '地图:' + mse['map_'] + '\n'
203
- message += f"玩家:{mse['players']} / {mse['max_players']}\n"
204
- print(mse['Players'])
205
- try:
206
- message += await msg_ip_to_list(mse['Players'])
207
- except (KeyError):
208
- message += '服务器里,是空空的呢\n'
209
- message += 'connect ' + mse['ip']
210
- return message
211
-
212
-
213
-
214
- async def get_server_ip(number):
215
- group,host,port = await si.query_number(number)
216
- try:
217
- return str(host) + ':' + str(port)
218
- except TypeError:
219
- return None
220
-
221
- def split_maohao(msg:str) -> list:
222
- """分割大小写冒号"""
223
- msg:list = re.split(":|:",msg.strip())
224
- mse = [msg[0],msg[-1]] if len(msg)==2 else [msg[0],20715]
225
- return mse
226
-
227
- async def write_json(data_str: str):
228
- """
229
- 添加数据或者删除数据
230
- - 【求生更新 添加 腐竹 ip 模式 序号】
231
- - 【求生更新 添加 腐竹 ip 模式】
232
- - 【求生更新 删除 腐竹 序号】
233
- """
234
- data_list = data_str.split()
235
- logger.info(data_list)
236
- if data_list[0] == "添加":
237
- add_server = {}
238
- server_dict = ALL_HOST.get(data_list[1], {})
239
- if not server_dict:
240
- logger.info('新建分支')
241
- ALL_HOST[data_list[1]] = []
242
- for key, value in ALL_HOST.items():
243
- if data_list[1] == key:
244
- ids = [server['id'] for server in value]
245
- # 序号
246
- if len(data_list) == 4:
247
- data_num = max(ids, default=0) + 1
248
- add_server.update({'id': data_num})
249
- elif len(data_list) == 5:
250
- if not data_list[4].isdigit():
251
- return '序号应该为大于0的正整数,请输入【求生更新 添加 腐竹 ip 模式 序号】'
252
- data_num = int(data_list[4])
253
- if data_num in ids:
254
- return '该序号已存在,请尝试删除原序号【求生更新 删除 腐竹 序号】'
255
- add_server.update({'id': data_num})
256
- else:
257
- return '输入参数错误,请输入【求生更新 添加 腐竹 ip 模式 序号】或【求生更新 添加 腐竹 ip 模式】'
258
- # 模式,ip
259
- try:
260
- host, port = split_maohao(data_list[2])
261
- add_server.update({'host': host, 'port': port})
262
- except KeyError:
263
- return 'ip格式不正确【114.11.4.514:9191】'
264
- add_server.update({'version': data_list[3]})
265
- value.append(add_server)
266
- ALL_HOST[key] = value
267
- with open('data/L4D2/l4d2.json', 'w', encoding='utf8') as f_new:
268
- json.dump(ALL_HOST, f_new, ensure_ascii=False, indent=4)
269
- return f'添加成功,指令为{key}{data_num}'
270
-
271
- elif data_list[0] == "删除":
272
- for key, value in ALL_HOST.items():
273
- if data_list[1] == key:
274
- try:
275
- data_num = int(data_list[2])
276
- except ValueError:
277
- return '序号应该为大于0的正整数,请输入【求生更新 删除 腐竹 序号】'
278
- for i, server in enumerate(value):
279
- if data_num == server['id']:
280
- value.pop(i)
281
- if not value:
282
- ALL_HOST.pop(key)
283
- with open('data/L4D2/l4d2.json', 'w', encoding='utf8') as f_new:
284
- json.dump(ALL_HOST, f_new, ensure_ascii=False, indent=4)
285
- return '删除成功喵'
286
- return '序号不正确,请输入【求生更新 删除 腐竹 序号】'
287
- return '腐竹名不存在,请输入【求生更新 删除 腐竹 序号】'
288
-
1
+ from ..l4d2_data.serverip import L4D2Server
2
+ from ..l4d2_image import server_ip_pic
3
+ from . import queries,player_queries,queries_dict,player_queries_anne_dict,msg_ip_to_list,server_rule_dict
4
+ from nonebot.log import logger
5
+ import random
6
+ import asyncio
7
+ import re
8
+ from ..message import PRISON,QUEREN,KAILAO
9
+ from .ohter import ALL_HOST
10
+ from typing import List,Dict
11
+ try:
12
+ import ujson as json
13
+ except:
14
+ import json
15
+ si = L4D2Server()
16
+ errors = (ConnectionRefusedError,ConnectionResetError,asyncio.exceptions.TimeoutError,OSError)
17
+ # errors = (TypeError,KeyError,ValueError,ConnectionResetError,TimeoutError)
18
+
19
+ async def get_qqgroup_ip_msg(qqgroup):
20
+ """首先,获取qq群订阅数据,再依次queries返回ip原标"""
21
+ ip_list = await si.query_server_ip(qqgroup)
22
+ return ip_list
23
+
24
+ async def bind_group_ip(group:int,host:str,port:int):
25
+ ip_list = await si.query_server_ip(group)
26
+ if (host,port) in ip_list:
27
+ return "本群已添加过该ip辣"
28
+ await si.bind_server_ip(group,host,port)
29
+ return "绑定成功喵,新增ip" + host
30
+
31
+ async def del_group_ip(group:int,number:int):
32
+ number = int(number)
33
+ logger.info(number)
34
+ try:
35
+ groups,host,port = await si.query_number(number)
36
+ except TypeError:
37
+ return '没有这个序号哦'
38
+ if groups != group:
39
+ return "本群可没有订阅过这个ip"
40
+ await si.del_server_ip(number)
41
+ return "取消成功喵,已删除序号" + str(number)
42
+
43
+ async def qq_ip_queries(msg:List[tuple]):
44
+ """输入一个ip的二元元组组成的列表,返回一个输出消息的列表
45
+ 未来作图这里重置"""
46
+ messsage = ""
47
+ for i in msg:
48
+ number,qqgroup,host,port = i
49
+ msg2 = await player_queries(host,port)
50
+ msg1 = await queries(host,port)
51
+ messsage += '序号、'+ str(number) + '\n' + msg1 + msg2 + '--------------------\n'
52
+ return messsage
53
+
54
+
55
+ async def qq_ip_querie(msg: list,igr:bool = True):
56
+ msg_list = []
57
+ tasks = [] # 用来保存异步任务
58
+ if msg != []:
59
+ for i in msg:
60
+ try:
61
+ number, host, port = i
62
+ qqgroup = ''
63
+ except ValueError:
64
+ number, qqgroup, host, port = i
65
+ finally:
66
+ # 将异步任务添加到任务列表中
67
+ tasks.append(asyncio.create_task(process_message(number, host, port, msg_list,qqgroup,igr)))
68
+ # 等待所有异步任务完成
69
+ await asyncio.gather(*tasks)
70
+ # 对msg_list按照number顺序排序
71
+ msg_list.sort(key=lambda x: x['number'])
72
+ for i in msg_list:
73
+ print(i)
74
+ break
75
+ result = {'msg_list': msg_list}
76
+
77
+ else:
78
+ result = {}
79
+ return result
80
+
81
+
82
+ async def qq_ip_queries_pic(msg: list,igr = False):
83
+ result = await qq_ip_querie(msg,igr)
84
+ if 'msg_list' in result:
85
+ pic = await server_ip_pic(result['msg_list'])
86
+ else:
87
+ pic = None
88
+ return pic
89
+
90
+
91
+
92
+
93
+ async def process_message(number, host, port, msg_list:list,igr:bool,qqgroup = ''):
94
+ try:
95
+ msg2 = await player_queries_anne_dict(host, port)
96
+ msg1 = await queries_dict(host, port)
97
+ msg3 = await server_rule_dict(host, port)
98
+ msg1.update({'Players':msg2,'number':number,})
99
+ msg1.update(msg3)
100
+ if qqgroup:
101
+ msg1.update({'tag':qqgroup})
102
+ msg_list.append(msg1)
103
+ except errors:
104
+ if igr:
105
+ pass
106
+ else:
107
+ # 空白字典
108
+ null_dict = {key: 'null' for key in ['name', 'map_', 'players', 'max_players', 'rank_players', 'ping']}
109
+ null_dict.update({'number':number,'ip':f'{host}:{port}','Players':[]})
110
+ msg_list.append(null_dict)
111
+
112
+
113
+
114
+ async def get_tan_jian(msg:List[tuple],mode:int):
115
+ """获取anne列表抽一个"""
116
+ msg_list = []
117
+ random.shuffle(msg)
118
+ for i in msg:
119
+ number,host,port = i
120
+ try:
121
+ if mode == 1:
122
+ # 探监
123
+ msg2 = await player_queries_anne_dict(host,port)
124
+ point = 0
125
+ for i in msg2:
126
+ point += int(i['Score'])
127
+ logger.info(point)
128
+ msg1 = await queries_dict(host,port)
129
+ sp:str = msg1['name']
130
+ if '特' not in sp:
131
+ continue
132
+ sp = int(sp.split('特')[0].split('[')[-1])
133
+ points = point/4
134
+ if points/sp <10:
135
+ continue
136
+ if 'HT' in msg1['name']:
137
+ continue
138
+ msg1.update({'Players':msg2})
139
+ msg1.update({'ranks':point})
140
+ ips = f'{host}:{str(port)}'
141
+ msg1.update({'ips':ips})
142
+ # msg1是一行数据完整的字典
143
+ msg_list.append(msg1)
144
+ if mode == 2:
145
+ # 坐牢
146
+ # try:
147
+ msg1 = await queries_dict(host,port)
148
+ if '普通药役' in msg1['name']:
149
+ if '缺人' in msg1['name']:
150
+ msg2 = await player_queries_anne_dict(host,port)
151
+ msg1.update({'Players':msg2})
152
+ ips = f'{host}:{str(port)}'
153
+ msg1.update({'ips':ips})
154
+ # msg1是一行数据完整的字典
155
+ else:
156
+ continue
157
+ else:
158
+ continue
159
+ msg_list.append(msg1)
160
+ if mode == 3:
161
+ # 开牢
162
+ msg1 = await queries_dict(host,port)
163
+ if '[' not in msg1['name']:
164
+ msg2 = await player_queries_anne_dict(host,port)
165
+ msg1.update({'Players':msg2})
166
+ ips = f'{host}:{str(port)}'
167
+ msg1.update({'ips':ips})
168
+ # msg1是一行数据完整的字典
169
+ msg_list.append(msg1)
170
+ except errors:
171
+ continue
172
+ if msg_list != []:
173
+ break
174
+ # 随机选一个牢房
175
+ logger.info(msg_list)
176
+ if len(msg_list) == 0:
177
+ return '暂时没有这种牢房捏'
178
+ logger.info(len(msg_list))
179
+ mse = msg_list[0]
180
+ message:str = ''
181
+ if mode == 1:
182
+ ranks = mse['ranks']
183
+ if ranks <= 300 :
184
+ message = random.choice(PRISON[1])
185
+ if 300 < ranks <= 450 :
186
+ message = random.choice(PRISON[2])
187
+ if ranks > 450 :
188
+ message = random.choice(PRISON[3])
189
+ if mode == 2:
190
+ player_point = mse['players']
191
+ if player_point == '1':
192
+ message = random.choice(QUEREN[1])
193
+ elif player_point == '2':
194
+ message = random.choice(QUEREN[2])
195
+ elif player_point == '3':
196
+ message = random.choice(QUEREN[3])
197
+ else:
198
+ message = random.choice(QUEREN[4])
199
+ if mode == 3:
200
+ message = random.choice(KAILAO)
201
+ message += '\n' + '名称:' + mse['name'] + '\n'
202
+ message += '地图:' + mse['map_'] + '\n'
203
+ message += f"玩家:{mse['players']} / {mse['max_players']}\n"
204
+ print(mse['Players'])
205
+ try:
206
+ message += await msg_ip_to_list(mse['Players'])
207
+ except (KeyError):
208
+ message += '服务器里,是空空的呢\n'
209
+ message += 'connect ' + mse['ip']
210
+ return message
211
+
212
+
213
+
214
+ async def get_server_ip(number):
215
+ group,host,port = await si.query_number(number)
216
+ try:
217
+ return str(host) + ':' + str(port)
218
+ except TypeError:
219
+ return None
220
+
221
+ def split_maohao(msg:str) -> list:
222
+ """分割大小写冒号"""
223
+ msg:list = re.split(":|:",msg.strip())
224
+ mse = [msg[0],msg[-1]] if len(msg)==2 else [msg[0],20715]
225
+ return mse
226
+
227
+ async def write_json(data_str: str):
228
+ """
229
+ 添加数据或者删除数据
230
+ - 【求生更新 添加 腐竹 ip 模式 序号】
231
+ - 【求生更新 添加 腐竹 ip 模式】
232
+ - 【求生更新 删除 腐竹 序号】
233
+ """
234
+ data_list = data_str.split()
235
+ logger.info(data_list)
236
+ if data_list[0] == "添加":
237
+ add_server = {}
238
+ server_dict = ALL_HOST.get(data_list[1], {})
239
+ if not server_dict:
240
+ logger.info('新建分支')
241
+ ALL_HOST[data_list[1]] = []
242
+ for key, value in ALL_HOST.items():
243
+ if data_list[1] == key:
244
+ ids = [server['id'] for server in value]
245
+ # 序号
246
+ if len(data_list) == 4:
247
+ data_num = max(ids, default=0) + 1
248
+ add_server.update({'id': data_num})
249
+ elif len(data_list) == 5:
250
+ if not data_list[4].isdigit():
251
+ return '序号应该为大于0的正整数,请输入【求生更新 添加 腐竹 ip 模式 序号】'
252
+ data_num = int(data_list[4])
253
+ if data_num in ids:
254
+ return '该序号已存在,请尝试删除原序号【求生更新 删除 腐竹 序号】'
255
+ add_server.update({'id': data_num})
256
+ else:
257
+ return '输入参数错误,请输入【求生更新 添加 腐竹 ip 模式 序号】或【求生更新 添加 腐竹 ip 模式】'
258
+ # 模式,ip
259
+ try:
260
+ host, port = split_maohao(data_list[2])
261
+ add_server.update({'host': host, 'port': port})
262
+ except KeyError:
263
+ return 'ip格式不正确【114.11.4.514:9191】'
264
+ add_server.update({'version': data_list[3]})
265
+ value.append(add_server)
266
+ ALL_HOST[key] = value
267
+ with open('data/L4D2/l4d2.json', 'w', encoding='utf8') as f_new:
268
+ json.dump(ALL_HOST, f_new, ensure_ascii=False, indent=4)
269
+ return f'添加成功,指令为{key}{data_num}'
270
+
271
+ elif data_list[0] == "删除":
272
+ for key, value in ALL_HOST.items():
273
+ if data_list[1] == key:
274
+ try:
275
+ data_num = int(data_list[2])
276
+ except ValueError:
277
+ return '序号应该为大于0的正整数,请输入【求生更新 删除 腐竹 序号】'
278
+ for i, server in enumerate(value):
279
+ if data_num == server['id']:
280
+ value.pop(i)
281
+ if not value:
282
+ ALL_HOST.pop(key)
283
+ with open('data/L4D2/l4d2.json', 'w', encoding='utf8') as f_new:
284
+ json.dump(ALL_HOST, f_new, ensure_ascii=False, indent=4)
285
+ return '删除成功喵'
286
+ return '序号不正确,请输入【求生更新 删除 腐竹 序号】'
287
+ return '腐竹名不存在,请输入【求生更新 删除 腐竹 序号】'
288
+