This is to speed up cases where someone is just querying the length
of the underlying sequence. If anything else is done to the sequence
then it is copied from the original iterator.
This change should be mostly transparent.
* Initial implementation
* Expose various rich methods to fetch the new models
* Add localize parameters and remove useless payment_source parameters from front-facing fetch methods
* Implement fetching and (partially) redeeming gifts
* Slot remaining models
* Correctly document Gift.redeem() channel parameter
* Implement some stuffs, fix more stuffs, add creating/editing skus/store listings
* Various context properties fixes
* Fix various types, expose SubscriptionPlan
* (Partially) implement purchasing SKUs and gift flags
* Finish and clean-up store/applications API implementations
* Implement build uls, missing sub plan params, purchase sku ret
* Fix upload_files() warning
* Formatter pass
* Normalize include_x to with_x, add various small missing things
* Update sub on manual invoice payment instead of returning new object
* Black pass
* Implement missing integrations/applications API shit
* Implement Application.store_listing_sku_id
* Expose richer subscription metadata guild info
* Implement SKU.system_requirements localization and modification
* Black pass
* Implement premium usage
* Implement application whitelist
* Implement active developer program enrollment
* Readd new team members to cache
* Polishing
* Implement leaving active developer program
* Type everything
* Expose everything
* Implement relationship activity statistics, improve model
* Black pass
* Document everything
* Add crunchyroll connection type (#426)
* Fix type-checking error in PrivateChannel ABC (#427)
* Update required property fetching to new domain
* Pin black to v22.6
* Get pyright to shut up
* Black pass
* Get pyright to shut up
This comes with:
* The RoleTags class
* Role.is_premium_subscriber()
* Role.is_bot_managed()
* Role.is_integration()
* Guild.self_role
* Guild.premium_subscriber_role
At readthedocs.io, for role `color`, it says "Returns the role colour. An alias exists under `color`". This PR fixes that to say "Returns the role color. An alias exists under `colour`".
This should have some memory savings of ~24 bytes per role.
* 8 bytes for Permissions
* 8 bytes for Colour
* 8 bytes for the alias
I'm not sure how significant it is but it should be a decent amount.
Introduce a new internal type, SnowflakeList, which has better memory
footprint over a regular list or set of roles. It is suspected that
there will be a 9x reduction of memory for every Emoji instance and a
48 byte saving per Member instance. However, these savings will
probably only be evident on larger bots.
As a consequence of this change, Member.roles is now computed lazily.
Currently I am not sure if I want to do the initial sorting on the
SnowflakeList for Member, as this comes with a O(n log n) cost when
creating a Member for little purpose since SnowflakeList.has is not
overly relied on. If CPU time becomes an issue this might change.
This adds the following APIs:
* Guild.get_role
This removes the following APIs:
* Guild.role_hierarchy
To compensate for the removed APIs, Guild.roles is now a sorted list
based on hierarchy. The first element will always be the @everyone
role.
This speeds up access at the cost of some memory, theoretically.