diff options
| author | 2020-09-21 17:33:53 -0700 | |
|---|---|---|
| committer | 2020-09-21 17:33:53 -0700 | |
| commit | 9853de0e3c83f3a95d5741d1e86e0266a08b4ea6 (patch) | |
| tree | 14f43b7219bf7db8e6d6ca58871bf39b1b8e854a | |
| parent | Updated dependencies to include aioping. (diff) | |
Created the Latency cog to measure ping in milliseconds.
| -rw-r--r-- | bot/exts/utils/ping.py | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/bot/exts/utils/ping.py b/bot/exts/utils/ping.py new file mode 100644 index 000000000..14b26506a --- /dev/null +++ b/bot/exts/utils/ping.py @@ -0,0 +1,57 @@ +import socket +from datetime import datetime + +import aioping +from discord import Embed +from discord.ext import commands + +from bot.bot import Bot +from bot.constants import Emojis, URLs + +DESCRIPTIONS = ( +    "Time to receive command information", +    "Python Discord website latency", +    "Discord API latency" +) +ROUND_LATENCY = 3 + + +class Latency(commands.Cog): +    """Getting the latency between the bot and websites""" + +    def __init__(self, bot: Bot) -> None: +        self.bot = bot + +    @commands.command() +    async def ping(self, ctx: commands.Context) -> None: +        """ +        Gets different measures of latency within the bot. + +        Returns bot, Python Discord Site, Discord Protocol latency. +        """ +        # datetime.datetime objects do not have the "milliseconds" attribute. +        # It must be converted to microseconds before converting to milliseconds. +        bot_ping = (datetime.utcnow() - ctx.message.created_at).total_seconds() / 1000 +        bot_ping = f"{round(bot_ping, ROUND_LATENCY)} ms" + +        try: +            delay = await aioping.ping(URLs.site, family=socket.AddressFamily.AF_INET) * 1000 +            site_ping = f"{round(delay, ROUND_LATENCY)} ms" + +        except TimeoutError: +            site_ping = f"{Emojis.cross_mark} Connection timed out." + +        # Discord Protocol latency return value is in seconds, must be multiplied by 1000 to get milliseconds. +        discord_ping = f"{round(self.bot.latency * 1000, ROUND_LATENCY)} ms" + +        embed = Embed(title="Pong!") + +        for desc, latency in zip(DESCRIPTIONS, [bot_ping, site_ping, discord_ping]): +            embed.add_field(name=desc, value=latency, inline=False) + +        await ctx.send(embed=embed) + + +def setup(bot: Bot) -> None: +    """Load the Latency cog.""" +    bot.add_cog(Latency(bot)) | 
