| Commit message (Collapse) | Author | Age | Lines |
| ... | |
| |/ / / / / / / |
|
| |\ \ \ \ \ \ \ |
|
| | | | | | | | | |
|
| |/ / / / / / / |
|
| |\ \ \ \ \ \ \
| | |/ / / / /
| |/| | | | | |
|
| | |\ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
Add tests for `bot.utils.checks`.
|
| | | |/ / / / / |
|
| |/ / / / / / |
|
| | | | | | | |
|
| | |/ / / /
|/| | | | |
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We were using a pipenv run script to launch the bot,
but pipenv run scripts assume that the run command will
be run inside of a virtual environment. So, the default
behaviour when we try to use a run command and no venv
exists is to create a venv.
Because we were installing all the packages to the local
environment by passing the '--system' flag to our install,
this would make the bot fail with ImportErrors.
This commit fixes it so that the Dockerfile will run the
bot using the system Python instead of the pipenv run script.
|
| |/ / / / |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
* Add error handler to ignore InChannelCheckFailure in the verification
cog
* Raise InChannelCheckFailure instead of MissingPermissions in !user
* Send message instead of raising BadArgument in !user to prevent help
message from being shown in such case
* Clean up !user command
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
The exception now expects channel IDs to be passed to it.
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Since we're in an async context, it can happen that a message was
already deleted before the antispam cog could get to it. To prevent
processing from stopping dead because of a NotFound exception, I added
a try-except and log message to handle that
In addition, corrected a small mistake: trying to indice a single
Message object. Corrected.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
https://github.com/python-discord/bot/issues/412
https://github.com/python-discord/bot/issues/410
The AntiSpam cog had a bug that caused it to send the same messages
in more than one request to the deleted messages API endpoint. Since
the API rejects duplicate messages, all requests containing a duplicate
message were rejected, even if the request contained new messages as
well.
This commit fixes that by gathering up all the messages of a single
spam event into a single DeletionContext and sending that instead.
This commit also prevents the bot fomr being bricked by a single
misconfigured antispam configuration. Instead of raising a bare
exception, it will now log the validation error and alert moderation
on server that antispam has been disabled.
closes #412, closes #410
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
The check will behave like Discord.py's guild_only check by raising the
NoPrivateMessage exception.
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The event that was supposed to handle this was called
on_member_leave instead of on_member_remove, so the
even was never called when it should have been.
This commit renames the method.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This problem made the decorator only check the first role that was
passed into it, instead of checking all the roles. In other words,
the check would fail on *STAFF_ROLES unless you had the Helpers role.
Solved by refactoring the genexp to a listcomp.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The `modlog` cog failed on long messages with attachments, since the
inclusion of attachment metadata would bring the length of the embed
description to go over the character limit of 2048.
To fix this, I moved the addition of the attachment metadata to earlier
in the code so it is taken into account for the character limit.
In addition to this, I changed the truncation behavior. Instead of just
truncating the message if it's too long, we now truncate and upload the
full message to the `deleted messages` endpoint so the full message is
still available. A link to the log will be included in the message-log
embed.
|
| | | | |
| | | |
| | | |
| | | | |
Co-authored-by: Leon Sandøy <[email protected]>
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When you run '!cogs reload *', the load failures will now include
the Exception type, and has overall more readable formatting.
Similarly, trying to do '!cogs load <some cog>' on a broken cog
will show the Exception type as well.
|
| | | | | |
|
| |\ \ \ \ |
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
While there are measures to prevent duplicate active infractions at
the side of the bot, there's no formal restriction at the sid of the
database. This means that it's possible for a user two get two active
ban infractions or two active mute infractions at the same time, for
instance after a manual table edit in Admin.
This leads to an inconsistent state when unmuting/unbanning that user,
as the ban or mute role will be removed on Discord, but only one of the
entries in the database would be set to inactive, while the other(s)
remain active. This means that an unmuted user will be remuted if they
leave and rejoin the Guild.
To handle this, I've inserted code that sets all the infractions to
inactive and cancels all related infraction tasks (in the case of
temporary infractions) when issuing an unban or unmute command. A note
will be added to the mod_log embed to notify us as well.
|
| |/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The Deployment cog does not work in our new server environment,
nor are we particularly inclined to make it work (for security
reasons). For this reason, I've removed it.
I've also removed all usages of Roles.devops, replacing them with
Roles.core_developer whenever this made sense to do, such as in
the Cogs cog.
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
This changes URLs for stuff like FAQ, rules, and
the Asking Good Questions page to fit the Django format.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
There was a bug which would permit tag invocations here, because
these were triggered by an error handler on CommandNotFound.
This commit prevents that from being possible.
|
| | | | | |
|
| | | | | |
|
| |\ \ \ \ |
|
| | |\ \ \ \ |
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
The previous commit assumed the API respone to always be JSON. This
leads to issues when that is not the case, such as when the API is
completely unreachable (text/html 404 response).
Updated the ResponseErrorCode exception to account for that and
updated the moderation util `post_infraction` to reflect that.
|
| | | | | | | |
|
| | | | | | | |
|
| | |/ / / /
|/| | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We're not really using this, we're using Roles.verified. This provides
superiour readability, and there's no reason we should use two instead
of just one. I also added a comment to clarify that this role
represents the Developers role on pydis.
|
| |/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Previously, the regex to detect tokens would only trigger on
messages where the token was inside of single or double quotes.
This commit changes this so that we look for bot tokens regardless
of context.
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
This invokes the `!nomination list` command,
showing all currently nominated users.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This commit adds clearer error messages for all the errors
produced by the Wolfram cog if the API key is missing
in the config, or if the key isn't valid anymore.
It also humanizes the timedelta returned in the error
users get when they run out their cooldown. Instead of
telling them they need to wait 84000 seconds, it will now
tell them they need to wait 23 hours, 59 minutes ...
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The internal 'api' of our API client has changed: It raises a custom
RespondeCodeError instead of an `aiohttp.ClientError` when an API was
not successful. I updated this utility function to catch the right
exception and added handling for unknown users by notifying the user
of that problem directly.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The ReponseCodeError held a reference to `aiohttp.ResonseObject` to
make sure the response data was available. However, the response data
is not actually included in the Response Object, but needs to be
awaited.
Unfortunately, the ResponseCodeError is usually inspected after the
connection has been closed, triggering a ClientConnectionError when the
data was retrieved.
I solved this by adding the awaited reponse data directly to our custom
exception by awaiting the response.json() before raising the exception.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
MissingPermissions, CheckFailure, DisabledCommand, and CommandOnCooldown
will now have a simple message logged.
* Log BotMissingPermissions and remove sending missing permissions as a
message
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
https://github.com/python-discord/bot/issues/413
The message indexing phase of the `!clean` did not account for the
presence of the invocation message, resulting in a one-off error in the
amount of messages being indexed. Fixed it by adding one to the amount
of messages we index from the message history.
Closes #413
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Recent changes and updates to the moderation cog introduced some
inconsistencies that were causing bugs or differences in behavior
between very similar commands.
I've remedied the problems by:
- Consistently making sure we stop if a post_infraction API call fails;
- Factoring out the check for active infractions to a utility function;
- Updating commands that expected a pre-migration API response format.
In addition, I've also added function annotations.
|