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)))
|
||||
```
|
||||
|
||||
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
|
||||
------------
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
install_requires = [
|
||||
'six'
|
||||
'six', 'Click'
|
||||
]
|
||||
|
||||
if PY2:
|
||||
@@ -21,7 +21,7 @@ setup(
|
||||
author='Nathan Adams',
|
||||
author_email='dinnerbone@dinnerbone.com',
|
||||
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.',
|
||||
install_requires=install_requires,
|
||||
tests_require=tests_require,
|
||||
@@ -35,4 +35,8 @@ setup(
|
||||
'Operating System :: OS Independent',
|
||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||
],
|
||||
entry_points='''
|
||||
[console_scripts]
|
||||
mcstatus=mcstatus.scripts.mcstatus:cli
|
||||
''',
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user