Err v4.0.0 Release Notes

Release Date: 2016-03-13 // about 8 years ago
  • 🚀 This is the next major release of errbot with significant changes under the hood.

    v4.0 New features

    
    - 🔌 Storage is now implemented as a plugin as well, similar to command plugins and backends.
      This means you can now select different storage implementations or even write your own.
    
    The following storage backends are currently available:
    
      + The traditional Python `shelf` storage.
      + In-memory storage for tests or ephemeral storage.
      + `SQL storage <https://github.com/errbotio/err-storage-sql>`_ which supports relational databases such as MySQL, Postgres, Redshift etc.
      + `Firebase storage <https://github.com/errbotio/err-storage-firebase>`_ for the Google Firebase DB.
      + `Redis storage <https://github.com/errbotio/err-storage-redis>`_ (thanks Sijis Aviles!) which uses the Redis in-memory data structure store.
    
    - Unix-style glob support in `BOT_ADMINS` and `ACCESS_CONTROLS` (see the updated `config-template.py` for documentation).
    
    - 📚 The ability to apply ACLs to all commands exposed by a plugin (see the updated `config-template.py` for documentation).
    
    - The mention_callcack() on IRC (mr. Shu).
    
    - A new (externally maintained) `Skype backend <https://github.com/errbotio/errbot-backend-skype>`_.
    
    - ⚡️ The ability to disable core plugins (such as `!help`, `!status`, etc) from loading (see `CORE_PLUGINS` in the updated `config-template.py`).
    
    - ➕ Added a `--new-plugin` flag to `errbot` which can create an emply plugin skeleton for you.
    
    - 🔧 IPv6 configuration support on IRC (Mike Burke)
    
    - More flexible access controls on IRC based on nickmasks (in part thanks to Marcus Carlsson).
      IRC users, see the new `IRC_ACL_PATTERN` in `config-template.py`.
    
    - 🔌 A new `callback_mention()` for plugins (not available on all backends).
    
    - 🔌 Admins are now notified about plugin startup errors which happen during bot startup
    
    - The repos listed by the `!repos` command are now fetched from a public index and can be
      queried with `!repos query [keyword]`. Additionally, it is now possible to add your own
      index(es) to this list as well in case you wish to maintain a private index (special
      thanks to Sijis Aviles for the initial proof-of-concept implementation).
    
    
    🛠 v4.0 fixed
    ~~~~~~~~~~
    
    - IRC backend no longer crashes on invalid UTF-8 characters but instead replaces
      them (mr. Shu).
    
    - 🛠 Fixed joining password-protected rooms (Mikko Lehto)
    
    - Compatibility to API changes introduced in slackclient-1.0.0 (used by the Slack backend).
    
    - Corrected room joining on IRC (Ezequiel Hector Brizuela).
    
    - Fixed *"team_join event handler raised an exception"* on Slack.
    
    - Fixed `DIVERT_TO_PRIVATE` on HipChat.
    
    - Fixed `DIVERT_TO_PRIVATE` on Slack.
    
    - Fixed `GROUPCHAT_NICK_PREFIXED` not prefixing the user on regular commands.
    
    - Fixed `HIDE_RESTRICTED_ACCESS` from accidentally sending messages when issuing `!help`.
    
    - Fixed `DIVERT_TO_PRIVATE` on IRC.
    
    - Fixed markdown rendering breaking with `GROUPCHAT_NICK_PREFIXED` enabled.
    
    - 🛠 Fixed `AttributeError` with `AUTOINSTALL_DEPS` enabled.
    
    - IRC backend now cleanly disconnects from IRC servers instead of just cutting the connection.
    
    - 🌲 Text mode now displays the prompt beneath the log output
    
    - 🔌 Plugins which fail to install no longer remain behind, obstructing a new installation attempt
    
    
    v4.0 Breaking changes
    
    • 🔨 The underlying implementation of Identifiers has been drastically refactored to be more clear and correct. This makes it a lot easier to construct Identifiers and send messages to specific people or rooms.

    • ⏪ The file format for --backup and --restore has changed between 3.x and 4.0 On the v3.2 branch, backup can now backup using the new v4 format with !backupv4 to make it possible to use with --restore on errbot 4.0.

    🚚 A number of features which had previously been deprecated have now been removed. These include:

    • configure_room and invite_in_room in XMPPBackend (use the equivalent functions on the XMPPRoom object instead)

    • The --xmpp, --hipchat, --slack and --irc command-line options from errbot (set a proper BACKEND in config.py instead).

    v 4.0 Miscellaneous changes

    
    - 🔖 Version information is now specified in plugin `.plug` files instead of in
      the Python class of the plugin.
    
    - ⚡️ Updated `!help` output, more similar to Hubot's help output (James O'Beirne and Sijis Aviles).
    
    - XHTML-IM output can now be enabled on XMPP again.
    
    - 🆕 New `--version` flag on `errbot` (mr. Shu).
    
    - 🌲 Made `!log tail` admin only (Nicolas Sebrecht).
    
    - Made the version checker asynchronous, improving startup times.
    
    - 🔧 Optionally allow bot configuration from groupchat
    
    - `Message.type` is now deprecated in favor of `Message.is_direct` and `Message.is_group`.
    
    - 🔨 Some bundled dependencies have been refactored out into external dependencies.
    
    - 📄 Many improvements have been made to the documention, both in docstrings internally as well
      as the user guide on the website at http://errbot.io.
    
    
    Further info on identifier changes
    
    • Person, RoomOccupant and Room are now all equal and can be used as-is to send a message to a person, a person in a Room or a Room itself.

    The relationship is as follow:

    📄 .. image:: https://raw.githubusercontent.com/errbotio/errbot/master/docs/_static/arch/identifiers.png :target: https://github.com/errbotio/errbot/blob/master/errbot/backends/base.py

    For example: A Message sent from a room will have a RoomOccupant as frm and a Room as to.

    This means that you can now do things like:

    • self.send(msg.frm, "Message")
    • self.send(self.query_room("#general"), "Hello everyone")

    .. v9.9.9 (leave that there so master doesn't complain)