mirror of
https://github.com/Dinnerbone/mcstatus.git
synced 2026-04-06 03:51:23 +08:00
Merge pull request #43 from adilosa/master
Implement CLI using Click (fixes #36) Made cli install with pip install
This commit is contained in:
committed by
Nathan Adams
parent
6ac2ead3cd
commit
88961d3b46
38
README.md
38
README.md
@@ -28,6 +28,44 @@ query = server.query()
|
|||||||
print("The server has the following players online: {0}".format(", ".join(query.players.names)))
|
print("The server has the following players online: {0}".format(", ".join(query.players.names)))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Command Line Interface
|
||||||
|
```
|
||||||
|
$ mcstatus
|
||||||
|
Usage: mcstatus [OPTIONS] ADDRESS COMMAND [ARGS]...
|
||||||
|
|
||||||
|
mcstatus provides an easy way to query Minecraft servers for any
|
||||||
|
information they can expose. It provides three modes of access: query,
|
||||||
|
status, and ping.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
$ mcstatus example.org ping
|
||||||
|
21.120ms
|
||||||
|
|
||||||
|
$ mcstatus example.org:1234 ping
|
||||||
|
159.903ms
|
||||||
|
|
||||||
|
$ mcstatus example.org status
|
||||||
|
version: v1.8.8 (protocol 47)
|
||||||
|
description: "A Minecraft Server"
|
||||||
|
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
|
||||||
|
|
||||||
|
$ mcstatus example.org query
|
||||||
|
host: 93.148.216.34:25565
|
||||||
|
software: v1.8.8 vanilla
|
||||||
|
plugins: []
|
||||||
|
motd: "A Minecraft Server"
|
||||||
|
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help Show this message and exit.
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
ping prints server latency
|
||||||
|
query detailed server information
|
||||||
|
status basic server information
|
||||||
|
```
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|||||||
0
mcstatus/scripts/__init__.py
Normal file
0
mcstatus/scripts/__init__.py
Normal file
94
mcstatus/scripts/mcstatus.py
Normal file
94
mcstatus/scripts/mcstatus.py
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import click
|
||||||
|
|
||||||
|
from .. import MinecraftServer
|
||||||
|
|
||||||
|
server = None
|
||||||
|
|
||||||
|
|
||||||
|
@click.group(context_settings=dict(help_option_names=['-h', '--help']))
|
||||||
|
@click.argument("address")
|
||||||
|
def cli(address):
|
||||||
|
"""
|
||||||
|
mcstatus provides an easy way to query Minecraft servers for
|
||||||
|
any information they can expose. It provides three modes of
|
||||||
|
access: query, status, and ping.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
\b
|
||||||
|
$ mcstatus example.org ping
|
||||||
|
21.120ms
|
||||||
|
|
||||||
|
\b
|
||||||
|
$ mcstatus example.org:1234 ping
|
||||||
|
159.903ms
|
||||||
|
|
||||||
|
\b
|
||||||
|
$ mcstatus example.org status
|
||||||
|
version: v1.8.8 (protocol 47)
|
||||||
|
description: "A Minecraft Server"
|
||||||
|
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
|
||||||
|
|
||||||
|
\b
|
||||||
|
$ mcstatus example.org query
|
||||||
|
host: 93.148.216.34:25565
|
||||||
|
software: v1.8.8 vanilla
|
||||||
|
plugins: []
|
||||||
|
motd: "A Minecraft Server"
|
||||||
|
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
|
||||||
|
"""
|
||||||
|
global server
|
||||||
|
server = MinecraftServer.lookup(address)
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command(short_help="prints server latency")
|
||||||
|
def ping():
|
||||||
|
"""
|
||||||
|
Ping server for latency.
|
||||||
|
"""
|
||||||
|
click.echo("{}ms".format(server.ping()))
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command(short_help="basic server information")
|
||||||
|
def status():
|
||||||
|
"""
|
||||||
|
Prints server status. Supported by all Minecraft
|
||||||
|
servers that are version 1.7 or higher.
|
||||||
|
"""
|
||||||
|
response = server.status()
|
||||||
|
click.echo("version: v{} (protocol {})".format(response.version.name, response.version.protocol))
|
||||||
|
click.echo("description: \"{}\"".format(response.description))
|
||||||
|
click.echo(
|
||||||
|
"players: {}/{} {}".format(
|
||||||
|
response.players.online,
|
||||||
|
response.players.max,
|
||||||
|
[
|
||||||
|
"{} ({})".format(player.name, player.id)
|
||||||
|
for player in response.players.sample
|
||||||
|
] if response.players.sample is not None else "No players online"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command(short_help="detailed server information")
|
||||||
|
def query():
|
||||||
|
"""
|
||||||
|
Prints detailed server information. Must be enabled in
|
||||||
|
servers' server.properties file.
|
||||||
|
"""
|
||||||
|
response = server.query()
|
||||||
|
click.echo("host: {}:{}".format(response.raw['hostip'], response.raw['hostport']))
|
||||||
|
click.echo("software: v{} {}".format(response.software.version, response.software.brand))
|
||||||
|
click.echo("plugins: {}".format(response.software.plugins))
|
||||||
|
click.echo("motd: \"{}\"".format(response.motd))
|
||||||
|
click.echo(
|
||||||
|
"players: {}/{} {}".format(
|
||||||
|
response.players.online,
|
||||||
|
response.players.max,
|
||||||
|
response.players.names,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
cli()
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
six==1.7.3
|
six==1.7.3
|
||||||
mock==1.0.1
|
mock==1.0.1
|
||||||
|
click==6.2
|
||||||
|
|||||||
8
setup.py
8
setup.py
@@ -3,7 +3,7 @@ import sys
|
|||||||
PY2 = sys.version_info[0] == 2
|
PY2 = sys.version_info[0] == 2
|
||||||
|
|
||||||
install_requires = [
|
install_requires = [
|
||||||
'six'
|
'six', 'Click'
|
||||||
]
|
]
|
||||||
|
|
||||||
if PY2:
|
if PY2:
|
||||||
@@ -21,7 +21,7 @@ setup(
|
|||||||
author='Nathan Adams',
|
author='Nathan Adams',
|
||||||
author_email='dinnerbone@dinnerbone.com',
|
author_email='dinnerbone@dinnerbone.com',
|
||||||
url='https://pypi.python.org/pypi/mcstatus',
|
url='https://pypi.python.org/pypi/mcstatus',
|
||||||
packages=['mcstatus', 'mcstatus.protocol'],
|
packages=['mcstatus', 'mcstatus.protocol', 'mcstatus.scripts'],
|
||||||
description='A library to query Minecraft Servers for their status and capabilities.',
|
description='A library to query Minecraft Servers for their status and capabilities.',
|
||||||
install_requires=install_requires,
|
install_requires=install_requires,
|
||||||
tests_require=tests_require,
|
tests_require=tests_require,
|
||||||
@@ -35,4 +35,8 @@ setup(
|
|||||||
'Operating System :: OS Independent',
|
'Operating System :: OS Independent',
|
||||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||||
],
|
],
|
||||||
|
entry_points='''
|
||||||
|
[console_scripts]
|
||||||
|
mcstatus=mcstatus.scripts.mcstatus:cli
|
||||||
|
''',
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user