def __init__(self, host, port=DEFAULT_PORT): self.rlock = RLock() self.server = mcstatus.MinecraftServer(host, port or DEFAULT_PORT) self.complete_cond = Condition(self.rlock) self.pending = False self.result = None self.waiting = []
def __init__(self, game): super().__init__(game) try: server = mcstatus.MinecraftServer(self.address[0], port=self.address[1]) minecraft_info = server.status() except ConnectionError: return self.info.online = True self.info.server_name = minecraft_info.description["text"] self.info.game_name = f"Minecraft {minecraft_info.version.name}" self.info.player_count = minecraft_info.players.online self.info.max_player_count = minecraft_info.players.max self.info.minecraft = { "mods": minecraft_info.raw["modinfo"]["modList"] }
async def mci(self, ctx, ip: str = None): s = m.MinecraftServer(ip) ping = s.ping() status = s.status() pcount = status.players.online maxpcount = status.players.max ver = status.version.name motd = status.description['text'] embed = discord.Embed(title=f'{motd}', color=discord.Color(0x00ffff), timestamp=datetime.datetime.now()) embed.add_field(name=f"Info for {ip}: ", value=f"Version: {ver}") embed.add_field(name=f"This server is currently online.", value=f"{pcount} of {maxpcount} players are ingame.", inline=False) embed.set_footer(text=f"{ping}ms") await ctx.channel.send(embed=embed)
def container_status(self, container): """Returns status information about the container.""" full_stats = container.stats(stream=False) status = container.status if status != "running": return ("success", {"status": status}) external_port = container.attrs["NetworkSettings"]["Ports"][ "25565/tcp"][0]["HostPort"] minecraft_status = mcstatus.MinecraftServer( "localhost", int(external_port)).status() return ("success", { "status": status, "players": { "online": minecraft_status.players.online, "max": minecraft_status.players.max }, "version": minecraft_status.version.name, "description": minecraft_status.description, "ram_usage": full_stats["memory_stats"]["usage"], })
def __init__(self, host: str, port: int = 25565) -> None: self.server = mcstatus.MinecraftServer(host, port) self.up: bool = False self.ping: int = 0 self.online_players: List[str] = [] self.max_players: int = 0
def mc_info(address, port): """ Mc Info uses mcstatus to ping a Minecraft Server and query Information about it without having to use an Middleman API, increasing performance and allowing for a bit more customization. The Implementation should work with a Port 25565, but I have only tested it with my own servers Port. Custom Ports Work. """ last_online = None if port is None: print("No Port specified using standard 25565") server = mcstatus.MinecraftServer.lookup(address) else: server = mcstatus.MinecraftServer(address, int(port)) try: # usually you would use server.Status here, but for some reason it stopped working :D # If the recipent Server is sleeping, the ping will Fail! Some Servers do have a feature # to wake up when pinged info = int(server.ping()) status = True try: # See server.query file for info on what information query gives query = server.query() ip = None plugins = "" players_names = query.players.names # ex ['user1','user2','user2'] players_online = query.players.online players_max = query.players.max last_online = None try: software = query.software.brand # ex. Vanilla version = query.software.version # ex. 1.14 plugins_versions = query.software.plugins # ex. Veinminer 2.5 for i in plugins_versions: plug = i.split(" ") plugins = plug[0] + ", " + plugins plugins = plugins[:-2] description = query.motd maps = query.map latency = str(info) latency = latency.rstrip('0') # latency = info latency = re.sub("\.", "", latency) except Exception: software = None version = None description = None latency = None maps = None plugins = None ip = None address = None players_max = None last_online = None logger.info('Could not set variables after Query', exc_info=True) except Exception: players_online = query.players.online players_names = None logger.info('Server Ping works, but Query Failed', exc_info=True) except Exception: # to make sure nothing is called that hasn't been set before status = False players_online = None players_names = None software = None version = None ip = None plugins = None description = None latency = None maps = None address = None players_max = None last_online = ["", "", "", ""] logger.info('Server Down, Status Ping Failed', exc_info=True) # Logging threw an error here, so I gotta check it up again. #logger.info(status, ip, players_online, players_names, software, version, description, last_online, latency, maps, address, players_max) return (status, ip, players_online, players_names, software, version, description, last_online, latency, maps, address, players_max, plugins)
def __init__(self, host_address): self.host_address = host_address self.server = mcstatus.MinecraftServer(host_address)
from discord.ext import commands import mcstatus import asyncio from .config import config def getPrefix(bot, message): prefixes = [config.prefix + ' ', config.prefix] prefixes += [i.capitalize() for i in prefixes] return prefixes + \ commands.when_mentioned(bot, message) bot = commands.Bot(command_prefix=getPrefix) server = mcstatus.MinecraftServer(config.ip, config.port) _logger = logging.getLogger(__name__) async def update_status(online: bool, players: int, max_players: int): if online: await bot.change_presence( activity=discord.Activity(name="{} / {}".format( players, max_players), type=discord.ActivityType.watching), status=discord.Status.online if players < max_players else discord.Status.idle) else: await bot.change_presence(status=discord.Status.dnd)
usable = 0 total = 0 discarded = 0 f = open("MCservers.json") servers = json.loads(f.read()) f.close() j = open("servers.json") open_servers = json.loads(j.read()) j.close() total = len(servers) for server in servers: mcserver = mcstatus.MinecraftServer(server["ip"], int(server["ports"][0]["port"])) try: status = mcserver.status() print(server["ip"]) open_servers.append(server["ip"]) usable += 1 print("The server has {0} players, version: {1}".format( status.players.online, status.version.name, status.description)) except: discarded += 1 print("\rFound: {0} servers, {1} discarded, {2} total".format( usable, discarded, total)) print("{0} open servers found".format(usable)) j = open("servers.json", "w")