🤗 New features and changes
* The `Feature` class is renamed to `Ability` for better semantic similarity to the general standard of terminology.
> Note! This is a **breaking** change.
* The `Command` class is renamed to `Intent` for better semantic similarity to the general standard of terminology.
> Note! This is a **breaking** change.
* `pyttman-cli` is renamed to just `pyttman` for increased simplicity.
> Note! This is a **breaking** change.
* The reference to `Feature` in `Intent` classes (previously `Command` classes) - is removed.
this means that the `Storage` object previously accessed through `self.feature.storage` can no longer be accessed this
way. Instead, the `Ability` is no longer referenced inside `Intent` classes for cleaner OOP relations.
**However**, the `Storage` object is still available in `Intent` classes, of course. It is accessed using `self.storage` both in the `Ability`
and in `Intent` classes.
> Note! This is a **breaking** change.
* The NLU component `EntityParser` class of `Intent` classes has been improved, and no longer identifies one entity more than once. It is also a lot smarter in how it traveres the message in order to find the data of interest.
* The `EntityParser` class must no longer inherit from `EntityParserBase` or `Intent.EntityParser`, metaclassing is internally handeled.
* The `CommandProcessor` class which was deprecated in version 1.1.4, is removed.
* The `Callback` class which was deprecated in 1.1.4, is removed.
* The `Interpretation` class which was deprecated in 1.1.4, is removed.
* Methods associated with legacy classes from the `Intent` and `Ability` classes internally, have been removed
* The new `ReplyStream` Queue-like object offers you the ability to return **multiple** response messages in a single object from Intents.
The `ReplyStream` will wrap your strings or other objects as `Reply` objects if compatible, and the client will post each of these elements as separate messages in the client.
* The `pyttman.schedule.method` api method no longer requires the use of the `async_loop` argument if the function to be scheduled is asynchronous, but rather acquires the running loop through `asyncio.get_running_loop()`. If no running loop is identified, it will automatically run the asynchronous function using `asyncio.run`.
* Identifier class `DateTimeStringIdentifier` has added regex patterns to also identify strings with a date stamp, without a specific time.
For example, in a message like: `On that fateful night of 1986/04/26 (...)` - the `DateTimeStringIdentifier` would now find `1986/04/26` as a valid entity.
🐛 Splatted bugs and corrected issues
* Fixes an [issue](https://github.com/dotchetter/Pyttman/issues/30) where line separations in `Reply` objects were not present when the data was displayed in applications such as DIscord or the Cli client terminal shell. These are now present.
* Fixes an [issue](https://github.com/dotchetter/Pyttman/issues/24) where clients could not communicate any errors upon startup. These are now showed through user warnings.
* Fixes an [issue](https://github.com/dotchetter/Pyttman/issues/31) where one element in a message would end up multiple times in `self.entities` incorrectly
* Fixes an [issue](https://github.com/dotchetter/Pyttman/issues/32) where strings defined in `lead` and `trail` in `Intent` classes were case-sensitive - they are not anymore.
* Fixes an issue where an entity parsed using a `ChoiceParser` would
be stored as the casefolded variant. With this correction, identification
is done case-insensitively, and the defined value in the `ChoiceParser.choices`
is the one present in `self.entites`, when a match occurs.
* Fixes an issue with the `CapitalizedIdentifier` identifier class, as it would not grant
all-caps words as valid.
------