**TL;DR: Slack, Rocket.chat, and Shell support, and you can write full chatterbots with Will now!**
This is a huge rewrite of will, adding pluggable backends for chat systems, Will's internal brains, pub-sub, and encryption.
A huge number of really smart people gave their thoughts and suggestions throughout the process, not least [hobson](https://github.com/hobson), [woohgit](https://github.com/woohgit), [netjunki](https://github.com/netjunki), [sivy](https://github.com/sivy), [antgel](https://github.com/antgel), [shadow7412](https://github.com/shadow7412), [brandonsturgeon](https://github.com/brandonsturgeon), [pepedocs](https://github.com/pepedocs), [tophsic](https://github.com/tophsic), and [mike-love](https://github.com/mike-love).
Read all about what and why here: [What's new in Will 2](https://heywill.io/will2),
And when you're ready to upgrade, here's [the upgrade guide](http://skoczen.github.io/will/upgrading_to_2). (Spoiler: `pip install -U will`).
High-level, here's what's new:
- Slack support
- CLI/Shell backend
- [Rocket.chat](https://rocket.chat/) support, thanks to [antgel](https://github.com/antgel).
- Will's brains have been abstracted - you can now add custom [analysis](/backends/analysis), [generation](/backends/generation), and [execution](/backends/execution) backends to build everything from a straight regex-bot to a full chatterbot.
- [Pluggable I/O backends](/backends/io), which is how all of the above were done, and which means adding new platforms is pretty simple.
- [Pluggable storage](/backends/storage) backends.
- [Pluggable pubsub](/backends/pubsub) backends.
- Built-in encryption for storage and pub/sub (with [pluggable backends](/backends/encryption) as well.)
- Lots more intelligence around required settings and verification, to make first starting and debugging Will easier.
- Full Python 3 support. (Don't worry, 2.x [isn't going anywhere](https://heywill.io/will2#python3).)
- New `will gif me` command. Because it can't all be serious. :)
This release also changes a few bits of behavior, to be consistent:
- `self.reply()` *finally* no longer requires you to tediously pass the `message` back to it. It's also smart, and backwards compatable with existing plugins.
- `admin_only` is explicitly flagged for deprecation and removal, to be replaced by the ACL system introduced in 2015 (largely, this is because having two different access control systems is crazy and painful.) Switching is as easy as adding `ACL = {'admins': ['steven', 'will']}` to your config.py and find/replacing `admin_only=True` with `acl=['admins',] in your codebase. For now, Will handles backwards compatibility by mapping the old settings into the new places, but he won't forever. Thanks for updating, and making ongoing maintenence simpler!
- If no ACLs are specified and users try to perform restricted commands, they'll be allowed as before, but Will will complain to the console. A new `DISABLE_ACL` setting has been added to turn off the complaining.
- You can pass in `channel=` or `room=` when specifying a custom reply location. If both are passed in, Will uses `channel`.
There are a couple *internal* backwards-incompatible changes:
- `RosterMixin` has been renamed `HipChatRosterMixin` and moved to `will.backends.io_adapters.hipchat`. This change should not affect you unless you were specifically importing RosterMixin in your own plugins - everything in `WillPlugin` has been automatically routed to the right place, in a backwards-compatible way.
- `Room` and `RoomMixin` have similarly become `HipChatRoom` and `HipChatRoomMixin and moved to `will.backends.io_adapters.hipchat`.
As this is a *big* update, please report any bugs you see (no matter how small) to [the github issue tracker](https://github.com/skoczen/will/issues). Thanks in advance for making Will even better!