Commit Graph
100 Commits
Author SHA1 Message Date
Rapptz cd0de57d13 [commands] Implement a command cooldown system.
The way the command cooldown works is using a windowed way of doing it.
That is, if we have a cooldown of 2 commands every 30 seconds then if we
do a single command, we have 30 seconds to do the second command or else
we will get rate limited. This more or less matches the common
expectations on how cooldowns should be.

These cooldowns can be bucketed up to a single dimension of depth for
a per-user, per-guild, or per-channel basis. Of course, a global bucket
is also provided. These cannot be mixed, e.g. no per-channel per-user
cooldowns.

When a command cooldown is triggered, the error handlers will receive a
an exception of type CommandOnCooldown with proper information regarding
the cooldown such as retry_after and the bucket information itself.
2016-07-22 18:05:38 -04:00
Rapptz 5010e7dc55 [commands] Add UserInputError into the exception hierarchy.
This is for exceptions that are inherently based on user errors and not
permission based. e.g. passing incorrect number of arguments, too many
arguments, or an invalid argument. CommandNotFound is not classified
under this since it isn't inherently a user input error in all cases.

Some invalid commands can simply be due to an odd bot prefix. It would
also diminish the usefulness of the new parent class if CommandNotFound
was included.
2016-07-21 23:53:16 -04:00
Rapptz 0000b2576e Fix SyntaxError in constructing VoiceState for Python 3.4
Generalised unpacking is 3.5 only.
2016-07-21 22:09:38 -04:00
Rapptz b0f5584961 Add AppInfo.owner attribute. 2016-07-21 01:16:29 -04:00
Rapptz 3cd9f80854 Fix bug where discriminators would not update in PRESENCE_UPDATE. 2016-07-21 01:09:12 -04:00
Rapptz d961bc4da0 Add ourselves into the ringing lookup cache. 2016-07-15 23:43:40 -04:00
Rapptz bd39c3ef45 Add utility properties to CallMessage to query information. 2016-07-15 23:42:53 -04:00
Rapptz 1c8ab25917 Add support for querying information about group calls. 2016-07-15 22:46:00 -04:00
Rapptz 33eba31aac Fix the displaying of Message.system_content 2016-07-15 22:11:56 -04:00
Rapptz 91351a3238 Handle adding and removal of group members. 2016-07-15 22:03:22 -04:00
Rapptz 18bdd3e7dd Make PrivateChannel.__str__ more useful for groups.
Also demote is_private to a property instead of a slot.
2016-07-15 21:45:23 -04:00
Rapptz c7f99afe7e Handle private channel CHANNEL_CREATE better. 2016-07-15 21:34:39 -04:00
Rapptz e60047b756 Add remaining server regions to the enum. 2016-07-14 15:03:43 -04:00
Rapptz a128249b63 Add support for different message types and call message. 2016-07-13 20:11:18 -04:00
Rapptz 69c506d7ae Handle CHANNEL_UPDATE for group direct messages. 2016-07-13 17:23:35 -04:00
Rapptz ddd3fd0a3d Begin working on gateway v6 changes.
The first batch of changes are related to channel types and group
direct messages. Support these first so READY begins parsing.
2016-07-13 00:10:16 -04:00
Rapptz cd87f247d3 [commands] Make Bot.check decorator an actual decorator. 2016-07-08 04:29:11 -04:00
Rapptz 166d8257ec [commands] Refactor pagination into its own class.
This change allows users to more easily create their own formatters
without having to reinvent the pagination logic themselves. Hopefully
this makes it less of a pain for people to create custom help pages.
2016-07-05 21:44:14 -04:00
Rapptz 6f3bd7c0e6 Fix issue with removing roles out of order.
Fixes #250.
2016-07-04 08:01:57 -04:00
Rapptz 1500001b04 [commands] Fix error in converters in a private message context.
I was referencing a member function that did not actually exist. So I
ported it over to a free function that could be used.
2016-07-02 23:39:29 -04:00
Rapptz 4d71b3fe7d [commands] Do not lower-case the function name for default command names
There are some badlets out there that apparently violate PEP-8.
2016-07-01 22:12:57 -04:00
Rapptz a2b053a517 [commands] Make GroupMixin.remove_command return None.
This is for cases where the command has been removed already. This will
make the function have a somewhat no exception guarantee.
2016-06-30 15:15:49 -04:00
Rapptz 0eccd85711 Add implicit cases to permission resolution in Channel.permissions_for 2016-06-28 20:34:03 -04:00
Rapptz 30d623cd46 Add Server.mfa_level to query a server's 2FA requirement. 2016-06-28 19:25:50 -04:00
Rapptz d87d11c5a6 Fix voice states being overwritten after a GUILD_SYNC.
This was a two-fold problem. The first of which involved the overwriting
of members during a GUILD_SYNC. Since we are requesting a chunk anyway,
we have all the member references we need without actually chunking. The
second problem came from the order. We were doing a GUILD_SYNC and then
doing the chunking requests. We should do the GUILD_SYNC after the
chunking in order to just update presences.
2016-06-28 19:07:56 -04:00
Rapptz 3cad1aeb59 Version bump to v0.10.0 2016-06-28 01:24:55 -04:00
Rapptz e68e167048 Update installation instructions. 2016-06-28 01:18:44 -04:00
Rapptz 4c1b8d1de1 Add PyNaCl to setuptool's extras requirements. 2016-06-28 00:59:12 -04:00
Rapptz 197e52994e Update whats new page a little bit to say the changelog is too big. 2016-06-27 23:54:00 -04:00
Rapptz 01a46f0612 Make Message.channel_mentions unique. 2016-06-27 21:44:29 -04:00
Rapptz e600abbbab Ignore HEARTBEAT_ACK for now to disable the noisy logging. 2016-06-27 21:32:43 -04:00
Rapptz c34eb5f6dd Document that bot users can't use Client.accept_invite 2016-06-26 14:18:47 -04:00
Rapptz 6556392a9c [commands] Fix error where consume rest would not work.
I didn't end up refactoring this piece of work out.
2016-06-23 20:17:19 -04:00
Rapptz 629c24339b [commands] Fix bug that made functions stop working as converters. 2016-06-23 18:36:41 -04:00
Rapptz e64eb08c92 [commands] Port special cased discord converters to commands.Converter 2016-06-22 20:05:37 -04:00
Rapptz c02d9403e6 Fix bug with Client.server_voice_state not deafening. 2016-06-22 19:39:20 -04:00
Rapptz 880ca3162e [commands] Add commands.Converter base for converts with context.
This allows users to implement converters that work similar to the ones
special cased by the `discord` classes.
2016-06-22 19:06:25 -04:00
Rapptz a1ae8fdb10 Handle MESSAGE_DELETE_BULK. 2016-06-22 06:15:52 -04:00
Rapptz 8b3617111a Support for v5 Gateway. 2016-06-22 05:00:08 -04:00
Rapptz c3c9db7777 Fix bug with deleting private messages.
This was due to an AttributeError occurring when getting the guild_id
from the channel. PrivateChannels do not have guild_ids so they should
be None.
2016-06-20 22:11:43 -04:00
Rapptz 324d10c9d9 [commands] Add Command.ignore_extra attribute to ignore extra arguments
This allows you to strictly require a number of arguments. The default
behaviour in this case is still `True`, since it would be a breaking
change otherwise and is a sane default. However if someone would want
to set this to `False`, they would receive an exception of type
`TooManyArguments` if too many arguments are passed to a command.

Hopefully this removes the uses of `ctx.message.content == 'stuff'`
inside commands.
2016-06-20 21:38:17 -04:00
Rapptz 102e8aca43 Raise TypeError if "after" parameter is not a callable. 2016-06-20 01:05:28 -04:00
Rapptz e2e6d7182e Add FAQ entry for after being called right away. 2016-06-20 00:59:30 -04:00
Rapptz adbf2c720f [commands] Add the concept of global checks.
Global checks are checks that are executed before regular per-command
checks except done to every command that the bot has registered. This
allows you to have checks that apply to every command without having to
override `on_message` or appending the check to every single command.
2016-06-19 22:15:11 -04:00
Rapptz 6f173cc095 [commands] Add delete_after keyword argument to utility functions.
This includes things like `Bot.say`, `Bot.upload`, `Bot.whisper`,
and `Bot.reply`.
2016-06-19 19:43:49 -04:00
Rapptz 6b4d22ce81 Clarify that Client.logs_from can take a PrivateChannel too. 2016-06-18 02:15:36 -04:00
Rapptz b3edb31df5 Add support for message pinning.
This includes `Client.pin_message`, `Client.unpin_message` and
`Client.pins_from`. This also adds the `Message.pinned` attribute
to the `Message` object.
2016-06-18 02:14:44 -04:00
Rapptz 4d375fc856 Fix HTTPClient.recreate to actually work.
Forgot a keyword argument.
2016-06-18 01:43:57 -04:00
Rapptz e19244b041 Add Member.top_role property to get the highest role. 2016-06-18 01:37:45 -04:00
Rapptz 07607060c1 Fix Colour.__str__ to actually pad zeroes. 2016-06-16 22:49:34 -04:00
Rapptz 92fe4daa86 Attempt resume when we receive a 1001. 2016-06-16 19:13:13 -04:00
Rapptz 183e7341f6 [commands] Add Context.cog property. 2016-06-16 05:42:28 -04:00
Rapptz 2ebc0ab218 Don't assume that any shared fields are optional in Client.edit_channel.
Thanks Jake and night.
2016-06-15 20:56:43 -04:00
Rapptz eeba4963f3 The name is required in Client.edit_channel so add it if it is missing. 2016-06-15 20:31:13 -04:00
Rapptz fa0c98da4c Make logging for HTTP requests more useful. 2016-06-15 20:16:32 -04:00
Rapptz 7c760d3271 Add Client.get_message 2016-06-15 04:46:19 -04:00
Rapptz e736554777 Make sure the socket is closed when we call VoiceClient.disconnect 2016-06-14 22:33:25 -04:00
Rapptz 08674f115b Make Channel.overwrites_for return PermissionOverwrite 2016-06-14 22:26:15 -04:00
Rapptz d7efc9778b Make Client.edit_channel_permissions use PermissionOverwrite. 2016-06-14 22:26:14 -04:00
Rapptz f0fc70b2cf Add a way to set permission overwrites when creating a channel. 2016-06-14 22:26:14 -04:00
Rapptz 46babe822a Fix bug with editing messages over private messages. 2016-06-14 22:26:13 -04:00
Rapptz fb82a37cc6 Add discord.PermissionOverwrite type for channel-specific overwrites. 2016-06-14 22:26:13 -04:00
Rapptz c162b666ea Fix bucket for change_nickname. 2016-06-14 19:15:11 -04:00
Rapptz 4dbac9423d [commands] Only show CommandNotFound on non-empty commands. 2016-06-14 01:35:35 -04:00
Rapptz fec459e755 Document Server.large 2016-06-12 23:46:12 -04:00
Rapptz 8d1867393c Give Client.email a default value of None. 2016-06-12 23:44:41 -04:00
Rapptz c3933c379a Make the default filename a little bit prettier. 2016-06-12 23:43:03 -04:00
Rapptz 3895cf9295 Fix bug with login token not being properly written in cache. 2016-06-12 23:25:22 -04:00
Rapptz b496ea7972 Fix bug with logs_from URL params not being correct.
The bug happened because I forgot to pass in the id attribute.
2016-06-12 23:00:33 -04:00
Rapptz f3b257b342 Fix bug with uploading file-like objects.
I would require bytes-like objects instead due to its usage inside
the HTTPClient. Release this restriction so old `send_file` code works.
2016-06-12 22:41:30 -04:00
Rapptz 64c1e7d199 Fix bug with logging in with email and password. 2016-06-12 22:41:14 -04:00
Rapptz 879584b81a Fix bug with edit_role and create_role not working.
This was due to an error in overzealous removal of code.
2016-06-12 22:40:35 -04:00
Rapptz aecf0daf33 Fix sed error involved in creation of voice websocket. 2016-06-12 21:16:57 -04:00
Rapptz dbd3147059 Support more close codes for RESUME. 2016-06-12 20:48:23 -04:00
Rapptz 6b5d579d0b Remove unused verify response function. 2016-06-12 20:44:40 -04:00
Rapptz e8c32c542e Make HTTPException get the error JSON's message attribute. 2016-06-12 20:36:07 -04:00
Rapptz 1fba1b06fa Rewrite HTTP handling significantly.
This should have a more uniform approach to rate limit handling. Instead
of queueing every request, wait until we receive a 429 and then block
the requesting bucket until we're done being rate limited. This should
reduce the number of 429s done by the API significantly (about 66% avg).

This also consistently checks for 502 retries across all requests.
2016-06-12 20:33:09 -04:00
Rapptz fa36a449e9 Change HTTPException to only take a single parameter. 2016-06-12 13:57:05 -04:00
Rapptz 5f9ed8c9d2 [commands] Make the CommandError required argument optional again. 2016-06-10 23:50:17 -04:00
Rapptz a175c86aa1 Add Client.application_info to retrieve the current app info.
Fixes #241.
2016-06-10 22:28:15 -04:00
Rapptz fe5c369fe9 Handle voice websocket closure if it's a successful close. 2016-06-10 21:45:42 -04:00
Rapptz bde266bbb9 [commands] Fix @everyone elevation in the default help command. 2016-06-10 21:31:11 -04:00
Rapptz 1228159f30 [commands] Fix bug with Context.command not updating in groups.
This happened when `invoke_without_command` was set to True.
2016-06-10 21:05:42 -04:00
Rapptz 74cfc53bc8 [commands] Make it so CommandError does not contain @everyone mentions.
Mitigates some permission elevation issues.
2016-06-10 20:40:35 -04:00
Rapptz 43bbecd519 [commands] Exceptions raised while invocation raise CommandInvokeError.
This change should make it a bit more intuitive to get the original
exception without having the gotcha of checking ``isinstance`` inside
the error handler.
2016-06-10 20:32:05 -04:00
Rapptz d914c0a4e4 Clarify on_ready triggering more than twice.
On that note, fix the background_task example to use `Client.run`
instead of manual loop management. That way the task will be cleaned
up and cancelled inside `Client.run`.
2016-06-10 20:16:21 -04:00
Rapptz a0f37f8e85 [commands] Fix issue with proper local error handlers not beign called. 2016-06-10 01:07:03 -04:00
Rapptz 631cc5a7d6 Add Client.move_channel to change channel positions. 2016-06-07 21:29:59 -04:00
Rapptz a0966f59d2 Fix some typos in the FAQ page. 2016-06-07 20:39:15 -04:00
Rapptz 19c2bad5be Add FAQ section to the documentation. 2016-06-07 05:18:57 -04:00
Rapptz b9c7b05176 [commands] Unify Command.handle_local_error into general dispatcher. 2016-06-05 00:35:27 -04:00
Rapptz 661645ac97 [commands] Add Command.qualified_name to get the full command name.
This also sets `__str__` to do the same thing.
2016-06-04 22:31:00 -04:00
Rapptz 37dfe38af5 [commands] Fix bug where Context.command would not update. 2016-06-04 22:29:50 -04:00
Rapptz 9d9a20c128 [commands] Fix bug where subgroups would be repeatedly called.
This happened due to not resetting the `invoked_subcommand` state
tracking. Since the `invoked_subcommand` was not reset, it would always
assume that it was valid and repeatedly call it when passed invalid
subcommands/arguments.
2016-06-04 22:04:05 -04:00
Rapptz 24a9da04db [commands] Cleanup Command.invoke code due to exception propagation. 2016-06-04 21:41:01 -04:00
Rapptz 329f916e10 Add bot keyword argument to login via static token. 2016-06-03 02:12:39 -04:00
Rapptz f6fa1e837a Actually use v4 gateway and fixes thanks to Jake. 2016-06-02 07:32:35 -04:00
Rapptz c97e5a17e6 Update positions when a role is added or removed. 2016-06-01 21:06:04 -04:00
Rapptz b6492a4124 Clarify Role.position documentation. 2016-06-01 20:47:33 -04:00
Rapptz 9a6234961f Make Channel.changed_roles into an on-the-fly property instead. 2016-06-01 20:33:38 -04:00