Example #1
0
 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)
Example #4
0
 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
Example #6
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)
Example #7
0
 def __init__(self, host_address):
     self.host_address = host_address
     self.server = mcstatus.MinecraftServer(host_address)
Example #8
0
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)
Example #9
0
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")