aboutsummaryrefslogtreecommitdiffstats
path: root/modules/m_assign_mode.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules/m_assign_mode.sh')
-rw-r--r--modules/m_assign_mode.sh228
1 files changed, 228 insertions, 0 deletions
diff --git a/modules/m_assign_mode.sh b/modules/m_assign_mode.sh
new file mode 100644
index 0000000..7fb4ea1
--- /dev/null
+++ b/modules/m_assign_mode.sh
@@ -0,0 +1,228 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+###########################################################################
+# #
+# envbot - an IRC bot in bash #
+# Copyright (C) 2007-2008 Arvid Norlander #
+# Copyright (C) 2007-2008 EmErgE <halt.system@gmail.com> #
+# #
+# 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/>. #
+# #
+###########################################################################
+#---------------------------------------------------------------------
+## Channel modes
+#---------------------------------------------------------------------
+
+module_assign_mode_INIT() {
+ modinit_API='2'
+ modinit_HOOKS=''
+ commands_register "$1" 'op' || return 1
+ commands_register "$1" 'deop' || return 1
+ commands_register "$1" 'halfop' || return 1
+ commands_register "$1" 'dehalfop' || return 1
+ commands_register "$1" 'voice' || return 1
+ commands_register "$1" 'devoice' || return 1
+ commands_register "$1" 'protect' || return 1
+ commands_register "$1" 'deprotect' || return 1
+ commands_register "$1" 'topic' || return 1
+ helpentry_module_assign_mode_description="Provides op, deop and related commands."
+
+ local help_cmd
+ for help_cmd in op deop halfop halfdeop voice devoice protect deprotect; do
+ printf -v "helpentry_assign_mode_${help_cmd}_syntax" '<#channel> <nick>'
+ printf -v "helpentry_assign_mode_${help_cmd}_description" "$(tr 'a-z' 'A-Z' <<< "${help_cmd:0:1}")${help_cmd:1} <nick> in <#channel>."
+ done
+
+ helpentry_assign_mode_topic_syntax='<#channel> <new topic>'
+ helpentry_assign_mode_topic_description='Change topic to <new topic> in <#channel>'
+}
+
+module_assign_mode_UNLOAD() {
+ return 0
+}
+
+module_assign_mode_REHASH() {
+ return 0
+}
+
+module_assign_mode_handler_op() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "op" "$sender" "$channel"; then
+ send_modes "$channel" "+o $nick"
+ else
+ access_fail "$sender" "make the bot op somebody" "op"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "op" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_deop() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "op" "$sender" "$channel"; then
+ send_modes "$channel" "-o $nick"
+ else
+ access_fail "$sender" "make the bot deop somebody" "op"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "deop" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_halfop() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "halfop" "$sender" "$channel"; then
+ send_modes "$channel" "+h $nick"
+ else
+ access_fail "$sender" "make the bot halfop somebody" "halfop"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "halfop" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_dehalfop() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "halfop" "$sender" "$channel"; then
+ send_modes "$channel" "-h $nick"
+ else
+ access_fail "$sender" "make the bot dehalfop somebody" "halfop"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "dehalfop" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_voice() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "voice" "$sender" "$channel"; then
+ send_modes "$channel" "+v $nick"
+ else
+ access_fail "$sender" "make the bot give voice to somebody" "voice"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "voice" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_devoice() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "voice" "$sender" "$channel"; then
+ send_modes "$channel" "-v $nick"
+ else
+ access_fail "$sender" "make the bot take voice from somebody" "voice"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "devoice" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_protect() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "protect" "$sender" "$channel"; then
+ send_modes "$channel" "+a $nick"
+ else
+ access_fail "$sender" "make the bot protect somebody" "protect"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "protect" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_deprotect() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ ([^ ]+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local nick="${BASH_REMATCH[2]}"
+ if access_check_capab "protect" "$sender" "$channel"; then
+ send_modes "$channel" "-a $nick"
+ else
+ access_fail "$sender" "make the bot deprotect somebody" "protect"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "deprotect" "<#channel> <nick>"
+ fi
+}
+
+module_assign_mode_handler_topic() {
+ local sender="$1"
+ local sendon_channel="$2"
+ local parameters="$3"
+ if [[ "$parameters" =~ ^(#[^ ]+)\ (.+) ]]; then
+ local channel="${BASH_REMATCH[1]}"
+ local message="${BASH_REMATCH[2]}"
+ if access_check_capab "topic" "$sender" "$channel"; then
+ send_topic "$channel" "$message"
+ else
+ access_fail "$sender" "change the topic" "topic"
+ fi
+ else
+ local sendernick
+ parse_hostmask_nick "$sender" 'sendernick'
+ feedback_bad_syntax "$sendernick" "topic" "<#channel> <new topic>"
+ fi
+}