diff --git a/.idea/dictionaries/romain.xml b/.idea/dictionaries/romain.xml
index b0a64d1..7c96624 100644
--- a/.idea/dictionaries/romain.xml
+++ b/.idea/dictionaries/romain.xml
@@ -32,6 +32,7 @@
postgre
postgresql
pred
+ pydig
pylint
releaselevel
rprint
diff --git a/tuxbot/cogs/Admin/locales/messages.pot b/tuxbot/cogs/Admin/locales/messages.pot
index db7e04d..7cc7274 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-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+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 07cdc79..431ee70 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-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+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/messages.pot b/tuxbot/cogs/Logs/locales/messages.pot
index 5c16cfb..cf3d625 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: 2021-01-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+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/Network/functions/converters.py b/tuxbot/cogs/Network/functions/converters.py
index 1424469..ff7391b 100644
--- a/tuxbot/cogs/Network/functions/converters.py
+++ b/tuxbot/cogs/Network/functions/converters.py
@@ -2,7 +2,11 @@ import re
from discord.ext import commands
-from tuxbot.cogs.Network.functions.exceptions import InvalidIp
+from tuxbot.cogs.Network.functions.exceptions import (
+ InvalidIp,
+ InvalidDomain,
+ InvalidQueryType,
+)
def _(x):
@@ -30,22 +34,48 @@ class IPConverter(commands.Converter):
class IPCheckerConverter(commands.Converter):
async def convert(self, ctx, argument): # skipcq: PYL-W0613
- argument_back = argument
+ if not argument.startswith("http"):
+ return f"http://{argument}"
+
+ return argument
+
+
+class DomainCheckerConverter(commands.Converter):
+ async def convert(self, ctx, argument): # skipcq: PYL-W0613
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
+ if check_domain:
+ return argument
- return "http://" + (
- argument if not check_ipv6 else f"[{argument}]"
+ raise InvalidDomain(_("Invalid domain"))
+
+
+class QueryTypeConverter(commands.Converter):
+ async def convert(self, ctx, argument): # skipcq: PYL-W0613
+ argument = argument.lower()
+ query_types = [
+ "a",
+ "aaaa",
+ "cname",
+ "ns",
+ "ds",
+ "dnskey",
+ "soa",
+ "txt",
+ "ptr",
+ "mx",
+ ]
+
+ if argument in query_types:
+ return argument
+
+ raise InvalidQueryType(
+ _(
+ "Supported queries : A, AAAA, CNAME, NS, DS, DNSKEY, SOA, TXT, PTR, MX"
)
-
- raise InvalidIp(_("Invalid ip or domain"))
+ )
class IPVersionConverter(commands.Converter):
diff --git a/tuxbot/cogs/Network/functions/exceptions.py b/tuxbot/cogs/Network/functions/exceptions.py
index ee7a62c..fce718a 100644
--- a/tuxbot/cogs/Network/functions/exceptions.py
+++ b/tuxbot/cogs/Network/functions/exceptions.py
@@ -9,5 +9,13 @@ class InvalidIp(commands.BadArgument):
pass
+class InvalidDomain(commands.BadArgument):
+ pass
+
+
+class InvalidQueryType(commands.BadArgument):
+ pass
+
+
class VersionNotFound(commands.BadArgument):
pass
diff --git a/tuxbot/cogs/Network/functions/utils.py b/tuxbot/cogs/Network/functions/utils.py
index eb12199..214ee80 100644
--- a/tuxbot/cogs/Network/functions/utils.py
+++ b/tuxbot/cogs/Network/functions/utils.py
@@ -3,6 +3,7 @@ from typing import Union, NoReturn
import ipinfo
import ipwhois
+import pydig
from ipinfo.exceptions import RequestQuotaExceededError
from ipwhois import Net
@@ -98,3 +99,19 @@ def merge_ipinfo_ipwhois(ipinfo_result: dict, ipwhois_result: dict) -> dict:
] = f"https://www.countryflags.io/{asn_country}/shiny/64.png"
return output
+
+
+def get_pydig_result(
+ domain: str, query_type: str, dnssec: Union[str, bool]
+) -> list:
+ additional_args = [] if dnssec is False else ["+dnssec"]
+
+ resolver = pydig.Resolver(
+ nameservers=[
+ "80.67.169.40",
+ "80.67.169.12",
+ ],
+ additional_args=additional_args,
+ )
+
+ return resolver.query(domain, query_type)
diff --git a/tuxbot/cogs/Network/locales/en-US.po b/tuxbot/cogs/Network/locales/en-US.po
index 321a8df..ba21fdc 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-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+0100\n"
"PO-Revision-Date: 2021-01-19 14:39+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -18,50 +18,62 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: tuxbot/cogs/Network/functions/converters.py:28
-#: tuxbot/cogs/Network/functions/converters.py:48
+#: tuxbot/cogs/Network/functions/converters.py:32
+#: tuxbot/cogs/Network/functions/converters.py:52
msgid "Invalid ip or domain"
msgstr ""
-#: tuxbot/cogs/Network/functions/converters.py:59
+#: tuxbot/cogs/Network/functions/converters.py:64
+msgid "Invalid domain"
+msgstr ""
+
+#: tuxbot/cogs/Network/functions/converters.py:88
+msgid "Supported queries : A, AAAA, CNAME, NS, DS, DNSKEY, SOA, TXT, PTR, MX"
+msgstr ""
+
+#: tuxbot/cogs/Network/functions/converters.py:101
msgid "Invalid ip version"
msgstr ""
-#: tuxbot/cogs/Network/functions/utils.py:31
+#: tuxbot/cogs/Network/functions/utils.py:32
msgid "Impossible to collect information on this in the given version"
msgstr ""
-#: tuxbot/cogs/Network/functions/utils.py:54
+#: tuxbot/cogs/Network/functions/utils.py:55
#, python-brace-format
msgid "IP address {ip_address} is already defined as Private-Use Networks via RFC 1918."
msgstr ""
-#: tuxbot/cogs/Network/network.py:74
+#: tuxbot/cogs/Network/network.py:89
msgid "*Retrieving information...*"
msgstr ""
-#: tuxbot/cogs/Network/network.py:90
+#: tuxbot/cogs/Network/network.py:107
#, python-brace-format
msgid "Information for ``{ip} ({ip_address})``"
msgstr ""
-#: tuxbot/cogs/Network/network.py:100 tuxbot/cogs/Network/network.py:130
+#: tuxbot/cogs/Network/network.py:113
msgid "Belongs to:"
msgstr ""
-#: tuxbot/cogs/Network/network.py:113 tuxbot/cogs/Network/network.py:142
+#: tuxbot/cogs/Network/network.py:123
msgid "Region:"
msgstr ""
-#: tuxbot/cogs/Network/network.py:152
+#: tuxbot/cogs/Network/network.py:131
#, python-brace-format
msgid "Hostname: {hostname}"
msgstr ""
-#: tuxbot/cogs/Network/network.py:182
+#: tuxbot/cogs/Network/network.py:161
msgid "[show all]({})"
msgstr ""
-#: tuxbot/cogs/Network/network.py:192
+#: tuxbot/cogs/Network/network.py:171
msgid "Cannot connect to host {}"
msgstr ""
+
+#: tuxbot/cogs/Network/network.py:195
+msgid "No result..."
+msgstr ""
diff --git a/tuxbot/cogs/Network/locales/fr-FR.po b/tuxbot/cogs/Network/locales/fr-FR.po
index fc1b203..b7494de 100644
--- a/tuxbot/cogs/Network/locales/fr-FR.po
+++ b/tuxbot/cogs/Network/locales/fr-FR.po
@@ -18,50 +18,62 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: tuxbot/cogs/Network/functions/converters.py:28
-#: tuxbot/cogs/Network/functions/converters.py:48
+#: tuxbot/cogs/Network/functions/converters.py:32
+#: tuxbot/cogs/Network/functions/converters.py:52
msgid "Invalid ip or domain"
-msgstr "Nome de domaine ou adresse IP invalide"
+msgstr "Nom de domaine ou adresse IP invalide"
-#: tuxbot/cogs/Network/functions/converters.py:59
+#: tuxbot/cogs/Network/functions/converters.py:64
+msgid "Invalid domain"
+msgstr "Domaine invalide"
+
+#: tuxbot/cogs/Network/functions/converters.py:88
+msgid "Supported queries : A, AAAA, CNAME, NS, DS, DNSKEY, SOA, TXT, PTR, MX"
+msgstr "Requêtes supportées : A, AAAA, CNAME, NS, DS, DNSKEY, SOA, TXT, PTR, MX"
+
+#: tuxbot/cogs/Network/functions/converters.py:101
msgid "Invalid ip version"
msgstr "Version d'adresse IP invalide"
-#: tuxbot/cogs/Network/functions/utils.py:31
+#: tuxbot/cogs/Network/functions/utils.py:32
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/functions/utils.py:54
+#: tuxbot/cogs/Network/functions/utils.py:55
#, 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:74
+#: tuxbot/cogs/Network/network.py:89
msgid "*Retrieving information...*"
msgstr "*Récupération des informations...*"
-#: tuxbot/cogs/Network/network.py:90
+#: tuxbot/cogs/Network/network.py:107
#, python-brace-format
msgid "Information for ``{ip} ({ip_address})``"
msgstr "Informations pour ``{ip} ({ip_address})``"
-#: tuxbot/cogs/Network/network.py:100 tuxbot/cogs/Network/network.py:130
+#: tuxbot/cogs/Network/network.py:113
msgid "Belongs to:"
msgstr "Appartient à :"
-#: tuxbot/cogs/Network/network.py:113 tuxbot/cogs/Network/network.py:142
+#: tuxbot/cogs/Network/network.py:123
msgid "Region:"
msgstr "Région :"
-#: tuxbot/cogs/Network/network.py:152
+#: tuxbot/cogs/Network/network.py:131
#, python-brace-format
msgid "Hostname: {hostname}"
msgstr "Nom d'hôte : {hostname}"
-#: tuxbot/cogs/Network/network.py:182
+#: tuxbot/cogs/Network/network.py:161
msgid "[show all]({})"
msgstr "[tout afficher]({})"
-#: tuxbot/cogs/Network/network.py:192
+#: tuxbot/cogs/Network/network.py:171
msgid "Cannot connect to host {}"
msgstr "Impossible de se connecter à l'hôte {}"
+
+#: tuxbot/cogs/Network/network.py:195
+msgid "No result..."
+msgstr "Aucun résultat..."
diff --git a/tuxbot/cogs/Network/locales/messages.pot b/tuxbot/cogs/Network/locales/messages.pot
index b0191cf..9331503 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-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -17,50 +17,62 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: tuxbot/cogs/Network/functions/converters.py:28
-#: tuxbot/cogs/Network/functions/converters.py:48
+#: tuxbot/cogs/Network/functions/converters.py:32
+#: tuxbot/cogs/Network/functions/converters.py:52
msgid "Invalid ip or domain"
msgstr ""
-#: tuxbot/cogs/Network/functions/converters.py:59
+#: tuxbot/cogs/Network/functions/converters.py:64
+msgid "Invalid domain"
+msgstr ""
+
+#: tuxbot/cogs/Network/functions/converters.py:88
+msgid "Supported queries : A, AAAA, CNAME, NS, DS, DNSKEY, SOA, TXT, PTR, MX"
+msgstr ""
+
+#: tuxbot/cogs/Network/functions/converters.py:101
msgid "Invalid ip version"
msgstr ""
-#: tuxbot/cogs/Network/functions/utils.py:31
+#: tuxbot/cogs/Network/functions/utils.py:32
msgid "Impossible to collect information on this in the given version"
msgstr ""
-#: tuxbot/cogs/Network/functions/utils.py:54
+#: tuxbot/cogs/Network/functions/utils.py:55
#, python-brace-format
msgid "IP address {ip_address} is already defined as Private-Use Networks via RFC 1918."
msgstr ""
-#: tuxbot/cogs/Network/network.py:74
+#: tuxbot/cogs/Network/network.py:89
msgid "*Retrieving information...*"
msgstr ""
-#: tuxbot/cogs/Network/network.py:90
+#: tuxbot/cogs/Network/network.py:107
#, python-brace-format
msgid "Information for ``{ip} ({ip_address})``"
msgstr ""
-#: tuxbot/cogs/Network/network.py:100 tuxbot/cogs/Network/network.py:130
+#: tuxbot/cogs/Network/network.py:113
msgid "Belongs to:"
msgstr ""
-#: tuxbot/cogs/Network/network.py:113 tuxbot/cogs/Network/network.py:142
+#: tuxbot/cogs/Network/network.py:123
msgid "Region:"
msgstr ""
-#: tuxbot/cogs/Network/network.py:152
+#: tuxbot/cogs/Network/network.py:131
#, python-brace-format
msgid "Hostname: {hostname}"
msgstr ""
-#: tuxbot/cogs/Network/network.py:182
+#: tuxbot/cogs/Network/network.py:161
msgid "[show all]({})"
msgstr ""
-#: tuxbot/cogs/Network/network.py:192
+#: tuxbot/cogs/Network/network.py:171
msgid "Cannot connect to host {}"
msgstr ""
+
+#: tuxbot/cogs/Network/network.py:195
+msgid "No result..."
+msgstr ""
diff --git a/tuxbot/cogs/Network/network.py b/tuxbot/cogs/Network/network.py
index 9a90ac0..9a5ba0f 100644
--- a/tuxbot/cogs/Network/network.py
+++ b/tuxbot/cogs/Network/network.py
@@ -1,5 +1,7 @@
import functools
import logging
+from typing import Union
+
import discord
from aiohttp import ClientConnectorError
from discord.ext import commands
@@ -9,11 +11,15 @@ from tuxbot.cogs.Network.functions.converters import (
IPConverter,
IPVersionConverter,
IPCheckerConverter,
+ DomainCheckerConverter,
+ QueryTypeConverter,
)
from tuxbot.cogs.Network.functions.exceptions import (
RFC18,
InvalidIp,
VersionNotFound,
+ InvalidDomain,
+ InvalidQueryType,
)
from tuxbot.core.bot import Tux
from tuxbot.core.i18n import (
@@ -32,6 +38,7 @@ from .functions.utils import (
get_ipinfo_result,
get_ipwhois_result,
merge_ipinfo_ipwhois,
+ get_pydig_result,
)
log = logging.getLogger("tuxbot.cogs.Network")
@@ -54,7 +61,14 @@ class Network(commands.Cog, name="Network"):
async def cog_command_error(self, ctx, error):
if isinstance(
error,
- (RequestQuotaExceededError, RFC18, InvalidIp, VersionNotFound),
+ (
+ RequestQuotaExceededError,
+ RFC18,
+ InvalidIp,
+ InvalidDomain,
+ InvalidQueryType,
+ VersionNotFound,
+ ),
):
if self._tmp:
await self._tmp.delete()
@@ -128,9 +142,19 @@ class Network(commands.Cog, name="Network"):
):
try:
headers = {"User-Agent": user_agent}
+ colors = {
+ "1": 0x17A2B8,
+ "2": 0x28A745,
+ "3": 0xFFC107,
+ "4": 0xDC3545,
+ "5": 0x343A40,
+ }
async with ctx.session.get(str(ip), headers=headers) as s:
- e = discord.Embed(title=f"Headers : {ip}", color=0xD75858)
+ e = discord.Embed(
+ title=f"Headers : {ip}",
+ color=colors.get(str(s.status)[0], 0x6C757D),
+ )
e.add_field(
name="Status", value=f"```{s.status}```", inline=True
)
@@ -151,8 +175,36 @@ class Network(commands.Cog, name="Network"):
e.add_field(name=key, value=value, inline=True)
- await ctx.send(embed=e, deletable=False)
+ await ctx.send(embed=e)
except ClientConnectorError:
await ctx.send(
_("Cannot connect to host {}", ctx, self.bot.config).format(ip)
)
+
+ @command_extra(name="dig", deletable=True)
+ async def _dig(
+ self,
+ ctx: ContextPlus,
+ domain: DomainCheckerConverter,
+ query_type: QueryTypeConverter,
+ dnssec: Union[str, bool] = False,
+ ):
+ pydig_result = await self.bot.loop.run_in_executor(
+ None,
+ functools.partial(get_pydig_result, domain, query_type, dnssec),
+ )
+
+ e = discord.Embed(title=f"DIG {domain} {query_type}", color=0x5858D7)
+
+ for value in pydig_result:
+ e.add_field(
+ name=f"DIG {domain} IN {query_type}", value=f"```{value}```"
+ )
+
+ if not pydig_result:
+ e.add_field(
+ name=f"DIG {domain} IN {query_type}",
+ value=_("No result...", ctx, self.bot.config),
+ )
+
+ await ctx.send(embed=e)
diff --git a/tuxbot/cogs/Polls/locales/messages.pot b/tuxbot/cogs/Polls/locales/messages.pot
index 3e3bdca..f6bd62b 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-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+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 77264e9..1a8b586 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-26 15:18+0100\n"
+"POT-Creation-Date: 2021-01-26 16:12+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"