Files
WorldCraft_Discord_Bot/cogs/serverstatus.py
2020-11-18 20:08:21 +01:00

74 lines
2.4 KiB
Python
Executable File

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))