bitbot-3.11-fork/modules/auto_mode.py

82 lines
3.5 KiB
Python
Raw Normal View History

from src import Utils
class Module(object):
2018-09-06 16:58:53 +00:00
_name = "AutoMode"
def __init__(self, bot, events, exports):
self.bot = bot
2018-09-06 16:58:53 +00:00
events.on("received.join").hook(self.on_join)
events.on("received.command.addop").hook(self.add_op,
require_mode="o", min_args=1, channel_only=True,
usage="<nickname>", help="Add a user to the automode op list")
events.on("received.command.removeop").hook(self.remove_op,
require_mode="o", min_args=1, channel_only=True,
usage="<nickname>", help="Remove a user from the automode "
"op list")
events.on("received.command.addvoice").hook(self.add_voice,
require_mode="o", min_args=1, channel_only=True,
usage="<nickname>", help="Add a user to the automode voice list")
events.on("received.command.removevoice").hook(self.remove_voice,
require_mode="o", min_args=1, channel_only=True,
usage="<nickname>", help="Remove a user from the automode "
"voice list")
exports.add("channelset", {"setting": "automode",
"help": "Disable/Enable automode",
"validate": Utils.bool_or_none})
def _check_modes(self, channel, user):
identified_account = user.get_identified_account()
if identified_account and channel.get_setting("automode", False):
modes = channel.get_user_setting(user.get_id(), "automodes", [])
2018-09-06 16:58:53 +00:00
if modes:
channel.send_mode("+%s" % "".join(modes),
" ".join([user.nickname for mode in modes]))
def on_join(self, event):
self._check_modes(event["channel"], event["user"])
def on_account(self, event):
for channel in event["user"].channels:
self._check_modes(channel, event["user"])
2018-09-06 16:58:53 +00:00
def _add_mode(self, event, mode, mode_name):
target_user = event["server"].get_user(event["args_split"][0])
automodes = event["target"].get_user_setting(target_user.get_id(),
"automodes", [])
if mode in automodes:
event["stderr"].write("'%s' already has automode %s" % (
target_user.nickname, mode_name))
else:
automodes.append(mode)
2018-09-06 16:58:53 +00:00
event["target"].set_user_setting(target_user.get_id(), "automodes",
automodes)
if event["target"] in target_user.channels:
self._check_modes(event["target"], target_user)
2018-09-06 16:58:53 +00:00
event["stdout"].write("Added automode %s for '%s'" % (
mode_name, target_user.nickname))
def _remove_mode(self, event, mode, mode_name):
target_user = event["server"].get_user(event["args_split"][0])
automodes = event["target"].get_user_setting(target_user.get_id(),
"automodes", [])
if not mode in automodes:
event["stderr"].write("'%s' doesn't have automode %s" % (
target_user.nickname, mode_name))
else:
automodes.remove(mode)
2018-09-06 16:58:53 +00:00
event["target"].set_user_setting(target_user.get_id(), "automodes",
automodes)
event["stdout"].write("Removed automode %s from '%s'" % (
mode_name, target_user.nickname))
def add_op(self, event):
self._add_mode(event, "o", "op")
def remove_op(self, event):
self._remove_mode(event, "o", "op")
def add_voice(self, event):
self._add_mode(event, "v", "voice")
def remove_voice(self, event):
self._remove_mode(event, "v", "voice")