import discord from discord.ext import commands from mcstatus import MinecraftServer class ServerStatus(commands.Cog): def __init__(self, client): self.client = client @commands.group(name="Ping", aliases=["Status"], case_insensitive=True, invoke_without_command=True) async def ping(self, ctx): servers = {"Earth": "25201", "Moon": "25003"} # List of colours for the amount of servers that are online upColours = [discord.Colour.red(), discord.Colour.orange(), discord.Colour.green()] embed = discord.Embed() embed.set_author(name="Status") # Amount of servers that are online upCounter = 0 # Add field for all the servers (for-loop so nothing has to be changed for future servers) for server in servers: latency, up = self.getLatency(servers[server]) upCounter += up embed.add_field(name=server, value=latency, inline=False) # Set the embed colour embed.colour = upColours[upCounter] # Bot's latency embed.add_field(name="WorldCraft Bot", value=f":green_circle: {round(self.client.latency * 1000)}ms") await ctx.send(embed=embed) @ping.command(name="Earth", aliases=["E", "S1", "Server1"]) async def earth(self, ctx): latencyEmbed = self.serverLatencyEmbed("Earth", "25201") await ctx.send(embed=latencyEmbed) @ping.command(name="Moon", aliases=["M", "S2", "Server2"]) async def moon(self, ctx): latencyEmbed = self.serverLatencyEmbed("Moon", "25003") await ctx.send(embed=latencyEmbed) # Latency for only 1 server, avoid code duplication def serverLatencyEmbed(self, server, ip): embed = discord.Embed() embed.set_author(name="{} Status".format(server)) latency, up = self.getLatency(ip) embed.description = latency embed.colour = discord.Colour.green() if up == 1 else discord.Colour.red() return embed def getLatency(self, server): ip = "81.82.224.207:" up = 1 minecraftServer = MinecraftServer.lookup(ip + server) try: # Online latency = f":green_circle: Server replied in {minecraftServer.ping()}ms." except: # Offline up = -1 latency = ":red_circle: Server is offline." return latency, up def setup(client): client.add_cog(ServerStatus(client))