| Commit message (Collapse) | Author | Age | Lines | 
| ...                                          |  | 
| | | | | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | |  | 
shorten already include `placeholder` to length.
 | 
| | | | | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | |  | 
Audit Log when kick reason length is more than 512 characters.
 | 
| | | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | |  | 
Log when ban reason length is more than 512 characters.
 | 
| | | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | |  | 
This de-clutters the main `server_info` function and improves its
readability.
 | 
| | | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | |  | 
Simplification comes from being able to access permissions as attributes
on the overwrite object. This removes the need to iterate all
permissions.
Efficiency comes from checking all roles within a single iteration of
all channels. This also removes the need to flatten and filter the
channels afterwards, which required additional iterations.
 | 
| | | | | | | | |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \  
| |_|_|_|_|_|_|/ / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | | | |    | 
 | 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  
| |_|_|_|_|/ / / / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | | | |    | 
Specify encoding when reading tag files
 | 
| |/ / / / / / / / / / / / / / / / / / / / /  
| | | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | | |    | 
Not all operating systems use UTF-8 as the default encoding. For systems
that don't, reading tag files with Unicode would cause an unhandled
exception.
(cherry picked from commit adc75ff9bbcf8b905bd78c78f253522ae5e42fc3)
 | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | |  | 
We're using the set comprehension to prevent duplicates anyway, so
flipping these back makes more sense.
Also added a missing ctx and tested ok.
 | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | |  | 
- We're using a set comprehension and flipping the order for counting
  the number of channels that are both staff allow and @everyone deny.
- We're breaking the staff channel count stuff into a separate helper
  function so it doesn't crowd the server_info() scope.
These fixes are both to address the code review from @MarkKoz, thanks
Mark.
 | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | |  | 
I wish this test didn't exist.
 | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | |  | 
We now check:
- Does the @everyone role have explicit read deny permissions?
- Do staff roles have explicit read allow permissions?
If the answer to both of these are yes, it's a staff channel.
By 'staff roles', I mean Helpers, Moderators or Admins.
 | 
| | | | | | | |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \  
| |_|_|_|_|_|/ / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | | |    | 
 | 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  
| |_|_|_|/ / / / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | | |    | 
Ignore response when posting python news
 | 
| | |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  
| |/ / / / / / / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | | |    | 
 | 
| | | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | |  | 
Sometimes a mailing list user doesn't press respond correctly to the email, and so a response is sent as a separate thread. To keep only new threads in the channel, we need to ignore those.
 | 
| | | | | | | | | | | | | | | | | | | | | |  | 
 | 
| | |_|_|_|_|/ / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | | |    | 
Cleaning up a particularly dirty line by turning it into like 10 lines,
and also adding the number of channels that are hidden to the
`@everyone` role - which we're classifying as "Staff channels".
 | 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  
| |/ / / / / / / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | | | |    | 
 | 
| | | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | |  | 
Discord has introduced a new, strict rate limit for individual channel
edits that reduces the number of allow channel name/channel topic
changes to 2 per 10 minutes per channel.
Unfortunately, our help channel system frequently goes over that rate
limit as it edits the name and topic of a channel on all three "move"
actions we have: to available, to occupied, and to dormant. In addition,
our "unanswered" feature adds another channel name change on top of
the move-related edits.
That's why I've removed the topic/emoji changing features from the help
channel system. This means we now have a generic topic that fits all
three categories and no status emojis in the channel names.
 | 
| |/ / / / / / / / / / / / / / / / / / /  
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | | |    | 
The `check_for_answer` method of the HelpChannels cog relies on the
channel->claimant cache being available. However, as this cache is
(currently) lost during bot restarts, this method may fail with a
KeyError exception.
I've used `dict.get` with an `if not claimant: return` to circumvent
this issue.
 | 
| | |_|_|_|/ / / / / / / / / / / / / /  
|/| | | | | | | | | | | | | | | | |   
| | | | | | | | | | | | | | | | | |    | 
Increase every shown rule uses count when command called.
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
The `msg` arg is for displaying a message when the assertion fails. To
match against the exception's message, `assertRaisesRegex` must be used.
Since all of the messages are meant to be interpreted literally rather
than as regex, `re.escape` is used.
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
`datetime` objects only support a year up to 9999.
Fixes #906
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
Co-authored-by: Joseph Banks <[email protected]>
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
Co-authored-by: Joseph Banks <[email protected]>
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
When cogs reload, it would consider their namespace as a conflict with
the original namespace. This feature will be removed as a fix until we
come up with a better solution.
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
- Use UTC from timestamp
- Rename name bad words checking function
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
Co-authored-by: Mark <[email protected]>
 | 
| | | | | | | | |\ \ \ \ \ \ \ \ \ \ \   | 
 | 
| | | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | |  | 
Move lock creation from `bad_words_in_name` to `__init__`
 | 
| | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | | | | | | | | | | | | |  | 
 | 
| | | | | | | | |/ / / / / / / / / / /   | 
 | 
| | | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | | 
| | | | | | | | | | | | | | | | | |  | 
- Make `bad_words_in_name` and attach it to current `on_message`.
- Implement `asyncio.Lock` to avoid race conditions.
- Made that this first check is there matches and when there is,
check for alert.
 |