nonebot-plugin-l4d2-server 0.6.3.post1__tar.gz → 0.6.4.post1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/PKG-INFO +1 -1
  2. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/__init__.py +4 -2
  3. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/group_ip.html +7 -7
  4. nonebot_plugin_l4d2_server-0.6.4.post1/nonebot_plugin_l4d2_server/data/L4D2/image/template/ip.html +55 -0
  5. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_file/__init__.py +2 -0
  6. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/__init__.py +16 -1
  7. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_queries/__init__.py +40 -21
  8. nonebot_plugin_l4d2_server-0.6.4.post1/nonebot_plugin_l4d2_server/l4d2_queries/send_msg.py +130 -0
  9. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/classcal.py +4 -0
  10. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/config.py +1 -0
  11. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/pyproject.toml +1 -1
  12. nonebot_plugin_l4d2_server-0.6.3.post1/nonebot_plugin_l4d2_server/data/L4D2/image/template/ip.html +0 -49
  13. nonebot_plugin_l4d2_server-0.6.3.post1/nonebot_plugin_l4d2_server/l4d2_queries/send_msg.py +0 -128
  14. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/LICENSE +0 -0
  15. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/README.md +0 -0
  16. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/head/head.png +0 -0
  17. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/header/logo.png +0 -0
  18. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/header/player1.jpg +0 -0
  19. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/anne.html +0 -0
  20. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/back.png +0 -0
  21. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/fingerprint.svg +0 -0
  22. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/help.html +0 -0
  23. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/help_dack.html +0 -0
  24. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/l.svg +0 -0
  25. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/m.svg +0 -0
  26. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/vue.css +0 -0
  27. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/L4D2/image/template/w.svg +0 -0
  28. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/data/img/white.png +0 -0
  29. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_anne/__init__.py +0 -0
  30. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_anne/analysis.py +0 -0
  31. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_anne/anne_telecom.py +0 -0
  32. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_anne/server.py +0 -0
  33. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_anne/startand.py +0 -0
  34. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_anne/utils.py +0 -0
  35. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_data/__init__.py +0 -0
  36. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_data/config.py +0 -0
  37. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_data/database.py +0 -0
  38. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_data/players.py +0 -0
  39. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_data/serverip.py +0 -0
  40. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_file/ayromote.py +0 -0
  41. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_file/input_json.py +0 -0
  42. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_file/remote.py +0 -0
  43. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_file/utils.py +0 -0
  44. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/download.py +0 -0
  45. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/htmlimg.py +0 -0
  46. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/images.py +0 -0
  47. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/one.py +0 -0
  48. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/send_image_tool.py +0 -0
  49. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/steam.py +0 -0
  50. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_image/vtfs.py +0 -0
  51. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_push/__init__.py +0 -0
  52. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_queries/himi.py +0 -0
  53. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_queries/local_ip.py +0 -0
  54. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_queries/qqgroup.py +0 -0
  55. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_queries/utils.py +0 -0
  56. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_server/__init__.py +0 -0
  57. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_server/index.py +0 -0
  58. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_server/rcon.py +0 -0
  59. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_server/workshop.py +0 -0
  60. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_update/__init__.py +0 -0
  61. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_update/draw_update_log.py +0 -0
  62. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_update/restart.py +0 -0
  63. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_update/update.py +0 -0
  64. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/command.py +0 -0
  65. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/message.py +0 -0
  66. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/rule.py +0 -0
  67. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/seach.py +0 -0
  68. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/txt_to_img.py +0 -0
  69. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_utils/utils.py +0 -0
  70. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_web/web.py +0 -0
  71. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_web/webUI.py +0 -0
  72. {nonebot_plugin_l4d2_server-0.6.3.post1 → nonebot_plugin_l4d2_server-0.6.4.post1}/nonebot_plugin_l4d2_server/l4d2_web/webUI_s.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-plugin-l4d2-server
3
- Version: 0.6.3.post1
3
+ Version: 0.6.4.post1
4
4
  Summary: L4D2 server related operations plugin for NoneBot2
5
5
  Keywords: steam game l4d2 nonebot2 plugin
6
6
  Home-page: https://github.com/Agnes4m/nonebot_plugin_l4d2_server
@@ -41,7 +41,7 @@ from .l4d2_web import web, webUI # noqa: F401
41
41
 
42
42
  driver = get_driver()
43
43
 
44
- __version__ = "0.6.3"
44
+ __version__ = "0.6.4"
45
45
  __plugin_meta__ = PluginMetadata(
46
46
  name="求生之路小助手",
47
47
  description="可用于管理求生之路查服和本地管理",
@@ -74,7 +74,7 @@ __plugin_meta__ = PluginMetadata(
74
74
  @help_.handle()
75
75
  async def _(matcher: Matcher):
76
76
  msg = """=====求生机器人帮助=====
77
- 1、电信服战绩查询【求生anne[id/steamid/@]】
77
+ 1、电信服战绩查询【求生anne | Ranne[id/steamid/@]】
78
78
  2、电信服绑定【求生绑定[id/steamid]】",
79
79
  3、电信服状态查询【云xx】
80
80
  4、创意工坊下载【创意工坊下载[物品id/链接]】
@@ -87,6 +87,8 @@ async def _(matcher: Matcher):
87
87
 
88
88
  @search_api.got("is_sure", prompt='如果需要上传,请发送 "yes"')
89
89
  async def _(matcher: Matcher, bot: Bot, event: GroupMessageEvent, state: T_State):
90
+ if not l4_config.l4_group_upload:
91
+ return
90
92
  is_sure = str(state["is_sure"])
91
93
  if is_sure == "yes":
92
94
  data_dict: dict = state["maps"][0]
@@ -222,7 +222,7 @@
222
222
  <div class="plugin">
223
223
  <div class="plugin_meta">
224
224
  <div class="plugin_meta_line1">
225
- <div class="plugin_name">{{ plugin.number }}:{{ plugin.name }}</div>
225
+ <div class="plugin_name">{{ plugin.server_id }}:{{ plugin.server_tag }}</div>
226
226
  <div class="plugin_status">
227
227
  <label class="switch">
228
228
  <input class="checkbox" type="checkbox" {% if plugin.enabled %} checked {% endif %} />
@@ -233,18 +233,18 @@
233
233
  </div>
234
234
  </div>
235
235
  <div class="plugin_meta_line2">
236
- <font color="blue">{{ plugin.map_ }}</font><br>
237
- {% for Player in plugin.Players %}
238
- <font color="green">{{ Player }}</font><br>
239
- {% endfor %}
236
+ <font color="blue">服务器在线:{{ plugin.server_number }} / {{ plugin.server_all_number }}</font><br>
237
+ <font color="blue"></font><br>
238
+ <font color="green">服务器玩家{{ plugin.server_people }} / {{ plugin.server_all_people }}</font><br>
239
+ <font color="green"></font><br>
240
240
  </div>
241
- <div class="plugin_meta_line3">
241
+ <!-- <div class="plugin_meta_line3">
242
242
  <svg width="13px" height="13px">
243
243
  <image xlink:href="{{ plugin.system }}" width="13px" height="13px" />
244
244
  </svg>
245
245
  <div class="package_name">&nbsp{{ plugin.max_players }} </div>
246
246
  <div class="package_name">&nbsp{{ plugin.tick }} </div>
247
- </div>
247
+ </div> -->
248
248
  </div>
249
249
  </div>
250
250
  {% endfor %}
@@ -0,0 +1,55 @@
1
+ <!DOCTYPE html>
2
+ <html class="pc">
3
+
4
+ <head>
5
+ <link rel="stylesheet" type="text/css" href="vue.css">
6
+ <title>Server Information</title>
7
+ <style>
8
+ table {
9
+ border-collapse: collapse;
10
+ width: 100%;
11
+ }
12
+
13
+ th,
14
+ td {
15
+ border: 1px solid #ddd;
16
+ padding: 8px;
17
+ text-align: left;
18
+ }
19
+
20
+ th {
21
+ background-color: #f2f2f2;
22
+ }
23
+ </style>
24
+ </head>
25
+
26
+ <body style="background-image: url('back2.jpg'); background-size: 1200px 1800px;">
27
+ <div class="myinfo">
28
+ <table>
29
+ {% for i in range(0, data|length, 3) %}
30
+ <tr>
31
+ {% for j in range(i, i + 3) %}
32
+ {% if j < data|length %} <td>
33
+ <font color="red">{{ data[j].number }}</font><br>
34
+ <font color="yellow">{{ data[j].name }}</font><br>
35
+ <font color="gray">{{ data[j].ip }}</font><br>
36
+ <font color="blue">{{ data[j].map_ }}</font><br>
37
+ {% for Player in data[j].Players %}
38
+ <font color="green">{{ Player }}</font><br>
39
+ {% endfor %}
40
+ <font color="yellow">{{ data[j].max_players }}{{data[j].ping}}</font>
41
+ </td>
42
+ {% endif %}
43
+ {% endfor %}
44
+ </tr>
45
+ {% endfor %}
46
+ </table>
47
+ <h5>
48
+ <center>©爱丽数码</center></br>
49
+ <center>
50
+ github.com/Agnes4m/nonebot_plugin_l4d2_server
51
+ </center>
52
+ </h5>
53
+ </div>
54
+
55
+ </html>
@@ -53,6 +53,8 @@ smx_file = on_command(
53
53
 
54
54
  @up.handle()
55
55
  async def _(matcher: Matcher, event: NoticeEvent):
56
+ if not l4_config.l4_group_upload:
57
+ return
56
58
  args = event.dict()
57
59
  if args["notice_type"] != "offline_file":
58
60
  matcher.set_arg("txt", args) # type: ignore
@@ -4,7 +4,7 @@ import jinja2
4
4
  from nonebot.log import logger
5
5
  from nonebot_plugin_htmlrender import html_to_pic
6
6
 
7
- from ..l4d2_utils.classcal import PlayerInfo, ServerStatus
7
+ from ..l4d2_utils.classcal import PlayerInfo, ServerGroup, ServerStatus
8
8
 
9
9
  # from .htmlimg import dict_to_dict_img
10
10
  # from ..l4d2_anne.anne_telecom import ANNE_API
@@ -107,3 +107,18 @@ async def get_help_img(plugins: List[ServerStatus]) -> Optional[bytes]:
107
107
  except Exception as e:
108
108
  logger.warning(f"Error in get_help_img: {e}")
109
109
  return None
110
+
111
+
112
+ async def server_group_ip_pic(msg_list: List[ServerGroup]):
113
+ """
114
+ 输入一个群组字典列表,输出图片
115
+ msg_dict:folder/name/map_/players/max_players/Players/[Name]
116
+ """
117
+ template = env.get_template("group_ip.html")
118
+ html = await template.render_async(plugins=msg_list)
119
+ return await html_to_pic(
120
+ html=html,
121
+ wait=0,
122
+ viewport={"width": 1100, "height": 800},
123
+ template_path=f"file://{template_path.absolute()}",
124
+ )
@@ -11,6 +11,7 @@ from nonebot.params import ArgPlainText, CommandArg, CommandStart, Keyword, RawC
11
11
  from nonebot_plugin_saa import Image, MessageFactory, Text
12
12
 
13
13
  from ..l4d2_anne.server import updata_anne_server
14
+ from ..l4d2_image import server_group_ip_pic
14
15
  from ..l4d2_queries.qqgroup import add_ip, del_ip, get_number_url, show_ip
15
16
  from ..l4d2_queries.utils import queries_server
16
17
  from ..l4d2_server.rcon import command_server
@@ -20,7 +21,7 @@ from ..l4d2_utils.utils import split_maohao, str_to_picstr
20
21
  from .himi import get_himi_ip
21
22
  from .local_ip import ALL_HOST
22
23
  from .qqgroup import get_tan_jian
23
- from .send_msg import get_ip_to_mes
24
+ from .send_msg import get_group_ip_to_msg, get_ip_to_mes
24
25
  from .utils import server_key
25
26
 
26
27
  tan_jian = on_command("tj", aliases={"探监"}, priority=20, block=True)
@@ -134,32 +135,50 @@ async def get_read_ip(ip_anne_list: List[Tuple[str, str, str]]):
134
135
  command: str = RawCommand(),
135
136
  args: Message = CommandArg(),
136
137
  ):
138
+ """例:
139
+ 指令: /橘5
140
+ start: /(command开头指令)
141
+ command: /橘(响应的全部指令)
142
+ args: 5(响应的指令后的数字)
143
+ """
144
+ print(start, command, args)
137
145
  if start:
138
146
  command = command.replace(start, "")
139
147
  if command == "anne":
140
148
  command = "云"
141
149
  msg: str = args.extract_plain_text()
142
- push_msg = await get_ip_to_mes(msg, command)
143
- if push_msg is None:
144
- return
145
-
146
- if isinstance(push_msg, bytes):
147
- logger.info("直接发送图片")
148
- await MessageFactory([Image(push_msg)]).finish()
149
- return
150
- if msg and type(push_msg) == list:
151
- logger.info("更加构造函数")
152
- await MessageFactory([Image(push_msg[0]), Text(push_msg[-1])]).finish()
153
- return
154
- if msg and isinstance(push_msg, str):
155
- send_msg = push_msg
150
+ if "组" in msg:
151
+ logger.info(f"关键词:{command}")
152
+ # 以群组模式输出
153
+ push_msg = await get_group_ip_to_msg(command)
154
+ if push_msg is None or not push_msg:
155
+ await matcher.finish("当前对象里并没有组")
156
+ return
157
+ print(push_msg)
158
+ msg_img = await server_group_ip_pic(push_msg)
159
+ await MessageFactory([Image(msg_img)]).send()
156
160
  else:
157
- logger.info("出错了")
158
- return
159
- logger.info(type(send_msg))
160
- if not send_msg:
161
- logger.warning("没有")
162
- await matcher.finish(send_msg)
161
+ push_msg = await get_ip_to_mes(msg, command)
162
+ if push_msg is None:
163
+ return
164
+
165
+ if isinstance(push_msg, bytes):
166
+ logger.info("直接发送图片")
167
+ await MessageFactory([Image(push_msg)]).finish()
168
+ return
169
+ if msg and isinstance(push_msg, list):
170
+ logger.info("更加构造函数")
171
+ await MessageFactory([Image(push_msg[0]), Text(push_msg[-1])]).finish()
172
+ return
173
+ if msg and isinstance(push_msg, str):
174
+ send_msg = push_msg
175
+ else:
176
+ logger.info("出错了")
177
+ return
178
+ logger.info(type(send_msg))
179
+ if not send_msg:
180
+ logger.warning("没有")
181
+ await matcher.finish(send_msg)
163
182
 
164
183
 
165
184
  # tests = on_command("测试1")
@@ -0,0 +1,130 @@
1
+ import asyncio
2
+ from typing import Dict, List, Optional, Tuple
3
+
4
+ from nonebot.log import logger
5
+
6
+ from ..l4d2_queries.local_ip import ALL_HOST
7
+ from ..l4d2_queries.qqgroup import qq_ip_queries_pic
8
+ from ..l4d2_queries.utils import get_anne_server_ip, json_server_to_tag_dict
9
+ from ..l4d2_utils.classcal import ServerGroup, ServerStatus
10
+ from ..l4d2_utils.utils import split_maohao
11
+ from .local_ip import Group_All_HOST
12
+ from .qqgroup import qq_ip_querie
13
+
14
+
15
+ async def get_ip_to_mes(msg: str, command: str = ""):
16
+ if not msg:
17
+ # 以图片输出全部当前
18
+ igr = False
19
+ # if command in gamemode_list:
20
+ # this_ips = [
21
+ # d for l in ALL_HOST.values() for d in l if d.get("version") == command
22
+ # ]
23
+ # igr = True
24
+ # else:
25
+ this_ips = ALL_HOST[command]
26
+ ip_list: List[Tuple[str, str, str]] = []
27
+ for one_ip in this_ips:
28
+ host, port = split_maohao(one_ip["ip"])
29
+ msg_tuple = (one_ip["id"], host, port)
30
+ ip_list.append(msg_tuple)
31
+ img = await qq_ip_queries_pic(ip_list, igr)
32
+ return img if img else None
33
+
34
+ if not msg[0].isdigit():
35
+ # if any(mode in msg for mode in gamemode_list):
36
+ # pass
37
+ # else:
38
+ return None
39
+ message = await json_server_to_tag_dict(command, msg)
40
+ if len(message) == 0:
41
+ # 关键词不匹配,忽略
42
+ return None
43
+ ip = str(message["ip"])
44
+ logger.info(ip)
45
+
46
+ try:
47
+ msg_send: Optional[str] = await get_anne_server_ip(ip)
48
+ if msg_send is not None:
49
+ return msg_send
50
+
51
+ except (OSError, asyncio.exceptions.TimeoutError):
52
+ return "服务器无响应"
53
+
54
+
55
+ # async def get_read_group_ip():
56
+ # """输出群组服务器"""
57
+ # get_grou_ip = on_command("anne", aliases=group_key(), priority=80, block=True)
58
+
59
+ # @get_grou_ip.handle()
60
+ # async def _(
61
+ # matcher: Matcher,
62
+ # start: str = CommandStart(),
63
+ # command: str = RawCommand(),
64
+ # args: Message = CommandArg(),
65
+ # ):
66
+ # if start:
67
+ # command = command.replace(start, "")
68
+ # msg: str = args.extract_plain_text()
69
+ # push_msg = await get_group_ip_to_msg(msg, command)
70
+ # msg_img = await server_group_ip_pic(push_msg)
71
+ # if isinstance(push_msg, bytes):
72
+ # await MessageFactory([Image(push_msg)]).finish()
73
+ # elif msg and type(push_msg) == list:
74
+ # await MessageFactory([Image(push_msg[0]), Text(push_msg[-1])]).finish()
75
+ # elif msg and isinstance(push_msg, str):
76
+ # await str_to_picstr(push_msg, matcher)
77
+ # await matcher.finish()
78
+
79
+
80
+ async def get_group_ip_to_msg(command: str):
81
+ """输出群组ip的dict信息"""
82
+ if command in Group_All_HOST:
83
+ group_tag_list: List[str] = Group_All_HOST[command]
84
+ elif command in ALL_HOST:
85
+ group_tag_list = [command]
86
+ else:
87
+ return None
88
+ logger.info(f"组内关键词{group_tag_list}")
89
+ group_ip_dict: Dict[str, List[Dict[str, str]]] = {}
90
+ tag = len(group_tag_list) == 0
91
+ return_list: List[ServerGroup] = []
92
+ id_number = 0
93
+ for tag, one_group in ALL_HOST.items():
94
+ id_number += 1
95
+ if tag in group_tag_list and tag:
96
+ group_ip_dict.update({tag: one_group})
97
+ ip_tuple_list: List[Tuple[str, str, int]] = []
98
+ for one_server in one_group:
99
+ number = one_server["id"]
100
+ host, port = split_maohao(one_server["ip"])
101
+ ip_tuple_list.append((number, host, int(port)))
102
+ msg_group_server = await qq_ip_querie(ip_tuple_list)
103
+ return_list.append(
104
+ await check_group_msg(msg_group_server, id_number, command),
105
+ )
106
+
107
+ return return_list
108
+ # 还没写完
109
+ # host, port = split_maohao(one_ip["ip"])
110
+ # msg_tuple = (one_ip["id"], host, port)
111
+ # ip_list.append(msg_tuple)
112
+ # img = await qq_ip_queries_pic(ip_list, igr)
113
+
114
+
115
+ async def check_group_msg(msg: Dict[str, List[ServerStatus]], number: int, command: str):
116
+ server_info = ServerGroup()
117
+ server_info.server_id = number
118
+
119
+ for server_group in msg["msg_list"]:
120
+ # 服务器,服务器玩家数量
121
+ # 当前/总数
122
+ server_info.server_tag = command
123
+ if server_group.name == "null":
124
+ server_info.server_all_number += 1
125
+ continue
126
+ server_info.server_all_number += 1
127
+ server_info.server_number += 1
128
+ server_info.server_people += server_group.players
129
+ server_info.server_all_people += server_group.max_players
130
+ return server_info
@@ -39,6 +39,10 @@ class ServerStatus(BaseModel):
39
39
  class ServerGroup(BaseModel):
40
40
  """组服务器信息"""
41
41
 
42
+ server_id: int = 0
43
+ """服务器序号"""
44
+ server_tag: str = "服务器"
45
+ """服务器组名字"""
42
46
  server_number: int = 0
43
47
  """群组当期启动服务器数量"""
44
48
  server_all_number: int = 0
@@ -93,6 +93,7 @@ class L4d2Config(BaseModel):
93
93
  l4_push_interval: int = Field(3, alias="定时任务间隔")
94
94
  l4_push_times: int = Field(10, alias="定时任务次数")
95
95
  l4_connect: bool = Field(True, alias="是否在查服命令后加入connect ip")
96
+ l4_group_upload: bool = Field(False, alias="是否在群里传地图的时候,提示上传服务器")
96
97
  group_config: Dict[int, L4d2GroupConfig] = Field({}, alias="分群配置")
97
98
 
98
99
  def update(self, **kwargs):
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nonebot-plugin-l4d2-server"
3
- version = "0.6.3-post1"
3
+ version = "0.6.4-post1"
4
4
  description = "L4D2 server related operations plugin for NoneBot2"
5
5
  authors = [
6
6
  { name = "Agnes_Digital", email = "Z735803792@163.com" },
@@ -1,49 +0,0 @@
1
- <!DOCTYPE html>
2
- <html class="pc">
3
- <head>
4
- <link rel="stylesheet" type="text/css" href="vue.css">
5
- <title>Server Information</title>
6
- <style>
7
- table {
8
- border-collapse: collapse;
9
- width: 100%;
10
- }
11
- th, td {
12
- border: 1px solid #ddd;
13
- padding: 8px;
14
- text-align: left;
15
- }
16
- th {
17
- background-color: #f2f2f2;
18
- }
19
- </style>
20
- </head>
21
- <body style="background-image: url('back2.jpg'); background-size: 1200px 1800px;">
22
- <div class="myinfo">
23
- <table>
24
- {% for i in range(0, data|length, 3) %}
25
- <tr>
26
- {% for j in range(i, i + 3) %}
27
- {% if j < data|length %}
28
- <td>
29
- <font color="red">{{ data[j].number }}</font><br>
30
- <font color="yellow">{{ data[j].name }}</font><br>
31
- <font color="gray">{{ data[j].ip }}</font><br>
32
- <font color="blue">{{ data[j].map_ }}</font><br>
33
- {% for Player in data[j].Players %}
34
- <font color="green">{{ Player }}</font><br>
35
- {% endfor %}
36
- <font color="yellow">{{ data[j].max_players }}{{data[j].ping}}</font>
37
- </td>
38
- {% endif %}
39
- {% endfor %}
40
- </tr>
41
- {% endfor %}
42
- </table>
43
- <h5><center>©爱丽数码</center></br>
44
- <center>
45
- github.com/Agnes4m/nonebot_plugin_l4d2_server
46
- </center>
47
- </h5>
48
- </div>
49
- </html>
@@ -1,128 +0,0 @@
1
- import asyncio
2
- from typing import Dict, List, Tuple
3
-
4
- from nonebot import on_command
5
- from nonebot.adapters import Message
6
- from nonebot.log import logger
7
- from nonebot.matcher import Matcher
8
- from nonebot.params import CommandArg, CommandStart, RawCommand
9
- from nonebot_plugin_saa import Image, MessageFactory, Text
10
-
11
- from ..l4d2_queries.local_ip import ALL_HOST
12
- from ..l4d2_queries.qqgroup import qq_ip_queries_pic
13
- from ..l4d2_queries.utils import get_anne_server_ip, json_server_to_tag_dict
14
- from ..l4d2_utils.classcal import ServerGroup, ServerStatus
15
- from ..l4d2_utils.utils import split_maohao, str_to_picstr
16
- from .local_ip import Group_All_HOST
17
- from .qqgroup import qq_ip_querie
18
- from .utils import group_key
19
-
20
-
21
- async def get_ip_to_mes(msg: str, command: str = ""):
22
- if not msg:
23
- # 以图片输出全部当前
24
- igr = False
25
- # if command in gamemode_list:
26
- # this_ips = [
27
- # d for l in ALL_HOST.values() for d in l if d.get("version") == command
28
- # ]
29
- # igr = True
30
- # else:
31
- this_ips = ALL_HOST[command]
32
- ip_list: List[Tuple[str, str, str]] = []
33
- for one_ip in this_ips:
34
- host, port = split_maohao(one_ip["ip"])
35
- msg_tuple = (one_ip["id"], host, port)
36
- ip_list.append(msg_tuple)
37
- img = await qq_ip_queries_pic(ip_list, igr)
38
- return img if img else None
39
-
40
- if not msg[0].isdigit():
41
- # if any(mode in msg for mode in gamemode_list):
42
- # pass
43
- # else:
44
- return None
45
- message = await json_server_to_tag_dict(command, msg)
46
- if len(message) == 0:
47
- # 关键词不匹配,忽略
48
- return None
49
- ip = str(message["ip"])
50
- logger.info(ip)
51
-
52
- try:
53
- msg_send = await get_anne_server_ip(ip)
54
- if msg_send:
55
- return msg_send
56
-
57
- except (OSError, asyncio.exceptions.TimeoutError):
58
- return "服务器无响应"
59
-
60
-
61
- async def get_read_group_ip():
62
- """输出群组服务器"""
63
- get_grou_ip = on_command("anne", aliases=group_key(), priority=80, block=True)
64
-
65
- @get_grou_ip.handle()
66
- async def _(
67
- matcher: Matcher,
68
- start: str = CommandStart(),
69
- command: str = RawCommand(),
70
- args: Message = CommandArg(),
71
- ):
72
- if start:
73
- command = command.replace(start, "")
74
- msg: str = args.extract_plain_text()
75
- push_msg = await get_group_ip_to_msg(msg, command)
76
- if isinstance(push_msg, bytes):
77
- await MessageFactory([Image(push_msg)]).finish()
78
- elif msg and type(push_msg) == list:
79
- await MessageFactory([Image(push_msg[0]), Text(push_msg[-1])]).finish()
80
- elif msg and isinstance(push_msg, str):
81
- await str_to_picstr(push_msg, matcher)
82
- await matcher.finish()
83
-
84
-
85
- async def get_group_ip_to_msg(command: str, text: str = ""):
86
- """输出群组ip的dict信息"""
87
- if not text:
88
- group_tag_list: List[str] = Group_All_HOST[command]
89
- group_ip_dict: Dict[str, List[Dict[str, str]]] = {}
90
- tag = len(group_tag_list) == 0
91
- for tag, one_group in ALL_HOST.items():
92
- if tag in group_tag_list or tag:
93
- group_ip_dict.update({tag: one_group})
94
- ip_tuple_list: List[Tuple[str, str, int]] = []
95
- for one_server in one_group:
96
- number = one_server["id"]
97
- host, port = split_maohao(one_server["ip"])
98
- ip_tuple_list.append((number, host, int(port)))
99
- msg_group_server = await qq_ip_querie(ip_tuple_list)
100
- return await check_group_msg(msg_group_server)
101
- return None
102
- # 还没写完
103
- # host, port = split_maohao(one_ip["ip"])
104
- # msg_tuple = (one_ip["id"], host, port)
105
- # ip_list.append(msg_tuple)
106
- # img = await qq_ip_queries_pic(ip_list, igr)
107
-
108
-
109
- async def check_group_msg(
110
- msg: Dict[str, List[ServerStatus]],
111
- ):
112
- send_msg: Dict[str, ServerGroup] = {}
113
- if msg:
114
- for tag, server_group in msg.items():
115
- # 服务器,服务器玩家数量
116
- # 当前/总数
117
- server_info = ServerGroup()
118
- for one_server in server_group:
119
- if one_server.name == "null":
120
- server_info.server_all_number += 1
121
- continue
122
- server_info.server_all_number += 1
123
- server_info.server_number += 1
124
- server_info.server_people += one_server.players
125
- server_info.server_all_people += one_server.max_players
126
- send_msg[tag] = server_info
127
- return send_msg
128
- return None