summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xshbot.sh2
-rwxr-xr-xshbrain.sh6
-rwxr-xr-xshduck.sh30
-rwxr-xr-xshhelp.sh2
4 files changed, 36 insertions, 4 deletions
diff --git a/shbot.sh b/shbot.sh
index 066d202..0deee12 100755
--- a/shbot.sh
+++ b/shbot.sh
@@ -11,7 +11,7 @@ do
if [[ "$LINE" =~ PING\ *:(.*) ]]; then
echo "PONG :${BASH_REMATCH[1]}" >&3
else
- [[ ${LINE} =~ :[a-zA-Z]*!.*(#.*)\ :.* ]] && ORIGIN=${BASH_REMATCH[1]}
+ [[ ${LINE} =~ :[^!]*![^#]*(#.*)\ :.* ]] && ORIGIN=${BASH_REMATCH[1]}
echo "${LINE}" | ./shbrain.sh | \
while true
do
diff --git a/shbrain.sh b/shbrain.sh
index 06cad02..3b1f700 100755
--- a/shbrain.sh
+++ b/shbrain.sh
@@ -8,12 +8,12 @@ do
LINE=${LINE[@]:0:$LEN}
### Parsing potential shcmd
- if [[ $LINE =~ :([a-zA-Z]*)!.*:shcmd ]]; then
+ if [[ $LINE =~ :([^!]*)!.*:shcmd ]]; then
EXPAND=(${LINE})
CMD=${EXPAND[4]#:}
ARGS=${EXPAND[*]:5}
if [ "$CMD" = "advert" ]; then
- echo "PRIVMSG $ARGS :Listen to shbot, the one true Bot"'!' >&3
+ echo "Listen to shbot, the one true Bot!"
elif [ "$CMD" = "join" ]; then
echo "JOIN $ARGS" >&3
elif [ "$CMD" = "part" ]; then
@@ -22,6 +22,8 @@ do
./shquote.sh ${ARGS[*]}
elif [ "$CMD" = "trains" ]; then
./shtrains.sh ${ARGS[*]}
+ elif [ "$CMD" = "duck" ]; then
+ ./shduck.sh
elif [ "$CMD" = "help" ]; then
./shhelp.sh $ARGS
else
diff --git a/shduck.sh b/shduck.sh
new file mode 100755
index 0000000..5fc4b02
--- /dev/null
+++ b/shduck.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+# Duck generation based on https://github.com/adyxax/hsbot
+
+RANDOM=$$ #Seed random number generator from script PID
+export GLOBIGNORE="*" #Do not substitute asterisks (e.g. in $heads) for lists of files!!
+
+#Body parts (both RTL and LTR where applicable)
+leftbeaks=(">" "=")
+rightbeaks=("<" "=")
+leftbody=("_/" "__/" "_~" "__~")
+rightbody=("\\\\_" "\\\\__" "~_" "~__")
+heads=("o" "O" "0" "@" "©" "®" "ð" "*" "ò" "ô" "ó" "ø" "⊕" "Ω" "ꙫ" "ꙩ" "Ꙩ" "ȯ" "◔" "õ" "ȯ" "⁰" "Ö" "Ó" "Ò" "Õ" "Ô" "ö")
+
+head=${heads[$RANDOM % ${#heads[@]} ]} #Pick a head
+
+left=$(expr $RANDOM % 2) #Whether it will be a left-to-right duck
+
+#Generate the duck
+if [ $left == 1 ]; then
+ beak=${leftbeaks[$RANDOM % ${#leftbeaks[@]} ]}
+ body=${leftbody[$RANDOM % ${#leftbody[@]} ]}
+ duck=$beak$head$body
+else
+ beak=${rightbeaks[$RANDOM % ${#rightbeaks[@]} ]}
+ body=${rightbody[$RANDOM % ${#rightbody[@]} ]}
+ duck=$body$head$beak
+fi
+
+echo $duck
diff --git a/shhelp.sh b/shhelp.sh
index c2bd9c4..d3566ed 100755
--- a/shhelp.sh
+++ b/shhelp.sh
@@ -16,7 +16,7 @@ case "$1" in
"trains") echo "trains [STATION] : Prints the next trains that will stop at Courbevoie's station."
echo " When provided, only results that concerns STATION are advertised."
;;
- *) echo "The following commands are available : advert help join part quote trains"
+ *) echo "The following commands are available : advert help join part quote trains duck"
;;
esac