Cult / app.py
elasko-aim's picture
Update app.py
a29a66c verified
import os
import time
import socket
import requests
import discord
from discord import app_commands
def wait_for_internet(host="discord.com", port=443, timeout=60):
start = time.time()
while True:
try:
socket.getaddrinfo(host, port)
print("🌐 Internet ready")
return
except socket.gaierror:
if time.time() - start > timeout:
raise RuntimeError("❌ Internet not available")
print("⏳ Waiting for internet...")
time.sleep(5)
wait_for_internet()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
HF_TOKEN = os.getenv("HF_TOKEN")
HF_MODEL = "mistralai/Mistral-7B-Instruct-v0.2"
intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)
def ask_llm(prompt: str) -> str:
headers = {
"Authorization": f"Bearer {HF_TOKEN}",
"Content-Type": "application/json"
}
payload = {
"inputs": f"Ответь философски:\n{prompt}"
}
r = requests.post(
f"https://api-inference.huggingface.co/models/{HF_MODEL}",
headers=headers,
json=payload,
timeout=60
)
if r.status_code != 200:
return "❌ LLM не ответил"
return r.json()[0]["generated_text"]
@tree.command(name="experiment", description="Философский эксперимент")
@app_commands.describe(question="Вопрос культу")
async def experiment(interaction: discord.Interaction, question: str):
await interaction.response.defer(thinking=True)
answer = ask_llm(question)
await interaction.followup.send(answer[:1900])
@client.event
async def on_ready():
await tree.sync()
print(f"🩸 CultCore online as {client.user}")
client.run(DISCORD_TOKEN)