12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/usr/bin/env python3
- # WARNING: Only on GNU/Linux you see the colors of this script,
- # because it is using the standard bash shell color formatting
- # import modules
- from mcipc.query import Client
- from os import name as os_name, system
- from time import sleep
- from sys import argv
- # define "replace_all" function
- def replace_all(text, dic):
- for i, j in dic.items():
- text=text.replace(i, j)
- return text
- # setting default values
- ip='127.0.0.1'
- port=25565
- seconds=1
- stop_cmd=False
- # get values from argv
- if len(argv)>1:
- if "-ip" in argv:
- ip=argv[argv.index("-ip")+1]
- if ":" in ip:
- initial_ip = ip
- ip=ip[:ip.find(":")]
- port=int(initial_ip[initial_ip.find(":")+1:])
- if "-p" in argv:
- port=int(argv[argv.index("-p")+1])
- if "-port" in argv:
- port=int(argv[argv.index("-port")+1])
- if "-stop" in argv:
- stop_cmd=True
- if "-sec" in argv:
- seconds=int(argv[argv.index("-sec")+1])
- if ("-help" in argv) or ( "--help" in argv):
- print("Here comes the help (soon).")
- exit()
- # define colors for bash shell, WARNING: "§r" gets removed and font styles are not integrated
- minecraft_to_terminal_colors={ "§0": "\\e[30m", "§1": "\\e[34m", "§2":"\\e[32m", "§2":"\\e[36m", "§4":"\\e[31m",
- "§5":"\\e[35m", "§6":"\\e[33m", "§7":"\\e[37m", "§8":"\\e[90m","§9":"\\e[94m", "§a":"\\e[92m", "§b":"\\e[96m",
- "§c":"\\e[91m", "§d":"\\e[95m", "§e":"\\e[93m", "§f":"\\e[97m", "§r":""}
- while True:
- # clear everything
- # system("clear")
- # try to get query
- try:
- with Client(ip,port) as client:
- stats=client.full_stats
- # catch Connection Error and reloop after sleep timer
- except ConnectionRefusedError:
- system("echo -e \"\\e[31mWarning: \\e[97m'ConnectionRefusedError' [Errno 111] detected\\e[39m\"")
- sleep(seconds)
- if stop_cmd:
- break
- else:
- continue
- # print motd
- motd="echo -e \""+replace_all(stats[2], minecraft_to_terminal_colors)+"\\e[39m\""
- system(motd)
- # print server type
- cache_text=str(stats[6])[str(stats[6]).find('\'')+1:]
- system("echo -e \"\n\\e[97mServer: \\e[92m"+stats[4]+" "+cache_text[:cache_text.find('\'')]+"\\e[39m\"")
- # list all players
- player_list=""
- for i in stats[12]:
- player_list+=i+", "
- player_list=player_list[:-2]
- system("echo -e \"\\e[97mPlayers ["+str(stats[8])+"/"+str(stats[9])+"]: \\e[92m"+player_list+"\\e[39m\"")
- # reload after timer or stop completely
- if stop_cmd:
- break
- else:
- sleep(seconds)
|