Commit Graph
100 Commits
Author SHA1 Message Date
Rapptz 26e9b5bfac [commands] Add Bot.reload_extension for atomic loading.
Also do atomic loading in Bot.load_extension
2019-03-19 09:23:10 -04:00
Rapptz 2ce42b5b50 Some widget fixes. 2019-03-19 09:23:09 -04:00
Rapptz 5e65ec978c Take back ownership of files from aiohttp for retrying requests.
Fix #1809
2019-03-18 07:54:36 -04:00
Rapptz 8ba48c14a7 Minor typo fix. 2019-03-18 05:34:20 -04:00
Rapptz 963cf4b34e Add on_disconnect event.
I assume this is where it has to be. Fix #1937
2019-03-18 05:29:38 -04:00
Rapptz f43690bde8 [commands] Walk through MRO for Cog derived classes.
This should support cog subclasses in a relatively consistent way in
terms of expectations. Hopefully nothing is broken.

Fixes #1950
2019-03-17 22:04:05 -04:00
Rapptz cb9ae7bd76 Sorting bucket requires an integer. 2019-03-17 15:16:46 -04:00
Rapptz f3f2f882fd Fix typo in private property name. 2019-03-17 15:14:58 -04:00
Rapptz f26a27dc98 [commands] Make Bot.cogs and Bot.extensions read-only mappings.
This also has the side effect of effectively documenting them for
public use.
2019-03-17 14:53:56 -04:00
Rapptz 5061915b2a Add support for store channels. 2019-03-17 14:32:51 -04:00
Rapptz 4bd4c23694 Fix NameError in Embed.to_dict 2019-03-17 11:51:54 -04:00
Rapptz 053e2f5b9a Fix documentation linking issue in Messageables and Context 2019-03-16 09:55:29 -04:00
Rapptz cc3b6bdd72 [commands] Rename it to Context.send_help for consistency. 2019-03-16 09:37:47 -04:00
Rapptz ed5fcb320e [commands] Add Context.show_help helper to use the HelpCommand set.
Fixes #1983
2019-03-16 09:33:05 -04:00
Rapptz 3326adf63b [commands] Optimise GroupMixin.get_command for the no space case.
Comes at a 30ns slowdown for the space case, however.
2019-03-16 09:27:59 -04:00
Rapptz 8466250bcc [commands] Assign context inside HelpCommand.prepare_help_command 2019-03-16 09:24:17 -04:00
Rapptz b728061522 [commands] Add HelpCommand.get_bot_mapping helper. 2019-03-16 09:23:34 -04:00
Rapptz 7a5102ece9 [commands] Return result of send_group_help and send_command_help 2019-03-16 07:33:12 -04:00
Rapptz 0063fffb1a Update URL in embed badge. 2019-03-16 07:10:16 -04:00
Rapptz f37bc22054 Update Japanese .po files 2019-03-16 05:49:10 -04:00
Rapptz 36ac1720d8 Update README 2019-03-16 05:09:50 -04:00
Rapptz 61f63a9346 [commands] Add back dm_help tribool for the provided HelpCommands
Also add a dm_help_threshold integer to control the length.
2019-03-16 03:50:30 -04:00
Rapptz 25acad5de3 [commands] Add commands.Paginator.__len__ 2019-03-16 03:38:51 -04:00
Rapptz 70c5f1723f Fix Embed.to_dict to work with TZ aware datetime objects. 2019-03-15 05:56:01 -04:00
Rapptz 3527203e07 [commands] Redesign HelpFormatter into HelpCommand
Part of #1938
2019-03-15 05:54:23 -04:00
Rapptz 27c6d2c923 [commands] Add Cog.description to get the clean docstring. 2019-03-14 11:42:09 -04:00
Rapptz c4a21cc1d4 [commands] Add Cog.qualified_name to query the specified cog name. 2019-03-13 23:43:29 -04:00
Rapptz 6ffd079cb9 Support path-like objects in Attachment.save.
Fix #1958
2019-03-13 22:04:51 -04:00
Rapptz 7fbdc6e83f Add Embed.copy to do a copy on an embed object. 2019-03-13 06:08:21 -04:00
Rapptz 35a330c5d3 Add Embed.__len__ to query total character size of an embed. 2019-03-13 06:07:57 -04:00
Rapptz 73aca4d4d3 Expose Embed.from_data as Embed.from_dict
This is a breaking change.
2019-03-13 06:02:56 -04:00
Rapptz a70db36cfc Handle type updates in TextChannel._update for news channels. 2019-03-12 23:13:22 -04:00
Rapptz e1d9f8f59f [commands] Support staticmethod listeners and disallow them in commands 2019-03-12 11:54:45 -04:00
Rapptz 8a153bfaad [commands] Refactor quoted_word free function to a StringView method.
Technically a breaking change, however this interface was not
documented or guaranteed to exist.
2019-03-12 05:37:34 -04:00
Rapptz 560783c3d2 [commands] Separate view parsing errors from BadArgument.
This causes them to be raised from a new exception named
ArgumentParsingError with 3 children for ease with i18n. This is
technically a breaking change since it no longer derives from
BadArgument, though catching UserInputError will prevent this change
from affecting the user.
2019-03-12 05:27:34 -04:00
Rapptz 13b23963ec Add exception hierarchy to the documentation. 2019-03-12 01:15:24 -04:00
Rapptz e15b4ef8e4 Revert default parameter use_cached of Attachment.save back to False.
Fix #1973
2019-03-10 20:12:24 -04:00
Rapptz 5ea84fb971 Add support for guild news channels. 2019-03-08 21:40:43 -05:00
Rapptz e87ca143d3 Bump websockets version to 7.0
Should be fine. Hopefully. Fix #1787
2019-03-08 20:18:05 -05:00
Rapptz 03fdd81531 Remove outdated playlist.py example.
Fixes #1870
2019-03-08 20:04:21 -05:00
Rapptz 52e17d1c2d Add github templates and CONTRIBUTING.md file.
Fix for #1685
2019-03-08 19:59:19 -05:00
Rapptz aceec2009a Have use_cached=True by default for Attachment.save.
Also touch up the documentation a bit.
2019-03-06 20:07:38 -05:00
Rapptz d124daef33 Fix non-working example in commands documentation. 2019-03-06 02:37:02 -05:00
Rapptz 78459f3ed0 Don't reconnect during 4014/4015 in voice websocket. 2019-03-05 19:45:13 -05:00
Rapptz 45af9fa40b [commands] Allow passing of typing.Union into Greedy. Fix #1951 2019-03-03 06:24:35 -05:00
Rapptz 97de4542f7 Add project URLs to setup.py 2019-03-02 16:51:09 -05:00
Rapptz df130e10f0 Prevent AttributeError when closing HTTPClient early. 2019-03-02 16:48:40 -05:00
Rapptz c960465366 Mock a ConnectionState object to fix wait=True errors in webhooks.
Fixes #1898
2019-03-02 06:14:10 -05:00
Rapptz 311788c7cb Properly clean-up file objects when necessary instead of instantly.
Fix #1770
2019-03-02 05:52:22 -05:00
Rapptz 076f9bcac7 [commands] Fix name clash overwriting T.__class__.__name__
Fixes #1944
2019-02-28 19:47:25 -05:00
Rapptz 69f5a70eeb [commands] Allow Converter instances in Greedy. Fix #1939. 2019-02-27 21:38:55 -05:00
Rapptz 21a296d538 [commands] Error out when someone passes plain Cog.listener decorator.
Should make this error easier to catch rather than silent failure.
2019-02-27 21:38:55 -05:00
Rapptz 48b60b2eac Prepare fix for aiohttp 4.0 breaking change with session creation. 2019-02-27 06:34:30 -05:00
Rapptz 7240d170c1 Update Member.joined_at on MESSAGE_CREATE and document it can be None.
Fixes #1638
2019-02-27 06:23:08 -05:00
Rapptz 757584e651 [commands] Add support for stacking Cog.listener decorator.
Fix #1926
2019-02-27 04:29:54 -05:00
Rapptz bbc4460c38 Fix Emoji.__hash__ being None.
When a type defines __eq__, Python removes its __hash__ function.

Fixes #1933
2019-02-26 08:44:25 -05:00
Rapptz f6869242ca Update Japanese .po files. 2019-02-24 04:10:48 -05:00
Rapptz d5d9164810 [commands] Fix special method detection for regular function objects.
Fixes #1920
2019-02-24 00:24:31 -05:00
Rapptz 3a8214a115 [commands] Remove Bot.get_cog_commands 2019-02-23 11:02:19 -05:00
Rapptz ab8e7b7732 [commands] Fix bug in behaviour in the cog inspection methods. 2019-02-23 10:51:23 -05:00
Rapptz 7d877e9067 Better jpeg detection in utils._get_mime_type_for_image
Fixes #1901
2019-02-23 10:25:05 -05:00
Rapptz 7ad4425c57 Update copyright years. 2019-02-23 09:26:39 -05:00
Rapptz d3bc35a573 [commands] Update stale parent references in subcommands.
This bug was kind of a long one to figure out, as per #1918 documents
the issue had to do with subcommands but the actual adventure in
finding this one was a long one.

The first problem was that Command.cog was for some reason None, which
indicated that a copy was happening somewhere along the way. After some
fiddling I discovered that due to the copies of `Cog.__cog_commands__`
the groups pointed to out-dated versions that got overriden by the new
copies.

The first attempt at fixing this was straightforward -- just remove the
subcommand from the parent and replace it with the newer reference that
we just received. However, this ended up not working due to a strange
mystery where the subcommand being invoked was neither the original
copy nor the new copy residing in `Cog.__cog_commands__`.

Some more investigation later pointed out to me that a copy occurs
during the `Group.copy` stage which calls `Command.copy` for all its
subcommands. After spotting this out I had realised where the
discrepancy comes from. As it turns out, the subcommand copy that was
being invoked was actually a stale one created from `Group.copy`.

The question remained, how come that one was being called? The problem
stemmed from the fact that when the subcommand was copied, the parent
reference pointed to the old parent. Since the old parent was the one
that was getting the new reference, it went practically untouched. This
is because the calling code fetches the child from the parent and the
old parent is nowhere in the call chain.

To fix this issue we needed to update the parent reference, and in
order to do that a temporary lookup table is required pointing to the
latest copies that we have made.

Thus ends a 3.5 hour bug hunting adventure.
2019-02-23 09:26:01 -05:00
Rapptz 9827d6eeaf [commands] Fix issue with decorator order with checks and cooldowns
Now they're just explicitly copied.
2019-02-23 07:41:25 -05:00
Rapptz 10ed41d8a0 [commands] Fix bug with cog bot check once not being unloaded properly. 2019-02-23 07:40:00 -05:00
Rapptz 1a0b1dfd29 [commands] Fix attribute access in cogs to commands.
Previously they were outdated copies, this updates the copies to the
ones that are actually injected.
2019-02-23 07:38:04 -05:00
Rapptz 04ee10adc4 [commands] Fix bug with local checks and cooldowns not applying. 2019-02-23 05:38:35 -05:00
Rapptz ac6e55353a [commands] Copy on_error handlers in Command.copy
This fixes the issue of error handlers not applying.
2019-02-23 05:31:05 -05:00
Rapptz f15cf7c845 [commands] Pass over kwargs to type.__new__ 2019-02-23 05:18:24 -05:00
Rapptz a8dd4a826f Document listener changes in the migrating docs. 2019-02-23 04:26:03 -05:00
Rapptz caf3d17d4a Rework entire cog system and partially document it and extensions. 2019-02-23 04:10:10 -05:00
Rapptz 3f06f247c0 [commands] Fix up wording on HelpFormatter.get_ending_note 2019-02-18 16:29:58 -05:00
Rapptz 41924a8b32 Update Japanese .po files 2019-02-18 03:54:27 -05:00
Rapptz 60f9ac3062 Fix missing imports 2019-02-12 20:25:16 -05:00
Rapptz 5d78f43e55 Expose more information from partial invites, along with counts.
This adds the following information.

* `PartialInviteGuild` to replace `Object` patching
* `PartialInviteChannel` to replace `Object` patching
* Invite.approximate_member_count and Invite.approximate_presence_count

The new partial objects provide better documentation on what is
expected when you fetch random invites.

Fixes #1830
2019-02-12 20:22:47 -05:00
Rapptz 700dbb5555 Fix missing import. 2019-02-06 02:28:59 -05:00
Rapptz e429763dea Try to optimize for the common ASCII case.
This is still a slowdown (about 45ns to 300ns) but it's less severe
than the original implementation (about 900 to 1100ns).
2019-02-06 02:15:22 -05:00
Rapptz 7f4c57dd5a Fix overwriting of AuditLogDiff.roles for multiple $add/$remove keys 2018-12-31 08:39:28 -05:00
Rapptz dec14faea9 Log rate limit hits into WARNING instead of INFO. 2018-12-27 08:25:51 -05:00
Rapptz b79a53cae4 Fix typo in exception message in Guild.edit 2018-12-17 22:33:07 -05:00
Rapptz 648e62031d Add support for explicit_content_filter in Guild.edit 2018-12-17 18:04:32 -05:00
Rapptz 26bb6c6ddc Fix some lingering attribute setting issues. 2018-12-14 21:59:31 -05:00
Rapptz c7396dc8ac Add support for mobile indicators and per-client statuses. 2018-12-14 20:57:21 -05:00
Rapptz 93d576a65b Add support for spoiler attachments. 2018-12-14 19:09:25 -05:00
Rapptz e6a8eb1a7c Fix bug in Guild.splash_url 2018-11-26 02:04:01 -05:00
Rapptz 1f2602d11e Support discordapp.com invite URLs. 2018-11-25 04:54:12 -05:00
Rapptz 8b18fa307b Add support for default notification level in audit logs and Guild.edit 2018-11-25 01:42:33 -05:00
Rapptz 860d6a9ace Revert "Rework documentation to not duplicate inherited members."
This reverts commit 96981210b3.
2018-10-11 03:42:01 -04:00
Rapptz e12db3a25d [commands] Add call_once keyword-only parameter for Bot.remove_check
Technically a breaking change. This is to be a parallel with the
Bot.add_check interface.
2018-10-11 02:52:26 -04:00
Rapptz 1da6962580 Fix up Guild.create_custom_emoji docstring. 2018-10-03 05:45:55 -04:00
Rapptz 96981210b3 Rework documentation to not duplicate inherited members.
This will probably be reverted in 1 week.
2018-10-03 05:45:30 -04:00
Rapptz 836ae73040 Add support for AuditLogDiff.slowmode_delay. 2018-09-25 21:56:41 -04:00
Rapptz 45af0c83de [commands] Fix NameError in clean_content converter 2018-09-25 19:48:20 -04:00
Rapptz 77239e4f15 Fix NameError and duplicate insertion bug when moving roles. 2018-09-24 23:55:05 -04:00
Rapptz 54e9401a21 Update Japanese documentation strings 2018-09-24 23:42:20 -04:00
Rapptz 99b1390e5a [commands] Elaborate more on disallowed types in Greedy and Optional 2018-09-24 23:39:25 -04:00
Rapptz 2721689254 Optimise tight loops in DiscordGateway.received_message
* type(x) is y is faster than isinstance(x, y)
* Re-arrange if-statements for common statements
* Drop handler getattr for most events that don't  use it
2018-09-24 23:22:49 -04:00
Rapptz 095f0ec2fc Optimise some member and user related routines.
* Skip user update if possible
* Drop copy.copy in favour of manual copy

Credit to Hornwitser for these findings.
2018-09-24 22:50:05 -04:00
Rapptz 95d8bb2e85 Change internal representation of roles in Member and Emoji.
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.
2018-09-24 22:19:42 -04:00
Rapptz 3d03dbc451 Change internal role storage in Guild to a dict instead of a list.
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.
2018-09-24 21:08:48 -04:00