|  | Commit message (Collapse) | Author | Lines | 
|---|
|  | Co-authored-by: SebastiaanZ <[email protected]> | 
|  | When environment variables weren't provided; the cog attempted to create a BasicAuth object with None as values resulting in an exception before the event loop was started and a subsequent crash. | 
|  | The function was only used in the since removed `Events` cog. | 
|  |  | 
|  |  | 
|  | Adds ConfigVerifier which verifies channels when loaded. | 
|  | Python tries to fall back on passing indices to `__getitem__` without iter implemented; failing on the first line. | 
|  | * Convert diff namedtuple to dict outside the dict comprehension
* Define long condition as a boolean instead of in the if statement
* Pass role and user dicts to aiohttp normally instead of unpacking | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | This is more visible than it would be if it was only logged.
* Add a webhook for the dev-log channel to constants | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | command context. | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | Explain changes caused by 22a55534ef13990815a6f69d361e2a12693075d5. | 
|  |  | 
|  |  | 
|  | Changed the pagination emoji collection from list to tuple
This change was suggested since this collection is constant | 
|  | NGINX has been dockerised, and proxy passes now reference internal container domains rather than referencing host or external domains.
This will have a few extra benefits:
 - Less external factors involved for resolving the service address
 - Can work with the same address on development envs
 - Snekbox can be closed down entirely so it's inaccessible from external networks. | 
|  | Fixed by allocating a pseudo-tty to the web and bot services in Docker
Compose. | 
|  |  | 
|  | The bot user was always being used instead of using the actor field
of the infraction. | 
|  | Closes #685 | 
|  | The absolute value is useful for preventing negative values in the case
that date_to is in the past relative to date_from.
* Add an absolute parameter to take the absolute value of the duration
* Rename expiry to date_to
* Rewrite the docstring | 
|  | Co-Authored-By: Mark <[email protected]> | 
|  |  | 
|  |  | 
|  | * Refactor confirmation embed footer string generation to be more concise
* Multiline long method calls
* Refactor humanized delta f string generation for readability
* Switch from `datetime.isoformat` to `dateutils.parser.isoparse` to align with changes elsewhere in the codebase (should be more robust)
* Shift reminder channel whitelist to constants
Co-Authored-By: Mark <[email protected]> | 
|  | https://github.com/python-discord/bot/issues/751
The infraction edit command defined in `bot.cogs.moderation.management` contained a bug causing it to attempt to schedule an expiration task when turning a temporary infraction into a permanent infraction. Since the "expires_at" field of a permanent infractions is `None`, this caused an exception to occur in the scheduler:
Traceback (most recent call last):
  File "/bot/bot/cogs/moderation/scheduler.py", line 415, in _scheduled_task
    expiry = dateutil.parser.isoparse(infraction["expires_at"]).replace(tzinfo=None)
  File "/usr/local/lib/python3.7/site-packages/dateutil/parser/isoparser.py", line 37, in func
    return f(self, str_in, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/dateutil/parser/isoparser.py", line 134, in isoparse
    components, pos = self._parse_isodate(dt_str)
  File "/usr/local/lib/python3.7/site-packages/dateutil/parser/isoparser.py", line 208, in _parse_isodate
    return self._parse_isodate_common(dt_str)
  File "/usr/local/lib/python3.7/site-packages/dateutil/parser/isoparser.py", line 213, in _parse_isodate_common
    len_str = len(dt_str)
TypeError: object of type 'NoneType' has no len()
I have solved this by adding a check that makes sure we only schedule an expiration task when the `"expires_at"` field has a truthy value (which all valid datetime strings are) using `if request_data['expires_at']`.
IMPORTANT NOTE: While it's tempting to just skip the entire scheduling block for permanent infractions, it's essential to unschedule existing expiration tasks for this infraction as we're changing a temporary infraction to a permanent infraction.
This commit closes #751 | 
|  |  | 
|  |  |