#!/bin/sh # answer to stuff on irc # shellcheck disable=SC2119,SC2120 # shellcheck source=../lib/load-configuration . "${0%/*}/../lib/load-configuration" # welcome devs (in #archlinux32 only) welcome_user_regex='^\S\+ -!- \(abaumann\|deep42thought\|tyzoid\|phrik\)(.* has joined \S\+$' new_users=$( sed -i ' s/'"${welcome_user_regex}"'/\1/ T w /dev/stdout d ' "${irc_dir}/#archlinux32/out" | \ sort -u ) if [ -n "${new_users}" ]; then printf '%s\n' "${new_users}" | \ sed ' s/^/Hi / s/$/!/ ' | \ irc_say '' 'copy' fi find "${irc_dir}" \ -type f \ -name 'out' \ -printf '%p\n' | \ while read -r out_file; do channel="${out_file%/out}" channel="${channel##*/}" if [ -z "${channel%%#*}" ]; then prefix='buildmaster: ' sloppy_salutation='\S\+\s\+\S\+\s.*buildmaster' else prefix='' sloppy_salutation='' fi # answer "why don't you?" regex='^\S\+ <\(\S\+\)> '"${prefix}"'!\?why[- ]don'"'"'\?t[- ]you \(build\|stabilize\|unstage\|keep\|stubbornly_keep\) ' if grep -q "${regex}" "${out_file}"; then sed -i ' s/'"${regex}"'/\1 \2 / T w /dev/stdout d ' "${out_file}" | \ while read -r asker line; do reason=$( echo "${line}" | \ xargs "${base_dir}/bin/why-dont-you" 2>&1 | \ sed ' 1 s/^/'"${asker}"': / ' ) if [ "$(echo "${reason}" | wc -l)" -le 5 ]; then echo "${reason}" else echo "${reason}" | \ head -n5 printf '... (%s lines total)\n' "$(echo "${reason}" | wc -l)" fi | \ irc_say "${channel}" 'copy' done fi # answer "wtf?" regex='^\S\+ <\(\S\+\)> '"${prefix}"'!\?wtf ' if grep -q "${regex}" "${out_file}"; then sed -i ' s/'"${regex}"'/\1 / T w /dev/stdout d ' "${out_file}" | \ while read -r asker line; do reason=$("${base_dir}/bin/wtf" "${line}"); if [ -z "${reason}" ]; then reason="Huh, I don't know that one." fi reason="${asker}: ${reason}" if [ "$(echo "${reason}" | wc -l)" -le 5 ]; then echo "${reason}" else echo "${reason}" | \ head -n5 printf '... (%s lines total)\n' "$(echo "${reason}" | wc -l)" fi | \ irc_say "${channel}" 'copy' done fi # answer "What's up?" regex='^\S\+ <\S\+> .*[Ww]hat'"'"'\?s *[Uu]p' if grep "${regex}" "${out_file}" | \ grep -q "${sloppy_salutation}"; then sed -i "/${regex}/d" "${out_file}" { printf 'up? I'"'"'m up for %s, %s' \ "$(uptime -p | sed 's/^up //')" \ "$(uptime | sed 's/.*, //')" if [ -s "${work_dir}/build-master-sanity" ]; then printf ' ... and I'"'"'m insane :-D' fi printf '\n' } | \ irc_say "${channel}" 'copy' fi # answer "Thanks!" regex='^\S\+ <\(\S\+\)> \(.* \)\?[Tt]h\(anks\|x\)\([ ,.!].*\)\?$' if grep "${regex}" "${out_file}" | \ grep -q "${sloppy_salutation}"; then sed -i ' /'"${sloppy_salutation}"'/ s/'"${regex}"'/np, \1/ T w /dev/stdout d ' "${out_file}" | \ sort -u | \ irc_say "${channel}" 'copy' fi if [ -z "${channel%%#*}" ]; then # answer "Shut up!" regex='^\S\+ <\S\+> \(.* \)\?[Ss][Hh][Uu][Tt] \?[Uu][Pp]' if grep "${regex}" "${out_file}" | \ grep -q "${sloppy_salutation}"; then sed -i "/${regex}/d" "${out_file}" printf 'Sorry, I will do.\n' | \ irc_say "${channel}" 'copy' printf '%s\n' "$(( $(date '+%s') + 3600 ))" > "${work_dir}/irc-shut-up" fi fi done