> [!WARNING]
> This is a **BETA** release.
**Added:**
- [commands.reward_command](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.reward_command)
- [commands.RewardCommand](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.RewardCommand)
- [commands.RewardStatus](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.RewardStatus)
- [ContextType](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.ContextType)
- [Context.type](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.Context.type)
- [Context.payload](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.Context.payload)
- [Context.redemption](https://twitchio.dev/en/latest/exts/commands/core.html#twitchio.ext.commands.Context.redemption)
- `Mixin.unique_commands`
- `Command.qualified_name`
- `Command.full_parent_name`
- `Command.relative_name`
- SSL to AiohttpAdapter
- `PartialUser.update_custom_reward()`
- `PartialUser.delete_custom_reward()`
- Default colour classmethods to `Colour/Color`
- `Client.websocket_subscriptions()`
- `Client.delete_websocket_subscription()`
- `Command` callbacks can return a value which can be caught along the invocation chain.
- `ChannelBitsUseSubscription`
- `event_bits_use()`
- `ChannelBitsUse` model.
- `event_token_refreshed` and `TokenRefreshedPayload`
- `AutoRedeemReward`
- `UnlockedEmote`
- `Client.fetch_channel`
- Added version 2 data to `AutoRedeemReward`.
**Fixed:**
- `event_raid` documentation.
- Incorrect warning in `after_routine` check.
- Removed redundant arguments in `subscribe_webhook`
- Optimizations to websocket revocations/reconnections.
- Fixed a check for invalid tokens in HTTP.
- Proactively refresh tokens before they expire
- Remove invalid token check in websocket.
- Fixed exporting types (Improves intellisense)
- Various fixes to Ad models; due to Twitch documentation error.
- Cleanup some logging messages.
**Changed:**
- `PartialUser/Chatter.send_message` the send parameter can be positional.
**Notes:**
This is technically a breaking change but I suspect the reach will be minimal, it will affect users who override `Bot.get_context` or `Bot.process_command`s and for those who subclass `Context` and use them along with keyword-arguments:
`Bot.get_context` > Positional `message` parameter was renamed to payload
`Bot.process_commands` > Positional `message` parameter was renamed to payload
`Context` > Positional `message` parameter was renamed to payload
The other potential breaking change is `Context.message` can now return `None`. However; it won't return `None` in non-message based `Context`s anyways so it shouldn't affect anyone.
**Documentation:**
https://twitchio.dev/en/latest/
**Discord:**
https://discord.gg/RAKc3HF
**Installing:**
https://twitchio.dev/en/latest/getting-started/installing.html
**Quickstart:**
https://twitchio.dev/en/latest/getting-started/quickstart.html
**Migrating:**
https://twitchio.dev/en/latest/getting-started/migrating.html
Thanks for all the continued testing!
Contributions
* Fix incorrect after_routine warning by bartmoorman in https://github.com/PythonistaGuild/TwitchIO/pull/484
* Add SSLContext arg to aiohttp adapter by cwtravis in https://github.com/PythonistaGuild/TwitchIO/pull/483
* Refresh tokens before they expire by bartmoorman in https://github.com/PythonistaGuild/TwitchIO/pull/486
* Refresh token if it will likely expire before the next validation by bartmoorman in https://github.com/PythonistaGuild/TwitchIO/pull/487
* Add missing default_auth by bartmoorman in https://github.com/PythonistaGuild/TwitchIO/pull/489
New Contributors
* cwtravis made their first contribution in https://github.com/PythonistaGuild/TwitchIO/pull/483
**Full Changelog**: https://github.com/PythonistaGuild/TwitchIO/compare/v3.0.0b3...v3.0.0b4