import requests BASE_URL = "https://musicbrainz.org/ws/2/" HEADERS = { "User-Agent": "IRC-Bot/1.0 (https://tu-bot.com)" } def buscar_musicbrainz(tipo, consulta): """Consulta MusicBrainz y devuelve información detallada.""" endpoint = { "artista": "artist", "album": "release", "cancion": "recording" }.get(tipo.lower()) if not endpoint: return " Uso: `.music `" params = { "query": consulta, "fmt": "json", "limit": 1 } try: response = requests.get(f"{BASE_URL}{endpoint}/", params=params, headers=HEADERS, timeout=5) data = response.json() if endpoint == "artist" and data.get("artists"): artista = data["artists"][0] nombre = artista.get("name", "Desconocido") pais = artista.get("country", " Desconocido") fecha_inicio = artista.get("life-span", {}).get("begin", " Desconocida") fecha_fin = artista.get("life-span", {}).get("end", "️ Aún activo") genero = ", ".join(tag["name"] for tag in artista.get("tags", [])) if artista.get("tags") else " Sin géneros registrados" alias = ", ".join(ali["name"] for ali in artista.get("aliases", [])) if artista.get("aliases") else "Ninguno" tipo = artista.get("type", "Desconocido") area = artista.get("area", {}).get("name", "Desconocida") return (f" **Artista:** {nombre} ({tipo})\n" f" **País:** {pais} | **Región:** {area}\n" f" **Activo desde:** {fecha_inicio} | **Fin:** {fecha_fin}\n" f" **Géneros:** {genero}\n" f"🆔 **Alias:** {alias}") elif endpoint == "release" and data.get("releases"): album = data["releases"][0] titulo = album.get("title", "Desconocido") artista = album.get("artist-credit", [{}])[0].get("name", "Desconocido") fecha = album.get("date", " Fecha desconocida") label = album.get("label-info", [{}])[0].get("label", {}).get("name", " Desconocida") formatos = ", ".join(m["format"] for m in album.get("media", [])) if album.get("media") else " Desconocido" tracks = album.get("track-count", "N/A") barcode = album.get("barcode", "N/A") return (f" **Álbum:** {titulo} | **Artista:** {artista}\n" f" **Lanzamiento:** {fecha} | ️ **Sello:** {label}\n" f" **Formatos:** {formatos} | **Tracks:** {tracks}\n" f" **Código de Barras:** {barcode}") elif endpoint == "recording" and data.get("recordings"): cancion = data["recordings"][0] titulo = cancion.get("title", "Desconocida") artista = cancion.get("artist-credit", [{}])[0].get("name", "Desconocido") duracion_ms = cancion.get("length", 0) duracion = f"{duracion_ms // 60000}:{(duracion_ms // 1000) % 60:02d}" if duracion_ms else "⏳ Desconocida" albumes = ", ".join(r["title"] for r in cancion.get("releases", [])) if cancion.get("releases") else " No asociado a álbum" isrc = ", ".join(cancion.get("isrcs", [])) if "isrcs" in cancion else "N/A" return (f" **Canción:** {titulo} | **Artista:** {artista}\n" f"⏳ **Duración:** {duracion} min | **Álbumes:** {albumes}\n" f" **ISRC:** {isrc}") return " No encontré resultados en MusicBrainz." except requests.exceptions.RequestException as e: return f"️ Error en la consulta a MusicBrainz: {e}" def run(*args): """Ejecuta la búsqueda en MusicBrainz.""" if len(args) < 2: return " Uso: `.music `" tipo, consulta = args[0], " ".join(args[1:]) return buscar_musicbrainz(tipo, consulta) def help(): """Descripción del plugin para el comando .help""" return " Usa `.music ` para buscar información detallada en MusicBrainz."