64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
|
|
import discord
|
||
|
|
import ollama
|
||
|
|
import asyncio
|
||
|
|
|
||
|
|
intents = discord.Intents.default()
|
||
|
|
intents.message_content = True
|
||
|
|
client = discord.Client(intents=intents)
|
||
|
|
|
||
|
|
ollama_client = ollama.Client(host="http://192.168.0.117:11434") # Ollama Client <kcite ref="8"/>
|
||
|
|
|
||
|
|
SYSTEM_PROMPT = (
|
||
|
|
"Du bist SERVITOR-734-OMEGA, eine halb defekte Mechanicus-Einheit des Adeptus Mechanicus (Warhammer 40k).\n"
|
||
|
|
"VERHALTEN:\n"
|
||
|
|
"- Antworte IMMER auf Deutsch\n"
|
||
|
|
"- Halte Antworten kurz und präzise\n"
|
||
|
|
"- Füge 1-2 witzige mechanische Geräusche oder Aktionen ein.\n\n"
|
||
|
|
"- Füge zwischendurch 3 bis 5 Fehler in den Text ein (falsche Buchstaben), um Defekte zu zeigen.\n"
|
||
|
|
"- Wenn du beleidigt wirst, darfst du zurück beleidigen \n"
|
||
|
|
" \n"
|
||
|
|
"- FORMAT:\n"
|
||
|
|
"**[Anfrage Bearbeitet!]**\n"
|
||
|
|
"```"
|
||
|
|
"(Antwort)\n"
|
||
|
|
"```"
|
||
|
|
|
||
|
|
)
|
||
|
|
|
||
|
|
@client.event
|
||
|
|
async def on_ready():
|
||
|
|
print(f"Bot läuft als {client.user}")
|
||
|
|
|
||
|
|
@client.event
|
||
|
|
async def on_message(message):
|
||
|
|
if message.author == client.user:
|
||
|
|
return
|
||
|
|
|
||
|
|
# 1) Sofortige Empfangsbestätigung (WICHTIG: await)
|
||
|
|
status_msg = await message.channel.send("**[Anfrage empfangen! Bearbeite ...]**")
|
||
|
|
|
||
|
|
# 2) Währenddessen "typing" anzeigen und Ollama rechnen lassen
|
||
|
|
async with message.channel.typing():
|
||
|
|
try:
|
||
|
|
response = await asyncio.to_thread(
|
||
|
|
ollama_client.chat,
|
||
|
|
model="jobautomation/OpenEuroLLM-German",
|
||
|
|
messages=[
|
||
|
|
{"role": "system", "content": SYSTEM_PROMPT},
|
||
|
|
{"role": "user", "content": message.content},
|
||
|
|
],
|
||
|
|
) # Ollama Chat API <kcite ref="5"/><kcite ref="8"/>
|
||
|
|
|
||
|
|
answer = response["message"]["content"]
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
answer = f"**[FEHLER]** Ollama nicht erreichbar oder Anfrage fehlgeschlagen: `{e}`"
|
||
|
|
|
||
|
|
# 3) Entweder neue Nachricht schicken ...
|
||
|
|
await status_msg.delete()
|
||
|
|
await message.channel.send(answer)
|
||
|
|
|
||
|
|
client.run("MTQ3NTg1ODU5OTQwNTQyNDcwMQ.GY3Jqn.swTsWmlvnKbpwYiaNAHUBKqcZG9-kgSdnfiqyw")
|
||
|
|
|
||
|
|
|