Browse Source

Add say script

master
Sergey Kiselev 1 year ago
parent
commit
b25228bf42
  1. 119
      date2word.lua
  2. 146
      say

119
date2word.lua

@ -0,0 +1,119 @@
#!/usr/local/bin/lua53
-- Месяцы
m = { "января", "февраля", "марта", "апреля", "мая", "июня",
"июля", "августа", "сентября", "октября", "ноября", "декабря" }
-- Единицы
l1 = {
{ "первое", "одна", "первого" },
{ "второе", "две", "второго" },
{ "третье", "три", "третьего" },
{ "четвертое", "четыре", "четвертого" },
{ "пятое", "пять", "пятого" },
{ "шестое", "шесть", "шестого" },
{ "седьмое", "семь", "седьмого" },
{ "восьмое", "восемь", "восьмого" },
{ "девятое", "девять", "девятого" },
{ "десятое", "десять", "десятого" },
{ "одиннадцатое", "одиннадцать", "одиннадцатого" },
{ "двенадцатое", "двенадцать", "двенадцатого" },
{ "тринадцатое", "тринадцать", "тринадцатого" },
{ "четырнадцатое", "четырнадцать", "четырнадцатого" },
{ "пятнадцатое", "пятнадцать", "пятнадцатого" },
{ "шестнадцатое", "шестнадцать", "шестнадцатого" },
{ "семнадцатое", "семнадцать", "семнадцатого" },
{ "восемнадцатое", "восемнадцать", "восемнадцатого" },
{ "девятнадцатое", "девятнадцать", "девятнадцатого" },
{ "двадцатое", "двадцать", "двадцатого" }
}
-- Десятки
l10 = {
{ "десятое", "десять", "десятого" },
{ "двадцатое", "двадцать", "двадцатого" },
{ "тридцатое", "тридцать", "тридцатого" },
{ "", "сорок", "сорокового" },
{ "", "пятьдесят", "пятидесятого" },
{ "", "шестьдесят", "шестидесятого" },
{ "", "семьдесят", "семидесятого" },
{ "", "восемьдесят", "восьмидесятого" },
{ "", "девяносто", "девяностого" }
}
-- Сотни
l100 = {
{ "сто", "сотого" },
{ "двести", "двухсотого" }, { "триста", "трехсотого" },
{ "четыреста", "четырехсотого" }, { "пятьсот", "пятисотого" },
{ "шестьсот", "шестисотого" }, { "семьсот", "семисотого" },
{ "восемьсот", "восьмисотого" }, { "девятьсот", "девятисотого" }
}
-- Тысячи
l1000 = {
"тысячного", "двухтысячного", "трехтысячного", "четырехтысячного",
"пятитысячного", "шеститысячного", "семитысячного", "восьмитысячного",
"девятитысячного"
}
sym = { "тысяча", "тысячи", "тысяч" }
d = tonumber(os.date('%d'))
lettday = ""
if ( math.fmod(d, 10) == 0 ) then
lettday = l10[d / 10][1]
else
if ( d <= 20 ) then
lettday = l1[d][1]
else
n10 = d // 10
n1 = math.fmod(d, 10)
lettday = l10[n10][2] .. " " .. l1[n1][1]
end
end
lettmonth = m[tonumber(os.date('%m'))]
y = tonumber(os.date('%Y'))
n1000 = y // 1000
n100 = math.fmod(y,1000) // 100
n10 = math.fmod(y,100)
n1 = math.fmod(n10,10)
lettyear = ""
if ( n1000 > 0 and n100 == 0 and n10 == 0 and n1 == 0 ) then
lettyear = l1000[n1000]
elseif ( n1000 > 0 ) then
lettyear = l1[n1000][2]
if ( n1000 == 1 ) then
lettyear = lettyear .. " " .. sym[1]
elseif ( n1000 < 5 ) then
lettyear = lettyear .. " " .. sym[2]
else
lettyear = lettyear .. " " .. sym[3]
end
end
if ( n100 > 0 and n10 == 0 and n1 == 0 ) then
lettyear = lettyear .. " " .. l100[n100][2]
elseif ( n100 > 0 ) then
lettyear = lettyear .. " " .. l100[n100][1]
end
if ( n10 > 0 and n1 == 0 ) then
lettyear = lettyear .. " " .. l10[n10 / 10][3]
elseif ( n10 < 20 ) then
lettyear = lettyear .. " " .. l1[n10][3]
else
lettyear = lettyear .. " " .. l10[n10 // 10][2] .. " " .. l1[n1][3]
end
letters = lettday .. " " .. lettmonth .. " " .. lettyear .. " года"
print(letters)

146
say

@ -0,0 +1,146 @@
#!/bin/sh
#
_usage() {
cat <<EOF
Usage:
say [-h] -d | -g | -m <message> | -t <dev> [-n] [-o <file>]
-h show this help message
-d say date
-g godville.net
-m custom message
-t say device themperature (only cpu dev is supported)
-n show notification
-o save to file
Example:
say -m "Hello, World!" -n -o hello.wav
EOF
exit ${1}
}
_pluralform(){
n=$(( ${1} % 100 ))
n1=$(( ${n} % 10 ))
if [ ${n} -gt 10 -a ${n} -lt 20 ]; then
echo ${4}
elif [ ${n1} -gt 1 -a ${n1} -lt 5 ]; then
echo ${3}
elif [ ${n1} -eq 1 ]; then
echo ${2}
else
echo ${4}
fi
}
_date() {
echo "Сегодня - $( date '+%A' ), $( date2word.lua )."
}
_godville() {
base="https://godville.net/gods/api"
god=""
api_key=""
url="${base}/${god}/${api_key}"
quote="$( ${CURL} "${url}" | jq ".diary_last" )"
echo "${quote}"
}
_temperature() {
D=${1:-none}
M=
case ${D} in
none) M="А куда градусник прикладывать?" ;;
cpu)
t=0
ncpu=$( sysctl -n hw.ncpu )
for C in $( seq 0 $(( ${ncpu} - 1 )) ); do
t1=$( sysctl -n dev.cpu.${C}.temperature 2>/dev/null | \
sed 's/,.*//' )
t1=${t1:-0}
if [ ${t1} -gt ${t} ]; then t=${t1}; fi
done
if [ ${t} -eq 0 ]; then
M="Градусник у процессора сломался или не поддерживается."
else
M="Температура центрального процессора: ${t}"
M="${M} $( _pluralform ${t} градус градуса градусов )"
M="${M} по Цельсию."
fi
;;
esac
echo "${M}"
}
if [ $# -lt 1 ]; then _usage; fi
SAY_CMD="$( which RHVoice-test )"
if [ -z "${SAY_CMD}" ]; then
echo "Speech synthesizer not found"
exit 1
fi
SAY_PARAM="--rate 95 --pitch 120 --volume 30 --profile elena+slt"
CURL="$( which curl )"
if [ -z "${CURL}" ]; then
echo "curl is required, but not found"
exit 1
else
CURL="${CURL} -s"
fi
NOTIFY="$( which notify-send )"
ACTION=
#FILE=
DEV=
MSG=
SEND=0
SUMMARY=
while getopts dghm:no:t: OPT
do
case ${OPT} in
d|g|m|t)
if [ -z "${ACTION}" ]; then
case ${OPT} in
d) ACTION="date" ;;
g)
ACTION="godville"
SUMMARY="Годвиль - Вести с полей" ;;
m)
ACTION="message"
MSG="${OPTARG}" ;;
t)
ACTION="temperature"
DEV="${OPTARG}" ;;
esac
else
echo "Only one of the options -d, -f, -g, -m, -t is allowed."
exit 2
fi ;;
n) SEND=1 ;;
o) SAY_PARAM="${SAY_PARAM} -o ${OPTARG}" ;;
h) _usage 0 ;;
*) _usage 2 ;;
esac
done
if [ "${ACTION}" != "message" ]; then
MSG="$( _${ACTION} ${DEV} )"
fi
if [ ${SEND} -eq 1 ] && [ -n "${NOTIFY}" ]; then
${NOTIFY} -u low -t 10000 -i dialog-information "${SUMMARY:- }" "${MSG}"
fi
echo "${MSG}" | ${SAY_CMD} ${SAY_PARAM}
Loading…
Cancel
Save