@@ -8,10 +8,10 @@ CHILDREN="true" # If we want child voicebanks, we do so we can get all songs fro
|
||||
START=0 # Start at the beginning of the recordset. if i wanted to make the file in chunks to use the api less i would use this and max to get the songs in chunks. They say dont use it "thousands of times a day", getting every teto song is 280 times. I think I'm ok. maybe.
|
||||
RESULTS=100 # Max results. Limit is 100.
|
||||
MAX=30000 # when to stop, there's as of 4-23-26 over 28,000 songs featuring Kasane Teto in the recordset i have selected.
|
||||
if [ ! -f var.json ]; then # var.json has our latest date, we use it to know where to stop going back, past it the songs already exist in the fortune file.
|
||||
echo '{"lastDate": "2000-04-21T00:00:00Z"}' > var.json # if it doesn't exist, we create it with a default date back in 2000.
|
||||
if [ ! -f dates/${ARTIST}var.json ]; then # var.json has our latest date, we use it to know where to stop going back, past it the songs already exist in the fortune file.
|
||||
echo '{"lastDate": "2000-04-21T00:00:00Z"}' > dates/${ARTIST}var.json # if it doesn't exist, we create it with a default date back in 2000.
|
||||
fi
|
||||
PREVDATE=$(jq -r '.lastDate' var.json)
|
||||
PREVDATE=$(jq -r '.lastDate' dates/${ARTIST}var.json)
|
||||
AFTERDATE=$(date -u -d "$PREVDATE + 1 Second" +"%Y-%m-%dT%H:%M:%SZ")
|
||||
echo "Result: $AFTERDATE"
|
||||
#rm tetofortunes var.json tetofortunes.dat # during testing we will remove everything, or if we want to regenerate the fortune file from scratch.
|
||||
@@ -27,9 +27,9 @@ if [ "$SONGS" -eq 0 ]; then
|
||||
echo "Result is empty. No more songs."
|
||||
exit 0
|
||||
fi
|
||||
DATE=$(echo "$DATA" | jq -r '.items[0].publishDate')
|
||||
DATE=$(date -u +%Y-%m-%dT00:00:00Z)
|
||||
echo "DATE: $DATE"
|
||||
echo "{\"lastDate\": \"$DATE\"}" > var.json
|
||||
echo "{\"lastDate\": \"$DATE\"}" > dates/${ARTIST}var.json
|
||||
# looping the api to get all songs we need.
|
||||
while true; do
|
||||
CURLURL="https://vocadb.net/api/songs?songTypes=Original&afterDate=${AFTERDATE}&&artistId%5B%5D=${ARTIST}&childVoicebanks=${CHILDREN}&onlyWithPvs=true&status=Finished&start=${START}&maxResults=${RESULTS}&sort=PublishDate&fields=PVs"
|
||||
@@ -51,8 +51,8 @@ while true; do
|
||||
echo "$url"
|
||||
echo ""
|
||||
echo "▼・ᴗ・▼"
|
||||
echo "%"
|
||||
done >> fortunes/tetosotd/tetofortunes
|
||||
echo "\`"
|
||||
done >> vocafortunes/vocadb/$ARTIST
|
||||
if [ "$START" -ge "$MAX" ]; then
|
||||
echo "Reached max results. Stopping."
|
||||
break
|
||||
@@ -60,9 +60,42 @@ while true; do
|
||||
echo "Done!"
|
||||
fi
|
||||
done
|
||||
|
||||
readarray -d '`' tetosongs < vocafortunes/vocadb/$ARTIST
|
||||
|
||||
readarray -td '' dups < <(
|
||||
(( ${#tetosongs[@]} == 0 )) ||
|
||||
printf '%s\0' "${tetosongs[@]}" |
|
||||
LC_ALL=C sort -z |
|
||||
LC_ALL=C uniq -zd
|
||||
)
|
||||
readarray -td '' uniq < <(
|
||||
(( ${#tetosongs[@]} == 0 )) ||
|
||||
printf '%s\0' "${tetosongs[@]}" |
|
||||
LC_ALL=C sort -z |
|
||||
LC_ALL=C uniq -zu
|
||||
)
|
||||
|
||||
echo ${#tetosongs[@]}
|
||||
if ((${#dups[@]} > 0)); then
|
||||
echo >&2 "array has duplicates:"
|
||||
echo ${#dups[@]}
|
||||
fi
|
||||
if ((${#uniq[@]} > 0)); then
|
||||
echo >&2 "Uniques:"
|
||||
echo ${#uniq[@]}
|
||||
fi
|
||||
|
||||
printf >&2 '%s' "${dups[@]}" > dups
|
||||
printf >&2 '%s' "${uniq[@]}" > uniq
|
||||
|
||||
cat uniq > fixed
|
||||
cat dups >> fixed
|
||||
sed -i '1,/^TETO SONG OF THE DAY!/{/^TETO SONG OF THE DAY!$/!d}' fixed
|
||||
rm vocafortunes/vocadb/$ARTIST
|
||||
rm uniq dups
|
||||
mv fixed vocafortunes/vocadb/$ARTIST
|
||||
# create the fortune database from tetofortunes
|
||||
rm fortunes/tetosotd/tetofortunes.dat # delete the old database if it extists.
|
||||
strfile -c % fortunes/tetosotd/tetofortunes fortunes/tetosotd/tetofortunes.dat
|
||||
git add fortunes/tetosotd/tetofortunes fortunes/tetosotd/tetofortunes.dat var.json
|
||||
git add vocafortunes/vocadb/$ARTIST dates/${ARTIST}var.json
|
||||
git commit -m "Update fortune files"
|
||||
git push -u origin main
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
#!/usr/bin/bash
|
||||
#
|
||||
# Updated 5-1-2026 to use new vocafortunes script instead of fortune/misfortune
|
||||
#
|
||||
#
|
||||
# download custom fortunes and config file
|
||||
echo "Updating tetosong..."
|
||||
# check if the config file exists, if not download it and prompt the user for options.
|
||||
|
||||
#### remove files from old version
|
||||
rm -rf ~/.local/share/tetosong/fortunes/
|
||||
# add new files
|
||||
mkdir -p ~/.local/share/tetosong
|
||||
|
||||
|
||||
mkdir -p ~/.local/share/tetosong/fortunes
|
||||
mkdir -p ~/.local/share/tetosong/fortunes/tetosotd
|
||||
curl -sLo ~/.local/share/tetosong/fortunes/tetosotd/tetofortunes https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/fortunes/tetosotd/tetofortunes
|
||||
curl -sLo ~/.local/sharetetosong/fortunes/tetosotd/tetofortunes.dat https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/fortunes/tetosotd/tetofortunes.dat
|
||||
mkdir -p ~/.local/share/tetosong/vocafortunes
|
||||
mkdir -p ~/.local/share/tetosong/vocafortunes/vocadb
|
||||
curl -sLo ~/.local/share/tetosong/vocafortunes/vocadb/140308 https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/vocafortunes/vocadb/140308
|
||||
AUDIO="$(. ~/.local/share/tetosong/tetosong.config; echo $AUDIO)"
|
||||
if [ "$AUDIO" = "YES" ]; then
|
||||
curl -sLo ~/.local/share/tetosong/SOTD.zip https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/audio/teto/SOTD.zip
|
||||
@@ -37,5 +42,7 @@ fi
|
||||
echo "writing tetosong to ~/.local/bin"
|
||||
mkdir -p ~/.local/bin
|
||||
curl -sLo ~/.local/bin/tetosong https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/tetosong
|
||||
curl -sLo ~/.local/bin/tetosong https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/vocafortune
|
||||
chmod +x ~/.local/bin/tetosong
|
||||
echo "Update complete"
|
||||
chmod +x ~/.local/bin/vocafortune
|
||||
echo "Make sure ~/.local/bin is in your PATH and you can get your Teto Song Of the Day by typing in tetosong or adding it to your bashrc :)"
|
||||
|
||||
1
dates/140308var.json
Normal file
1
dates/140308var.json
Normal file
@@ -0,0 +1 @@
|
||||
{"lastDate": "2026-05-02T00:00:00Z"}
|
||||
Binary file not shown.
27
installer.sh
27
installer.sh
@@ -1,16 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# check which fortune command is installed if any.
|
||||
if ! [ -x "$(command -v fortune)" ]; then
|
||||
echo 'fortune is not installed, checking for misfortune'm
|
||||
if ! [ -x "$(command -v misfortune)" ]; then
|
||||
echo 'neither program is installed, exiting'
|
||||
exit 1
|
||||
else
|
||||
echo 'misfortune found'
|
||||
fi
|
||||
else
|
||||
echo 'fortune found'
|
||||
fi
|
||||
#
|
||||
# Updated 5-1-2026 to use new vocafortunes script instead of fortune/misfortune
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
# download custom fortunes and config file
|
||||
echo "Downloading custom fortunes and config file..."
|
||||
@@ -38,10 +31,10 @@ case $yn in
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
|
||||
mkdir -p ~/.local/share/tetosong/fortunes
|
||||
mkdir -p ~/.local/share/tetosong/fortunes/tetosotd
|
||||
curl -sLo ~/.local/share/tetosong/fortunes/tetosotd/tetofortunes https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/fortunes/tetosotd/tetofortunes
|
||||
curl -sLo ~/.local/share/tetosong/fortunes/tetosotd/tetofortunes.dat https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/fortunes/tetosotd/tetofortunes.dat
|
||||
mkdir -p ~/.local/share/tetosong/vocafortunes
|
||||
mkdir -p ~/.local/share/tetosong/vocafortunes/vocadb
|
||||
curl -sLo ~/.local/share/tetosong/vocafortunes/vocadb/140308 https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/vocafortunes/vocadb/140308
|
||||
|
||||
|
||||
# set up autoupdater
|
||||
# i use systemd, so i use systemd timers. I'll figure out something for non-systemd users later.
|
||||
@@ -62,5 +55,7 @@ fi
|
||||
echo "writing tetosong to ~/.local/bin"
|
||||
mkdir -p ~/.local/bin
|
||||
curl -sLo ~/.local/bin/tetosong https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/tetosong
|
||||
curl -sLo ~/.local/bin/vocafortune https://raw.githubusercontent.com/eric5949/tetosong/refs/heads/main/vocafortune
|
||||
chmod +x ~/.local/bin/tetosong
|
||||
chmod +x ~/.local/bin/vocafortune
|
||||
echo "Make sure ~/.local/bin is in your PATH and you can get your Teto Song Of the Day by typing in tetosong or adding it to your bashrc :)"
|
||||
|
||||
@@ -4,10 +4,10 @@ CHILDREN="true" # If we want child voicebanks, we do so we can get all songs fro
|
||||
START=0 # Start at the beginning of the recordset. if i wanted to make the file in chunks to use the api less i would use this and max to get the songs in chunks. They say dont use it "thousands of times a day", getting every teto song is 280 times. I think I'm ok. maybe.
|
||||
RESULTS=100 # Max results. Limit is 100.
|
||||
MAX=30000 # when to stop, there's as of 4-23-26 over 28,000 songs featuring Kasane Teto in the recordset i have selected.
|
||||
if [ ! -f var.json ]; then # var.json has our latest date, we use it to know where to stop going back, past it the songs already exist in the fortune file.
|
||||
echo '{"lastDate": "2000-04-21T00:00:00Z"}' > var.json # if it doesn't exist, we create it with a default date back in 2000.
|
||||
if [ ! -f dates/${ARTIST}var.json ]; then # var.json has our latest date, we use it to know where to stop going back, past it the songs already exist in the fortune file.
|
||||
echo '{"lastDate": "2000-04-21T00:00:00Z"}' > dates/${ARTIST}var.json # if it doesn't exist, we create it with a default date back in 2000.
|
||||
fi
|
||||
PREVDATE=$(jq -r '.lastDate' var.json)
|
||||
PREVDATE=$(jq -r '.lastDate' dates/${ARTIST}var.json)
|
||||
AFTERDATE=$(date -u -d "$PREVDATE + 1 Second" +"%Y-%m-%dT%H:%M:%SZ")
|
||||
echo "Result: $AFTERDATE"
|
||||
#rm tetofortunes var.json tetofortunes.dat # during testing we will remove everything, or if we want to regenerate the fortune file from scratch.
|
||||
@@ -23,9 +23,9 @@ if [ "$SONGS" -eq 0 ]; then
|
||||
echo "Result is empty. No more songs."
|
||||
exit 0
|
||||
fi
|
||||
DATE=$(echo "$DATA" | jq -r '.items[0].publishDate')
|
||||
DATE=$(date -u +%Y-%m-%dT00:00:00Z)
|
||||
echo "DATE: $DATE"
|
||||
echo "{\"lastDate\": \"$DATE\"}" > var.json
|
||||
echo "{\"lastDate\": \"$DATE\"}" > dates/${ARTIST}var.json
|
||||
# looping the api to get all songs we need.
|
||||
while true; do
|
||||
CURLURL="https://vocadb.net/api/songs?songTypes=Original&afterDate=${AFTERDATE}&&artistId%5B%5D=${ARTIST}&childVoicebanks=${CHILDREN}&onlyWithPvs=true&status=Finished&start=${START}&maxResults=${RESULTS}&sort=PublishDate&fields=PVs"
|
||||
@@ -47,8 +47,8 @@ while true; do
|
||||
echo "$url"
|
||||
echo ""
|
||||
echo "▼・ᴗ・▼"
|
||||
echo "%"
|
||||
done >> tetofortunes
|
||||
echo "\`"
|
||||
done >> vocafortunes/vocadb/$ARTIST
|
||||
if [ "$START" -ge "$MAX" ]; then
|
||||
echo "Reached max results. Stopping."
|
||||
break
|
||||
@@ -56,6 +56,42 @@ while true; do
|
||||
echo "Done!"
|
||||
fi
|
||||
done
|
||||
|
||||
readarray -d '`' tetosongs < vocafortunes/vocadb/$ARTIST
|
||||
|
||||
readarray -td '' dups < <(
|
||||
(( ${#tetosongs[@]} == 0 )) ||
|
||||
printf '%s\0' "${tetosongs[@]}" |
|
||||
LC_ALL=C sort -z |
|
||||
LC_ALL=C uniq -zd
|
||||
)
|
||||
readarray -td '' uniq < <(
|
||||
(( ${#tetosongs[@]} == 0 )) ||
|
||||
printf '%s\0' "${tetosongs[@]}" |
|
||||
LC_ALL=C sort -z |
|
||||
LC_ALL=C uniq -zu
|
||||
)
|
||||
|
||||
echo ${#tetosongs[@]}
|
||||
if ((${#dups[@]} > 0)); then
|
||||
echo >&2 "array has duplicates:"
|
||||
echo ${#dups[@]}
|
||||
fi
|
||||
if ((${#uniq[@]} > 0)); then
|
||||
echo >&2 "Uniques:"
|
||||
echo ${#uniq[@]}
|
||||
fi
|
||||
|
||||
printf >&2 '%s' "${dups[@]}" > dups
|
||||
printf >&2 '%s' "${uniq[@]}" > uniq
|
||||
|
||||
cat uniq > fixed
|
||||
cat dups >> fixed
|
||||
sed -i '1,/^TETO SONG OF THE DAY!/{/^TETO SONG OF THE DAY!$/!d}' fixed
|
||||
rm vocafortunes/vocadb/$ARTIST
|
||||
rm uniq dups
|
||||
mv fixed vocafortunes/vocadb/$ARTIST
|
||||
|
||||
# create the fortune database from tetofortunes
|
||||
rm tetofortunes.dat # delete the old database if it extists.
|
||||
strfile -c % tetofortunes tetofortunes.dat
|
||||
#rm tetofortunes.dat # delete the old database if it extists.
|
||||
#strfile -c % tetofortunes tetofortunes.dat
|
||||
|
||||
51
tetosong
51
tetosong
@@ -1,4 +1,9 @@
|
||||
#!/usr/bin/bash
|
||||
#
|
||||
# Updated 5-1-26 to use new vocafortune script and not require fortune/misfortune.
|
||||
#
|
||||
#
|
||||
|
||||
# argument handling
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
@@ -31,41 +36,17 @@ fi
|
||||
# check if the user wants to play audio
|
||||
AUDIO="$(. ~/.local/share/tetosong/tetosong.config; echo $AUDIO)"
|
||||
|
||||
# check which fortune command is installed if any and then run it
|
||||
if ! [ -x "$(command -v fortune)" ]; then
|
||||
if ! [ -x "$(command -v misfortune)" ]; then
|
||||
echo 'No fortune commmand is installed, exiting!'
|
||||
exit 1
|
||||
else
|
||||
misfortune ~/.local/share/tetosong/fortunes/*/* >> /tmp/fortune # fortune and misfortune handle directories differently
|
||||
if [ "$AUDIO" = "YES" ]; then # i guess i could foregoe checking and just run the audio either way since i dont download it unless the user enables it, but i want them to be ableto turn it off if they choose to
|
||||
if grep -q "SV2" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/sv2SOTD.wav 2>/dev/null >/dev/null &
|
||||
elif grep -q "SV" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/svSOTD.wav 2>/dev/null >/dev/null &
|
||||
elif grep -q "重音テト" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/utSOTD.wav 2>/dev/null >/dev/null &
|
||||
else
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/sv2SOTD.wav 2>/dev/null >/dev/null &
|
||||
fi
|
||||
fi
|
||||
cat /tmp/fortune
|
||||
rm /tmp/fortune
|
||||
fi
|
||||
else
|
||||
fortune ~/.local/share/tetosong/fortunes/* >> /tmp/fortune
|
||||
if [ "$AUDIO" = "YES" ]; then
|
||||
if grep -q "SV2" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/sv2SOTD.wav 2>/dev/null >/dev/null &
|
||||
elif grep -q "SV" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/svSOTD.wav 2>/dev/null >/dev/null &
|
||||
elif grep -q "重音テト" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/utSOTD.wav 2>/dev/null >/dev/null &
|
||||
else
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/sv2SOTD.wav 2>/dev/null >/dev/null &
|
||||
fi
|
||||
vocafortune >> /tmp/fortune
|
||||
if [ "$AUDIO" = "YES" ]; then
|
||||
if grep -q "SV2" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/sv2SOTD.wav 2>/dev/null >/dev/null &
|
||||
elif grep -q "SV" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/svSOTD.wav 2>/dev/null >/dev/null &
|
||||
elif grep -q "重音テト" /tmp/fortune; then
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/utSOTD.wav 2>/dev/null >/dev/null &
|
||||
else
|
||||
nohup ffplay -nodisp -autoexit -v quiet ~/.local/share/tetosong/audio/teto/sv2SOTD.wav 2>/dev/null >/dev/null &
|
||||
fi
|
||||
|
||||
fi
|
||||
cat /tmp/fortune
|
||||
rm /tmp/fortune
|
||||
fi
|
||||
|
||||
10
vocafortune
Executable file
10
vocafortune
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
# VOCAFORTUNE! Make tetosong not need fortune anymore!
|
||||
while [ $# -gt 0 ]; do export "${1#-}"="$2"; shift 2; done # now it can be -l ./vocafortunes like a proper program!!!! # argument handling # i can use this anywhere!!!!!!! save this you!!!!!!
|
||||
#fortune script
|
||||
shopt -s globstar
|
||||
if [ -z "$l" ]; then export "DIR"="$HOME/.local/share/tetosong/vocafortunes/**"; else export "DIR"="$l/**"; fi
|
||||
for file in $DIR; do if [[ -f "$file" ]]; then readarray -td '`' temp < "$file"; array+=("${temp[@]}"); fi; done
|
||||
export "ITEMS"="${#array[@]}"
|
||||
export "CHOICE"="$(shuf -i 1-$ITEMS -n 1)"
|
||||
echo "${array[$CHOICE]}"
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user