commit
b98fc6f2f6
@ -15,7 +15,7 @@ __title__ = 'discord'
|
|||||||
__author__ = 'Rapptz'
|
__author__ = 'Rapptz'
|
||||||
__license__ = 'MIT'
|
__license__ = 'MIT'
|
||||||
__copyright__ = 'Copyright 2015-2020 Rapptz'
|
__copyright__ = 'Copyright 2015-2020 Rapptz'
|
||||||
__version__ = '1.5.0a'
|
__version__ = '1.5.0'
|
||||||
|
|
||||||
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
|
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ from .team import *
|
|||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro releaselevel serial')
|
VersionInfo = namedtuple('VersionInfo', 'major minor micro releaselevel serial')
|
||||||
|
|
||||||
version_info = VersionInfo(major=1, minor=5, micro=0, releaselevel='alpha', serial=0)
|
version_info = VersionInfo(major=1, minor=5, micro=0, releaselevel='final', serial=0)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from logging import NullHandler
|
from logging import NullHandler
|
||||||
|
@ -139,6 +139,9 @@ class ConnectionState:
|
|||||||
else:
|
else:
|
||||||
intents = Intents.default()
|
intents = Intents.default()
|
||||||
|
|
||||||
|
if not intents.guilds:
|
||||||
|
log.warning('Guilds intent seems to be disabled. This may cause state related issues.')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
chunk_guilds = options['fetch_offline_members']
|
chunk_guilds = options['fetch_offline_members']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -731,13 +734,22 @@ class ConnectionState:
|
|||||||
member = Member(guild=guild, data=data, state=self)
|
member = Member(guild=guild, data=data, state=self)
|
||||||
if self._member_cache_flags.joined:
|
if self._member_cache_flags.joined:
|
||||||
guild._add_member(member)
|
guild._add_member(member)
|
||||||
guild._member_count += 1
|
|
||||||
|
try:
|
||||||
|
guild._member_count += 1
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
self.dispatch('member_join', member)
|
self.dispatch('member_join', member)
|
||||||
|
|
||||||
def parse_guild_member_remove(self, data):
|
def parse_guild_member_remove(self, data):
|
||||||
guild = self._get_guild(int(data['guild_id']))
|
guild = self._get_guild(int(data['guild_id']))
|
||||||
if guild is not None:
|
if guild is not None:
|
||||||
guild._member_count -= 1
|
try:
|
||||||
|
guild._member_count -= 1
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
user_id = int(data['user']['id'])
|
user_id = int(data['user']['id'])
|
||||||
member = guild.get_member(user_id)
|
member = guild.get_member(user_id)
|
||||||
if member is not None:
|
if member is not None:
|
||||||
|
@ -25,6 +25,12 @@ For example, if you want a bot that functions without spammy events like presenc
|
|||||||
intents.typing = False
|
intents.typing = False
|
||||||
intents.presences = False
|
intents.presences = False
|
||||||
|
|
||||||
|
# Somewhere else:
|
||||||
|
# client = discord.Client(intents=intents)
|
||||||
|
# or
|
||||||
|
# from discord.ext import commands
|
||||||
|
# bot = commands.Bot(command_prefix='!', intents=intents)
|
||||||
|
|
||||||
Note that this doesn't enable :attr:`Intents.members` since it's a privileged intent.
|
Note that this doesn't enable :attr:`Intents.members` since it's a privileged intent.
|
||||||
|
|
||||||
Another example showing a bot that only deals with messages and guild information:
|
Another example showing a bot that only deals with messages and guild information:
|
||||||
@ -36,6 +42,12 @@ Another example showing a bot that only deals with messages and guild informatio
|
|||||||
# If you also want reaction events enable the following:
|
# If you also want reaction events enable the following:
|
||||||
# intents.reactions = True
|
# intents.reactions = True
|
||||||
|
|
||||||
|
# Somewhere else:
|
||||||
|
# client = discord.Client(intents=intents)
|
||||||
|
# or
|
||||||
|
# from discord.ext import commands
|
||||||
|
# bot = commands.Bot(command_prefix='!', intents=intents)
|
||||||
|
|
||||||
.. _privileged_intents:
|
.. _privileged_intents:
|
||||||
|
|
||||||
Privileged Intents
|
Privileged Intents
|
||||||
@ -152,7 +164,7 @@ For example:
|
|||||||
# client = discord.Client(intents=intents)
|
# client = discord.Client(intents=intents)
|
||||||
# or
|
# or
|
||||||
# from discord.ext import commands
|
# from discord.ext import commands
|
||||||
# bot = commands.Bot(command_prefix="!", intents=intents)
|
# bot = commands.Bot(command_prefix='!', intents=intents)
|
||||||
|
|
||||||
Why does ``on_ready`` take so long to fire?
|
Why does ``on_ready`` take so long to fire?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -186,6 +198,6 @@ On Windows use ``py -3`` instead of ``python3``.
|
|||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
There is no date in which the old gateway will stop working so it is recommended to update your code instead.
|
There is no currently set date in which the old gateway will stop working so it is recommended to update your code instead.
|
||||||
|
|
||||||
If you truly dislike the direction Discord is going with their API, you can contact them via `support <https://dis.gd/contact>`_
|
If you truly dislike the direction Discord is going with their API, you can contact them via `support <https://dis.gd/contact>`_
|
||||||
|
@ -11,6 +11,94 @@ Changelog
|
|||||||
This page keeps a detailed human friendly rendering of what's new and changed
|
This page keeps a detailed human friendly rendering of what's new and changed
|
||||||
in specific versions.
|
in specific versions.
|
||||||
|
|
||||||
|
.. _vp1p5p0:
|
||||||
|
|
||||||
|
v1.5.0
|
||||||
|
--------
|
||||||
|
|
||||||
|
This version came with forced breaking changes that Discord is requiring all bots to go through on October 7th. It is highly recommended to read the documentation on intents, :ref:`intents_primer`.
|
||||||
|
|
||||||
|
API Changes
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Members and presences will no longer be retrieved due to an API change. See :ref:`privileged_intents` for more info.
|
||||||
|
- As a consequence, fetching offline members is disabled if the members intent is not enabled.
|
||||||
|
|
||||||
|
New Features
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Support for gateway intents, passed via ``intents`` in :class:`Client` using :class:`Intents`.
|
||||||
|
- Add :attr:`VoiceRegion.south_korea` (:issue:`5233`)
|
||||||
|
- Add support for ``__eq__`` for :class:`Message` (:issue:`5789`)
|
||||||
|
- Add :meth:`Colour.dark_theme` factory method (:issue:`1584`)
|
||||||
|
- Add :meth:`AllowedMentions.none` and :meth:`AllowedMentions.all` (:issue:`5785`)
|
||||||
|
- Add more concrete exceptions for 500 class errors under :class:`DiscordServerError` (:issue:`5797`)
|
||||||
|
- Implement :class:`VoiceProtocol` to better intersect the voice flow.
|
||||||
|
- Add :meth:`Guild.chunk` to fully chunk a guild.
|
||||||
|
- Add :class:`MemberCacheFlags` to better control member cache. See :ref:`intents_member_cache` for more info.
|
||||||
|
- Add support for :attr:`ActivityType.competing` (:issue:`5823`)
|
||||||
|
- This seems currently unused API wise.
|
||||||
|
|
||||||
|
- Add support for message references, :attr:`Message.reference` (:issue:`5754`, :issue:`5832`)
|
||||||
|
- Add alias for :class:`ColourConverter` under ``ColorConverter`` (:issue:`5773`)
|
||||||
|
- Add alias for :attr:`PublicUserFlags.verified_bot_developer` under :attr:`PublicUserFlags.early_verified_bot_developer` (:issue:`5849`)
|
||||||
|
- |commands| Add support for ``require_var_positional`` for :class:`Command` (:issue:`5793`)
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
- Fix issue with :meth:`Guild.by_category` not showing certain channels.
|
||||||
|
- Fix :attr:`abc.GuildChannel.permissions_synced` always being ``False`` (:issue:`5772`)
|
||||||
|
- Fix handling of cloudflare bans on webhook related requests (:issue:`5221`)
|
||||||
|
- Fix cases where a keep-alive thread would ack despite already dying (:issue:`5800`)
|
||||||
|
- Fix cases where a :class:`Member` reference would be stale when cache is disabled in message events (:issue:`5819`)
|
||||||
|
- Fix ``allowed_mentions`` not being sent when sending a single file (:issue:`5835`)
|
||||||
|
- Fix ``overwrites`` being ignored in :meth:`abc.GuildChannel.edit` if ``{}`` is passed (:issue:`5756`, :issue:`5757`)
|
||||||
|
- |commands| Fix exceptions being raised improperly in command invoke hooks (:issue:`5799`)
|
||||||
|
- |commands| Fix commands not being properly ejected during errors in a cog injection (:issue:`5804`)
|
||||||
|
- |commands| Fix cooldown timing ignoring edited timestamps.
|
||||||
|
- |tasks| Fix tasks extending the next iteration on handled exceptions (:issue:`5762`, :issue:`5763`)
|
||||||
|
|
||||||
|
Miscellaneous
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Webhook requests are now logged (:issue:`5798`)
|
||||||
|
- Remove caching layer from :attr:`AutoShardedClient.shards`. This was causing issues if queried before launching shards.
|
||||||
|
- Gateway rate limits are now handled.
|
||||||
|
- Warnings logged due to missed caches are now changed to DEBUG log level.
|
||||||
|
- Some strings are now explicitly interned to reduce memory usage.
|
||||||
|
- Usage of namedtuples has been reduced to avoid potential breaking changes in the future (:issue:`5834`)
|
||||||
|
- |commands| All :class:`BadArgument` exceptions from the built-in converters now raise concrete exceptions to better tell them apart (:issue:`5748`)
|
||||||
|
- |tasks| Lazily fetch the event loop to prevent surprises when changing event loop policy (:issue:`5808`)
|
||||||
|
|
||||||
|
.. _vp1p4p2:
|
||||||
|
|
||||||
|
v1.4.2
|
||||||
|
--------
|
||||||
|
|
||||||
|
This is a maintenance release with backports from :ref:`vp1p5p0`.
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Fix issue with :meth:`Guild.by_category` not showing certain channels.
|
||||||
|
- Fix :attr:`abc.GuildChannel.permissions_synced` always being ``False`` (:issue:`5772`)
|
||||||
|
- Fix handling of cloudflare bans on webhook related requests (:issue:`5221`)
|
||||||
|
- Fix cases where a keep-alive thread would ack despite already dying (:issue:`5800`)
|
||||||
|
- Fix cases where a :class:`Member` reference would be stale when cache is disabled in message events (:issue:`5819`)
|
||||||
|
- Fix ``allowed_mentions`` not being sent when sending a single file (:issue:`5835`)
|
||||||
|
- Fix ``overwrites`` being ignored in :meth:`abc.GuildChannel.edit` if ``{}`` is passed (:issue:`5756`, :issue:`5757`)
|
||||||
|
- |commands| Fix exceptions being raised improperly in command invoke hooks (:issue:`5799`)
|
||||||
|
- |commands| Fix commands not being properly ejected during errors in a cog injection (:issue:`5804`)
|
||||||
|
- |commands| Fix cooldown timing ignoring edited timestamps.
|
||||||
|
- |tasks| Fix tasks extending the next iteration on handled exceptions (:issue:`5762`, :issue:`5763`)
|
||||||
|
|
||||||
|
Miscellaneous
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Remove caching layer from :attr:`AutoShardedClient.shards`. This was causing issues if queried before launching shards.
|
||||||
|
- |tasks| Lazily fetch the event loop to prevent surprises when changing event loop policy (:issue:`5808`)
|
||||||
|
|
||||||
.. _vp1p4p1:
|
.. _vp1p4p1:
|
||||||
|
|
||||||
v1.4.1
|
v1.4.1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user