myircbot/plugins/convert.py
2025-05-29 22:58:53 +02:00

53 lines
2.6 KiB
Python

class ConvertPlugin:
"""Plugin para conversión de unidades."""
conversiones = {
"m": {"km": 0.001, "cm": 100, "mm": 1000, "ft": 3.28084, "in": 39.3701},
"km": {"m": 1000, "cm": 100000, "mm": 1000000, "mi": 0.621371},
"cm": {"m": 0.01, "mm": 10, "in": 0.393701},
"mm": {"m": 0.001, "cm": 0.1},
"ft": {"m": 0.3048, "in": 12},
"in": {"m": 0.0254, "cm": 2.54, "ft": 0.0833333},
"kg": {"g": 1000, "lb": 2.20462, "oz": 35.274},
"g": {"kg": 0.001, "lb": 0.00220462, "oz": 0.035274},
"lb": {"kg": 0.453592, "g": 453.592, "oz": 16},
"oz": {"kg": 0.0283495, "g": 28.3495, "lb": 0.0625},
"c": {"f": lambda x: (x * 9/5) + 32, "k": lambda x: x + 273.15},
"f": {"c": lambda x: (x - 32) * 5/9, "k": lambda x: ((x - 32) * 5/9) + 273.15},
"k": {"c": lambda x: x - 273.15, "f": lambda x: ((x - 273.15) * 9/5) + 32},
"b": {"kb": 0.001, "mb": 0.000001, "gb": 0.000000001},
"kb": {"b": 1000, "mb": 0.001, "gb": 0.000001},
"mb": {"b": 1000000, "kb": 1000, "gb": 0.001},
"gb": {"b": 1000000000, "kb": 1000000, "mb": 1000}
}
def convertir_unidad(self, valor: float, unidad_origen: str, unidad_destino: str):
"""Convierte unidades de medida entre sí."""
unidad_origen = unidad_origen.lower()
unidad_destino = unidad_destino.lower()
if unidad_origen in self.conversiones and unidad_destino in self.conversiones[unidad_origen]:
conversion = self.conversiones[unidad_origen][unidad_destino]
resultado = conversion(valor) if callable(conversion) else valor * conversion
return f" {valor} {unidad_origen} equivale a **{resultado:.4f} {unidad_destino}**."
else:
return " Conversión no soportada. Usa `.convert help` para ver opciones."
def run(self, sender, *args):
"""Función principal ejecutada por el bot."""
if len(args) != 3:
return " Uso: `.convert <valor> <unidad_origen> <unidad_destino>` (Ej: `.convert 10 km m`)"
try:
valor = float(args[0])
return self.convertir_unidad(valor, args[1], args[2])
except ValueError:
return " El valor debe ser un número."
def help(self):
"""Descripción del plugin para el comando .help"""
return (" Usa `.convert <valor> <unidad_origen> <unidad_destino>` para convertir unidades.\n"
"Ejemplo: `.convert 100 cm m` → 100 cm equivale a 1.0 m.\n"
"**Unidades soportadas:** m, km, cm, mm, ft, in, kg, g, lb, oz, c, f, k, b, kb, mb, gb.")