summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Graham <joseph@xylon.me.uk>2017-06-03 18:48:12 +0100
committerJoseph Graham <joseph@xylon.me.uk>2017-06-03 18:48:12 +0100
commitff6119f99a9a4c804936a8e07f69a2d94795a77a (patch)
tree0fbf083551594e75366f6efff3c69000b515ea6b
parente1c4ef87e665a1a8476e063f03797f4e0496ac8b (diff)
Disabled ability to tell pbot to tell someone else a factoid. SomeoneHEADmaster
started abusing it to spam the channel and other users on FreeNode. The feature could be secured but since nobody normally uses it anyway I think it's not worth it. Also tidied up to code a bit and got rid of some old files.
-rw-r--r--HACKING8
-rw-r--r--INSTALL2
-rwxr-xr-xbug_tracker_change_detector94
-rwxr-xr-xchili_change_detector224
-rw-r--r--lib/main.sh35
-rw-r--r--process_event (renamed from hack_of_all_hacks)50
6 files changed, 47 insertions, 366 deletions
diff --git a/HACKING b/HACKING
index 4661c33..a785b21 100644
--- a/HACKING
+++ b/HACKING
@@ -1,13 +1,13 @@
-Hi, this file was made by xyon.
+Hi, this file was made by Xylon.
Basically I made this bot by getting envbot and hacking it. When I first ran
envbot it didn't do anything and I couldn't be bothered to read the
documentation of how to use/add modules so i just opened up the main file and
started hacking it up.
-I modified lib/main.sh to source `hack_of_all_hacks' file once per minute and
-I put all the code in `l33t_codes' function in that file. So you can modify/add
-more code without having to restart the bot.
+I modified lib/main.sh to source `process_event' file once per minute
+and I put all the code in a function in that file. So you can
+modify/add more code without having to restart the bot.
Originally the bot was kind of; event driven, it could only respond to stuff
that happens in the channel but couldn't say stuff `out of the blue', so in
diff --git a/INSTALL b/INSTALL
index ee423e5..f1ddf86 100644
--- a/INSTALL
+++ b/INSTALL
@@ -21,7 +21,7 @@ Copy over all necessary files.
bot_settings.sh
common_codez
envbot
- hack_of_all_hacks
+ process_event
labs_change_detector
pbot
pbot-ng_fixer
diff --git a/bug_tracker_change_detector b/bug_tracker_change_detector
deleted file mode 100755
index e4de7ba..0000000
--- a/bug_tracker_change_detector
+++ /dev/null
@@ -1,94 +0,0 @@
-#! /bin/bash
-
-while true
-do
- source common_codez
-
- log_file=bug_sums
-
- temp_file=$( mktemp )
-
- temp_changes=$( mktemp )
-
- changes="/tmp/un-provoked-message-store"
-
- for url in $( curl --compressed "https://bugs.parabolagnulinux.org/bugs/issue?@pagesize=99999" 2> /dev/null | grep -E 'href="issue[[:digit:]]+' | cut -d '"' -f 2 )
- do
- tfile="$( mktemp )"
-
- try_count=1
-
- # Get the URL and make sure it's not empty.
- until curl --compressed "https://bugs.parabolagnulinux.org/bugs/${url}" > "${tfile}" 2> /dev/null && (( $( wc -l "${tfile}" 2> /dev/null | cut -d ' ' -f 1 ) ))
- do
- # The time we sleep doubles each time up to a maximum of 512
- # seconds, before restarting the entire script.
- sleep "${try_count}"
-
- if (( try_count < 512 ))
- then
- try_count=$(( try_count * 2 ))
- else
- continue 2
- fi
- done
-
- echo "${url} $( md5sum < ${tfile} | cut -d ' ' -f 1 )" >> "${temp_file}"
-
- rm "${tfile}"
- done
-
- # Check that the log file is not empty as a sanity check. TODO record WHEN
- # it last checked the bug tracker for changes so we can also check if it was
- # too long ago.
- if (( $( wc -l "${log_file}" 2> /dev/null | cut -d ' ' -f 1 ) ))
- then
- cat "${temp_file}" |
- while read -r line
- do
- bug_number="${line%% *}"
- # If this bug is not in the log file then it must be new.
- if { ! grep "${bug_number}" "${log_file}" > /dev/null ; }
- then
- tdir="$( mktemp -d )"
- curl --compressed "https://bugs.parabolagnulinux.org/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1'
- bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars )
- cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1'
- priority=$( head -1 ${tdir}/gg* )
- priority=${priority#*>}
- priority=${priority%<*}
- rm -r "${tdir}"
- echo "${bug_number} created: https://bugs.parabolagnulinux.org/bugs/${bug_number} (${bug_title% - Parabola\'s issue tracker} [${priority}])" >> "${temp_changes}"
- # It is in the log file so now we check if the entire line is there,
- # because if it's not then the md5sum must have changed.
- elif { ! grep "${line}" "${log_file}" > /dev/null ; }
- then
- tdir="$( mktemp -d )"
- curl --compressed "https://bugs.parabolagnulinux.org/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1'
- bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars )
- cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1'
- priority=$( head -1 ${tdir}/gg* )
- priority=${priority#*>}
- priority=${priority%<*}
- rm -r "${tdir}"
- echo "${bug_number} changed: https://bugs.parabolagnulinux.org/bugs/${bug_number} (${bug_title% - Parabola\'s issue tracker} [${priority}])" >> "${temp_changes}"
- fi
- done
- fi
-
- if (( $( wc -l "${temp_changes}" 2> /dev/null | cut -d ' ' -f 1 ) > 12 ))
- then
- echo "More than 12 changes have been detected on the bug tracker. Ignoring." >> "${changes}"
- else
- while read line
- do
- echo "${line}" >> "${changes}"
- done < "${temp_changes}"
- fi
-
- mv "${temp_file}" "${log_file}"
-
- rm -f "${temp_changes}"
-
- sleep 5m
-done
diff --git a/chili_change_detector b/chili_change_detector
deleted file mode 100755
index 030f6f2..0000000
--- a/chili_change_detector
+++ /dev/null
@@ -1,224 +0,0 @@
-#! /bin/bash
-
-check_every="37s" # Put `m' or `s' on the end because this will be used with the
- # `sleep' command.
-seen_issues_log="seen_issues_log"
-atom_feed_log="atom_feed_log"
-atom_url="https://labs.parabola.nu/activity.atom"
-bot_ipc="/tmp/un-provoked-message-store"
-# fauno wants him to deliver messages spaced out by two minutes so I need nother
-# fifo
-another_fifo="/tmp/pbot-ng_chili_change_detector_fifo"
-
-# If the fifo doesn't exist then create it.
-[[ -p ${another_fifo} ]] || mkfifo "${another_fifo}"
-
-# OK this code will forward no more than two messages onto pbot-ng every two
-# minutes (fauno doesn't want flood). It runs in the background. It could be
-# sensible to split this out into a seperate file so it can tidily be used by
-# other pbot-ng modules but I cba. This code is quite l33t actually because it
-# doesn't delay the messages at all unless two messages get delivered in two
-# minutes.
-tail -f "${another_fifo}" | while true
-do
- read smile && echo "${smile}" >> "${bot_ipc}"
- read -t 120 smile && echo "${smile}" >> "${bot_ipc}" ||
- continue
- sleep 2m
-done &
-
-declare -A bugs
-declare -A old_bugs
-
-function get_feed_make_array
-{
- # Download the feed.
- feed=$( mktemp )
- header_dump=$( mktemp )
-
- if [[ -n ${etag} ]]
- then
- curl --user-agent "pbot-ng" -D "${header_dump}" -H "If-None-Match: \"${etag}\"" "${atom_url}" 2> /dev/null > "${feed}"
- ret_val="${?}"
- else
- curl --user-agent "pbot-ng" -D "${header_dump}" "${atom_url}" 2> /dev/null > "${feed}"
- ret_val="${?}"
- fi
-
- # Get the first line of the headers.
- read http_response < "${header_dump}"
-
- # If curl's exit status was zero and the http response was 200.
- if (( ! ret_val )) && [[ ${http_response} == *' 200 '* ]]
- then
- # Is there an ETag?
- if etag_line=$( grep 'ETag:' "${header_dump}" )
- then
- etag_line="${etag_line#*\"}"
- etag="${etag_line%\"*}" # Now we have the ETag.
- else
- # It seems that the server no longer sends Etags
- unset etag
- fi
- else
- # This indicates either a failure to download the page or that the page
- # has not changed since the last time it was downloaded.
- rm "${feed}"
- rm "${header_dump}"
- return 1
- fi
-
- unset bugs
- declare -A -g bugs
-
- # We want an array of all the bug titles and their urls.
- stage=0
- while read -r line
- do
- case "${stage}" in
- 0 )
- [[ ${line} == *'<entry>'* ]] &&
- {
- title=""
- url=""
- updated=""
- stage=1
- }
-
- ;;
- 1 )
- case "${line}" in
- *'<title>'*'</title>'* )
- booboo="${line#*>}"
- title="${booboo%<*}"
- ;;
- *'<link '* )
- yumyum="${line##*href=\"}"
- url="${yumyum%%\"*}"
- ;;
- *'<updated>'*'</updated>'* )
- foobar="${line#*>}"
- updated="${foobar%<*}"
- ;;
- *'</entry>'* )
- # We don't want revisions.
- if [[ -n ${title} ]] && [[ -n ${url} ]] && [[ -n ${updated} ]] && [[ "${title}" != *' - Revision '* ]]
- then
- # Add this to the array, fixing the url if it's
- # broken.
- bugs["${title}🐵${updated}"]="${url/chili/labs.parabola.nu}"
- fi
- stage=0
- ;;
- esac
- ;;
- esac
- done < "${feed}"
-
- rm "${feed}"
- rm "${header_dump}"
-
- return 0
-}
-
-function slide_and_write
-{
- # We need to make the new array the old one.
- unset old_bugs
- declare -A -g old_bugs
-
- for key in "${!bugs[@]}"
- do
- ii=$( sed 's/([^)]\+)//' <<< "${key}" )
- old_bugs[${ii}]=${bugs[${key}]}
- done
-
- # We now write this to the file. We seperate the fields with some sort of
- # cat face: 🐱
- for i in "${!old_bugs[@]}"
- do
- echo "${i}🐱 ${old_bugs[${i}]}"
- done > ${atom_feed_log}
-}
-
-if [[ -f ${atom_feed_log} ]]
-then
- # Get the array that stores the info of all bug titles and their urls out of
- # the file it's stored in.
- while read -r line
- do
- old_bugs["${line%%🐱 *}"]="${line##*🐱 }"
- done < "${atom_feed_log}"
-else
- # The log does not exist so we create it!
- get_feed_make_array
- slide_and_write
-
- # Also we need to create the log of seen issues.
- for i in "${!bugs[@]}"
- do
- ii=$( sed 's/([^)]\+)//' <<< "${i}" )
- [[ "${ii%%🐵*}" =~ \#[[:digit:]]+ ]] # match the bug number e.g. #390
- echo "${BASH_REMATCH}"
- done > "${seen_issues_log}"
-fi
-
-while true
-do
- # Download the feed and make an array of the bugs in it. If it fails or
- # hasn't changed then we just wait until it's time to check again and then
- # continue with the next iteration of the loop.
- get_feed_make_array || { sleep "${check_every}" ; continue ; }
-
- temp_changes=$( mktemp )
-
- # Compare this array to the previous. If any new have appeared since last
- # time then we check if it's in a log of seen issues, and if not, we add it,
- # and we know that this is a creation, not a change.
- for i in "${!bugs[@]}"
- do
- ii=$( sed 's/([^)]\+)//' <<< "${i}" )
- # If this bug is new since last time.
- if [[ -z ${old_bugs[${ii}]} ]]
- then
- # Check the log of seen issues to find out if this is a creation or
- # a change.
- [[ "${ii%%🐵*}" =~ \#[[:digit:]]+ ]] # match the bug number e.g. #390
-
- if grep "${BASH_REMATCH}" "${seen_issues_log}" > /dev/null 2> /dev/null
- then
- creation_or_change="changed"
- else
- creation_or_change="created"
-
- # Add this issue to the log.
- echo "${BASH_REMATCH}" >> "${seen_issues_log}"
- fi
-
- real_title="${i%%🐵*}"
- real_title_a="${real_title%%:*}"
- real_title_b="${real_title#*:}"
- cat="${real_title_a%% - *}" # e.g. `pbot-ng'
- num="${real_title_a#* - }"
- echo "${num} ${creation_or_change}: ( ${cat} -${real_title_b} ) ${bugs[${i}]}" >> "${temp_changes}"
- fi
- done
-
- if (( $( wc -l "${temp_changes}" 2> /dev/null | cut -d ' ' -f 1 ) > 12 ))
- then
- echo "More than 12 changes have been detected on the bug tracker. Ignoring." >> "${bot_ipc}"
- else
- while read line
- do
- echo "${line}" >> "${another_fifo}"
- done < "${temp_changes}"
- fi
-
- rm -f "${temp_changes}"
-
- # Make this array the old one and write it to the file in case we need to
- # retrieve it later.
- slide_and_write
-
- sleep "${check_every}"
-done
diff --git a/lib/main.sh b/lib/main.sh
index 4fc1adf..7bb7041 100644
--- a/lib/main.sh
+++ b/lib/main.sh
@@ -440,32 +440,19 @@ while true; do
# Check if there is a command.
commands_call_command "$sender" "$target" "$query"
-################################################################################
-################################################################################
+ # What happens next is important
+ config_update_time=-100
-# Hack of all hacks!!!
+ time_n0w=$( date +%s )
-# if [[ "${identified}" != yep ]]
-# then
-# send_msg "NickServ" "identify csukwHrqH9"
-# identified=yep
-# fi
-
-config_update_time=-100
-
-time_n0w=$( date +%s )
-
-# If it's been more than a minute since we updated the config.
-if (( ( time_n0w - 60 ) > config_update_time ))
-then
- source hack_of_all_hacks
- config_update_time=${time_n0w}
-fi
-
-l33t_codes
+ # If it's been more than a minute since we updated the config.
+ if (( ( time_n0w - 60 ) > config_update_time ))
+ then
+ source process_event
+ config_update_time=${time_n0w}
+ fi
-################################################################################
-################################################################################
+ process_event
# Check return code
case $? in
@@ -567,7 +554,7 @@ l33t_codes
if (( yepyep ))
then
- if (( $(wc -l hack_of_all_hacks | cut -d ' ' -f 1) > 1 ))
+ if (( $(wc -l "announcements/people/${personoslashlower}/messages" | cut -d ' ' -f 1) > 1 ))
then
send_msg "${channel}" "${personoslash}: you have messages, type something to see them."
else
diff --git a/hack_of_all_hacks b/process_event
index 547b64c..7d93ed5 100644
--- a/hack_of_all_hacks
+++ b/process_event
@@ -62,7 +62,7 @@ function forget_fact
esac
}
-function l33t_codes
+function process_event
{
my_own_name='pbot'
@@ -400,30 +400,42 @@ ${my_own_name}: when did you last see Jill?
${my_own_name}: lemon is yummy
${my_own_name}: lemon isn't yummy
,lemon
-,tell jack about foo
EOF
;;
esac
# ' this comment fixes a bug in emacs shell-script-mode that messes up the syntax highlighting
- ###########################
- # answer nicks over query #
- ###########################
-
- if [[ "${line}" =~ ,tell\ [^\ ]+\ about\ [^\ ]+ ]]
- then
- gotit="${BASH_REMATCH}" # will be like: `,tell jack about blah'
-
- dudep1="${gotit#,tell }"
- dude="${dudep1%% *}"
- thing="${gotit##* }"
-
- if [[ -n "${dude}" ]] && [[ -n "${thing}" ]]
- then
- tell_fact "${thing}" "${dude}" || send_msg "${channel_it_came_from}" "${personoslash}: Error, failed to tell ${dude} about ${thing}"
- fi
- fi
+ # I'm dissabling this feature for now as it was being abused
+ # and would need an overhaul to be abuse-proof + nobody uses it afaik
+ # ##########################
+ # # tell someone something #
+ # ##########################
+
+ # # TODO: this should be in the case statement
+
+ # if [[ "${sentence}" =~ ${my_own_name}: tell\ [^\ ]+\ about\ [^\ ]+ ]]
+ # then
+ # # TODO: There should be the following three constraints to
+ # # prevent abuse.
+ # # 1. People may only ask the bot to tell someone about
+ # # something in the #parabola channel, not by query.
+ # # 2. pbot will only tell someone something if they're a user
+ # # he has seen in the past week
+ # # 3. each person may use tell no more than 10 times in
+ # # three hours.
+
+ # gotit="${BASH_REMATCH}" # will be like: `,tell jack about blah'
+
+ # dudep1="${gotit#,tell }"
+ # dude="${dudep1%% *}"
+ # thing="${gotit##* }"
+
+ # if [[ -n "${dude}" ]] && [[ -n "${thing}" ]]
+ # then
+ # tell_fact "${thing}" "${dude}" || send_msg "${channel_it_came_from}" "${personoslash}: Error, failed to tell ${dude} about ${thing}"
+ # fi
+ # fi
# TODO: add a birthday announcement feature, cointoss feature, timer
# feature.