| Commit message (Collapse) | Author | Lines | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Fixes BOT-KX
 | 
 | 
 | 
 | 
in_whitelist allow normal users also run commands in bot commands,
but branding commands should be mod+ only, so we need to use
has_any_role instead from discord.py.
 | 
 | 
 | 
 | 
The site can't handle huge syncs. Even a bulk patch of 10k users will
crash the service. Chunk the requests into groups of 1000 users and
await them sequentially. Testing showed that concurrent requests
are not scalable and would also crash the service.
 | 
 | 
Whitelisted mod_meta and mod_tools as mod channels
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
As the watch reason can contain private information, we shouldn't share it with the whole staff.
 | 
 | 
To be able to set the attribute at the start of the coro we need to
be able to access the item's future before we know about all the other
items. This also saves us from having to add them all as the queue
parser or get_markdown will create the futures for us dynamically
 | 
 | 
If an inventory refresh was started while the symbol embed coroutine
was suspended, it could cause the parser to try to fetch a non existent
future if the markdown was requested after it was cleared but before
new inventories were loaded in.
 | 
 | 
When wrapper uses a global name, which conflicts with a global name
from wrapped's module that wrapped uses for its annotations, we run into
a situation that can't be solved without changing one of the names, so
an error is raised to give this clearer meaning.
The check may be erroneous in some edge cases or the objects the
conflicting names refer to can be functionally identical, so the error
can be turned into a logged warning.
 | 
 | 
Shortening the renamed symbols string to 100 chars is not accurate
as the footer also contains a string before that, subtracting its length
fixes this.
 | 
 | 
A context switch may occur when we're waiting for the web page response,
during which a clear could be triggered. If the event is not set before
that we could end up with the dictionary changing sizes, or if a copy
was made, a future that'd never finish as it'd be
cleared from the queue and the futures dict
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Co-authored-by: MarkKoz <[email protected]>
 | 
 | 
The scheduler can't keep track of multiple tasks with the same id,
and rescheduling the update task using the same id within an already
scheduled update task caused the new task to get ignored as the old task
only got deleted from the scheduler after it was finished
 | 
 | 
 | 
 | 
The method no longer runs anything asynchronous
 | 
 | 
 | 
 | 
The decorator works in revers to what the docstring explained
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Getting the value from a defaultdict will always create the key for it,
creating unnecessary entries every time a symbol is fetched from the bot
 | 
 | 
 | 
 | 
The converter used to set them already ensures this for us, making the
call redundant
 | 
 | 
The footer also now says Moved: at the start to clarify the meaning
of the symbols to the user
 | 
 | 
A dictionary allows us to grab the original symbol name and then
get all the renamed symbols from it, with the improvements to
`ensure_unique_symbol_name` we can also use lists instead of sets as
each symbol we add should be unique
 | 
 | 
Previously update_single looped this function until there were no
duplicates and when creating new symbols the function had to check
if the symbol to create a new name from started with a group/package
to avoid redundancy.
The new approach ensures a new symbol is always unique when returning
by handling the containment check inside and outputting a symbol name
in the format of package.group.symbol which should always be unique
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Without this the command will fetch the source of the wrapper
 | 
 | 
 |