Files
DiscordBot/cogs/npc.py
T

62 lines
2.3 KiB
Python

import discord
from discord.ext import commands
from utils.npc_memory import NPCMemory
from utils.npc_handler import NPCHandler
class NPCCog(commands.Cog):
def __init__(self, bot):
npc_handler = NPCHandler(NPCMemory())
self.bot = bot
self.npc_handler = npc_handler
self.player_contexts = {}
@commands.command(name="talk")
async def talk_to_npc(self, ctx, npc_name: str, *, message: str):
player_id = str(ctx.author.id)
if player_id not in self.player_contexts:
self.player_contexts[player_id] = {
'id': player_id,
'level': 1,
'reputation': 0,
'recent_actions': [],
'location': 'Newhaven'
}
# Send placeholder message
thinking_msg = await ctx.send(f"**{npc_name.replace('_', ' ').title()} is thinking...**")
# Get LLM response
response = self.npc_handler.chat_with_npc(
npc_name, message, self.player_contexts[player_id]
)
embed = discord.Embed(
title=f"{npc_name.replace('_', ' ').title()} says...",
description=response,
color=discord.Color.blue()
)
# Edit the original message with the response
await thinking_msg.edit(content=None, embed=embed)
@commands.command(name="npcs")
async def list_npcs(self, ctx):
npc_list = "\n".join([f"{name}" for name in self.npc_handler.npcs.keys()])
await ctx.send(f"Available NPCs:\n{npc_list}")
@commands.command(name="quest")
async def get_quest(self, ctx, npc_name: str):
player_id = str(ctx.author.id)
player_level = self.player_contexts.get(player_id, {}).get('level', 1)
quest = self.npc_handler.generate_quest(npc_name, player_level)
if quest:
embed = discord.Embed(
title=quest["title"],
description=quest["description"],
color=discord.Color.gold()
)
embed.add_field(name="Reward", value=quest["reward"])
embed.add_field(name="Difficulty", value=quest["difficulty"])
await ctx.send(embed=embed)
else:
await ctx.send("NPC not found or unable to generate quest.")
async def setup(client):
await client.add_cog(NPCCog(client))