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
ifTrue
. 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'