#!/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 . # # # ########################################################################### #--------------------------------------------------------------------- ## 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 }