ibid.event – Events

class ibid.event.Event(source, type)

Events are at the core of Ibid’s workings. Every join/part/message seen by a source is dispatched as an ibid.event.Event to all the plugins to process. Then responses are extracted from it and returned to the source.

Parameters:
  • source – The name of the source that this event relates to.
  • type

    The type of the event, a string of one of the following values:

    'message'
    A normal message
    'action'
    An action, the result of a /me or /describe
    'notice'
    An IRC notice
    'state'
    A state change, such as join, part, online, offline

Event inherits from dict so properties can be get and set either as attributes or keys.

source

The source string specified at creation.

type

The type string specified at creation.

responses

A list of responses that should be returned.

Note

Rather than appending to this directly, you should use the addresponse() function.

sender

The sender of the event, a dict with the following keys:

'nick'
The user’s nickname, as should be used for addressing him/her.
'id'
The unique identifier for the user. I.e. jabber address or SILC user key hash. Used for opening a conversation with a user.
'connection'
The unique identifier of connection that the user spoke on. Used for addressing the reply to the correct client.
complain

A string, that if present says the Complain processor should return an error message to the sender.

If set to 'notauthed', the complaint will be about insufficient authorisation.

If set to 'exception', the complaint will be about the bot not feeling very well.

processed

A boolean flag indicating that the event has been processed and other Processors don’t need to look at it.

session

A SQLAlchemy sqlalchemy.orm.session.Session that can be used by a plugin for making queries.

It will be automatically committed by the dispatcher, but you are free to commit in a plugin so you can log a successful commit.

addresponse(response, params={}, processed=True, **kwargs)

Add a response to an event.

An event can contain more than one response, they’ll be sent as separate messages.

Parameters:
  • response – The unicode response to add, can contain string substitutions, which will be provided by params.
  • params – Parameters to substitute into response. Can either be a single unicode string or a dict of named substitutions.
  • processed – Set processed True if True. Default: True.
  • source – The source name to direct this reply to. Default: source.
  • target – The user to direct this reply to. Default: sender['connection'].
  • address – Boolean flag indicating if the user should be addressed when delivering this reply. Default: True.
  • action – Boolean flag for whether the reply is a message or an action. Default: False.
  • notice – Boolean flag for whether the reply is a message or an notice. Default: False.

Most commonly addresponse() is called with a unicode parameter for response and either a single substitution in params or multiple, named substitutions. However, you can also pass a Boolean value as response in which case the bot will emit a generic positive or negative response.

Examples (in public IRC):

event.addresponse(True)
# Sends something like u'user: Okay'
event.addresponse(False)
# Sends something like u"user: Shan't"
event.addresponse(u'Sure')
# Sends u"user: Sure"
event.addresponse(u'Jo said "%s"', message)
# Sends u'user: Jo said "hello"' if message was u'hello'
event.addresponse(u'%(key)s is %(value)s', {
   'key': u'Spiny Norman',
   'value': u'a Hedgehog',
})
# Sends u'user: Spiny Norman is a Hedgehog'
event.addresponse(u'Look at me', address=False)
# Sends u'Look at me'
event.addresponse(u'dances', action=True)
# Is the equivalent of '/me dances'