Ejemplo n.º 1
0
 def ctcp_ACTION(self, type, sender, target, rest, dcc=0):
     nick = getnick(sender)
     if self.channels.has_key(target):
         self.channels[target].action(nick, rest)
     elif self.queries.has_key(nick):
         self.queries[nick].action(nick, rest, dcc=dcc)
     elif self.cfg("client.use_msg_win"):
         msg = self.viewtext.get_msgwin()
         # assert: self.isme(target) ?
         msg.action(nick, rest, dcc=dcc)
     else:
         self.queries[nick] = self.viewtext.create_query(nick)
         self.queries[nick].action(nick, rest, dcc=dcc)
     self.logger.log(target, "-> %s %s" % (nick, rest))
Ejemplo n.º 2
0
 def ctcp_reply_unknown(self, type, sender, target, rest):
     self.view.announce("Received a CTCP %s reply from %s: %s" % (type, getnick(sender), rest))
Ejemplo n.º 3
0
 def ctcp_unknown(self, type, sender, target, rest):
     ##
     ## XXX we may not want to do this with public ctcp's
     self.ctcpreply(getnick(sender), "ERROR", "WHAT YOU SAY?")
Ejemplo n.º 4
0
    def ctcp_DCC(self, type, sender, target, rest):
        ##
        ## rest looks like: <type> <argument> <host> <port> [size]
        ## <argument> is a filename, or 'CHAT' for dcc chat
        dcc_args = re.split("\s+", rest)
        nick = getnick(sender)
        if len(dcc_args) < 4:
            print "Invalid number of args for dcc chat"
            # report? XXX
            return
        type, file, dcchost, strport = dcc_args[:4]
        type = lower(type)
        try:
            port = atoi(strport)
        except ValueError:
            print "Invalid port for dcc"
            # report, reply, XXX
            return
        try:
            host = net.inet_ntoa(long(dcchost))
        except:
            print "Invalid host for dcc"
            # report, reply, XXX
            return

        if type == "chat":
            if len(dcc_args) < 4:
                print "Invalid number of args for dcc chat"
                # report? XXX
                return

            ##
            ## check if 1024 < port < 65536
            ## perhaps deny multicast range.
            ## local ip's are okay, basically.
            ## also, usually host and senders host must match, right?
            ## we could enfore this in a strict mode
            ##
            ## this invokes a method from dccSupport, which is inherited
            ## elsewhere..
            ##
            ## More checks on parameters to avoid exceptions
            self.dcc_accept_chat(nick, host, port)
        elif type == "send":
            print dcc_args
            if len(dcc_args) >= 5:
                strsize = dcc_args[4]
            elif len(dcc_args) == 4:
                size = 0
            else:
                print "Invalid number of args for dcc send"
                # report? XXX
                return
            try:
                size = int(strsize)
            except ValueError:
                size = 0  # why not...
            ##
            ## check type of 'size'
            self.dcc_accept_file(nick, host, port, file, size)
        else:
            self.ctcpreply(nick, "ERROR", "I don't support DCC %s" % type)
Ejemplo n.º 5
0
 def ctcp_VERSION(self, type, sender, target, rest):
     self.ctcpreply(
         getnick(sender), "VERSION", "MOST irc %s, %s" % (self.cfg("client.version"), self.cfg("client.home"))
     )