Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -31,28 +31,69 @@ logging.basicConfig(
|
|
| 31 |
logger = logging.getLogger("BK_GTA_ARCHITECT")
|
| 32 |
|
| 33 |
# ==============================================================================
|
| 34 |
-
# 0.5 [HuggingFace 专用] DNS 稳定性修复
|
| 35 |
# ==============================================================================
|
| 36 |
def fix_dns():
|
| 37 |
"""
|
| 38 |
-
HuggingFace Spaces
|
| 39 |
-
|
| 40 |
-
|
| 41 |
"""
|
|
|
|
| 42 |
try:
|
| 43 |
with open('/etc/resolv.conf', 'r') as f:
|
| 44 |
current = f.read()
|
| 45 |
if '8.8.8.8' not in current:
|
| 46 |
with open('/etc/resolv.conf', 'a') as f:
|
| 47 |
f.write('\nnameserver 8.8.8.8\nnameserver 1.1.1.1\n')
|
| 48 |
-
logger.info("✅ [DNS] Injected
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
else:
|
| 50 |
-
logger.
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
logger.warning("⚠️ [DNS]
|
| 54 |
except Exception as e:
|
| 55 |
-
logger.
|
| 56 |
|
| 57 |
fix_dns()
|
| 58 |
|
|
|
|
| 31 |
logger = logging.getLogger("BK_GTA_ARCHITECT")
|
| 32 |
|
| 33 |
# ==============================================================================
|
| 34 |
+
# 0.5 [HuggingFace 专用] DNS 稳定性修复 (增强版)
|
| 35 |
# ==============================================================================
|
| 36 |
def fix_dns():
|
| 37 |
"""
|
| 38 |
+
HuggingFace Spaces 容器 DNS 解析器无法解析 discord.com。
|
| 39 |
+
方案: 用 dnspython 通过 Google DNS (8.8.8.8) 直接查询 IP,
|
| 40 |
+
然后写入 /etc/hosts 完全绕过容器的 DNS。
|
| 41 |
"""
|
| 42 |
+
# 第一步:尝试注入 resolv.conf 备用 DNS
|
| 43 |
try:
|
| 44 |
with open('/etc/resolv.conf', 'r') as f:
|
| 45 |
current = f.read()
|
| 46 |
if '8.8.8.8' not in current:
|
| 47 |
with open('/etc/resolv.conf', 'a') as f:
|
| 48 |
f.write('\nnameserver 8.8.8.8\nnameserver 1.1.1.1\n')
|
| 49 |
+
logger.info("✅ [DNS] Injected backup DNS to resolv.conf.")
|
| 50 |
+
except Exception as e:
|
| 51 |
+
logger.warning(f"⚠️ [DNS] resolv.conf write failed: {e}")
|
| 52 |
+
|
| 53 |
+
# 第二步(核心):用 dnspython 解析并写入 /etc/hosts
|
| 54 |
+
hosts_to_resolve = [
|
| 55 |
+
'discord.com',
|
| 56 |
+
'gateway.discord.gg',
|
| 57 |
+
'cdn.discordapp.com',
|
| 58 |
+
'api.discord.com',
|
| 59 |
+
]
|
| 60 |
+
|
| 61 |
+
try:
|
| 62 |
+
import dns.resolver
|
| 63 |
+
|
| 64 |
+
resolver = dns.resolver.Resolver(configure=False)
|
| 65 |
+
resolver.nameservers = ['8.8.8.8', '1.1.1.1', '8.8.4.4']
|
| 66 |
+
resolver.timeout = 10
|
| 67 |
+
resolver.lifetime = 10
|
| 68 |
+
|
| 69 |
+
hosts_lines = []
|
| 70 |
+
for hostname in hosts_to_resolve:
|
| 71 |
+
try:
|
| 72 |
+
answers = resolver.resolve(hostname, 'A')
|
| 73 |
+
ip = answers[0].to_text()
|
| 74 |
+
hosts_lines.append(f"{ip} {hostname}")
|
| 75 |
+
logger.info(f"✅ [DNS] Resolved {hostname} → {ip}")
|
| 76 |
+
except Exception as e:
|
| 77 |
+
logger.warning(f"⚠️ [DNS] Failed to resolve {hostname}: {e}")
|
| 78 |
+
|
| 79 |
+
if hosts_lines:
|
| 80 |
+
try:
|
| 81 |
+
with open('/etc/hosts', 'a') as f:
|
| 82 |
+
f.write('\n# BK-GTA Discord DNS Fix\n')
|
| 83 |
+
for line in hosts_lines:
|
| 84 |
+
f.write(line + '\n')
|
| 85 |
+
logger.info(f"✅ [DNS] Wrote {len(hosts_lines)} entries to /etc/hosts.")
|
| 86 |
+
except PermissionError:
|
| 87 |
+
logger.warning("⚠️ [DNS] /etc/hosts is read-only.")
|
| 88 |
+
except Exception as e:
|
| 89 |
+
logger.warning(f"⚠️ [DNS] hosts write error: {e}")
|
| 90 |
else:
|
| 91 |
+
logger.error("❌ [DNS] Could not resolve any Discord hosts.")
|
| 92 |
+
|
| 93 |
+
except ImportError:
|
| 94 |
+
logger.warning("⚠️ [DNS] dnspython not installed, skipping hosts injection.")
|
| 95 |
except Exception as e:
|
| 96 |
+
logger.error(f"❌ [DNS] Resolution failed: {e}")
|
| 97 |
|
| 98 |
fix_dns()
|
| 99 |
|