|
|
@ -0,0 +1,531 @@ |
|
|
|
#!/bin/bash |
|
|
|
################################################################################ |
|
|
|
# |
|
|
|
# Authors: |
|
|
|
# |
|
|
|
# [@cel](@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519) |
|
|
|
# [@Fred](@9BbJwPDjcyIqrOUPNn0nJZBduWdIrpMk3Cjz5MP361s=.ed25519) |
|
|
|
# [@Boris](@l5nYExWYIgDLV6BYHOJPoI97jIUyTdSm8CTLpQ0XeOg=.ed25519) |
|
|
|
# [@poka](@vDQif9KU3T78XJx+NliK+wdo1vmehHZCWqD+3X700Uk=.ed25519) |
|
|
|
# @[chamalow](@qio8/4L4vnzq3qRD0dqKI7sTpey54u8ZWbaICfpJOZw=.ed25519) |
|
|
|
# |
|
|
|
# Version: 1.0 |
|
|
|
# |
|
|
|
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) |
|
|
|
# |
|
|
|
########################################################################################### |
|
|
|
# PREVENT DOUBLE PAYEMENT |
|
|
|
# ADD Ğ1 Layer 10 LOVE to message writer you like ! |
|
|
|
############################################################################################ |
|
|
|
|
|
|
|
# Customizable |
|
|
|
|
|
|
|
# debugMsgMode, when set to 1 does doesn't send transaction and does not update "last timestamp" |
|
|
|
debugMsgMode=0 |
|
|
|
|
|
|
|
# If you don't want to wait |
|
|
|
readable=1 |
|
|
|
|
|
|
|
minimumAmountPerLikeInUD="0.1" |
|
|
|
|
|
|
|
############################################################################################ |
|
|
|
|
|
|
|
# Let's get Ğ1 public and private keys |
|
|
|
g1pub=$(cat ~/.ssb/secret.dunikey | grep "pub" | cut -d ' ' -f 2) |
|
|
|
g1priv=$(cat ~/.ssb/secret.dunikey | grep "sec" | cut -d ' ' -f 2) |
|
|
|
|
|
|
|
# SSB pubkey |
|
|
|
ssbpub=$(cat ~/.ssb/secret | grep public\" | cut -d ' ' -f 4 | cut -d '.' -f 1 | sed s/\"//g) |
|
|
|
|
|
|
|
defaultAmountPerLikeInUD="0.1" |
|
|
|
bold=$(tput bold) |
|
|
|
normal=$(tput sgr0) |
|
|
|
ssbMaxSize=8192 |
|
|
|
|
|
|
|
baseSizeOfAMessageFile=$(wc -c samples/message.json | awk '{print $1}') |
|
|
|
sizeOfATagMention=$(wc -c samples/tag_mention.json | awk '{print $1}') |
|
|
|
sizeOfAUserMention=$(wc -c samples/user_mention.json | awk '{print $1}') |
|
|
|
sizeOfAPostMention=$(wc -c samples/post_mention.json | awk '{print $1}') |
|
|
|
|
|
|
|
|
|
|
|
############################################################################################ |
|
|
|
#### CHECK LIKE AND SEND LOVE |
|
|
|
# Let's get Ğ1 account balance |
|
|
|
echo "" |
|
|
|
echo -e "${bold}Welcome${normal} to the Ğ1/SSB-like microdonation system!\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
echo "MMMMMMMMMMMMMNk;'cdxxd:,c0WMMMMMMMMMMMMM |
|
|
|
MMMMMMMMMMMMMNx,. .;kWMMMMMMMMMMMMM |
|
|
|
MMMMMMMMMMMMMMMNOdlccld0NMMMMMMMMMMMMMMM |
|
|
|
MMMMMMMMMMMWXko:,'....',:okXWMMMMMMMMMMM |
|
|
|
MMMMMMMMMNk:. .cOWMMMMMMMMM |
|
|
|
MMMMMMMW0: .c0MMMMMMMM" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
echo "MMMMMMWk. 'lxkOOkdc' .cOWMMMMMMM |
|
|
|
MMMMMMO' 'kNMMMMMMMMNxcoOXWMMMMMMMMM |
|
|
|
MMMMMNl '0MMMMMMMMMMMMMMMMMMMMMMMMMM |
|
|
|
MMMMMX; cNMMMMMMMNOkkkkkkkkkkONMMMMM |
|
|
|
MMMMMNc ;XMMMMMMMNd' .OMMMMM |
|
|
|
MMMMMWx. cKMMMMMMMWKc. .OMMMMM |
|
|
|
MMMMMMNo. .lkKXNNXKkc. .OMMMMM" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
echo "MMMMMMMNd. ...... .OMMMMM |
|
|
|
MMMMMMMMWKl. 'c:. .OMMMMM |
|
|
|
MMMMMMMMMMWXkc,.. ..,lkXWWO:;OMMMMM |
|
|
|
MMMMMMMMMMMMMMWX0OxddxO0XWMMMMMMWXNMMMMM |
|
|
|
MMMMMMMMMMMMMMMMNx;'',dNMMMMMMMMMMMMMMMM |
|
|
|
MMMMMMMMMMMMMMMMK, '0MMMMMMMMMMMMMMMM |
|
|
|
MMMMMMMMMMMMMMMMNd. .oNMMMMMMMMMMMMMMMM |
|
|
|
" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
printf "You know your SSB pubkey:\n%s\n\n" $ssbpub |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
printf "...but did you know it is also a valid Ğ1 wallet?\n%s\n\n" $g1pub |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
printf "Let's check the current balance of your wallet!\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
printf "I am interrogating the Ğ1 blockchain to check if anyone has already sent you Ğ1...\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
printf "A moment please...\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
|
|
|
|
silkajRelativeAmountPattern='Total\sRelative\s+=\s+(.*)\s+UD' |
|
|
|
|
|
|
|
|
|
|
|
duniter_servers[0]="duniter-g1.p2p.legal:443" |
|
|
|
duniter_servers[1]="g1.duniter.org:443" |
|
|
|
duniter_servers[2]="g1.presles.fr:443" |
|
|
|
duniter_servers[3]="balboa.altsysnet.com:10900" |
|
|
|
duniter_servers[4]="remuniter.cgeek.fr:16120" |
|
|
|
duniter_servers[5]="duniter.moul.re:443" |
|
|
|
duniter_servers[6]="77.152.31.154:20901" |
|
|
|
duniter_servers[7]="duniter.g1.1000i100.fr:443" |
|
|
|
|
|
|
|
silkajExitCode=1 |
|
|
|
i=0 |
|
|
|
|
|
|
|
while [ $silkajExitCode -ne 0 ] && [ $i -lt ${#duniter_servers[@]} ] |
|
|
|
do |
|
|
|
|
|
|
|
echo "Testing server ${duniter_servers[$i]}..." |
|
|
|
echo "" |
|
|
|
silkajOutput=$(silkaj -p "${duniter_servers[$i]}" balance $g1pub 2>/dev/null) |
|
|
|
silkajExitCode=$? |
|
|
|
|
|
|
|
((i++)) |
|
|
|
done |
|
|
|
|
|
|
|
if [ $silkajExitCode -eq 1 ] |
|
|
|
then |
|
|
|
echo "The server did not respond well. Please try again." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ $silkajOutput =~ $silkajRelativeAmountPattern ]] |
|
|
|
then |
|
|
|
balance="${BASH_REMATCH[1]}" |
|
|
|
else |
|
|
|
echo "Account balance wasn't found." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
printf "You have ${bold}%s UDĞ1${normal} on your Duniter Ğ1 wallet.\n\n" "$balance" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
printf "Want to show your appreciation of your fellow butts' posts while helping spreading awareness about libre currencies?\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 3; fi |
|
|
|
|
|
|
|
|
|
|
|
# BEGIN timestamp computation |
|
|
|
self=$(sbotc whoami | jq -r .id) || exit 1 |
|
|
|
ssb_dir=~/.${ssb_appname:-ssb} |
|
|
|
id_part=$(echo "$self" | sed 's/\//_/g' | tail -c +2 | head -c 9) |
|
|
|
state_file=$ssb_dir/likes-g1-$id_part.ts |
|
|
|
|
|
|
|
current_ts=$(date -u +%s%N | cut -b1-13) |
|
|
|
|
|
|
|
if [ -s "$state_file" ] |
|
|
|
then |
|
|
|
last_ts=$(cat "$state_file") || exit 1 |
|
|
|
else |
|
|
|
# timestamp from 24h ago |
|
|
|
last_ts=$((current_ts - 24*3600*1000 - 1)) |
|
|
|
#else last_ts=null |
|
|
|
fi |
|
|
|
|
|
|
|
days_from_last_tx=$(( (current_ts - last_ts) / (24*60*60*1000) )) |
|
|
|
# END timestamp computation |
|
|
|
|
|
|
|
|
|
|
|
printf "First, let's see how much ❤ you gave lately...\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
|
|
|
|
declare -A likesNbPerAuthor |
|
|
|
|
|
|
|
declare -A likedPosts |
|
|
|
declare -A likesNbPerPost |
|
|
|
|
|
|
|
declare -A postsTimestamps |
|
|
|
|
|
|
|
declare -A excerpts |
|
|
|
|
|
|
|
totalLikesGiven=0 |
|
|
|
|
|
|
|
process_msg() { |
|
|
|
|
|
|
|
msg=$1 |
|
|
|
target_id=$(printf %s "$msg" | jq -r '.value?.content?.vote?.link') || return 1 |
|
|
|
target_msg=$(sbotc query '[{"$filter":{"value":{"content":{}},"key":"'"$target_id"'"}}]') || return 1 |
|
|
|
target_author=$(printf %s "$target_msg" | jq -r .author) || return 1 |
|
|
|
|
|
|
|
msg_content=$(printf %s "$target_msg" | jq -r .content?.text) || return 1 |
|
|
|
|
|
|
|
# beware of markdown ! |
|
|
|
msg_excerpt=${msg_content:0:10} |
|
|
|
|
|
|
|
#root_id=$(printf %s "$target_msg" | jq -r .content?.root) || return 1 |
|
|
|
#[[ $root_id = "null" ]] && root_id=$target_id |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
process_author() { |
|
|
|
|
|
|
|
author_id=$1 |
|
|
|
g1_author=$(echo $author_id | cut -d '.' -f 1 | cut -d '@' -f2 | base64 -d | base58) |
|
|
|
author_name=$(sbotc query '[{"$filter":{"value":{"content":{"about":"'"$author_id"'"}}}}]' | jq .value?.content?.name | grep -v null | tail -n 1) |
|
|
|
author_name=${author_name:1:-1} |
|
|
|
} |
|
|
|
|
|
|
|
authorsNb=0 |
|
|
|
|
|
|
|
i=0 |
|
|
|
|
|
|
|
messages=$(sbotc query '[{"$filter":{"value":{"author":"'"$self"'","content":{"type":"vote","vote":{"expression":"Like"}},"timestamp":{"$gt":'"$last_ts"'}}}}]') |
|
|
|
while read -r msg |
|
|
|
do |
|
|
|
priv=$(printf %s "$msg" | jq .value.content.private) |
|
|
|
if [[ $priv = true ]] |
|
|
|
then |
|
|
|
printf "Private message $priv, continue to next one\n" >&2 |
|
|
|
continue |
|
|
|
fi |
|
|
|
|
|
|
|
if ! process_msg "$msg" |
|
|
|
then |
|
|
|
msg_id=$(printf %s "$msg" | jq -r .key) |
|
|
|
printf '\nUnable to process message %s\n' "$msg_id" >&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ $g1_author = $g1pub ]]; then |
|
|
|
|
|
|
|
echo "I LIKE MY MESSAGE $target_id" |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
((totalLikesGiven++)) |
|
|
|
|
|
|
|
if [[ ${likesNbPerAuthor[$target_author]} -eq 0 ]] |
|
|
|
then |
|
|
|
likesNbPerAuthor[$target_author]=1 |
|
|
|
likedPosts[$target_author]="" |
|
|
|
else |
|
|
|
likesNbPerAuthor[$target_author]=$((${likesNbPerAuthor[$target_author]} + 1)) |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
if [[ ${likesNbPerPost[$target_id]} -eq 0 ]] |
|
|
|
then |
|
|
|
likesNbPerPost[$target_id]=1 |
|
|
|
|
|
|
|
likedPosts[$target_author]+=$target_id |
|
|
|
likedPosts[$target_author]+="\n" |
|
|
|
else |
|
|
|
((likesNbPerPost[$target_id]++)) |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
excerpts[$target_id]=$msg_excerpt |
|
|
|
|
|
|
|
# We cannot use this anymore |
|
|
|
# (now saving current_ts once all tx have been sent) |
|
|
|
# |
|
|
|
# if ! postsTimestamps[$target_id]=$(printf %s "$msg" | jq -r .value.timestamp) |
|
|
|
#then |
|
|
|
# printf 'Unable to get message timestamp\n' >&2 |
|
|
|
# exit 1 |
|
|
|
#fi |
|
|
|
|
|
|
|
((i++)) |
|
|
|
fi |
|
|
|
done < <(echo "$messages" | jq -c) |
|
|
|
|
|
|
|
if [[ $totalLikesGiven -eq 0 ]] |
|
|
|
then |
|
|
|
printf "You did not give any like during the past %s days or they have already been processed.\n\n" "$days_from_last_tx" |
|
|
|
printf "Try again in a few days.\n\n" |
|
|
|
fi |
|
|
|
|
|
|
|
printf "You gave ${bold}%s❤${normal} during the past %s days.\n\n" "$totalLikesGiven" "$days_from_last_tx" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
|
|
|
|
tx_are_possible=0 |
|
|
|
|
|
|
|
while [[ $tx_are_possible -eq 0 ]] |
|
|
|
do |
|
|
|
|
|
|
|
printf "How many UDĞ1 do you want to send per each like you gave? (minimum is ${bold}%s UDĞ1${normal}) " "$minimumAmountPerLikeInUD" |
|
|
|
read a |
|
|
|
printf "\n" |
|
|
|
|
|
|
|
if [[ -z $a ]] |
|
|
|
then |
|
|
|
amountPerLikeInUD=$minimumAmountPerLikeInUD |
|
|
|
else |
|
|
|
amountPerLikeInUD=$a |
|
|
|
fi |
|
|
|
|
|
|
|
amountGiven=$(echo "$totalLikesGiven * $amountPerLikeInUD" | bc -l) |
|
|
|
|
|
|
|
|
|
|
|
has_enough_money=$(( $(echo "$amountGiven <= $balance" | bc -l) )) |
|
|
|
amountPerLike_is_enough=$(( $(echo "$amountPerLikeInUD >= $minimumAmountPerLikeInUD" | bc -l) )) |
|
|
|
tx_are_possible=$(( $has_enough_money && $amountPerLike_is_enough )) |
|
|
|
|
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
|
|
|
|
if [[ $tx_are_possible -eq 0 ]] ; then |
|
|
|
|
|
|
|
if [[ $has_enough_money -eq 0 ]] ; then |
|
|
|
|
|
|
|
printf "You don't have enough UDĞ1 to send all transactions.\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
printf "${bold}%s UDĞ1${normal} are needed.\n\n" "$amountGiven" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
elif [[ $amountPerLike_is_enough -eq 0 ]] ; then |
|
|
|
|
|
|
|
printf "Minimum amount per like is %s UDĞ1.\n\n" $minimumAmountPerLikeInUD |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
printf "Try again with a different amount per like.\n\n" |
|
|
|
maxAmountPerLike=$(awk -vp=$balance -vq=$totalLikesGiven 'BEGIN{printf "%.2f" ,p / q}') |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
printf "Maximum amount per like possible: ${bold}%s UDĞ1${normal}\n\n" "$maxAmountPerLike" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
else |
|
|
|
newBalance=$(echo "$balance - $amountGiven" | bc -l) |
|
|
|
printf "${bold}%s UDĞ1${normal} will be given.\n\n" "$amountGiven" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
printf "After sending transactions, your new balance will be ${bold}%s UDĞ1${normal}\n\n" "$newBalance" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
printf "Press ENTER to continue: " && read |
|
|
|
printf "\n" |
|
|
|
fi |
|
|
|
done |
|
|
|
|
|
|
|
# Let's construct thank you posts (tyPosts) and send transactions! |
|
|
|
|
|
|
|
tyPostIndex=0 |
|
|
|
tyPosts[0]="" |
|
|
|
tyPosts[0]+="# I tipped you for your posts!\n\n" |
|
|
|
tyPosts[0]+=$(printf "Huge thanks to the ScuttleButt community for all the fascinating posts you allowed me to read in the past %s days." "$days_from_last_tx") |
|
|
|
tyPosts[0]+="\n\nAs a means to thank you further, I have just sent you #Ğ1 libre money.\n\n" |
|
|
|
tyPosts[0]+="These messages, though they might feel spammy (sorry) are also a way for the Ğ1 community to spread awareness about [libre currencies](https://libre-currency.org/) so we can build #resilience at every level.\n\n" |
|
|
|
tyPosts[0]+="You can learn how to spend your freshly earned money at [https://git.p2p.legal/Axiom-Team/ssb-g1-tip](https://git.p2p.legal/Axiom-Team/ssb-g1-tip)\n\n" |
|
|
|
tyPosts[0]+="Below is the list of SSB users whose content I liked recently, and the amount each one was given:\n\n" |
|
|
|
tableHeaders='| thanks to | for their posts | tip |\n' |
|
|
|
tableHeaders+='| --- | --- | ---- |\n' |
|
|
|
sizeOfTableHeaders=$(printf "%s" "$tableHeaders" | wc -c) |
|
|
|
tyPosts[0]+=$tableHeaders |
|
|
|
|
|
|
|
# for message size calculation |
|
|
|
# update following if you add tags in the message : |
|
|
|
tags[0]="Ğ1" |
|
|
|
tags[1]="resilience" |
|
|
|
|
|
|
|
sizeOfTags=0 |
|
|
|
for t in ${!tags[@]} |
|
|
|
do |
|
|
|
tagSize=$(printf "%s" "${tags[t]}" | wc -c) |
|
|
|
|
|
|
|
(( sizeOfTags+=sizeOfATagMention + tagSize )) |
|
|
|
done |
|
|
|
|
|
|
|
firstPostContentSize=$(printf "%s" "${tyPosts[0]}" | wc -c) |
|
|
|
tyPostsSizes[0]=$((baseSizeOfAMessageFile + firstPostContentSize + sizeOfTags)) |
|
|
|
|
|
|
|
nbOfAuthors=${#likesNbPerAuthor[@]} |
|
|
|
authorNum=1 |
|
|
|
|
|
|
|
for author_id in ${!likesNbPerAuthor[@]} |
|
|
|
do |
|
|
|
process_author $author_id |
|
|
|
|
|
|
|
# (Legacy) saving authors we have already mentionned in a message |
|
|
|
likedAuthorsFile=$ssb_dir/db/g1likes |
|
|
|
if [ ! -f $likedAuthorsFile ]; then |
|
|
|
touch $likedAuthorsFile |
|
|
|
fi |
|
|
|
|
|
|
|
if ! grep -Fxq $author_id $likedAuthorsFile; then |
|
|
|
echo $author_id >> $likedAuthorsFile |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
tipAmount=$(bc <<< "${likesNbPerAuthor[$author_id]} * $amountPerLikeInUD") |
|
|
|
newLine='' |
|
|
|
newLine+=$(printf "| [@%s](%s) " "$author_name" "$author_id") |
|
|
|
newLine+="| " |
|
|
|
|
|
|
|
sizeOfAuthorName=$(printf "%s" "$author_name" | wc -c) |
|
|
|
sizeOfAuthorId=$(printf "%s" "$author_id" | wc -c) |
|
|
|
newLineSize=0 |
|
|
|
(( newLineSize+=sizeOfAUserMention + sizeOfAuthorName + sizeOfAuthorId)) |
|
|
|
|
|
|
|
|
|
|
|
p=${likedPosts[$author_id]} |
|
|
|
thisAuthorLikedPosts=( ${p//\\n/ } ) |
|
|
|
|
|
|
|
isFirstPostOfThisAuthor=1 |
|
|
|
|
|
|
|
for likedPostId in ${thisAuthorLikedPosts[@]} |
|
|
|
do |
|
|
|
if [[ $isFirstPostOfThisAuthor -eq 1 ]] |
|
|
|
then |
|
|
|
isFirstPostOfThisAuthor=0 |
|
|
|
else |
|
|
|
newLine+=", " |
|
|
|
(( newLineSize+=2 )) |
|
|
|
fi |
|
|
|
|
|
|
|
newLine+=$(printf " %s❤" "${likesNbPerPost[$likedPostId]}") |
|
|
|
newLine+=$(printf "[\`%s\`](%s)" "${excerpts[$likedPostId]}" "$likedPostId") |
|
|
|
|
|
|
|
sizeOfExcerpt=${#excerpts[$likedPostId]} |
|
|
|
(( sizeOfExcerpt+=2 )) # for before ` and after ` |
|
|
|
sizeOfLikedPostId=$(printf "%s" "$likedPostId" | wc -c) |
|
|
|
(( newLineSize+=sizeOfAPostMention + sizeOfExcerpt + sizeOfLikedPostId )) |
|
|
|
|
|
|
|
done |
|
|
|
|
|
|
|
newLine+=$(printf "| %s UDĞ1 " "$tipAmount") |
|
|
|
|
|
|
|
newLine+="|\n" |
|
|
|
|
|
|
|
|
|
|
|
(( newLineSize+=$(printf "%s" "$newLine" | wc -c) )) |
|
|
|
|
|
|
|
# printf "total size: %s\n\n" "$((${tyPostsSizes[$tyPostIndex]} + $newLineSize))" |
|
|
|
|
|
|
|
|
|
|
|
# If adding new line would exceed max size, we create a new thank you post |
|
|
|
|
|
|
|
sizeWithNewLine=${tyPostsSizes[$tyPostIndex]} |
|
|
|
(( sizeWithNewLine+=newLineSize )) |
|
|
|
|
|
|
|
if [[ $sizeWithNewLine -gt $ssbMaxSize ]] |
|
|
|
then |
|
|
|
printf "size before split: %s\n\n" "${tyPostsSizes[$tyPostIndex]}" |
|
|
|
printf "size with new line: %s\n\n" "$sizeWithNewLine" |
|
|
|
printf "size of new line: %s\n\n" "$newLineSize" |
|
|
|
|
|
|
|
(( tyPostIndex++ )) |
|
|
|
tyPosts[$tyPostIndex]+=$tableHeaders |
|
|
|
(( tyPostsSizes[$tyPostIndex]=baseSizeOfAMessageFile + sizeOfTableHeaders )) |
|
|
|
fi |
|
|
|
|
|
|
|
tyPosts[$tyPostIndex]+=$newLine |
|
|
|
(( tyPostsSizes[$tyPostIndex]+=newLineSize )) |
|
|
|
|
|
|
|
|
|
|
|
if [[ $debugMsgMode -eq 0 ]] |
|
|
|
then |
|
|
|
|
|
|
|
if [[ $authorNum -ne 1 ]] |
|
|
|
then |
|
|
|
sleep 20 # DO NOT OVER CHARGE DUNITER |
|
|
|
fi |
|
|
|
|
|
|
|
#printf '%s\n' "silkaj -af --file ~/.ssb/secret.dunikey tx --output $g1_author --amountUD $tipAmount --comment "Thx for your cool posts on ScuttleButt" |
|
|
|
silkaj -p "$duniter_server" -af --file ~/.ssb/secret.dunikey tx --output $g1_author --amountUD $tipAmount --comment "Thx for your cool posts on ScuttleButt" -y 2>/dev/null |
|
|
|
|
|
|
|
printf "\n${bold}%s UDĞ1${normal} sent to %s!\n\n" "$tipAmount" "$author_name" |
|
|
|
fi |
|
|
|
|
|
|
|
(( authorNum++ )) |
|
|
|
done |
|
|
|
|
|
|
|
# Let's save the current timestamp |
|
|
|
if [[ $debugMsgMode -eq 0 ]] |
|
|
|
then |
|
|
|
if ! echo "$current_ts" > "$state_file"~ |
|
|
|
then |
|
|
|
printf 'Unable to write to backup state file.\n' >&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if ! mv "$state_file"~ "$state_file" |
|
|
|
then |
|
|
|
printf 'Unable to write to state file. Update state file manually to prevent tips to %s from being processed twice.\n' "$author_name" >&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
printf "\n%s UDĞ1 sent to %s butts!\n\n" "$amountGiven" "${#likesNbPerAuthor[@]}" |
|
|
|
|
|
|
|
# Let's publicly thank everyone! |
|
|
|
#echo -e "${tyPosts[$n]}" |
|
|
|
|
|
|
|
# the following produces error: |
|
|
|
# "sbotc: unexpected end of parent stream" |
|
|
|
# must be a non-escaped quote problem... |
|
|
|
#thank_you_msg=$(printf "%q" "${tyPosts[$n]}") |
|
|
|
#sbotc publish '{"type":"post","text":"'"$thank_you_msg"'"}' 2>&1>/dev/null |
|
|
|
|
|
|
|
printf "What now ?\n\n" |
|
|
|
|
|
|
|
if [[ $readable -eq 1 ]]; then sleep 1; fi |
|
|
|
|
|
|
|
date=$(date -u +%Y-week-%W) |
|
|
|
|
|
|
|
if [[ ${#tyPosts[@]} -eq 1 ]] |
|
|
|
then |
|
|
|
msg_filename=thank-your-butts-$date |
|
|
|
echo -e ${tyPosts[$n]} > ~/$msg_filename.md |
|
|
|
else |
|
|
|
for i in ${!tyPosts[@]} |
|
|
|
do |
|
|
|
part=$((i + 1)) |
|
|
|
msg_filename=thank-your-butts-$date |
|
|
|
echo -e ${tyPosts[$i]} > ~/$msg_filename-part-$part.md |
|
|
|
done |
|
|
|
fi |
|
|
|
|
|
|
|
printf "A surprise is awaiting in your home dir (~).\n\n" |
|
|
|
|
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
|
|
|
|
if [[ ${#tyPosts[@]} -eq 1 ]] |
|
|
|
then |
|
|
|
printf "It's a file.\n\n" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
printf "It's called $msg_filename.md\n\n" |
|
|
|
else |
|
|
|
printf "It's %s files.\n\n" "${#tyPosts[@]}" |
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
printf "The first one is called $msg_filename-part-1.md.\n\n" |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
|
|
|
|
printf "Customize it to your needs to thank your fellow butts publicly and help spread awareness about libre currencies :-)\n\n" |
|
|
|
|
|
|
|
if [[ $readable -eq 1 ]]; then sleep 3; fi |
|
|
|
|
|
|
|
printf "Then delete it.\n\n" |
|
|
|
|
|
|
|
if [[ $readable -eq 1 ]]; then sleep 2; fi |
|
|
|
|
|
|
|
printf "...because it won't self-destruct, haha :D \n\n" |
|
|
|
|