J.A.R.V.I.S-rust/resources/commands/unit_convert/length.lua
Bossiara13 84d3b57ddc feat: unit conversion + random generators packs (7 new commands)
Two pure-Lua packs that don't need network or LLM — pure offline utilities.

unit_convert (resources/commands/unit_convert/, 4 commands)
  - convert.length      "переведи 100 метров в футы" / "сколько 5 миль в км"
                        meters↔feet, km↔miles. Pluralises russian unit names.
  - convert.weight      "переведи 70 кг в фунты"
                        kg↔lbs.
  - convert.temperature "переведи 100 цельсий в фаренгейт" / "минус 40 в цельсий"
                        Handles negative numbers. C↔F formulas inline.
  - convert.speed       "переведи 100 км в час в мили в час"
                        km/h↔mph.
  - All round results to 1-2 decimal places, speak with proper Russian
    grammatical number (фут/фута/футов).

generators (resources/commands/generators/, 3 commands)
  - gen.coin       "подбрось монету" / "орёл или решка"
                   → "Орёл!" or "Решка!" (math.random with time+minute seed)
  - gen.password   "сгенерируй пароль 16 символов"
                   → cryptographically-ish 6..64-char password,
                   alphanumeric + !@#$%^&*-_=+, copies to clipboard,
                   SPEAKS LENGTH ONLY (never echoes the password).
                   Default 16 chars if no number in phrase.
  - gen.uuid       "сгенерируй uuid" / "юид"
                   → v4 UUID, copies to clipboard, speaks last 4 chars
                   (confirmation without 32-char monologue).

Tests: 112/112 pass (commands::tests auto-validates).
Pack count: 62 → 64.
2026-05-15 18:41:44 +03:00

33 lines
1.5 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Длина: метры ↔ футы, км ↔ мили
local phrase = (jarvis.context.phrase or ""):lower()
local n_str = phrase:match("([%d%.,]+)")
if not n_str then return jarvis.cmd.error("Не понял число.") end
local n = tonumber((n_str:gsub(",", ".")))
if not n then return jarvis.cmd.error("Не понял число.") end
-- detect "in" target — "в футы" / "в метры" / "в км" / "в мили"
-- and source from before "в" or from common units in phrase
local result, unit_out
if phrase:find("в фут") or phrase:find("to feet") then
-- meters → feet
result = n * 3.28084
unit_out = result < 2 and "фут" or (result < 5 and "фута" or "футов")
elseif phrase:find("в метр") or phrase:find("to meters") then
-- feet → meters
result = n / 3.28084
unit_out = "метров"
elseif phrase:find("в милях") or phrase:find("в миль") or phrase:find("to miles") then
-- km → miles
result = n * 0.621371
unit_out = result < 2 and "миля" or (result < 5 and "мили" or "миль")
elseif phrase:find("в километр") or phrase:find("в км") or phrase:find("to km") then
-- miles → km
result = n * 1.60934
unit_out = "километров"
else
return jarvis.cmd.error("Скажите в чём перевести: в метры/футы/км/мили.")
end
local rounded = math.floor(result * 100 + 0.5) / 100
return jarvis.cmd.ok(string.format("%g %s.", rounded, unit_out))