# Path: core/moduletemplate.py
# class BotModule:
#     PRIV_NONE = "none"
#     PRIV_MOD = "mod"
#     PRIV_MODERATOR = "mod"
#     PRIV_ADMIN = "admin"
#     PRIV_ADMINISTRATOR = "admin"
#     def __init__(self, conn, logger, module_name):
#     def on_module_load(self):
#     def on_module_unload(self):
#     def on_connect(self):
#     def on_disconnect(self):
#     def on_privmsg(self, target, nick, message):
#     def on_action(self, target, nick, action):
#     def on_join(self, nick, channel):
#     def on_part(self, nick, channel, message):
#     def on_self_join(self, channel):
#     def on_self_part(self, channel):
#     def on_kick(self, nick, channel, knick, reason):
#     def on_quit(self, nick, message):
#     def on_command(self, target, nick, command, commandtext, mod, admin):
#     def on_numeric(self, numeric, data):
#     def message(self, target, nick, message, parse=False):
#     def notice(self, nick, message, parse=False):
#     def action(self, target, action, parse=False):
#     def mode(self, target, modes):
#     def ban(self, nick, channel, quiet=False):
#     def getMask(self, nick):
#     def send_raw(self, raw_message):
#     def debug(self, message, format=False):
#     def log(self, message):
#     def log_verbose(self, message):
#     def warning(self, message):
#     def notice_verbose(self, message):
#     def warning_verbose(self, message):
#     def error(self, message):
#     def isOp(self, nick, channel):
#     def isVoice(self, nick, channel):
#     def isOn(self, nick, channel):
#     def isIdentified(self, nick):
#     def isOper(self, nick):
#     def getUserData(self, nick):
#     def getChannelData(self, channel):
#     def isBotAdministrator(self, nick):
#     def isBotModerator(self, nick):
#     def ratelimit(self, command, confName="rate_limit_delay", delay=10):
#     def register_command(self, command, params, help, priv, aliases=None):
#     def unregister_command(self, command):
#     def getConfigMetadata(self, metadata):
#     def requireApiKey(self, api_name):
#     def _getApiKey(self, api_name):
#     def _unregister_commands(self):
#     def _getModuleData(self):
# 
# Path: tools/duration.py
# def timesincetimestamp(timestamp, now=None):
# def timebeforetimestamp(timestamp, now=None):
# def timesince(d, now=None):
# def timeuntil(d, now=None):


from core import moduletemplate
from tools import duration
import time
import math
    def checkIntervalFor(self, channel, nick):
        t = int(time.time()) - self.module_data["message_interval"]
        rem = []

        for ts in self.flood_detect[channel][nick.lower()]["messages"]:
            if t > ts:
                rem.append(ts)

        for rts in rem:
            self.flood_detect[channel][nick.lower()]["messages"].remove(rts)

    def on_connect(self):
        if "report_channel" in self.module_data:
            self._conn.join_channel(self.module_data["report_channel"])
        if self.channels:
            self._conn.join_channel(self.channels.join(","))

    def on_privmsg(self, target, nick, message):
        for chan in self.channels:
            if target == chan:
                self.addMessage(target, nick)

    def on_action(self, target, nick, action):
        for chan in self.channels:
            if target == chan:
                self.addMessage(target, nick)

    def on_command(self, target, nick, command, commandtext, mod, admin):
        if target.startswith("#"):
            if command == "fdsettings":

# Path: core/moduletemplate.py
# class BotModule:
#     PRIV_NONE = "none"
#     PRIV_MOD = "mod"
#     PRIV_MODERATOR = "mod"
#     PRIV_ADMIN = "admin"
#     PRIV_ADMINISTRATOR = "admin"
#     def __init__(self, conn, logger, module_name):
#     def on_module_load(self):
#     def on_module_unload(self):
#     def on_connect(self):
#     def on_disconnect(self):
#     def on_privmsg(self, target, nick, message):
#     def on_action(self, target, nick, action):
#     def on_join(self, nick, channel):
#     def on_part(self, nick, channel, message):
#     def on_self_join(self, channel):
#     def on_self_part(self, channel):
#     def on_kick(self, nick, channel, knick, reason):
#     def on_quit(self, nick, message):
#     def on_command(self, target, nick, command, commandtext, mod, admin):
#     def on_numeric(self, numeric, data):
#     def message(self, target, nick, message, parse=False):
#     def notice(self, nick, message, parse=False):
#     def action(self, target, action, parse=False):
#     def mode(self, target, modes):
#     def ban(self, nick, channel, quiet=False):
#     def getMask(self, nick):
#     def send_raw(self, raw_message):
#     def debug(self, message, format=False):
#     def log(self, message):
#     def log_verbose(self, message):
#     def warning(self, message):
#     def notice_verbose(self, message):
#     def warning_verbose(self, message):
#     def error(self, message):
#     def isOp(self, nick, channel):
#     def isVoice(self, nick, channel):
#     def isOn(self, nick, channel):
#     def isIdentified(self, nick):
#     def isOper(self, nick):
#     def getUserData(self, nick):
#     def getChannelData(self, channel):
#     def isBotAdministrator(self, nick):
#     def isBotModerator(self, nick):
#     def ratelimit(self, command, confName="rate_limit_delay", delay=10):
#     def register_command(self, command, params, help, priv, aliases=None):
#     def unregister_command(self, command):
#     def getConfigMetadata(self, metadata):
#     def requireApiKey(self, api_name):
#     def _getApiKey(self, api_name):
#     def _unregister_commands(self):
#     def _getModuleData(self):
# 
# Path: tools/duration.py
# def timesincetimestamp(timestamp, now=None):
# def timebeforetimestamp(timestamp, now=None):
# def timesince(d, now=None):
# def timeuntil(d, now=None):


# Path: modules_disabled/flooddetect.py
from core import moduletemplate
from tools import duration
import time
import math

    def checkIntervalFor(self, channel, nick):
        t = int(time.time()) - self.module_data["message_interval"]
        rem = []

        for ts in self.flood_detect[channel][nick.lower()]["messages"]:
            if t > ts:
                rem.append(ts)

        for rts in rem:
            self.flood_detect[channel][nick.lower()]["messages"].remove(rts)

    def on_connect(self):
        if "report_channel" in self.module_data:
            self._conn.join_channel(self.module_data["report_channel"])
        if self.channels:
            self._conn.join_channel(self.channels.join(","))

    def on_privmsg(self, target, nick, message):
        for chan in self.channels:
            if target == chan:
                self.addMessage(target, nick)

    def on_action(self, target, nick, action):
        for chan in self.channels:
            if target == chan:
                self.addMessage(target, nick)

    def on_command(self, target, nick, command, commandtext, mod, admin):
        if target.startswith("#"):
            if command == "fdsettings":

                purdur = duration.timesincetimestamp(self.last_purge)