| Commit message (Collapse) | Author | Lines |
|
The FetchedUser Converter now counts with a `proxy_user` helper function (which
SHOULD NOT be there) to return a user as a last resource, in case
there was an issue fetching from the Discord API, as long as the error
isn't that there's no user with the given ID.
|
|
Now `post_user(...)` expects either a `discord.User` or a
`discord.Object` object as `user`. Either way, it will try to take the relevant
attributes from `user` to fill the DB columns. If it can't be done,
`.avatar_hash`, `.discriminator`, and `name` will take default values.
|
|
|
|
Try twice to apply the infraction. If the user is not in the database,
try to add it, then try to apply the infraction again.
This allows any moderation function that uses `FetchedUser` as a
converter to apply the infraction even when the user is absent in the
local database.
|
|
As it is now, this function is planned to be used a big-helper in
`post_infraction`. Its interface is partially similar: it will return
a "JSON" dictionary if everything went well, or `None` if it
failed. If it fails, it will send a message to the channel and
register the issue in the `log`.
|
|
|
|
This `discord.ext.commands.Converter` fetches a user from the Discord
API and returns a `discord.User` object. This should replace the
`proxy_user` function from the moderation `utils`.
|
|
|
|
|
|
Similar to `format_infraction_with_duration` ( if not outright copying it ), added 3 tests for `until_expiration`:
- None `expiry`.
- Custom `max_units`.
- Normal use cases.
|
|
`format_infraction_with_duration`
- `until_expiration` was being a pain to unittests without a `now` ( default to `datetime.utcnow()` ). Adding an optional argument for this will not only make writing tests easier, but also allow more control over the helper function should we need to calculate the remaining time between two dates in the past.
- Changed typehint for `date_from` in `format_infraction_with_duration` to `Optional[datetime.datetime]` to better reflect what it is.
|
|
|
|
|
|
|
|
This make the channel specifiable without the amount.
Co-Authored-By: scragly <[email protected]>
|
|
|
|
|
|
|
|
|
|
It will attempt to find the most recent infraction authored by the
invoker of the edit command.
|
|
|
|
Messages are deleted after a delay of 10 seconds. This helps keep the
channel clean. The periodic ping is an exception; it will remain.
|
|
|
|
|
|
|
|
Raising an exception allows the error handler to display a message to
the user if the failure happened from a command invocation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The object is basically just a namedtuple so there's no need to
re-create it every time a token is obtained.
* Remove log message which shows credentials.
* Initialise headers attribute to None in __init__.
|
|
This removes the duplicate code for renewing the token. Since
fetch_posts is the only place where the token gets used, it can just be
refreshed there directly.
|
|
|
|
|
|
Only a warning is logged if it's a Forbidden error. Otherwise, the whole
exception is logged.
|
|
|
|
Active thread counts are observed to be lower with it in use.
|
|
The in_channel decorator raised 'NoneType' is not iterable when it
wasn't passed, due to the default value being None but not checked
against before iterating over it. This edit ensures the arguments are
set to an empty list in cases where they have a value of None instead.
|
|
|
|
aiohttp throws a warning when a session is created outside of a running
async event loop. In aiohttp 4.0 this actually changes to an error
instead of merely a warning.
Since discord.py manages the event loop with client.run(), some of
the "internal" coroutines of the client were overwritten in the bot
subclass to be able to hook into when the bot starts and stops.
Sessions of both the bot and the API client can now potentially be None
if accessed before the sessions have been created. However, if called,
the API client's methods will wait for a session to be ready. It will
attempt to create a session as soon as the event loop starts (i.e. the
bot is running).
|
|
|
|
|
|
|
|
|
|
Hard-coded version number to 1.0.0.
|
|
Include the check about whether or not there is a token in the posted message in `parse_codeblock` boolean.
|
|
- Added the option to specify a channel to have Python repeat what you said to it, as well as keeping the old functionality of having it repeat what you said in the current channel if no channel argument is given.
Signed-off-by: Daniel Brown <[email protected]>
|
|
|