Esempio n. 1
0
 def handle(self, origin, args):
     if parse_numeric(args[1], self._state.max_client_numerics) \
        == \
        (self._state.server_id, None):
         self._connection.register_pong()
     else:
         self._state.register_pong(
             origin,
             parse_numeric(args[0], self._state.max_client_numerics),
             parse_numeric(args[1], self._state.max_client_numerics)
         )
Esempio n. 2
0
 def handle(self, origin, args):
     self._state.change_nick(
         origin,
         parse_numeric(args[0], self._state.max_client_numerics),
         args[1],
         self._state.ts
     )
Esempio n. 3
0
 def handle(self, origin, args):
     for search in args[1].split(","):
         self._state.request_whois(
             origin,
             parse_numeric(args[0], self._state.max_client_numerics),
             search
         )
Esempio n. 4
0
 def handle(self, origin, args):
     # Parse mode string if exists, and any option arguments
     if origin[1] == None:
         modes = []
         if args[5][0] == "+":
             nextarg = 6
             for mode in args[5][1:]:
                 if mode == "r" or mode == "h":
                     modes.append(('+' + mode, args[nextarg]))
                     nextarg = nextarg + 1
                 else:
                     modes.append(('+' + mode, None))
         self._state.new_user(
             origin,
             parse_numeric(args[-2], self._state.max_client_numerics),
             args[0],
             args[3],
             args[4],
             modes,
             to_int(args[-3]),
             args[1],
             args[2],
             args[-1]
         )
     else:
         self._state.change_nick(origin, origin, args[0], args[1])
Esempio n. 5
0
 def handle(self, origin, args):
     # Handle channel collisions
     cstatus = self._state.create_channel(origin, args[0], int(args[1]))
     nextarg = 2
     
     # Handle channel modes
     if len(args) > nextarg:
         if args[nextarg][0] == "+":
             # But only if this is a new channel
             if cstatus:
                 modes = []
                 for mode in args[nextarg][1:]:
                     if mode == "k" or mode == "l":
                         nextarg = nextarg + 1
                         modes.append(("+" + mode, args[nextarg]))
                     else:
                         modes.append(("+" + mode, None))
                 self._state.change_channel_mode(origin, args[0], modes)
             nextarg = nextarg + 1
     
     # Handle users on the channel
     if len(args) > nextarg:
         umodes = ""
         for user in args[nextarg].split(','):
             # Handle any user modes, but only if this is a new channel
             user = user.split(":")
             if len(user) > 1:
                 umodes = user[1]
             if cstatus:
                 self._state.join_channel(
                     parse_numeric(user[0], self._state.max_client_numerics),
                     parse_numeric(user[0], self._state.max_client_numerics),
                     args[0], umodes
                 )
             else:
                 self._state.join_channel(
                     parse_numeric(user[0], self._state.max_client_numerics),
                     parse_numeric(user[0], self._state.max_client_numerics),
                     args[0], ""
                 )
         nextarg = nextarg + 1
     
     # Handle channel bans, but only if this is a new channel
     if len(args) > nextarg and cstatus:
         if args[nextarg][0] == "%":
             for ban in args[nextarg][1:].split():
                 self._state.add_channel_ban(origin, args[0], ban)
Esempio n. 6
0
 def handle(self, origin, args):
     target = args[0]
     info = args[1].split(None, 1)
     path = info[0].split("!")
     reason = info[1].strip("()")
     self._state.kill(
         origin,
         parse_numeric(target, self._state.max_client_numerics),
         path,
         reason
     )
Esempio n. 7
0
 def handle(self, origin, args):
     if len(args) > 2:
         extra = args[2]
     else:
         extra = None
     self._state.request_stats(
         origin,
         parse_numeric(args[1], self._state.max_client_numerics),
         args[0],
         extra
     )
Esempio n. 8
0
 def parse(self, string):
     """
     Take a string, parse it into our internal form and pass it on
     """
     # Tidy up our line
     string = self._check_line_is_good(string)
     
     # Break up into origin, token and body
     high_level_parts = string.split(None, 2)
     origin = parse_numeric(high_level_parts[0], self._maxclientnum)
     command = high_level_parts[1]
     if not command.isupper() and not command.isdigit():
         raise ProtocolError('Command not in uppercase', string)
     if len(high_level_parts) > 2:
         params = self._parse_params(high_level_parts[2])
     else:
         params = []
     
     # If this is an invalid command, pass it upwards
     try:
         self._pass_to_handler(origin, command, params)
     except ParseError, error:
         raise ParseError(error.value, string)
Esempio n. 9
0
 def handle(self, origin, args):
     target = parse_numeric(args[0], self._state.max_client_numerics)
     for channel in args[1].split(","):
         self._state.join_channel(origin, target, channel, [])
Esempio n. 10
0
 def handle(self, origin, args):
     
     finalmodes = []
     if args[0][0] == "#":
         # Channel mode changes
         channel = args[0]
         modes = args[1]
         nextarg = 2
         flag = "+"
         for mode in modes:
             if mode == "+" or mode == "-":
                 flag = mode
             # Limit only takes arg when set. Key always takes arg.
             elif mode == "k" or (mode == "l" and flag == "+"):
                 finalmodes.append((flag + mode, args[nextarg]))
                 nextarg = nextarg + 1
             elif mode == "b":
                 if flag == "-":
                     self._state.remove_channel_ban(
                         origin, channel, args[nextarg])
                     nextarg = nextarg + 1
                 else:
                     self._state.add_channel_ban(
                         origin, channel, args[nextarg])
                     nextarg = nextarg + 1
             elif mode == "o":
                 if flag == "-":
                     self._state.deop(
                         origin,
                         channel,
                         parse_numeric(args[nextarg],
                                       self._state.max_client_numerics)
                     )
                     nextarg = nextarg + 1
                 else:
                     self._state.op(
                         origin,
                         channel,
                         parse_numeric(args[nextarg],
                                       self._state.max_client_numerics)
                     )
                     nextarg = nextarg + 1
             elif mode == "v":
                 if flag == "-":
                     self._state.devoice(
                         origin,
                         channel,
                         parse_numeric(args[nextarg],
                                       self._state.max_client_numerics))
                     nextarg = nextarg + 1
                 else:
                     self._state.voice(
                         origin,
                         channel,
                         parse_numeric(args[nextarg],
                                       self._state.max_client_numerics))
                     nextarg = nextarg + 1
             else:
                 finalmodes.append((flag + mode, None))
         if len(finalmodes) > 0:
             self._state.change_channel_mode(origin, channel, finalmodes)
     else:
         # User mode changes
         modes = args[1]
         nextarg = 2
         flag = "+"
         finalmodes = []
         for mode in modes:
             if mode == "+" or mode == "-":
                 flag = mode
             #elif mode == "s":
             #    self._state.change_user_mode(
             #        origin, [(flag + mode, args[nextarg])]
             #    )
             #    nextarg = nextarg + 1
             else:
                 finalmodes.append((flag + mode, None))
         self._state.change_user_mode(origin, finalmodes)
Esempio n. 11
0
 def handle(self, origin, args):
     self._state.request_channel_users(
         origin,
         parse_numeric(args[1], self._state.max_client_numerics),
         args[0].split(",")
     )
Esempio n. 12
0
 def testMaxNumEquiv(self):
     self.assertEqual(parse_numeric('ABABA', dict({1: 63})), parse_numeric('ABAAA', dict({1: 63})))
Esempio n. 13
0
 def testUniversalIRCUNumericParse(self):
     self.assertEqual((0, 0), parse_numeric('AAAA', dict({0: 262143})))
     self.assertEqual((32, 127), parse_numeric('gAB]', dict({32: 262143})))
Esempio n. 14
0
 def testShortServerNumericParse(self):
     self.assertEqual((0, None), parse_numeric('A', dict({0: 262143})))
     self.assertEqual((32, None), parse_numeric('g', dict({32: 262143})))
Esempio n. 15
0
 def testShortClientNumericParse(self):
     self.assertEqual((0, 0), parse_numeric('AAA', dict({0: 262143})))
     self.assertEqual((2, 90), parse_numeric('CBa', dict({2: 262143})))
Esempio n. 16
0
 def testExtendedServerNumericParse(self):
     self.assertEqual((0, None), parse_numeric('AA', dict({0: 262143})))
     self.assertEqual((127, None), parse_numeric('B]', dict({127: 262143})))
Esempio n. 17
0
 def handle(self, origin, line):
     self._state.authenticate(origin, parse_numeric(line[0], self._state.max_client_numerics), line[1])
Esempio n. 18
0
 def handle(self, origin, args):
     self._state.request_lusers(
         origin,
         parse_numeric(args[1], self._state.max_client_numerics),
         args[0]
     )
Esempio n. 19
0
 def handle(self, origin, args):
     self._state.trace(
         origin,
         args[0],
         parse_numeric(args[1], self._state.max_client_numerics)
     )
Esempio n. 20
0
 def handle(self, origin, args):
     try:
         target = parse_numeric(args[0], self._state.max_client_numerics)
     except Base64Error:
         target = args[0]
     self._state.notice(origin, target, args[-1])
Esempio n. 21
0
 def handle(self, origin, args):
     self._state.request_admininfo(
         origin, parse_numeric(args[0], self._state.max_client_numerics)
     )
Esempio n. 22
0
 def testExtendedClientNumericParse(self):
     self.assertEqual((0, 0), parse_numeric('AAAAA', dict({0: 262143})))
     self.assertEqual((127, 90), parse_numeric('B]ABa', dict({127: 262143})))