Skip to content

Commit 12417ed

Browse files
release/1.6.1 (#59)
- 新增微信服务器测试模式,`weauth -wtest` - 新增游戏服务器测试模式 `weauth -gtest` - 更改测试rcon连接使用的指令 Closes #54
1 parent 092a66c commit 12417ed

9 files changed

Lines changed: 189 additions & 7 deletions

File tree

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ WeAuth架起一座连接微信公众号(QQ机器人)与Minecraft服务器的
1919

2020
你可以直接在微信公众号(或者QQ机器人)对Minecraft服务器进行指令操作。
2121

22-
此外,WeAuth可以单独作为微信公众号验证开发者服务器url地址使用。
22+
此外,**WeAuth可以单独作为微信公众号验证开发者服务器url地址使用。**
2323

2424
## WeAuth目前的开发路线图
2525

@@ -57,9 +57,10 @@ pip3 install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple weauth #
5757

5858
## 浏览WeAuth[使用手册](https://weauth.readthedocs.io/)
5959

60-
**WeAuth的使用手册现已迁移至[Read the Docs](https://weauth.readthedocs.io/)**
61-
**使用手册将详细介绍如何下载安装WeAuth,如何配置微信公众号后台,如何配置连接Minecraft Server,以及如何使用WeAuth来管理Minecraft服务器。
62-
**
60+
**WeAuth的使用手册现已迁移至[Read the Docs](https://weauth.readthedocs.io/)**
61+
**使用手册将详细介绍如何下载安装WeAuth,如何配置微信公众号后台,
62+
如何配置连接Minecraft Server,以及如何使用WeAuth来管理Minecraft服务器。**
63+
6364
## [版本更新日志](docs/UPDATE.md)
6465
## 贡献
6566

docs/UPDATE.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# 更新日志
22

3+
### 2025-01-20 v1.6.1
4+
5+
- 新增微信服务器测试模式,`weauth -wtest`
6+
- 新增游戏服务器测试模式 `weauth -gtest`
7+
- 更改测试rcon连接使用的指令
38
### 2025-01-19 v1.6.0
49

510
- WeAuth现已支持https

weauth/constants/core_constant.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
CLI_COMMAND = PACKAGE_NAME
1919

2020
# WeAuth Version Storage
21-
VERSION_PYPI: str = '1.6.0'
22-
VERSION: str = '1.6.0'
21+
VERSION_PYPI: str = '1.6.1'
22+
VERSION: str = '1.6.1'
2323

2424

2525
# URLs

weauth/listener/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
# file: __init__.py
88
from .listener import Listener
99
from .wechat_confirm_listener import WeChatConfirmListener
10+
from .wtest_listener import WechatTestListener

weauth/listener/wtest_listener.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env python3.10
2+
# -*- coding: utf-8 -*-
3+
# author: NearlyHeadlessJack
4+
# email: wang@rjack.cn
5+
# datetime: 2025/1/19 21:57
6+
# ide: PyCharm
7+
# file: wtest_listener.py
8+
from flask import Flask, request
9+
from xml.dom.minidom import parseString
10+
from weauth.tencent_server.wx_server import WxConnection
11+
12+
13+
class WechatTestListener:
14+
def __init__(self, wx_user_name: str, url: str):
15+
self.wx_service = Flask(__name__)
16+
self.url = url
17+
self.wx_user_name = wx_user_name
18+
self._register_routes()
19+
20+
def _register_routes(self):
21+
@self.wx_service.route(self.url, methods=['POST'])
22+
def wx():
23+
data = request.data
24+
print('-接收到来自微信消息')
25+
print(data)
26+
xml_data = parseString(data).documentElement
27+
raw_message = xml_data.getElementsByTagName("Content")[0].childNodes[0].data
28+
open_id = xml_data.getElementsByTagName("FromUserName")[0].childNodes[0].data
29+
print(f'-信息:\n{raw_message}')
30+
print(f'-发送者OpenID: {open_id}')
31+
32+
return WxConnection.message_encode(openid=open_id, weid=self.wx_user_name, message='服务器连接正常!')

weauth/mc_server/rcon_connect/rcon.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def test_connection(host_add:str, port:int, passwd:str) -> (int,str):
3434
return -200, None
3535
try:
3636
with Client(host_add, port, passwd=passwd) as client:
37-
response = client.run('tell', '@a', 'arguments')
37+
response = client.run('list')
3838
return 200,None
3939
except socket.gaierror:
4040
print('-rcon地址无法解析')

weauth/utils/gtest.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env python3.10
2+
# -*- coding: utf-8 -*-
3+
# author: NearlyHeadlessJack
4+
# email: wang@rjack.cn
5+
# datetime: 2025/1/19 21:36
6+
# ide: PyCharm
7+
# file: gtest.py
8+
import sys
9+
from weauth.mc_server import MCServerConnection
10+
11+
import yaml
12+
13+
14+
def gtest() -> None:
15+
print('-正在测试游戏服务器连接')
16+
try:
17+
with open('config.yaml', 'r', encoding='utf-8') as f:
18+
result = yaml.load(f.read(), Loader=yaml.FullLoader)
19+
print('-已读取配置文件')
20+
except FileNotFoundError:
21+
print('-未找到配置文件config.yaml!')
22+
sys.exit(0)
23+
24+
config = result
25+
26+
return_code = -200
27+
message = '-1'
28+
29+
if config['server_connect'] == 0:
30+
server_type = 'MCSM'
31+
game_server = MCServerConnection(config['mcsm_adr'],
32+
config['mcsm_api'],
33+
config['uuid'],
34+
config['remote-uuid'], server_type=server_type)
35+
return_code, message = game_server.test_connection()
36+
print('-正在连接到MCSManager......')
37+
elif config['server_connect'] == 1:
38+
server_type = 'RCON'
39+
game_server = MCServerConnection(config['rcon_host_add'],
40+
config['rcon_port'],
41+
config['rcon_password'],
42+
server_type=server_type)
43+
return_code, message = game_server.test_connection()
44+
print('-正在通过Rcon连接到Minecraft Server......')
45+
46+
if return_code == 200:
47+
print('-成功连接到游戏服务器!')
48+
sys.exit(0)
49+
else:
50+
print(f'-连接游戏服务器失败,请重新检查\n-返回码 {return_code} \n-返回信息 {message}')
51+
sys.exit(0)
52+
53+
54+
if __name__ == '__main__':
55+
gtest()

weauth/utils/wtest.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/usr/bin/env python3.10
2+
# -*- coding: utf-8 -*-
3+
# author: NearlyHeadlessJack
4+
# email: wang@rjack.cn
5+
# datetime: 2025/1/19 21:48
6+
# ide: PyCharm
7+
# file: wtest.py
8+
import yaml
9+
import sys
10+
from weauth.tencent_server.wx_server import WxConnection
11+
from weauth.listener import WechatTestListener as Listener
12+
from gevent import pywsgi
13+
from gevent import ssl
14+
15+
16+
def wtest() -> None:
17+
print('-正在测试微信服务器连接')
18+
try:
19+
with open('config.yaml', 'r', encoding='utf-8') as f:
20+
result = yaml.load(f.read(), Loader=yaml.FullLoader)
21+
print('-已读取配置文件')
22+
except FileNotFoundError:
23+
print('-未找到配置文件config.yaml!')
24+
sys.exit(0)
25+
26+
config = result
27+
url = config['url']
28+
# 测试微信服务器连接
29+
print('-正在检验AppID与AppSecret是否正确')
30+
if test_wechat_server(app_id=config['appID'], app_secret=config['AppSecret']) == -1:
31+
sys.exit(0)
32+
33+
print("-正在启动监听......\n")
34+
listener = Listener(wx_user_name=config['WxUserName'], url=config['url'])
35+
36+
if config['ssl'] == 1:
37+
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
38+
try:
39+
ssl_context.load_cert_chain(certfile=config['ssl_cer'], keyfile=config['ssl_key'])
40+
except FileNotFoundError:
41+
print('-未找到ssl证书文件!')
42+
sys.exit(0)
43+
server = pywsgi.WSGIServer(('0.0.0.0', 443), listener.wx_service,
44+
ssl_context=ssl_context)
45+
print(f"-开始在 https://0.0.0.0{url} 进行监听")
46+
print('-您可以向公众号发送消息进行测试')
47+
server.serve_forever()
48+
else:
49+
# 核心监听程序运行
50+
server = pywsgi.WSGIServer(('0.0.0.0', 80), listener.wx_service)
51+
print(f"-开始在 http://0.0.0.0{url} 进行监听")
52+
print('-您可以向公众号发送消息进行测试')
53+
server.serve_forever()
54+
55+
56+
def test_wechat_server(app_id, app_secret):
57+
code1, code2 = WxConnection.get_access_token(app_id, app_secret)
58+
if code1 == -2:
59+
print("-连接微信服务器网络错误,无法连接!")
60+
# sys.exit(2)
61+
return -1
62+
elif code1 == -1:
63+
print("-连接微信服务器时请求错误,错误码: " + str(code2))
64+
# sys.exit(3)
65+
return -1
66+
67+
elif code1 == 0:
68+
print("-检验通过")
69+
return code2
70+
71+
72+
if __name__ == '__main__':
73+
wtest()

weauth/weauth_entrypoint.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from weauth.cdkey import CDKey
1515
from weauth.command_line import AdminCLI
1616
from weauth.database import DB
17+
from weauth.utils.gtest import gtest
18+
from weauth.utils.wtest import wtest
1719

1820
__all__ = ['entrypoint']
1921

@@ -46,6 +48,10 @@ def entrypoint():
4648
action='store_true',default=False)
4749
parser.add_argument('-test', '--test_mode', help='Running in test_mode',
4850
action='store_true',default=False)
51+
parser.add_argument('-gtest', '--gtest', help='游戏服务器测试模式',
52+
action='store_true', default=False)
53+
parser.add_argument('-wtest', '--wtest', help='微信服务器测试模式',
54+
action='store_true', default=False)
4955
parser.add_argument('-w', '--wechat_confirm', help='微信验证开发者服务器相应程序',
5056
action='store_true',default=False)
5157
parser.add_argument('-t','--token',help='验证用token',default='-1',type=str)
@@ -71,6 +77,15 @@ def entrypoint():
7177

7278
args = parser.parse_args()
7379

80+
if args.gtest:
81+
gtest()
82+
sys.exit(0)
83+
84+
if args.wtest:
85+
wtest()
86+
sys.exit(0)
87+
88+
7489
if args.delete:
7590
AdminCLI.remove_by_player_id()
7691
sys.exit(0)

0 commit comments

Comments
 (0)