# 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: tools/validator.py
# class Validator:
#     def __init__(self):
#     def hostmask(self, hostmask, require_nickname=False):
#     def nickname(self, nick):
#     def channel(self, channel):


from core import moduletemplate
from tools import duration
from tools import validator
import sqlite3
import os
import time
                return self.notice(nick, "'{}' is an invalid nickname.".format(commandtext))

            if not self.has_tells(commandtext):
                return self.notice(nick, "{} has no pending messages.".format(commandtext))

            if not self.tell_count(nick, commandtext):
                return self.notice(nick, "{} has no pending messages from you.".format(commandtext))

            success = self.tell_delete(nick, commandtext)
            if success:
                return self.message(target, nick, "Deleted all messages to {} from you.".format(commandtext))
            return self.message(target, nick, "Was unable to delete pending messages sent by you.")

        if mod:
            if command in ["notes", "tells"]:
                count = self.tell_count("*")
                return self.message(target, nick, "There are {} pending message{} in my database."
                                                  .format(count, "s" if count != 1 else ""))
        return False

    def show_tells(self, nick):
        try:
            conn = sqlite3.connect(self.db_file)
            c = conn.cursor()
            result = c.execute("SELECT sender, message, timestamp, unix_timestamp FROM tell WHERE "
                               "lower(recipient) = ?", [nick.lower()]).fetchall()

            for msg in result:
                self.message(nick, None, "$(bold){}$(clear) left you a message: {} - Sent on {} ({} ago)"
                                         .format(msg[0], msg[1], msg[2],

# 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: tools/validator.py
# class Validator:
#     def __init__(self):
#     def hostmask(self, hostmask, require_nickname=False):
#     def nickname(self, nick):
#     def channel(self, channel):


# Path: modules/tell.py
from core import moduletemplate
from tools import duration
from tools import validator
import sqlite3
import os
import time

                return self.notice(nick, "'{}' is an invalid nickname.".format(commandtext))

            if not self.has_tells(commandtext):
                return self.notice(nick, "{} has no pending messages.".format(commandtext))

            if not self.tell_count(nick, commandtext):
                return self.notice(nick, "{} has no pending messages from you.".format(commandtext))

            success = self.tell_delete(nick, commandtext)
            if success:
                return self.message(target, nick, "Deleted all messages to {} from you.".format(commandtext))
            return self.message(target, nick, "Was unable to delete pending messages sent by you.")

        if mod:
            if command in ["notes", "tells"]:
                count = self.tell_count("*")
                return self.message(target, nick, "There are {} pending message{} in my database."
                                                  .format(count, "s" if count != 1 else ""))
        return False

    def show_tells(self, nick):
        try:
            conn = sqlite3.connect(self.db_file)
            c = conn.cursor()
            result = c.execute("SELECT sender, message, timestamp, unix_timestamp FROM tell WHERE "
                               "lower(recipient) = ?", [nick.lower()]).fetchall()

            for msg in result:
                self.message(nick, None, "$(bold){}$(clear) left you a message: {} - Sent on {} ({} ago)"
                                         .format(msg[0], msg[1], msg[2],

                                                 duration.timesincetimestamp(int(msg[3]))), True)