diff --git a/rowbot b/rowbot index 151c3c3..0d7b59d 100755 --- a/rowbot +++ b/rowbot @@ -1,5 +1,36 @@ #!/usr/bin/env bash +### +# logger +### + +declare -A levels=( + [debug]=1 [info]=2 + [warn]=3 [error]=4 +) + +log() { + if [[ -v LEVEL ]] && (( levels[$level] <= levels[$LEVEL] )); then + printf "%s: $1\n" "${LEVEL^^}" "${@:2}" + fi +} + +debug() { + LEVEL=debug log "$@" +} + +info() { + LEVEL=info log "$@" +} + +warn() { + LEVEL=warn log "$@" +} + +error() { + LEVEL=error log "$@" +} + ### # argument parser for parsing arguments ## @@ -35,6 +66,7 @@ done # default config ## +level=${opts[log-level]:-info} server=${opts[server]:-irc.libera.chat} tls=${opts[tls]:-no} @@ -78,25 +110,29 @@ recv() { ### while recv line; do - params=( ) has_words=no orig_line=$line + params=( ) + has_words=no + orig_line=$line - if [[ $line = :* ]]; then + if [[ ${line:0:1} = : ]]; 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# } + cmd=${line%% *} + line=${line#"$cmd"} + line=${line# } while [[ $line ]]; do - if [[ $line = :* ]]; then + if [[ ${line:0:1} = : ]]; then params+=("${line:1}") line="" has_words=yes else - params=${line%% *} - params+=( "$param" ) + param=${line%% *} + params+=("$param") line=${line#"$param"} line=${line# } fi done @@ -110,6 +146,6 @@ while recv line; do if hash "on_${cmd^^}" 2>/dev/null; then "on_${cmd^^}" else - declare -p line + warn "unhandled line: %s" "$orig_line" fi done