[go: up one dir, main page]

0% encontró este documento útil (0 votos)
27 vistas8 páginas

Codigo Bot

InfoBot es un asistente de información personal que permite a los usuarios agregar, buscar, listar, mostrar y eliminar información en una base de conocimiento almacenada en un archivo JSON. El bot procesa comandos de texto y gestiona la información en categorías, proporcionando respuestas adecuadas según las consultas del usuario. Además, incluye funciones para cargar y guardar la base de conocimiento, así como para manejar errores durante estas operaciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas8 páginas

Codigo Bot

InfoBot es un asistente de información personal que permite a los usuarios agregar, buscar, listar, mostrar y eliminar información en una base de conocimiento almacenada en un archivo JSON. El bot procesa comandos de texto y gestiona la información en categorías, proporcionando respuestas adecuadas según las consultas del usuario. Además, incluye funciones para cargar y guardar la base de conocimiento, así como para manejar errores durante estas operaciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

# -*- coding: utf-8 -*-

import json

import os

import re

from datetime import datetime

class InfoBot:

def __init__(self, nombre="InfoBot"):

self.nombre = nombre

self.base_conocimiento = {}

self.archivo_db = "bot_database.json"

self.cargar_base_conocimiento()

def cargar_base_conocimiento(self):

"""Carga la base de conocimiento desde un archivo si existe."""

if os.path.exists(self.archivo_db):

try:

with open(self.archivo_db, 'r', encoding='utf-8') as archivo:

self.base_conocimiento = json.load(archivo)

print(f"Base de conocimiento cargada. {len(self.base_conocimiento)} entradas


disponibles.")

except Exception as e:

print(f"Error al cargar la base de conocimiento: {e}")

else:

print("No se encontró base de conocimiento. Se creará una nueva.")

def guardar_base_conocimiento(self):

"""Guarda la base de conocimiento en un archivo."""


try:

with open(self.archivo_db, 'w', encoding='utf-8') as archivo:

json.dump(self.base_conocimiento, archivo, ensure_ascii=False, indent=2)

print("Base de conocimiento guardada correctamente.")

except Exception as e:

print(f"Error al guardar la base de conocimiento: {e}")

def agregar_informacion(self, categoria, clave, valor):

"""

Agrega información a la base de conocimiento.

Args:

categoria: La categoría bajo la cual almacenar la información

clave: La clave o identificador de la información

valor: El valor o información a almacenar

"""

if categoria not in self.base_conocimiento:

self.base_conocimiento[categoria] = {}

self.base_conocimiento[categoria][clave] = {

"valor": valor,

"fecha_agregado": datetime.now().strftime("%Y-%m-%d %H:%M:%S")

self.guardar_base_conocimiento()

return f"Información agregada en {categoria}: {clave}"

def buscar_informacion(self, consulta):

"""
Busca información en la base de conocimiento.

Args:

consulta: Texto a buscar

Returns:

Lista de resultados que coinciden con la consulta

"""

resultados = []

consulta = consulta.lower()

for categoria, datos in self.base_conocimiento.items():

for clave, info in datos.items():

texto_busqueda = f"{categoria} {clave} {info['valor']}".lower()

if consulta in texto_busqueda:

resultados.append({

"categoria": categoria,

"clave": clave,

"valor": info['valor'],

"fecha": info.get('fecha_agregado', "Desconocida")

})

return resultados

def obtener_por_categoria(self, categoria):

"""Devuelve toda la información de una categoría específica."""

if categoria in self.base_conocimiento:

return self.base_conocimiento[categoria]
return {}

def eliminar_informacion(self, categoria, clave):

"""Elimina una entrada específica de la base de conocimiento."""

if categoria in self.base_conocimiento and clave in


self.base_conocimiento[categoria]:

del self.base_conocimiento[categoria][clave]

if not self.base_conocimiento[categoria]: # Si la categoría queda vacía

del self.base_conocimiento[categoria]

self.guardar_base_conocimiento()

return f"Información eliminada: {categoria} - {clave}"

return f"No se encontró la información: {categoria} - {clave}"

def listar_categorias(self):

"""Devuelve la lista de categorías disponibles."""

return list(self.base_conocimiento.keys())

def procesar_comando(self, comando):

"""

Procesa comandos de texto para interactuar con el bot.

Comandos:

- agregar [categoria] [clave]: [valor]

- buscar [consulta]

- listar categorias

- mostrar [categoria]

- eliminar [categoria] [clave]

- ayuda
"""

if comando.lower().startswith("agregar "):

# Formato: agregar categoria clave: valor

patron = r"agregar\s+(\w+)\s+([^:]+):\s*(.*)"

match = re.match(patron, comando, re.IGNORECASE)

if match:

categoria, clave, valor = match.groups()

return self.agregar_informacion(categoria.strip(), clave.strip(), valor.strip())

else:

return "Formato incorrecto. Usa: agregar categoria clave: valor"

elif comando.lower().startswith("buscar "):

consulta = comando[7:].strip()

resultados = self.buscar_informacion(consulta)

if resultados:

respuesta = f"Encontré {len(resultados)} resultados:\n"

for i, res in enumerate(resultados, 1):

respuesta += f"{i}. {res['categoria']} - {res['clave']}: {res['valor']}\n"

return respuesta

else:

return "No encontré información que coincida con tu búsqueda."

elif comando.lower() == "listar categorias":

categorias = self.listar_categorias()

if categorias:

return "Categorías disponibles:\n" + "\n".join(categorias)


else:

return "No hay categorías disponibles."

elif comando.lower().startswith("mostrar "):

categoria = comando[8:].strip()

datos = self.obtener_por_categoria(categoria)

if datos:

respuesta = f"Información en la categoría '{categoria}':\n"

for clave, info in datos.items():

respuesta += f"- {clave}: {info['valor']}\n"

return respuesta

else:

return f"No hay información en la categoría '{categoria}' o no existe."

elif comando.lower().startswith("eliminar "):

# Formato: eliminar categoria clave

partes = comando[9:].strip().split(maxsplit=1)

if len(partes) == 2:

categoria, clave = partes

return self.eliminar_informacion(categoria, clave)

else:

return "Formato incorrecto. Usa: eliminar categoria clave"

elif comando.lower() == "ayuda":

return """

Comandos disponibles:

- agregar [categoria] [clave]: [valor] - Agrega nueva información


- buscar [consulta] - Busca información en todas las categorías

- listar categorias - Muestra todas las categorías disponibles

- mostrar [categoria] - Muestra toda la información de una categoría

- eliminar [categoria] [clave] - Elimina una entrada específica

- ayuda - Muestra esta ayuda

"""

else:

return "Comando no reconocido. Escribe 'ayuda' para ver los comandos


disponibles."

def iniciar_bot():

print("=" * 50)

print("Iniciando InfoBot - Tu asistente de información personal")

print("=" * 50)

nombre_bot = input("¿Cómo quieres llamar a tu bot? (Enter para usar 'InfoBot'): ")

if not nombre_bot:

nombre_bot = "InfoBot"

bot = InfoBot(nombre_bot)

print(f"\n¡{nombre_bot} está listo para ayudarte!")

print("Escribe 'ayuda' para ver los comandos disponibles o 'salir' para terminar.")

while True:

comando = input(f"\n{nombre_bot}> ")

if comando.lower() == "salir":
print(f"¡Hasta pronto! {nombre_bot} ha guardado tu información.")

break

respuesta = bot.procesar_comando(comando)

print(respuesta)

if __name__ == "__main__":

iniciar_bot()

También podría gustarte