commit bea40da12a0cf24a84196af51fdb03d33f00adf2
parent 8f4a99fa571a1ec1e7d22ba68495938937604e70
Author: mys <>
Date: Tue, 6 Apr 2021 21:30:07 +0200
Cleanup botreply
Diffstat:
M | botreply | | | 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