def setUp(self): self.cmd_handler = CommandHandler()
class CommandHandlerTest(unittest.TestCase): def setUp(self): self.cmd_handler = CommandHandler() def tearDown(self): self.cmd_handler = None def testHandlerRegistersCommandsWithSingleCommand(self): self.cmd_handler.register_owner('testbot') self.cmd_handler.register_delimiter('!') self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"]) registered_command_list = self.cmd_handler.registered_commands() expected_command_list = ['!testbot test[t] - this is a test'] self.assertEqual(registered_command_list, expected_command_list) def testHandlerRegistersCommandsWithOptionalArguments(self): self.cmd_handler.register_owner('testbot') self.cmd_handler.register_delimiter('!') self.cmd_handler.register("test", self, "sampleFunc", accepts_args=True) msg = Mock(Body="!testbot test this is a test") function_return = self.cmd_handler.handle(msg, 200) self.assertEqual(function_return, "this is a test") def testHandlerCanParseMessages(self): self.cmd_handler.register_owner('testbot') self.cmd_handler.register_delimiter('!') self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"]) msg = Mock(Body="!testbot test this is a test") cmd, argvals = self.cmd_handler.extract_command_args(msg) self.assertEqual(cmd, "test") self.assertEqual(argvals, "this is a test") def testHandlerCallsRegisteredFunctions(self): self.cmd_handler.register_owner('testbot') self.cmd_handler.register_delimiter('!') self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"]) msg = Mock(Body="!testbot test this is a test") function_return = self.cmd_handler.handle(msg, 200) self.assertEqual(function_return, "this is a test") def testHandlerCallsRegisteredCommandAliases(self): self.cmd_handler.register_owner('testbot') self.cmd_handler.register_delimiter('!') self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"]) msg = Mock(Body="!testbot t this is a test") function_return = self.cmd_handler.handle(msg, 200) self.assertEqual(function_return, "this is a test") # Functions for testing commands callback functionality def sampleFunc(self, args): return args
class SkypeBot(object): __metaclass__ = ABCMeta """ Abstract Base Class to define the interactions of a SkypeBot Args: name (string, optional): Name given to the SkypeBot """ def __init__(self, name="Skype Bot"): self.command_handler = CommandHandler() self.skype = Skype(Events=self) self.skype.FriendlyName = name def MessageStatus(self, msg, status): """ Event handler for sending messages Args: msg (Skype4Py.SmsMessage): Skype Message status (int): status code """ if status == cmsReceived: msg.MarkAsSeen() user = msg.FromHandle reply_with = self.command_handler.handle(msg, status, user) if reply_with: self.__reply(msg, reply_with) def __reply(self, msg_client, msg): """ [Internal] Send message to chat via Skype Msg Module Args: msg_client (Skype4Py.Chat): Skype Chat client instance msg (Skype4Py.SmsMessage): Skype Message """ msg_client.Chat.SendMessage(msg) def bootstrap(self): """ Bootstraps the Bot config to run and attach to the skype client """ self.register_command_delimiter() self.register_command_owner() self.register_commands() self.skype.Attach() @abstractmethod def run(self): """ Method which will facilitate running the Bot. """ pass @abstractmethod def register_command_delimiter(self): """ Register the delimiter in which signifies a command is being sent. """ pass @abstractmethod def register_command_owner(self): """ Register the current bot name which will respond to commands in skype. """ pass @abstractmethod def register_commands(self): """ Register the bot commands. """ pass
def __init__(self, name="Skype Bot"): self.command_handler = CommandHandler() self.skype = Skype(Events=self) self.skype.FriendlyName = name