예제 #1
0
def build_admin(env):
    if env.event == "PRIVMSG":
        env.admin = duxlot.Storage()

        env.admin.owner = env.nick == env.options("admin-owner")
        admin_user = (env.nick in env.options("admin-users"))

        env.admin.user = env.admin.owner or admin_user
        env.admin.channel = env.sender in env.options("admin-channels")
        env.admin.place = env.private or env.admin.channel

    return env
예제 #2
0
파일: irc.py 프로젝트: dpk/duxlot
def create_irc_env(public, message):
    proto = public()
    env = duxlot.Storage(proto.copy())

    env.message = message
    env.event = message["command"]

    if "prefix" in message:
        env.nick = message["prefix"]["nick"]

    if env.event == "PRIVMSG":
        env.sender = message["parameters"][0]
        env.text = message["parameters"][1]
        if "address" in public.data:
            env.limit = 498 - len(env.sender + public.data["address"])

        prefix = public.options("prefix", "channels").get(env.sender)
        if prefix is None:
            prefix = public.options("prefix", "channels").get("", ".")  # @@
        env.prefix = prefix

        if env.text.startswith(prefix):
            sans_prefix = env.text[len(prefix):]

            if " " in sans_prefix:
                env.command, env.arg = sans_prefix.split(" ", 1)
            else:
                env.command, env.arg = sans_prefix, ""

        env.private = env.sender == public.options("nick")
        if env.private:
            env.sender = env.nick

    if "sender" in env:

        def say(text):
            public.msg(env.sender, text)

        env.say = say

    if ("nick" in env) and ("sender" in env):

        def reply(text):
            public.msg(env.sender, env.nick + ": " + text)

        env.reply = reply

    # @@ this shouldn't really be here...
    for builder in duxlot.builders:
        env = builder(env)

    return env
예제 #3
0
파일: irc.py 프로젝트: dpk/duxlot
    def tasks(self):
        self.main = duxlot.Storage()

        for name, method in task.methods.items():
            setattr(self.main, name, method)

        while True:
            parameters = self.private.queue["main"].get()
            name, arguments = parameters[0], parameters[1:]
            debug("Got task:", name, arguments)

            if name in self.main:
                try:
                    getattr(self.main, name)(self, *arguments)
                except Exception as err:
                    debug("Task Error:", name, err)
예제 #4
0
파일: irc.py 프로젝트: dpk/duxlot
    def create_private(self):
        private = duxlot.Storage()

        private.command = self.commands.spawn
        # private.events is set later on
        # private.named is set later on
        private.queue = {
            "main": self.processes.queue,
            "send": self.processes["send"].queue,
            "messages": self.processes["messages"].queue,
            "events": self.processes["events"].queue,
            "schedule": self.processes["schedule"].queue
        }
        # private.socket is set in process.Process

        return private
예제 #5
0
파일: irc.py 프로젝트: dpk/duxlot
    def create_public(self):
        public = duxlot.Storage()

        public.data = self.manager.dict()
        public.data.stamp = 0
        public.database = duxlot.database(
            duxlot.config.path(self.config.base + ".database"),
            self.manager.Namespace())
        public.debug = debug
        public.options = options.Options(self.config.name, self.manager,
                                         public)

        def schedule(*args):
            self.private.queue["schedule"].put(args)

        public.schedule = schedule

        def task(*args):
            self.private.queue["schedule"].put((0, ) + args)

        public.task = task

        def send(*args):
            if not all(isinstance(arg, str) for arg in args):
                debug("Error: public.send:", args)
                return

            if len(args) > 1:
                args = list(args)
                args[-1] = ":" + args[-1]

            octets = " ".join(args).encode("utf-8", "replace")
            self.processes["send"].queue.put(octets)

        public.send = send

        def msg(*args):
            send("PRIVMSG", *args)

        public.msg = msg

        return public