modified: bot.py
This commit is contained in:
125
bot.py
125
bot.py
@@ -435,6 +435,129 @@ async def startgiveaway(ctx, platform: str, prize: str, num_winners: int, title:
|
|||||||
|
|
||||||
check_giveaway.start(giveaway_id)
|
check_giveaway.start(giveaway_id)
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
live_chats = {}
|
||||||
|
live_chat_queue = asyncio.Queue()
|
||||||
|
|
||||||
|
def read_file(filename):
|
||||||
|
try:
|
||||||
|
with open(filename, "r", encoding="utf-8") as file:
|
||||||
|
return file.read()
|
||||||
|
except FileNotFoundError:
|
||||||
|
return "Du bist ein hilfreicher Assistent, der Fragen beantwortet."
|
||||||
|
|
||||||
|
def load_chat_history(channel_id):
|
||||||
|
"""Lädt die Chat-Historie für einen bestimmten Kanal."""
|
||||||
|
history_file = os.path.join(CACHE_DIR, f"chat_{channel_id}.json")
|
||||||
|
if os.path.exists(history_file):
|
||||||
|
with open(history_file, "r", encoding="utf-8") as file:
|
||||||
|
return json.load(file)
|
||||||
|
return []
|
||||||
|
|
||||||
|
def save_chat_history(channel_id, messages):
|
||||||
|
"""Speichert die Chat-Historie für einen bestimmten Kanal."""
|
||||||
|
history_file = os.path.join(CACHE_DIR, f"chat_{channel_id}.json")
|
||||||
|
with open(history_file, "w", encoding="utf-8") as file:
|
||||||
|
json.dump(messages, file, indent=4)
|
||||||
|
|
||||||
|
@client.hybrid_command()
|
||||||
|
async def startlivechat(ctx):
|
||||||
|
"""Startet den Live-Chat im aktuellen Kanal."""
|
||||||
|
channel_id = ctx.channel.id
|
||||||
|
if channel_id in live_chats and live_chats[channel_id]["active"]:
|
||||||
|
await ctx.send("Live-Chat ist bereits aktiv.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Lade oder initialisiere die Chat-Historie
|
||||||
|
history = load_chat_history(channel_id)
|
||||||
|
live_chats[channel_id] = {"messages": history, "active": True}
|
||||||
|
|
||||||
|
await ctx.send("Live-Chat gestartet. Nachrichten werden verarbeitet.")
|
||||||
|
|
||||||
|
@client.hybrid_command()
|
||||||
|
async def stoplivechat(ctx):
|
||||||
|
"""Beendet den Live-Chat im aktuellen Kanal."""
|
||||||
|
channel_id = ctx.channel.id
|
||||||
|
if channel_id in live_chats:
|
||||||
|
live_chats[channel_id]["active"] = False
|
||||||
|
await ctx.send("Live-Chat wurde beendet.")
|
||||||
|
else:
|
||||||
|
await ctx.send("Kein aktiver Live-Chat in diesem Kanal.")
|
||||||
|
|
||||||
|
@client.event
|
||||||
|
async def on_message(message):
|
||||||
|
if message.author.bot: # Bots ignorieren
|
||||||
|
return
|
||||||
|
|
||||||
|
channel_id = message.channel.id
|
||||||
|
|
||||||
|
# Prüfen, ob der Live-Chat aktiv ist
|
||||||
|
if channel_id in live_chats and live_chats[channel_id]["active"]:
|
||||||
|
timestamp = int(time.time()) # Unix-Timestamp
|
||||||
|
message_data = {
|
||||||
|
"timestamp": timestamp,
|
||||||
|
"message_id": message.id,
|
||||||
|
"user_id": message.author.id,
|
||||||
|
"nickname": message.author.display_name,
|
||||||
|
"content": message.content
|
||||||
|
}
|
||||||
|
|
||||||
|
# Historie aktualisieren
|
||||||
|
live_chats[channel_id]["messages"].append(message_data)
|
||||||
|
save_chat_history(channel_id, live_chats[channel_id]["messages"])
|
||||||
|
|
||||||
|
# Nachricht zur AI-Warteschlange hinzufügen
|
||||||
|
await live_chat_queue.put((channel_id, message_data))
|
||||||
|
|
||||||
|
await client.process_commands(message)
|
||||||
|
|
||||||
|
async def process_live_chat_queue():
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
channel_id, message_data = await live_chat_queue.get()
|
||||||
|
|
||||||
|
# Kontext zusammenstellen: Introduction + Chat-Historie
|
||||||
|
introduction = read_file("chat_intro.txt") # Neue Introduction-Datei
|
||||||
|
chat_history = load_chat_history(channel_id)
|
||||||
|
formatted_history = "\n".join(
|
||||||
|
f"{msg['timestamp']} | {msg['user_id']} | {msg['nickname']}: {msg['content']}"
|
||||||
|
for msg in chat_history
|
||||||
|
)
|
||||||
|
|
||||||
|
# Anfrage an die AI senden
|
||||||
|
ai_response = await send_to_ai(introduction, formatted_history)
|
||||||
|
|
||||||
|
if ai_response.strip() != "::null::":
|
||||||
|
channel = client.get_channel(channel_id)
|
||||||
|
if channel:
|
||||||
|
await channel.send(f"**AI:** {ai_response}")
|
||||||
|
|
||||||
|
live_chat_queue.task_done()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error processing live chat queue: {e}")
|
||||||
|
|
||||||
|
async def send_to_ai(introduction, chat_history):
|
||||||
|
"""Sendet den Chat-Verlauf mit Introduction an die AI."""
|
||||||
|
try:
|
||||||
|
response = openai_instance.chat.completions.create(
|
||||||
|
model="gpt-4",
|
||||||
|
messages=[
|
||||||
|
{"role": "system", "content": introduction},
|
||||||
|
{"role": "user", "content": f"Hier ist der bisherige Chat-Verlauf:\n{chat_history}\nAntworte auf die letzte Nachricht."}
|
||||||
|
],
|
||||||
|
temperature=0.7,
|
||||||
|
max_tokens=150
|
||||||
|
)
|
||||||
|
return response.choices[0].message.content
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"AI processing error: {e}")
|
||||||
|
return "::null::"
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@client.hybrid_command()
|
@client.hybrid_command()
|
||||||
async def setlocalpermission(ctx, permission_level: int):
|
async def setlocalpermission(ctx, permission_level: int):
|
||||||
"""Allows an admin or higher to set their own local permission level."""
|
"""Allows an admin or higher to set their own local permission level."""
|
||||||
@@ -497,7 +620,6 @@ async def on_interaction(interaction):
|
|||||||
# Logge Interaktionen, die nicht den erwarteten Typ haben
|
# Logge Interaktionen, die nicht den erwarteten Typ haben
|
||||||
logger.error(f"Unbekannte Interaktion: {interaction.type}, Daten: {interaction.data}")
|
logger.error(f"Unbekannte Interaktion: {interaction.type}, Daten: {interaction.data}")
|
||||||
|
|
||||||
|
|
||||||
def read_introduction():
|
def read_introduction():
|
||||||
try:
|
try:
|
||||||
with open("introduction.txt", "r", encoding="utf-8") as file:
|
with open("introduction.txt", "r", encoding="utf-8") as file:
|
||||||
@@ -645,6 +767,7 @@ background_data = read_background_data("background_data.txt")
|
|||||||
@client.event
|
@client.event
|
||||||
async def on_ready():
|
async def on_ready():
|
||||||
client.loop.create_task(process_ai_queue())
|
client.loop.create_task(process_ai_queue())
|
||||||
|
client.loop.create_task(process_live_chat_queue()) # Starte die Queue-Verarbeitung
|
||||||
logger.info("Bot is ready!")
|
logger.info("Bot is ready!")
|
||||||
logger.info(f"Logged in as: {client.user.name}")
|
logger.info(f"Logged in as: {client.user.name}")
|
||||||
logger.info(f"Client ID: {client.user.id}")
|
logger.info(f"Client ID: {client.user.id}")
|
||||||
|
|||||||
Reference in New Issue
Block a user