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.
This commit is contained in:
parent
20b6b06b5d
commit
84d3b57ddc
9 changed files with 289 additions and 0 deletions
33
resources/commands/unit_convert/length.lua
Normal file
33
resources/commands/unit_convert/length.lua
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
-- Длина: метры ↔ футы, км ↔ мили
|
||||
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))
|
||||
Loading…
Add table
Add a link
Reference in a new issue