trans

Unnamed repository; edit this file 'description' to name the repository.
git clone git://fqcor.com/trans.git
torsocks git clone git://fqcoretoclxwqpy3dwktkskmwywrcktgnpviesveq6vrjhqhdc6y4fid.onion/trans.git
Log | Files | Refs | README | LICENSE

commit bea40da12a0cf24a84196af51fdb03d33f00adf2
parent 8f4a99fa571a1ec1e7d22ba68495938937604e70
Author: mys <>
Date:   Tue,  6 Apr 2021 21:30:07 +0200

Cleanup botreply

Diffstat:
Mbotreply | 81+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
1 file changed, 50 insertions(+), 31 deletions(-)

diff --git a/botreply b/botreply @@ -2,7 +2,19 @@ source botenv +form_reply(){ + # Arguments: + # $1 - full message + # $2 - raw reply + name=${1%%!*} + name=${name#:} + echo "$1" | awk -v "name=$name" -v "ret=$2" '{print "PRIVMSG "$3" :"name": "ret}' +} + rot(){ + # Arguments: + # $1 - rot number + # $2 - rotated expression [ "$1" -lt 27 ] || return 1 vals=( $(echo -n $2 | od -An -tuC) ) for i in "${!vals[@]}"; do @@ -19,6 +31,8 @@ rot(){ } _morse(){ + # Arguments + # $1 - (un)morsed message orig="$1" morseonly=$(echo "$orig" | tr -dc './ \t\n-') [ "$orig" = "$morseonly" ] && { @@ -29,9 +43,12 @@ _morse(){ } case "$1" in + # Reply to ping *"PING "*) sed 's/.*\(:.*\)/PONG \1/' <<< $1 ;; + + # Configure connection *"End of /MOTD command."*) # wait for notices to come sleep 10 @@ -40,49 +57,53 @@ case "$1" in echo "JOIN $channel" echo "MODE $nick +B" ;; + + # Display help message + *"PRIVMSG "*":$nick: help"|*"PRIVMSG "*":$nick, help") + channel=$(echo "$1" | awk '{print $3}') + echo "PRIVMSG $channel :$nick: [[input-lang]:<output-lang>] <untranslated-text>" + echo "PRIVMSG $channel :$nick: [input-lang]:phoneme <text>" + echo "PRIVMSG $channel :$nick: [input-lang]:ipa <text>" + echo "PRIVMSG $channel :$nick: :morse <encoded-text|unencoded-text>" + echo "PRIVMSG $channel :$nick: :rot<n> <text>" + echo "PRIVMSG $channel :$nick: :1337 <text>" + ;; + + # Display ipa *"PRIVMSG "*":$nick: "*":ipa"*|*"PRIVMSG "*":$nick, "*":ipa"*) lang=$(echo "$1" | sed -E 's/.* ([^ ]*):ipa.*/\1/') - echo "$lang" >>/dev/stderr ret=$(espeak -q --ipa -v ${lang:-en} "$(echo "$1" | sed 's/.*:ipa //')") - name=${1%%!*} - name=${name#:} - echo "$1" | awk -v "name=$name" -v "ret=$ret" '{print "PRIVMSG "$3" :"name": "ret}' | tr -s ' ' | sed 's/\.\.\.-\.-[[:space:]]*//' + form_reply "$1" "$ret" ;; + + # Display phoneme *"PRIVMSG "*":$nick: "*":phoneme"*|*"PRIVMSG "*":$nick, "*":phoneme"*) lang=$(echo "$1" | sed -E 's/.* ([^ ]*):phoneme.*/\1/') ret=$(espeak -qxv ${lang:-en} "$(echo "$1" | sed 's/.*:phoneme //')") - name=${1%%!*} - name=${name#:} - echo "$1" | awk -v "name=$name" -v "ret=$ret" '{print "PRIVMSG "$3" :"name": "ret}' | tr -s ' ' | sed 's/\.\.\.-\.-[[:space:]]*//' + form_reply "$1" "$ret" ;; + + # Encode/decode morse *"PRIVMSG "*":$nick: :morse"*|*"PRIVMSG "*":$nick, :morse"*) - ret=$(_morse "$(echo "$1" | sed 's/.*:morse //')") - name=${1%%!*} - name=${name#:} - echo "$1" | awk -v "name=$name" -v "ret=$ret" '{print "PRIVMSG "$3" :"name": "ret}' | tr -s ' ' | sed 's/\.\.\.-\.-[[:space:]]*//' + ret=$(_morse "$(echo "$1" | sed 's/.*:morse //')" | tr -s ' ' | sed 's/\.\.\.-\.-[[:space:]]*//') + form_reply "$1" "$ret" ;; + + # Encode rot *"PRIVMSG "*":$nick: :rot"*|*"PRIVMSG "*":$nick, :rot"*) num=$(echo "$1" | sed "s/.*:$nick[,:] :rot\([0-9]*\).*/\1/") exp=$(echo "$1" | sed "s/.*:$nick[,:] :rot[0-9]* //") - rot=$(rot $num "$exp") - name=${1%%!*} - name=${name#:} - echo "$1" | awk -v "name=$name" -v "rot=$rot" '{print "PRIVMSG "$3" :"name": "rot}' + ret=$(rot $num "$exp") + form_reply "$1" "$ret" ;; + + # Encode 1337 *"PRIVMSG "*":$nick: :1337"*|*"PRIVMSG "*":$nick, :1337"*) - hax=$(echo "$1" | sed "s/.*:$nick[,:] :1337* //" | tr 'aeilot' '431107' | sed 's~w~\\/\\/~g;s~n~|\\|~g;s~m~|\\/|~g;s~h~|-|~g;s~f~ph~g;s~b~8~g;s~x~><~g;s~c~(~g;s~k~|<~g') - name=${1%%!*} - name=${name#:} - echo "$1" | awk -v "name=$name" -v "hax=$hax" '{print "PRIVMSG "$3" :"name": "hax}' - ;; - *"PRIVMSG "*":$nick: help"|*"PRIVMSG "*":$nick, help") - channel=$(echo "$1" | awk '{print $3}') - echo "PRIVMSG $channel :$nick: [[input-lang]:<output-lang>] <untranslated-text>" - echo "PRIVMSG $channel :$nick: [input-lang]:phoneme <english text>" - echo "PRIVMSG $channel :$nick: [input-lang]:ipa <english text>" - echo "PRIVMSG $channel :$nick: :morse <encoded-text|unencoded-text>" - echo "PRIVMSG $channel :$nick: :rot<n> <text>" + ret=$(echo "$1" | sed "s/.*:$nick[,:] :1337* //" | tr 'aeilot' '431107' | sed 's~w~\\/\\/~g;s~n~|\\|~g;s~m~|\\/|~g;s~h~|-|~g;s~f~ph~g;s~b~8~g;s~x~><~g;s~c~(~g;s~k~|<~g') + form_reply "$1" "$ret" ;; + + # Main (fallback) translating case *"PRIVMSG "*":$nick:"*|*"PRIVMSG "*":$nick,"*) direction=$(echo "$1" | sed "/.*:$nick[,:] \([a-z]*\)-*[:>]\([a-z]*\) .*/!d;s//\1:\2/") if [ -n "$direction" ]; @@ -91,9 +112,7 @@ case "$1" in else string=$(echo "$1" | sed "s/.*:$nick[,:]//") fi - trans=$(translate-shell/translate -b $direction "$string" | tr '\n' ':' | sed s'/.$//') - name=${1%%!*} - name=${name#:} - echo "$1" | awk -v "name=$name" -v "trans=$trans" '{print "PRIVMSG "$3" :"name": "trans}' + ret=$(translate-shell/translate -b $direction "$string" | tr '\n' ':' | sed s'/.$//') + form_reply "$1" "$ret" ;; esac