diff --git a/apps/tgbot/tgbot/handlers/default/whois.py b/apps/tgbot/tgbot/handlers/default/whois.py
index 5b93991..0c07925 100644
--- a/apps/tgbot/tgbot/handlers/default/whois.py
+++ b/apps/tgbot/tgbot/handlers/default/whois.py
@@ -1,5 +1,8 @@
+from typing import Optional
+
from whois import whois, parser
from aiogram.types import Message
+from dataclasses import dataclass
from aiogram.utils.markdown import quote_html
from tgbot.handlers.base import SimpleCommandHandler
@@ -19,6 +22,30 @@ no_domain_text = """
"""
+@dataclass
+class DomainAttrClass:
+ icon: str
+ name: str
+ attr: str
+
+
+# DOMAIN_ATTR_CLASSES order have matter!
+DOMAIN_ATTR_CLASSES = [
+ DomainAttrClass("👤", "Регистратор", "registrar"),
+ DomainAttrClass("📅", "Дата создания", "creation_date"),
+ DomainAttrClass("📅", "Дата окончания", "expiration_date"),
+ DomainAttrClass("📖", "Адрес", "address"),
+ DomainAttrClass("🏘", "Город", "city"),
+ DomainAttrClass("🏘", "Страна", "country"),
+ DomainAttrClass("💬", "Имя", "name"),
+ DomainAttrClass("💼", "Организация", "org"),
+ DomainAttrClass("💬", "Zipcode", "zipcode"),
+ DomainAttrClass("✉", "Почта", "emails"),
+ DomainAttrClass("📌", "NS", "name_servers"),
+ DomainAttrClass("🔐", "DNSSec", "dnssec"),
+]
+
+
def create_whois_message(domain: str) -> str:
try:
domain_info = whois(domain)
@@ -27,59 +54,36 @@ def create_whois_message(domain: str) -> str:
domain_name = domain_info.get("domain_name")
if domain_name is None:
return no_domain_text
-
if isinstance(domain_name, list):
domain_name = domain_name[0]
- message = f"\n📝 Информация о домене {domain_name.lower()}:" \
- f"\n\n👤 Регистратор: {domain_info.get('registrar')}" \
+ message = f"\n📝 Информация о домене {domain_name.lower()}:"
- if creation_date := domain_info.get('creation_date'):
- if isinstance(creation_date, list):
- creation_date = creation_date[0]
+ for i, domain_attr in enumerate(DOMAIN_ATTR_CLASSES):
+ # for pretty printing, DOMAIN_ATTR_CLASSES order have matter!
+ if i in [2, 10]:
+ message += "\n"
+ resp = format_domain_item(
+ domain_attr.icon, domain_attr.name, domain_info.get(domain_attr.attr)
+ )
+ if resp:
+ message += resp
- message += f"\n📅 Дата создания: {creation_date}"
+ return message
- if expiration_date := domain_info.get('expiration_date'):
- if isinstance(expiration_date, list):
- expiration_date = expiration_date[0]
- message += f"\n📅 Дата окончания:: {expiration_date}\n"
-
- if address := domain_info.get("address"):
- if isinstance(address, list):
- message += "\n📖 Адрес: \n" + str.join("\n", [f" * {address_obj}
" for address_obj in address])
- else:
- message += f"\n📖 Адрес: {address}"
- if city := domain_info.get("city"):
- if isinstance(city, list):
- message += "\n🏘 Город: \n" + str.join("\n", [f" * {city_obj}
" for city_obj in city])
- else:
- message += f"\n🏘 Город: {city}"
- if country := domain_info.get("country"):
- message += f"\n🏳️ Страна: {country}"
- if name := domain_info.get("name"):
- if isinstance(name, list):
- message += "\n🏘 💬 Имя: \n" + str.join("\n", [f" * {name_obj}
" for name_obj in name])
- else:
- message += f"\n💬 Имя: {name}"
- if org := domain_info.get("org"):
- message += f"\n💼 Организация: {org}"
- if zipcode := domain_info.get("zipcode"):
- message += f"\n🖥 Zipcode: {zipcode}"
- if emails := domain_info.get("emails"):
- message += "\n✉️ Почта: \n" + str.join("\n", [f" * {email}
" for email in emails])
-
- if name_servers := domain_info.get('name_servers'):
- message += "\n\n📌 NS: \n" + str.join("\n", [f" * {ns}
" for ns in
- list(set(map(str.lower, name_servers)))])
- if dnssec := domain_info.get("dnssec"):
- message += f"\n🔐 DNSSec: {dnssec}"
+def format_domain_item(icon, item_name, items) -> Optional[str]:
+ if not items:
+ return
+ if isinstance(items, list):
+ message = f"\n{icon} {item_name}:\n"
+ message += str.join("\n", [f" * {ns}
" for ns in list(set(map(str.lower, items)))])
+ else:
+ message = f"\n{icon} {item_name}: {items}"
return message
class WhoisCommandHandler(SimpleCommandHandler):
-
help_message = whois_help_message
def __init__(self):