Implement a logger for messages

This commit is contained in:
Nick Chambers 2021-06-14 18:35:23 -05:00
parent f91d64b7b5
commit 97dd222327
1 changed files with 43 additions and 7 deletions

50
rowbot
View File

@ -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