def __init__(self, *args, **kw): """Create a new log mixin.""" if not getattr(self, "log", None): self.log = WhistlerLog() self.register_handler(EVENT_MESSAGE, self.save_log_message)
class LogMixin(object): """Implements a basic log features for a :class:`WhistlerBot`.""" def __init__(self, *args, **kw): """Create a new log mixin.""" if not getattr(self, "log", None): self.log = WhistlerLog() self.register_handler(EVENT_MESSAGE, self.save_log_message) def save_log_message(self, message, args): self.log.info("[%s] <%s> %s" % ( "room" if message["type"] == "groupchat" else "chat", message["from"], message["body"], ))
def __init__(self, jid, password, server=None, rooms=None, resource=None, mention=None, log=None, users=[], use_tls=False, ignore_ssl_cert=True): """Initialize a Whistler bot. Create a new :class:`WhistlerBot` object, the :func:`__init__` receive the following parameters: :param `jid`: a valid JID atom to identify the bot user. :param `password`: a plaintext password to identify the bot user. :param `server`: a tuple in the form *server*, *port* which sepcify the host to connect to, if not provided the server then use the JID domain instead. :param `rooms`: a :class:`list` of rooms to be autojoin in. :param `resource`: the XMPP resource string, or autogenerated one if not provided. :param `log`: a :class:`WhistlerLog` to log bot messages to, or *stdout* if none is provided. :param `users`: a :class:`set` of valid JID as strings which identify master users. :param use_tls: if set to true, try to use TLS where available :param ignore_ssl_cert: if set to false raise an exception when certificate do not match with hostname or any other kind of invalid certificate. """ self.user = jid self.jid = jid self.password = password self.server = server self.log = log or WhistlerLog() self.use_tls = use_tls self.ignore_ssl_cert = ignore_ssl_cert self._initial_users = users self.handlers = { EVENT_CONNECT: [], EVENT_DISCONNECT: [], EVENT_REGISTER: [], EVENT_JOIN: [], EVENT_LEAVE: [], EVENT_UNREGISTER: [], EVENT_MESSAGE: [], EVENT_MUC_MESSAGE: [], EVENT_MUC_COMMAND: [], EVENT_CHANGE_STATUS: []} self.client = None self.resource = resource or self.__class__.__name__.lower() + \ str(random.getrandbits(32)) self.mention = mention or self.resource self.jid += "/" + self.resource self._rooms = set(rooms or [])