Implement an IRC line parser
This commit is contained in:
parent
b53918eed7
commit
4a89089856
1 changed files with 34 additions and 1 deletions
35
rowbot
35
rowbot
|
@ -78,5 +78,38 @@ recv() {
|
|||
###
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue