query.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import socket
  2. from flask import Flask, jsonify
  3. app = Flask(__name__)
  4. MC_HOST = "hiram.services"
  5. MC_PORTS = (25565, 25566,)
  6. HANDSHAKE = bytearray([0xFE, 0x01])
  7. @app.route("/")
  8. def status():
  9. for port in MC_PORTS:
  10. try:
  11. with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
  12. sock.settimeout(5)
  13. sock.connect((MC_HOST, port))
  14. sock.settimeout(None)
  15. sock.send(HANDSHAKE)
  16. raw_data = sock.recv(512)
  17. if raw_data is not None and raw_data != "":
  18. version, motd, current_players, max_players = [d.replace("\x00", "") for d in raw_data.decode("cp437").split("\x00\x00\x00")[2:]]
  19. return jsonify({
  20. "online": True,
  21. "data": {
  22. "version": version,
  23. "motd": motd,
  24. "currentPlayers": current_players,
  25. "maxPlayers": max_players,
  26. },
  27. })
  28. except:
  29. continue
  30. return jsonify({
  31. "online": False,
  32. "data": None,
  33. })
  34. if __name__ == "__main__":
  35. app.run("0.0.0.0", 5000, debug=True)