aboutsummaryrefslogtreecommitdiffstats
path: root/modules/m_ctcp.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules/m_ctcp.sh')
-rw-r--r--modules/m_ctcp.sh91
1 files changed, 91 insertions, 0 deletions
diff --git a/modules/m_ctcp.sh b/modules/m_ctcp.sh
new file mode 100644
index 0000000..dfbe874
--- /dev/null
+++ b/modules/m_ctcp.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+###########################################################################
+# #
+# envbot - an IRC bot in bash #
+# Copyright (C) 2007-2008 Arvid Norlander #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+# #
+###########################################################################
+#---------------------------------------------------------------------
+## Handle CTCP
+#---------------------------------------------------------------------
+
+module_ctcp_INIT() {
+ modinit_API='2'
+ modinit_HOOKS='after_load on_PRIVMSG'
+ helpentry_module_ctcp_description="Answers CTCP requests."
+}
+
+module_ctcp_UNLOAD() {
+ return 0
+}
+
+module_ctcp_REHASH() {
+ return 0
+}
+
+module_ctcp_after_load() {
+ if [[ -z $config_module_ctcp_version_reply ]]; then
+ log_error "VERSION reply (config_module_ctcp_version_reply) must be set in config to use CTCP module."
+ return 1
+ fi
+}
+
+# Called on a PRIVMSG
+#
+# $1 = from who (n!u@h)
+# $2 = to who (channel or botnick)
+# $3 = the message
+module_ctcp_on_PRIVMSG() {
+ local sender="$1"
+ local query="$3"
+ # We can't use regex here. For some unknown reason bash drops \001 from
+ # regex.
+ if [[ $query = $'\001'* ]]; then
+ # Get rid of \001 in the string.
+ local data="${query//$'\001'}"
+ local ctcp_command ctcp_parameters
+ # Split it up into command and any parameters.
+ read -r ctcp_command ctcp_parameters <<< "$data"
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ case "$ctcp_command" in
+ "CLIENTINFO")
+ send_nctcp "$sendernick" "CLIENTINFO CLIENTINFO PING SOURCE TIME VERSION"
+ ;;
+ "PING")
+ send_nctcp "$sendernick" "PING $ctcp_parameters"
+ ;;
+ "SOURCE")
+ send_nctcp "$sendernick" "SOURCE http://envbot.org"
+ ;;
+ "TIME")
+ send_nctcp "$sendernick" "TIME $(date +'%Y-%m-%d %k:%M:%S')"
+ ;;
+ "VERSION")
+ send_nctcp "$sendernick" "VERSION $config_module_ctcp_version_reply"
+ ;;
+ *)
+ # So we didn't handle this CTCP? Return 0 then, someone else may want it.
+ return 0
+ ;;
+ esac
+ # See above. We didn't fall back to not handle it and did not return
+ # so therefore we must have handled it.
+ return 1
+ fi
+ return 0
+}