Implement an IRC line parser
This commit is contained in:
parent
12073a87e7
commit
f91d64b7b5
1 changed files with 34 additions and 1 deletions
35
rowbot
35
rowbot
|
@ -78,5 +78,38 @@ recv() {
|
||||||
###
|
###
|
||||||
|
|
||||||
while recv line; do
|
while recv line; do
|
||||||
declare -p line
|
params=( ) has_words=no orig_line=$line
|
||||||
|
|
||||||
|
if [[ $line = :* ]]; then
|
||||||
|
src=${line%% *} src=${src#:}
|
||||||
|
line=${line#:"$src"} line=${line# }
|
||||||
|
from=${src%@*} ident=${from#*!}
|
||||||
|
from=${from%!*} host=${src#*@}
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmd=${line%% *} line=${line#"$cmd"} line=${line# }
|
||||||
|
|
||||||
|
while [[ $line ]]; do
|
||||||
|
if [[ $line = :* ]]; then
|
||||||
|
params+=("${line:1}")
|
||||||
|
line=""
|
||||||
|
has_words=yes
|
||||||
|
else
|
||||||
|
params=${line%% *}
|
||||||
|
params+=( "$param" )
|
||||||
|
line=${line#"$param"} line=${line# }
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $has_words = yes ]]; then
|
||||||
|
read -ra words <<< "${params[@]:(-1)}"
|
||||||
|
else
|
||||||
|
words=( )
|
||||||
|
fi
|
||||||
|
|
||||||
|
if hash "on_${cmd^^}" 2>/dev/null; then
|
||||||
|
"on_${cmd^^}"
|
||||||
|
else
|
||||||
|
declare -p line
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in a new issue