diff --git a/tuxbot/cogs/Admin/locales/messages.pot b/tuxbot/cogs/Admin/locales/messages.pot index c254abd..db7e04d 100644 --- a/tuxbot/cogs/Admin/locales/messages.pot +++ b/tuxbot/cogs/Admin/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-25 16:09+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/tuxbot/cogs/Custom/locales/messages.pot b/tuxbot/cogs/Custom/locales/messages.pot index c5523a8..07cdc79 100644 --- a/tuxbot/cogs/Custom/locales/messages.pot +++ b/tuxbot/cogs/Custom/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-25 16:09+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/tuxbot/cogs/Logs/locales/en-US.po b/tuxbot/cogs/Logs/locales/en-US.po index d7bc028..acdadfd 100644 --- a/tuxbot/cogs/Logs/locales/en-US.po +++ b/tuxbot/cogs/Logs/locales/en-US.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2020-10-21 01:15+0200\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: 2020-10-21 01:15+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -16,3 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: tuxbot/cogs/Logs/logs.py:295 +msgid "Sockets stats" +msgstr "" + +#: tuxbot/cogs/Logs/logs.py:297 +msgid "{} socket events observed ({:.2f}/minute):" +msgstr "" diff --git a/tuxbot/cogs/Logs/locales/fr-FR.po b/tuxbot/cogs/Logs/locales/fr-FR.po index 5f7d0d1..fac91f2 100644 --- a/tuxbot/cogs/Logs/locales/fr-FR.po +++ b/tuxbot/cogs/Logs/locales/fr-FR.po @@ -17,3 +17,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: tuxbot/cogs/Logs/logs.py:295 +msgid "Sockets stats" +msgstr "Statistiques des évenements" + +#: tuxbot/cogs/Logs/logs.py:297 +msgid "{} socket events observed ({:.2f}/minute):" +msgstr "{} evenements ont été observés ({:.2f}/minute)" diff --git a/tuxbot/cogs/Logs/locales/messages.pot b/tuxbot/cogs/Logs/locales/messages.pot index 9c11528..5c16cfb 100644 --- a/tuxbot/cogs/Logs/locales/messages.pot +++ b/tuxbot/cogs/Logs/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2020-10-21 01:15+0200\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,3 +16,11 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" + +#: tuxbot/cogs/Logs/logs.py:295 +msgid "Sockets stats" +msgstr "" + +#: tuxbot/cogs/Logs/logs.py:297 +msgid "{} socket events observed ({:.2f}/minute):" +msgstr "" diff --git a/tuxbot/cogs/Network/functions/converters.py b/tuxbot/cogs/Network/functions/converters.py index 79bcba2..1424469 100644 --- a/tuxbot/cogs/Network/functions/converters.py +++ b/tuxbot/cogs/Network/functions/converters.py @@ -28,6 +28,26 @@ class IPConverter(commands.Converter): raise InvalidIp(_("Invalid ip or domain")) +class IPCheckerConverter(commands.Converter): + async def convert(self, ctx, argument): # skipcq: PYL-W0613 + argument_back = argument + argument = argument.replace("http://", "").replace("https://", "") + + check_domain = re.match(DOMAIN_PATTERN, argument) + check_ipv4 = re.match(IPV4_PATTERN, argument) + check_ipv6 = re.match(IPV6_PATTERN, argument) + + if check_domain or check_ipv4 or check_ipv6: + if argument_back.startswith("https://"): + return "https://" + argument + + return "http://" + ( + argument if not check_ipv6 else f"[{argument}]" + ) + + raise InvalidIp(_("Invalid ip or domain")) + + class IPVersionConverter(commands.Converter): async def convert(self, ctx, argument): # skipcq: PYL-W0613 if not argument: diff --git a/tuxbot/cogs/Network/locales/en-US.po b/tuxbot/cogs/Network/locales/en-US.po index fba187e..321a8df 100644 --- a/tuxbot/cogs/Network/locales/en-US.po +++ b/tuxbot/cogs/Network/locales/en-US.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-19 14:39+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: 2021-01-19 14:39+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -18,47 +18,50 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: tuxbot/cogs/Network/functions/converters.py:22 +#: tuxbot/cogs/Network/functions/converters.py:28 +#: tuxbot/cogs/Network/functions/converters.py:48 msgid "Invalid ip or domain" msgstr "" -#: tuxbot/cogs/Network/functions/converters.py:35 +#: tuxbot/cogs/Network/functions/converters.py:59 msgid "Invalid ip version" msgstr "" -#: tuxbot/cogs/Network/network.py:49 tuxbot/cogs/Network/network.py:52 -#, python-brace-format -msgid "in v{v}" -msgstr "" - -#: tuxbot/cogs/Network/network.py:61 -#, python-brace-format +#: tuxbot/cogs/Network/functions/utils.py:31 msgid "Impossible to collect information on this in the given version" msgstr "" -#: tuxbot/cogs/Network/network.py:89 +#: tuxbot/cogs/Network/functions/utils.py:54 #, python-brace-format msgid "IP address {ip_address} is already defined as Private-Use Networks via RFC 1918." msgstr "" -#: tuxbot/cogs/Network/network.py:109 +#: tuxbot/cogs/Network/network.py:74 msgid "*Retrieving information...*" msgstr "" -#: tuxbot/cogs/Network/network.py:123 +#: tuxbot/cogs/Network/network.py:90 #, python-brace-format msgid "Information for ``{ip} ({ip_address})``" msgstr "" -#: tuxbot/cogs/Network/network.py:135 tuxbot/cogs/Network/network.py:156 +#: tuxbot/cogs/Network/network.py:100 tuxbot/cogs/Network/network.py:130 msgid "Belongs to:" msgstr "" -#: tuxbot/cogs/Network/network.py:140 tuxbot/cogs/Network/network.py:161 +#: tuxbot/cogs/Network/network.py:113 tuxbot/cogs/Network/network.py:142 msgid "Region:" msgstr "" -#: tuxbot/cogs/Network/network.py:174 +#: tuxbot/cogs/Network/network.py:152 #, python-brace-format msgid "Hostname: {hostname}" msgstr "" + +#: tuxbot/cogs/Network/network.py:182 +msgid "[show all]({})" +msgstr "" + +#: tuxbot/cogs/Network/network.py:192 +msgid "Cannot connect to host {}" +msgstr "" diff --git a/tuxbot/cogs/Network/locales/fr-FR.po b/tuxbot/cogs/Network/locales/fr-FR.po index a080354..fc1b203 100644 --- a/tuxbot/cogs/Network/locales/fr-FR.po +++ b/tuxbot/cogs/Network/locales/fr-FR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-19 14:39+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: 2021-01-19 14:39+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -18,47 +18,50 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: tuxbot/cogs/Network/functions/converters.py:22 +#: tuxbot/cogs/Network/functions/converters.py:28 +#: tuxbot/cogs/Network/functions/converters.py:48 msgid "Invalid ip or domain" msgstr "Nome de domaine ou adresse IP invalide" -#: tuxbot/cogs/Network/functions/converters.py:35 +#: tuxbot/cogs/Network/functions/converters.py:59 msgid "Invalid ip version" msgstr "Version d'adresse IP invalide" -#: tuxbot/cogs/Network/network.py:49 tuxbot/cogs/Network/network.py:52 -#, python-brace-format -msgid "in v{v}" -msgstr "en v{v}" - -#: tuxbot/cogs/Network/network.py:61 -#, python-brace-format +#: tuxbot/cogs/Network/functions/utils.py:31 msgid "Impossible to collect information on this in the given version" msgstr "Impossible de collecter des informations pour cette IP avec la version donnée" -#: tuxbot/cogs/Network/network.py:89 +#: tuxbot/cogs/Network/functions/utils.py:54 #, python-brace-format msgid "IP address {ip_address} is already defined as Private-Use Networks via RFC 1918." msgstr "L'adresse ip {ip_address} est est reservée à un usage local selon la RFC 1918" -#: tuxbot/cogs/Network/network.py:109 +#: tuxbot/cogs/Network/network.py:74 msgid "*Retrieving information...*" msgstr "*Récupération des informations...*" -#: tuxbot/cogs/Network/network.py:123 +#: tuxbot/cogs/Network/network.py:90 #, python-brace-format msgid "Information for ``{ip} ({ip_address})``" msgstr "Informations pour ``{ip} ({ip_address})``" -#: tuxbot/cogs/Network/network.py:135 tuxbot/cogs/Network/network.py:156 +#: tuxbot/cogs/Network/network.py:100 tuxbot/cogs/Network/network.py:130 msgid "Belongs to:" msgstr "Appartient à :" -#: tuxbot/cogs/Network/network.py:140 tuxbot/cogs/Network/network.py:161 +#: tuxbot/cogs/Network/network.py:113 tuxbot/cogs/Network/network.py:142 msgid "Region:" msgstr "Région :" -#: tuxbot/cogs/Network/network.py:174 +#: tuxbot/cogs/Network/network.py:152 #, python-brace-format msgid "Hostname: {hostname}" msgstr "Nom d'hôte : {hostname}" + +#: tuxbot/cogs/Network/network.py:182 +msgid "[show all]({})" +msgstr "[tout afficher]({})" + +#: tuxbot/cogs/Network/network.py:192 +msgid "Cannot connect to host {}" +msgstr "Impossible de se connecter à l'hôte {}" diff --git a/tuxbot/cogs/Network/locales/messages.pot b/tuxbot/cogs/Network/locales/messages.pot index 906a2cd..b0191cf 100644 --- a/tuxbot/cogs/Network/locales/messages.pot +++ b/tuxbot/cogs/Network/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-25 16:09+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,47 +17,50 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: tuxbot/cogs/Network/functions/converters.py:22 +#: tuxbot/cogs/Network/functions/converters.py:28 +#: tuxbot/cogs/Network/functions/converters.py:48 msgid "Invalid ip or domain" msgstr "" -#: tuxbot/cogs/Network/functions/converters.py:35 +#: tuxbot/cogs/Network/functions/converters.py:59 msgid "Invalid ip version" msgstr "" -#: tuxbot/cogs/Network/network.py:49 tuxbot/cogs/Network/network.py:52 -#, python-brace-format -msgid "in v{v}" -msgstr "" - -#: tuxbot/cogs/Network/network.py:61 -#, python-brace-format +#: tuxbot/cogs/Network/functions/utils.py:31 msgid "Impossible to collect information on this in the given version" msgstr "" -#: tuxbot/cogs/Network/network.py:89 +#: tuxbot/cogs/Network/functions/utils.py:54 #, python-brace-format msgid "IP address {ip_address} is already defined as Private-Use Networks via RFC 1918." msgstr "" -#: tuxbot/cogs/Network/network.py:109 +#: tuxbot/cogs/Network/network.py:74 msgid "*Retrieving information...*" msgstr "" -#: tuxbot/cogs/Network/network.py:123 +#: tuxbot/cogs/Network/network.py:90 #, python-brace-format msgid "Information for ``{ip} ({ip_address})``" msgstr "" -#: tuxbot/cogs/Network/network.py:135 tuxbot/cogs/Network/network.py:156 +#: tuxbot/cogs/Network/network.py:100 tuxbot/cogs/Network/network.py:130 msgid "Belongs to:" msgstr "" -#: tuxbot/cogs/Network/network.py:140 tuxbot/cogs/Network/network.py:161 +#: tuxbot/cogs/Network/network.py:113 tuxbot/cogs/Network/network.py:142 msgid "Region:" msgstr "" -#: tuxbot/cogs/Network/network.py:174 +#: tuxbot/cogs/Network/network.py:152 #, python-brace-format msgid "Hostname: {hostname}" msgstr "" + +#: tuxbot/cogs/Network/network.py:182 +msgid "[show all]({})" +msgstr "" + +#: tuxbot/cogs/Network/network.py:192 +msgid "Cannot connect to host {}" +msgstr "" diff --git a/tuxbot/cogs/Network/network.py b/tuxbot/cogs/Network/network.py index 5ceec21..7604540 100644 --- a/tuxbot/cogs/Network/network.py +++ b/tuxbot/cogs/Network/network.py @@ -1,17 +1,14 @@ import functools import logging - - import discord - +from aiohttp import ClientConnectorError from discord.ext import commands from ipinfo.exceptions import RequestQuotaExceededError - from structured_config import ConfigFile - from tuxbot.cogs.Network.functions.converters import ( IPConverter, IPVersionConverter, + IPCheckerConverter, ) from tuxbot.cogs.Network.functions.exceptions import ( RFC18, @@ -27,6 +24,7 @@ from tuxbot.core.utils.functions.extra import ( ContextPlus, command_extra, ) +from tuxbot.core.utils.functions.utils import shorten from .config import NetworkConfig from .functions.utils import ( get_ip, @@ -158,3 +156,38 @@ class Network(commands.Cog, name="Network"): await self._tmp.delete() await ctx.send(embed=e) + + @command_extra(name="getheaders", aliases=["headers"], deletable=True) + async def _getheaders( + self, ctx: ContextPlus, ip: IPCheckerConverter, *, user_agent: str = "" + ): + try: + headers = {"User-Agent": user_agent} + + async with ctx.session.get(str(ip), headers=headers) as s: + e = discord.Embed(title=f"Headers : {ip}", color=0xD75858) + e.add_field( + name="Status", value=f"```{s.status}```", inline=True + ) + e.set_thumbnail(url=f"https://http.cat/{s.status}") + + headers = dict(s.headers.items()) + headers.pop("Set-Cookie", headers) + + for key, value in headers.items(): + output = await shorten(ctx, value, 50) + + if output["link"] is not None: + value = _( + "[show all]({})", ctx, self.bot.config + ).format(output["link"]) + else: + value = f"```{output['text']}```" + + e.add_field(name=key, value=value, inline=True) + + await ctx.send(embed=e, deletable=False) + except ClientConnectorError: + await ctx.send( + _("Cannot connect to host {}", ctx, self.bot.config).format(ip) + ) diff --git a/tuxbot/cogs/Polls/locales/messages.pot b/tuxbot/cogs/Polls/locales/messages.pot index 1d21de4..3e3bdca 100644 --- a/tuxbot/cogs/Polls/locales/messages.pot +++ b/tuxbot/cogs/Polls/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-25 16:09+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/tuxbot/cogs/Utils/locales/messages.pot b/tuxbot/cogs/Utils/locales/messages.pot index ff04ab9..77264e9 100644 --- a/tuxbot/cogs/Utils/locales/messages.pot +++ b/tuxbot/cogs/Utils/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tuxbot-bot\n" "Report-Msgid-Bugs-To: rick@gnous.eu\n" -"POT-Creation-Date: 2021-01-25 16:09+0100\n" +"POT-Creation-Date: 2021-01-26 15:18+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/tuxbot/core/utils/functions/extra.py b/tuxbot/core/utils/functions/extra.py index 380ee8a..a0b2be7 100644 --- a/tuxbot/core/utils/functions/extra.py +++ b/tuxbot/core/utils/functions/extra.py @@ -1,6 +1,7 @@ import asyncio import random +import aiohttp import discord from discord import Embed from discord.ext import commands @@ -97,6 +98,10 @@ class ContextPlus(commands.Context): allowed_mentions=allowed_mentions, ) + @property + def session(self) -> aiohttp.ClientSession: + return self.bot.session + class CommandPLus(commands.Command): def __init__(self, function, **kwargs): diff --git a/tuxbot/core/utils/functions/utils.py b/tuxbot/core/utils/functions/utils.py index 5268612..c2f30ee 100644 --- a/tuxbot/core/utils/functions/utils.py +++ b/tuxbot/core/utils/functions/utils.py @@ -1,5 +1,7 @@ +import asyncio import functools +import aiohttp from discord.ext import commands from tuxbot.core.utils.functions.extra import ContextPlus @@ -22,3 +24,23 @@ def typing(func): await func(*args, **kwargs) return wrapped + + +async def shorten(ctx: ContextPlus, text: str, length: int) -> dict: + output = {"text": text[:length], "link": None} + + if len(text) > length: + output["text"] += "[...]" + try: + async with ctx.session.post( + "https://paste.ramle.be/documents", + data=text.encode(), + timeout=aiohttp.ClientTimeout(total=2), + ) as r: + output[ + "link" + ] = f"https://paste.ramle.be/{(await r.json())['key']}" + except (aiohttp.ClientError, asyncio.exceptions.TimeoutError): + pass + + return output