* Revert "Wait for two 'Started Launcher' lines before connecting to managed LL (#5751)"
This reverts commit cf85a6470f.
* Use the new ready line from LL dev build 1352+
* [Core] Add `--unload-cogs` cli.
* Fixed error + Reformat.
* At @Jack1142's request, the `packages` local variable is no longer a list, but a dictionary with `None` values, to avoid duplication.
* Update redbot/core/bot.py
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/bot.py
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
* Update bot.py
* Update bot.py
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
* Initial commit
* Necessary amendments/changes
* style changes (i knew id have to do this...)
* Use inline()
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
Multiple bugfixes
* Fixed unbound channel_value
* Fixed lack of new lines for listcases
* Fixed response text for case. It can only be used in the current server.
* rhel->rhel8 rename of the include file for install guides
* Add RHEL 9
* Add Alma, Oracle, and Rocky Linux 9 pre-emptively
* Add Alma Linux 9 EOL date
* Add support for set api Modals
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
* Blaacckkkk!
* Swap locations of interaction and button.
* Clarified template tokens
* Update docs and some string
* More docs
* Rework the client
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
* Goddamned black!
* Missed a few arguments
* Black... Again
* Update redbot/core/utils/views.py
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
* Update redbot/core/core_commands.py
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
There's no need to update RepoManager's code as:
- regex for parsing output about ambiguous refs properly treats the date
as part of description regardless of ref type
- code for checking if module exists doesn't use the contents of the error message;
the test only really checks for it to make sure that it triggers the error case
we're actually testing for. We could instead just remove it too.
* Make `controls` in `menu()` optional
You might wonder, shouldn't we pass `None` to functions from controls?
No, we shouldn't because when `None` is passed, only DEFAULT_CONTROLS
can be used and that means that the length of pages list won't change.
* Update usage in core and core cogs
* Add missing docstrings to `redbot.core.utils.menus` module
* Streamalert list shows each platform the channels were added on
* Added argument to specify the discord channel where stream alerts appear
* Fixed styling
* Changed discord_channel type to discord.TextChannel
* Changed join to humanize_list to display the streams list, split the message concatenation into two lines for better readability
* Allow specifying discord channel for picarto and hitbox, fix style for youtube and twitch
* Since token_name from streamtypes can be None on Picarto and Hitbox, I added an attribute to the Stream class to hold the platform name
* Message now tells the user that the stream alert was disabled only for the specified channel.
* Address review
* fix style
* Consistency! Sort of...
Co-authored-by: douglas-cpp <douglasc.dev@gmail.com>
Co-authored-by: Douglas <douglas.carvalho@edu.unipar.br>
* Make sure that the repository we check is in the location we expect
* Merge `redbot._version` into `redbot`
* Generate VersionInfo in _get_version()
This way, if VersionInfo.from_str() generates exception due to invalid
version, we catch it.
* Temporarily set d.py to use latest git revision
* Remove `bot` param to Client.start
* Switch to aware datetimes
A lot of this is removing `.replace(...)` which while not technically
needed, simplifies the code base. There's only a few changes that are
actually necessary here.
* Update to work with new Asset design
* [threads] Update core ModLog API to support threads
- Added proper support for passing `Thread` to `channel`
when creating/editing case
- Added `parent_channel_id` attribute to Modlog API's Case
- Added `parent_channel` property that tries to get parent channel
- Updated case's content to show both thread and parent information
* [threads] Disallow usage of threads in some of the commands
- announceset channel
- filter channel clear
- filter channel add
- filter channel remove
- GlobalUniqueObjectFinder converter
- permissions addglobalrule
- permissions removeglobalrule
- permissions removeserverrule
- Permissions cog does not perform any validation for IDs
when setting through YAML so that has not been touched
- streamalert twitch/youtube/picarto
- embedset channel
- set ownernotifications adddestination
* [threads] Handle threads in Red's permissions system (Requires)
- Made permissions system apply rules of (only) parent in threads
* [threads] Update embed_requested to support threads
- Threads don't have their own embed settings and inherit from parent
* [threads] Update Red.message_eligible_as_command to support threads
* [threads] Properly handle invocation of [p](un)mutechannel in threads
Usage of a (un)mutechannel will mute/unmute user in the parent channel
if it's invoked in a thread.
* [threads] Update Filter cog to properly handle threads
- `[p]filter channel list` in a threads sends list for parent channel
- Checking for filter hits for a message in a thread checks its parent
channel's word list. There's no separate word list for threads.
* [threads] Support threads in Audio cog
- Handle threads being notify channels
- Update type hint for `is_query_allowed()`
* [threads] Update type hints and documentation to reflect thread support
- Documented that `{channel}` in CCs might be a thread
- Allowed (documented) usage of threads with `Config.channel()`
- Separate thread scope is still in the picture though
if it were to be done, it's going to be in separate in PR
- GuildContext.channel might be Thread
* Use less costy channel check in customcom's on_message_without_command
This isn't needed for d.py 2.0 but whatever...
* Update for in-place edits
* Embed's bool changed behavior, I'm hoping it doesn't affect us
* Address User.permissions_in() removal
* Swap VerificationLevel.extreme with VerificationLevel.highest
* Change to keyword-only parameters
* Change of `Guild.vanity_invite()` return type
* avatar -> display_avatar
* Fix metaclass shenanigans with Converter
* Update Red.add_cog() to be inline with `dpy_commands.Bot.add_cog()`
This means adding `override` keyword-only parameter and causing
small breakage by swapping RuntimeError with discord.ClientException.
* Address all DEP-WARNs
* Remove Context.clean_prefix and use upstream implementation instead
* Remove commands.Literal and use upstream implementation instead
Honestly, this was a rather bad implementation anyway...
Breaking but actually not really - it was provisional.
* Update Command.callback's setter
Support for functools.partial is now built into d.py
* Add new perms in HUMANIZED_PERM mapping (some from d.py 1.7 it seems)
BTW, that should really be in core instead of what we have now...
* Remove the part of do_conversion that has not worked for a long while
* Stop wrapping BadArgument in ConversionFailure
This is breaking but it's best to resolve it like this.
The functionality of ConversionFailure can be replicated with
Context.current_parameter and Context.current_argument.
* Add custom errors for int and float converters
* Remove Command.__call__ as it's now implemented in d.py
* Get rid of _dpy_reimplements
These were reimplemented for the purpose of typing
so it is no longer needed now that d.py is type hinted.
* Add return to Red.remove_cog
* Ensure we don't delete messages that differ only by used sticker
* discord.InvalidArgument->ValueError
* Move from raw <t:...> syntax to discord.utils.format_dt()
* Address AsyncIter removal
* Swap to pos-only for params that are pos-only in upstream
* Update for changes to Command.params
* [threads] Support threads in ignore checks and allow ignoring them
- Updated `[p](un)ignore channel` to accept threads
- Updated `[p]ignore list` to list ignored threads
- Updated logic in `Red.ignored_channel_or_guild()`
Ignores for guild channels now work as follows (only changes for threads):
- if channel is not a thread:
- check if user has manage channels perm in channel
and allow command usage if so
- check if channel is ignored and disallow command usage if so
- allow command usage if none of the conditions above happened
- if channel is a thread:
- check if user has manage channels perm in parent channel
and allow command usage if so
- check if parent channel is ignored and disallow command usage
if so
- check if user has manage thread perm in parent channel
and allow command usage if so
- check if thread is ignored and disallow command usage if so
- allow command usage if none of the conditions above happened
* [partial] Raise TypeError when channel is of PartialMessageable type
- Red.embed_requested
- Red.ignored_channel_or_guild
* [partial] Discard command messages when channel is PartialMessageable
* [threads] Add utilities for checking appropriate perms in both channels & threads
* [threads] Update code to use can_react_in() and @bot_can_react()
* [threads] Update code to use can_send_messages_in
* [threads] Add send_messages_in_threads perm to mute role and overrides
* [threads] Update code to use (bot/user)_can_manage_channel
* [threads] Update [p]diagnoseissues to work with threads
* Type hint fix
* [threads] Patch vendored discord.ext.menus to check proper perms in threads
I guess we've reached time when we have to patch the lib we vendor...
* Make docs generation work with non-final d.py releases
* Update discord.utils.oauth_url() usage
* Swap usage of discord.Embed.Empty/discord.embeds.EmptyEmbed to None
* Update usage of Guild.member_count to work with `None`
* Switch from Guild.vanity_invite() to Guild.vanity_url
* Update startup process to work with d.py's new asynchronous startup
* Use setup_hook() for pre-connect actions
* Update core's add_cog, remove_cog, and load_extension methods
* Update all setup functions to async and add awaits to bot.add_cog calls
* Modernize cogs by using async cog_load and cog_unload
* Address StoreChannel removal
* [partial] Disallow passing PartialMessageable to Case.channel
* [partial] Update cogs and utils to work better with PartialMessageable
- Ignore messages with PartialMessageable channel in CustomCommands cog
- In Filter cog, don't pass channel to modlog.create_case()
if it's PartialMessageable
- In Trivia cog, only compare channel IDs
- Make `.utils.menus.menu()` work for messages
with PartialMessageable channel
- Make checks in `.utils.tunnel.Tunnel.communicate()` more rigid
* Add few missing DEP-WARNs
* Squash tested commits
* remove the code jack is concerned about
* Apply suggestions from code review
* more log lines
* more log lines
* format
* formatting
* style(Rename Xms and Xmx mentions): Rename Xms and Xmx to more use friendly names
- Change Xms to "Initial Heapsize"
- Change Xmx to "Max Heapsize"
Signed-off-by: Draper <27962761+Drapersniper@users.noreply.github.com>
* Fix embed requested in DM's
* Add documentation
* black
* Address comments
* Unnecessary added line
* Use correct channel on context
* use correct var name
* More review stuff
* Switch from low-level loop.create_task and asyncio.ensure_future
* Patch vendored discord.ext.menus to use modern APIs as well
That ext is no longer maintained by Danny anyway so...
* black
* Support all Messageables in bot.embed_requested
* Update usage in core
* Simplify [p]contact
This couldn't be done before this change.
I have also simplified getting embed color.
* Make `True` the new default for `check_permissions` kwarg
* update RC dep
* welp 100% tested
* fix import
* 120% tested
* Call _early_init even earlier
Not really in scope of this PR but the original was merged
before I could share any feedback.
* explicitly import getLogger
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* add different logging level callbacks for task exception logging
* Add callback to tasks which didn't have them
* The boring stuff - (apply .trace() and .verbose() to audio, stop using debug_exc_log, delete audio_logging.py)
* Unsured import cleanup
* use new lavalink method
* return so it doesn't log this twice.
* improve logging on main event handler
* Fix formatting breaking with nested formatters.
* Remove useless f-strings
* Revert formatting to the one before PR #5435
* One more small formatting revert
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Use proper syntax for inline formatting in core_commands
* use proper formating utils in core and core cogs wherever reasonable
* tests are awesome
* ensure "(continued)" is translated in help.py
* add colons to translatable strings for easier context comprehension by translators
* Thx flame :)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* good point
Co-authored-by: Dav <dav@mail.stopdavabuse.de>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* Simplify `redbot-setup backup` thanks to Click 8.0
* Add some of the missing type hints
* Fix unnecessary new lines in `redbot-setup` and `redbot-setup delete`
* Add default value for storage backend
* Add non-interactive mode to `redbot-setup`
* Ensure Nitro users can't make CCs that are too long
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
* Tox formatting
* Update to account for edits and better handling of randoms
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
* Prevent unexpected matches by asserting whitespace or eof at the end of matches
* Use a positive lookahead instead of a capturing group to support 1d6h syntax
* Use fullmatch instead of modifying regex strings
This was removed long ago from the Windows guide (#4119) but it seems like we never got around to removing it from Unix install guides as well.
This note is rather inaccurate and the source of truth for updating Red is available in the Updating Red document.
* Drop Fedora 33
By the time we release, it's going to reach EOL.
* Drop Raspberry Pi OS 10, add support for 11
* Bring RPi OS 10 back
* Add Alma Linux 8
* Fix-up RHEL EOL dates
* Add '(Legacy)' to Raspberry Pi OS 10
* Drop CentOS 8
* catch and handle FileNotFoundError when using --no-instance when config.json does not already exist
* move load_existing_config to data_manager.py
* use load_existing_config in create_temp_config
* Fix import in redbot-launcher
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update links to installation guides
* Update Windows link
This one redirects correctly but updated it anyways
* Update all red-discordbot.readthedocs.io links to docs.discord.red
* Reorganised Set command group
* Moved custominfo
* Tox styling
* Make `set locale®ionalformat` groups work same as server subcommands
* Use consistent method names for commands in `[p]set` group
* Update command names in docstrings
* Remove some weird rst formatting that bugs out my syntax highlighting
* Add checks to some command groups
* Update docs
* oops
* Minor fixes
* Move `[p]set api` group and its subcommands to other command groups
* Move `[p]set ownernotifications` group to other command groups
* black reformat
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Move bankset and modlogset to core commands
* Move prune over too
* Finish moving prune
* Move [p]economyset registeramount to [p]bankset registeramount
* style fix
* Fix circular import issue with another breaking change
* Apparently I missed a conflict and git still let me commit...
* Really git?
* Rename RawUserIds -> RawUserIdConverter, improve documentation
* Improve documentation of `is_owner_if_bank_global()`
* MENTION_REGEX -> USER_MENTION_REGEX
* Add 'bank.' prefix
* Fix command examples in docstrings
* Missing docstring change from `bankset prune`
* Missing changes for commands in modlogset
* Update docs
* Remove duplicated info in `economyset showsettings`
* Fix toctree in index.rst
* Add command group prefixes to names of functions for bankset/modlogset
* Remaining string updates due to command name changes
* Ensure that the bank folder is actually gone
Co-authored-by: palmtree5 <palmtree5+3577255@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Add instructions on how to add pyenv to load path
* Support zsh in pyenv load path instructions
* Make instructions for Mac work when shell-specific profile file exists
* Includes are weird...
* .
* Fix my misunderstanding of what files zsh sources
* Operator precedence, or something like that
The new pip 21.3 (released 2021-10-11) uses in-tree builds when `pip install .` is used (see [release notes](https://pip.pypa.io/en/stable/news/#v21-3) and [implementation PR](https://github.com/pypa/pip/pull/10495)). This means CodeQL will see all files twice (once in the real location that is part of this repository, and one in the copy in the `build/` dir), which trips up the analysis.
When an editable install is used instead with `pip install -e .`, there is no `build/` dir, so the analysis will work again.
* Update Java URL
* Update choco package as well
* Use Windows-specific URL for Python downloads
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Fix wording in redbot/cogs/mod/kickban.py to match with the command example
* Made changes as requested in PR Review #770078179
* Added changes to docs/cog_guides/mod.rst as requested in PR Review #70784066
* Fixed kick wording
* Fix kick wording
* Update some link texts for accessibility
* Fix stuff nearby while we're here
* Reword links to DigitalOcean
* Use better link text for `[p]triviaset custom`
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Fix#5312
* Update setup.py
* put db actions under one if statement
* check backend type and improve displayed message
* accept format fix
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* fix whitespace
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* separate datapath delete from data delete
* Fix indentation
* Call `driver_cls.initialize()` outside try-finally
* Backup requires db server to run too + some simplifications
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Exclude include files from being built
* Split install guides into multiple documents (one per OS/version combo)
* Update references
* Unify anchor names
* Update pyenv requirements in CentOS 7 guide
* Update install guides for RHEL derivatives to not use pyenv
* Add guide for Rocky Linux 8
* 8.4+ -> 8.4-8.x
* Add 'the'
* add commands, cog converter
* properly use type_checking
* make core commands use command converter
* update commands to use cogconverter
* fix undefined variable name, style
* Update redbot/core/commands/converter.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/commands/converter.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/core/core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* update cog argument names
* update documentation arg names
* update more docs
* This new Sphinx is annoying about this...
* I'm questioning my skills
* Fix name error in `[p]embedset showsettings` when command is not given
* Do not use the new cog converter in `[p]command enablecog`
This is needed so that a cog that isn't loaded but was disabled
can be enabled back.
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Clarify Debian 10 as "Buster"
* Add Debian 11 Install
* This typo would of bugged my OCD...
* Clarify Debian 10 as "Buster"
* Add Debian 11 Install
* This typo would of bugged my OCD...
* Add apt upgrade line to doc
* Removing dupe for Debian 11
I'm not sure how that happened, but oh well...
* Update deps + allow Python 3.9
* Add in updates from Jack's branch
* Fix multiple target for cross-reference warnings
* Update a few more Python 3.8 occurrences
* Bump further
* Don't install tox in CodeQL environment
* Bump Python version in docs to 3.9.7
* more bumps
* Add missing pin
* Stop using the deprecated distro.linux_distribution()
* Suppress deprecation warning
* Fix OpenSUSE Leap instructions
* Drop Fedora 32
* Add Python 3.10-dev to CI
* meh
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Core] Blacklist api
* [Core] Use to_add, remove star from other method calls
* various touch ups
* style
* fix doc style
* [Core] Remove iterable import
* [Core] Update commands to use the blacklist/whitelist api
* Change signatures to not use `*args`
* Update all usage of private cache to the new public APIs
* Update the docstrings
* Update the usage in diagnoser
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Added years and months to parse_timedelta
* Added new parse_datetimedelta along with classes for relative dates
* Switched datetime as dt to just datetime for clarity
* Changed to returning relativedelta instead of datetime
* Fixed single char typo
* After some digging, removed min and max from relative delta b/c of https://github.com/dateutil/dateutil/issues/350
* Add dateutil to intersphinx mapping
* Change uppercase D in RelativeDeltaConverter to a lowercase D
* Fix cross-references in docstrings
* Add new class and methods to __all__
* Remove get_relativedelta_converter()
* style
* Fix name of parse_relativedelta test
* more style
* Re-export new class and function in `redbot.core.commands`
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Split `Requires._transition_state` into reusable methods for Diagnoser
* (style) Fix line length
* Add missing .format()
* Add handling for user permissions, privilege level, Permissions rules
* Add missing awaits, use correct method in user perms check, add 'the'
* Fix .format() fields
* Add comment
* Add new file to labeler's configuration
* Add the command to the documentation
* All the work from DiagnoserCog
You can find the commit history of it here:
https://github.com/jack1142/DiagnoserCog
* Fix circular import
* Make channel argument optional
* Add a tip about channels from different servers
* [Trivia] Handle potential Discord errors in session.
* Hm why did I put HTTPException in there
* Revert "Hm why did I put HTTPException in there"
This reverts commit dc5cb990cb.
* Revert "[Trivia] Handle potential Discord errors in session."
This reverts commit d90e45f9e0.
* Handle Discord errors in _error_handler.
* [Streams] Check non-existent streams more than once
- For YouTube streams, it seems like the RSS feed may sometimes return
an HTTP 404 for a channel, even though the channel exists.
- If this happens more than a few times, then we should declare the
stream as non-existent, and purge it from the list of streams we
check.
* [Streams] Move retry_count reset for YouTubeStream
- Reset after the RSS check, since that is the only place where we raise
StreamNotFound in that function.
* [Streams] Increase retry to 20
* [Streams] Reduce retry count to 10
* [Alias] Added alias edit and alias global edit
* Comment and whitespace only changes
* Docstring fix
* Remove more whitespace
* Add `the` before some English purists make a PR for this...
Co-authored-by: npc203 <npc203@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* added hierarchy check for rename
added hierarchy check for rename from utils
* format and self check
changed formats and added statement if me != member
* black format
apply black formatting and fix typo
* tox style
tox i guess
* tox again
:<
* Update redbot/cogs/mod/names.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Fix styling
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Mod] Send ban reason on Temp Bans
* If none
* Locale friendly
* Fixes for black style
* Use double line break to distinguish between reason header
* Check settings
* Black
* Reduce the number of config calls
* remove additional config call
* fixes
* style
* We're already in `if reason` so this is always True
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Add test for presence of upper and lower bound on Python version
* [part 1/3] Test that this works, DO NOT MERGE
* [part 2/3] Test that this works, DO NOT MERGE
* [part 3/3] Revert unwanted changes, NOW YOU CAN MERGE!
* Initial commit
* update docs
* remove usage kwargs
* style
* Type hint with SelfRole and not discord.Role
* fix docstring
* Various improvements, fixes
* i need to wake up
* more improvements
* AAAA
* add back check
* Improve converter error
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Initial support for Discord timestamping
* Fix timezones
* Fix userinfo for users with member.joined_at equal to None
* Simplify
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Add custom trivia list schema validation and test
* Address review
* Improve error formatting in trivia list test
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Oh my gosh Kowlin is finishing work!?
* fix style
* use f-strings
* moar f-strings actually
* Fix style...
* I did a poor job of find-replacing things
* Improve code readability per previous Kowlin's style
* And reformat it in such a way that get jack through the day
* Okay maybe some whitespace
* Update core_commands.py
* Update core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Force-disable Audio's Global API functionality
* Remove owner message about global API
* Two more comments
* Update CODEOWNERS
* Bring back the owner notification, modified to not mention global DB
* Remove the global api group fully, remove the mentions of it
* Since i have these uncommitted locally sharing...
* clean up
* clean up
* noone can figure out how my pycharm got into this state .. but hey ho.
* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
* We don't need this comment, we already include these in gitgnore anyway
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Modlog] Confirmation for resetting modlog cases
* We need to return there
* Update modlog.py
* style
* Update redbot/cogs/modlog/modlog.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* version bump
* - bump RLL
- logging changes
- player.channel.guild->player.guild
- small cleanup around logging changes
* missed one
* here this one too
* Apply suggestions from code review
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* add one missing player log
* missed one
* Format with Black
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Initial commit
* Add some args
* bool prolog
* index
* Add more arguments
* more arguments, style fixes
* improve naming of arguments
* Fix up backlog
* Run black
* extra corrections from backlog
* Update tempban arg names
* backlog
* change prolog type
* Change kick argument prolog to member instead of user
* Update argument names
* missed a colon
* Update prolog to be friendly with non-positional args
* Edit through the decorator instead
* Add back docstring spacing
* black
* usage in decorator for name commands
* Fix command signature
* fixup docstring spacing
* style fixes
* Add spacing inside unban docstring
* Rename args instead of using usage
* black - simple
* Add labeler glob
* unify style
* rename variables instead of usage
* Update docstrings correspondingly
* run black
* update description in usage
* ehh this isn't necessary...
* fix up tags
* fix grammar and accuracy issues
* fix docstring too
* This PR depends on Part 2 due to new store value
- cleanup of [p]volume
- a fix for infinite retrying
* update `[p]volume` help
* Update controller.py
* Update redbot/cogs/audio/core/commands/controller.py
meh still hardcoded in RLL .. will be removed in 0.9
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/cogs/audio/core/commands/controller.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Docs] add `sudo systemctl disable` to Linux auto-restart docs
* [Docs] fix typo in Linux auto-restart docs
* [Docs] update Mac auto-restart docs
* [Docs] implement suggestions for Linux auto-restart docs
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Docs] update wording on Mac auto-restart docs
* [Docs] fix grammar in Linux auto-restart docs
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Core guide initial commit
* Mydata docstrings
* Regenerated docs
* Lots more docstrings
* Add document link
* Up to load docstrings
* Black formatting
* docstring semantics
* "cog packages" for loads
* Refix line lengths
* Regenerate docs
* Remove link
* Regenerate docs with new code
* Some small docstrings
* Regenerate docs with new .. warning code
* More docstrings into the `set` command
* Bullet lists need blank lines.
* Regenerate docs
* Regenerate docs (fix bullet lists)
* set activity statuses docstrings
* Docstrings up to helpset pagecharlimit
* Regenerate docs
* Core guide initial commit
* Mydata docstrings
* Regenerated docs
* Lots more docstrings
* Add document link
* Up to load docstrings
* Black formatting
* docstring semantics
* "cog packages" for loads
* Refix line lengths
* Regenerate docs
* Remove link
* Regenerate docs with new code
* Some small docstrings
* Regenerate docs with new .. warning code
* More docstrings into the `set` command
* Bullet lists need blank lines.
* Regenerate docs
* Regenerate docs (fix bullet lists)
* set activity statuses docstrings
* Docstrings up to helpset pagecharlimit
* Regenerate docs
* Maxpages and delete delay docstrings
* spagetthi ctrl+v
* tagline and contact
* A little more contact
* Up to allowlist
* Up to command defaultdisablecog
* Regenerate docs
* Redo custominfo to not be terrible
* Up to default enabled cog
* More docs
* Up to command disabledmsg
* Disabled message stuff was missed
* Finish the rest of the docstrings
* Regenerate docs
* Longer description of the cog
* Regenerate Docs
* Fix some of the suggestions
* Apply additional suggests and some small rewording.
* Regenerate docs.
* Apply suggestions and make additional fixes
* Regenerate docs
* Clarifies it's only loaded.
* Regenerate docs.
* New formatting, more examples, some fixes
* Regenerate docs
* Adds consistant use of dashes to arguments
* More consistant punctuation
* Regenerate docs
* Add labeler detection
* Fix example and use clearing language for helpset verifyexists docstring
* Regenerate docs
* Add leave example and arguments
* Regenerate docs
* Regenerate docs
* Make embedset more readable
(933aefd3ee was the sphinx compatible update)
* Regenerate docs
* Black formatting
* Regenerate docs
* Adds docstring examples and arguments for multiple `embedset` subcommands
* Regenerate docs
* Use partial messages in Streams cog to avoid leakage
* Stop trying to save bot object to Config...
* Put guild id as part of message data
* Fix AttributeError
* Pass bot object to stream classes in commands
* ugh
* Another place we use this class in
* more...
* Bump discord.py, but to the git version for now
* Import GuildConverter from d.py and deprecate our implementation
* Import PartialMessageConverter in our commands extension
* Use newly added `Cog.has_error_handler()` rather than private method
* Update snowflake regex to use 20 as max length
See Rapptz/discord.py#6501
* Use new supported way for custom cooldown buckets
* Include group args in command signature
* Update code to use `Client.close()` over `Client.logout()`
* Add StageChannelConverter and StoreChannelConverter
* Fix AttributeError in licenseinfo
* Prep for 0.7.2
* So What di i do here? I done Magic, magic only found in the tales of old.
* turns out formatting is something important
* fixes
* improved Error handling when Global API is enabled
* further improve resuming logic
* more of dat dark voodoo blood magic
* major tweaks to auto restore when auto play is enabled 👀
* fix duplicated "Auto play stated." message + Auto play restart :feelsgoodman:
* missed these
* fix the new duplicated fucking message bitch.
* Let discord handle player reconnects
* eh
* `Requires force install`, utilize new Exponential Backoff object on player and safer reconnect logic, emulating d.py and WL.
* hmmmmm gotta monitor
* mother fucking brackets
* Why didnt i consider this the first time?????????????
* new error code to handle?
* soooooooooooooooo these are import so why arent we ensuring they are set.
* improved logging
* improved logging
* aaaaaaaaaaaaaaa
* We need our own error and special handling to not conflict with dpy
* (Last Known Bug) Fix the infinite loop of 4006 that sometimes could happen as an edge case after a successful resume.
* This will require a force reinstall to install `RLL 0.8.0`, this properly fixes the bug mentioned on the previous commit.
* address "Localtrack names/paths need to be escaped." comment
* address Fixators crash mentioned in #AT
* style
* fix preda's crash mentioned in PR
* add a thing here add a thing there add a thing everywhere
* style
* fixes here, fixes there, and backbone for curated playlist.
* bypass aiohttp and githubs and cloudflare and yo mammas cache
* I propose the new style is no style.
* allow curated playlist to be updated it `[p]playlist update` and show the diff
* fix `[p]summon` not resuming playback until next track.
* Hopefully handle predas rate limits.
* what else did i break now
* Update Lavalink.jar build
* lets try this
* reset the queue
* Bring Edge commits over fix a bunch of shiz again
* Bring Edge commits over fix a bunch of shiz again
* Handle 4014 OPs, Change `skip_votes` key to be an int rather than guild object
* aaaaaaaaaaaaaaa im dumb
* ...
* Simplify some shiz + use a set instead of a list for votes.
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
* Better user feedback during slow backend migrations
This uses a tqdm progress bar to keep the user updated on the progress of the migrations.
I didn't realise this was necessary until I did a migration from Mongo to Postgres on CASE, and it took quite a long time to complete, I started to doubt that it was actually making progress.
Also includes a utility to help with tqdm in slow asynchronous for-loops.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Make `async_tqdm` support async-for loops
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Reformat
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Remove unused method
* Remove quotes for the return type annotation
* Few style improvements
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Add per-command embed settings
* Update `[p]embedset showsettings`
* Use command.qualified_name in `[p]embedset` commands
* Fix the call to subcommand and simplify it
* And I oversimplified this
* Update end user messages to use 'guild' rather than 'server'
* meh
* This should be a named field
* Add check for Embed Links perm to confuse users a bit less
* Wrap this string in _()
* Let's use a different exception then...
* Let's clear the setting when we can in whole `[p]embedset`
* Add the order of checking to help of `[p]embedset`
* Add note about full evaluation order to subcommands
* [Cleanup] Handle missing message_id and reply
* Fix a new situation where we could end up with unwanted `None`
* I suck at this (style fix)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Mutes] Add a note about conversion to schema_version 1
* Only start the conversion if all_channels
* Actually do what the previous commit said
* okay this time is the right time
* Update mutes.py
* Move conversion to its own method
* Update mutes.py
* ctx.invoke -> bot.invoke
ctx.message.guild -> ctx.guild
* remove the invoke stuff
* remove invoke stuff
* use id attrib instead of entire guild
* change type hinting too
* change second typehint
* [Mod] No longer loop through all guilds on check_tempban_expirations.
* Address Jack's review.
* I don't think this comment actually served any purpose
* Split this into more methods
* Small optimization for cases where the guild tempbans weren't updated
* Blackify
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Use sphinx-prompt extension
* Update PM2 guide
* Use an actual proper way to run Red with PM2
* Fix pm2 docs
Co-authored-by: Kowlin <Kowlin@users.noreply.github.com>
* add ✨ color ✨
* add color on line 315, fix line 340
* Black style
* fix color on line 341
* thanks jojo >_>
* dont need i18n here
* Black style again :D
* start
* Get user inside blocklist/allowlist lists
* Changes to cover unknown or deleted users
* Use square brackets for clarity
* Implement the above commit for all four versions
* Much improved UI, removed `[]` to fit new format
* updates to support roles in local version
* add /role to unknown str
* Improve variable names
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Mutes] Add guild ID to mutes data.
* Actually make the whole thing works.
* config version as integer, and init task no longer in setup
* oops
* Fix cog_disabled_in_guild check.
* Add Trusty's requested changes.
* [Docs] Use explicit name of the python packages for openSUSE Tumbleweed
* Add warning for Arch Linux instructions
Co-authored-by: Kowlin <Kowlin@users.noreply.github.com>
* Remove the unneeded pytest options from pyproject.toml
* Clean up setup.py from old readthedocs.org workaround
* Removes unused folder
* Simplify list of excluded files in black's configuration
* Fix returned exit codes in `make.ps1`
* Add Sublime's project files to `.gitignore`
* Update the link to Black in README and contributing guidelines
* [Docs] Images Cog Guide
* [Docs] Image Cog Guide
* Fixes for directory inside the index
* The cog is cakked IMAGE not IMAGES
* Potential fixes for failing checks
* Grammar fixes
* Some formatting updates
* Fix merge conflicts from 3.4.7
* Re-format for requested changes
* Add missing command to `make.bat`'s help
* Add `activateenv` and `deactivateenv` commands to `make.bat`
* Add help to `Makefile`
* Add `make.ps1` cmdlet
* Make workflow name use TitleCase
* Indicate in the PR description that it's a multi-part workflow
* Auto-put PRs from Prepare Release workflow in the proper milestone
* Rename "Publish the release" workflow to "Publish Release"
* Auto-put PR from Publish Release workflow in the proper milestone
* Clarify that the owner is a team.
* This should do.
* Style check... for a comma, in your dreams Tox...
* Annndddd for the insane people who don't use embeds
* [Mutes] Wrong error message when muting fails
* This applies to both mute and unmuting of members.
Co-authored-by: Kowlin <Kowlin@users.noreply.github.com>
* Alternative way of doing Crowdin...
* Limit the upload translations workflow to V3/develop
* Make the workflow close and reopen the PR automatically while I'm at it
* Add a workflow for preparing PRs for release
* Make the crowdin env vars local to the step requiring them
* Move dev bump to Publish Release workflow
* Add default settings for name tracking
* Add configuration command for name tracking
* Check the track names settings before tracking
* *grumble*
* Fix permissions levels
* Update settings.py
* Use clean_prefix in inline, and don't use f-strings in `_()`
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Merge selfrole and remove into one command
replacement pr
* docs
add to the docs
* Update admin.py
remove register name
* Update admin.rst
* Fixes
* Fix the duplicated command decorators
* Minimize the diff
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* add a time converter, as well as not allowing negative integers
* timedeltaconverter
* styling and unused imports
* update docstrings
* update param name to "duration" instead of seconds
* make timedelta default_unit seconds
* better descriptions & docstrings
* docs for updated paydaytime & slottime
* Fix style
* Few minor fixes
* Cast `total_seconds()` return type to `int`
* Fix one of my own issues
* Make the duration argument catch-rest for convenience
* One more fix for the docs
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Current/up to date answers regarding some hero's health and abilities
Added more options for "What does Tracer say when using her ultimate?"
Competitive point changes for Season 6+ on August 29, 2017 patch
Mercy's major rework on September 19, 2017 patch
Hanzo's major rework on May 3, 2018 patch
Symmetra's major rework on June 6, 2018 patch
"Offense" and "Defense" categories have been merged into "Damage" on June 26, 2018 patch
McCree's roll cooldown decreased on October 9, 2018 patch
Torbjorn's health changed on March 19, 2019 patch
Sombra's translocator cooldown increased on October 15, 2019 patch
Orisa's fortify cooldown decreased on December 10, 2019 patch
Ana's sleep dart duration decreased on April 29, 2020 patch
Orisa's health changed on September 24, 2020 patch
McCree and Widowmaker's health changed on October 29, 2020 patch
Reinhardt's health changed on December 10, 2020 patch
Removed "What was the name of the Lunar New Year themed event in Overwatch?:" since this changes every year.
* [Utils] Additional chat formatting functions
* [Utils] Updated docstrings to unify with other docstrings
* [Utils] Spoiler feature for chat_formatting
* Fixes for black style
Co-authored-by: kreusada <67752638+kreus7@users.noreply.github.com>
* Use Rich's default console object instead of making one
* Bump Rich to version 9.8.2
* Disable indent guides in tracebacks
* Skip empty lines between stack levels in traceback rendering
* Use full width of the terminal when printing tracebacks
* Disabling syntax highlighting on the log messages
* Make logger name bold
* Make logger level bold
* Make URLs in console bold
* Change `bright_blue` and `blue` colors in syntax theme (NEEDS CHANGING)
* Show only one line per stack level in tracebacks
* Shuffle things in `redbot.logging` a bit
* Change logging handler while redirecting stdout in Dev cog
* Revert last two commits...
This reverts commit cf563bd06a6ae398da12713ceef3db9cc903d902.
This reverts commit 6dddf300726ddf89b8924441eed59b67b58faca0.
* Change Rich console to always print to sys.stdout (therefore ignoring stdout redirects)
* Pass cli_flags to init_logging()
* Add a flag to set the amount of extra lines in rich tracebacks
* First take on the syntax theme colors
* Use the Windows trick
* ARE YOU SERIOUS!?
* Remove dead code
* Use Monokai when Terminal application supports truecolor
* Syntax theme update
* Change logger name color
* This is not needed
* Adjust logging level colors
* Add a flag for showing local variables in Rich tracebacks
* change imports a bit
* Remove usage of blue color fully
* Stop highlighting in Red-DiscordBot splash
* Fix unreadable paths in tracebacks
* Make CRITICAL logging level more readable
* Make time in logs more readable
* Fix the first row being bolded in tables
* Update rich to 9.9.0
* Oh boy! more issue templates!
* Add some descriptions to command_bug.yml
* Update enhancements.yml to refer to "components" since one might want to request API enhancement
* Update feature_request.yml
* Update command_bug.yml
* typo
* I don't think this would cause any issue but I would rather not need another PR
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Revert "Cut the list in half (#4781)"
This reverts commit 9737c1b5eb.
* Story likes to repeat itself
Yet again, Kowlin makes a small mistake that ends up with us making shitton of commits
* Lets try this new fancy thing
* Rename command_bug.md to command_bug.yml
* Update command_bug.yml
* Cog name before command name, thank you
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Bump d.py, aiohttp, Red-Lavalink
* Remove deprecation warnings that are no longer relevant
* Max concurrency things in `Command.prepare()`
* Two random things that date back to times older than d.py 1.1...
* [Core] Fix commands using plural with the same user
Some plural checking have also been added to the local blocklist/allowlist and the wording has been revised.
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
* BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACK
* the
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Docs: added brackets escape note for Linux/macOS installation
* Corrected punctuation for bracket escaping note
* Use quotes - those work on cmd, bash, zsh, and probably other shells
* Minimize the diff
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* better explain on how to use.
* i.... dont know why i removed that dot.
* don't think that was meant to
* Update kickban.py
* smh
* style????
* hm?
* last try to fix style......
i dont even know how to do this :/
* failing style is fun, trynna learn.
* .....
* not the best way but lets try?
* yep, didnt work dropping softban.
* Update kickban.py
* grammar fix
* Add non-generic message when loading a cog with command name that is already registered
* Use regex instead and add i18n support
* This requires d.py 1.4
* handle manual mutes/unmutes
Doing this in the Web-Editor is painful. Let's switch to VSC.
* embed version
* non embed
* config stuff
* testing done
* wow black
* Few things before I start local testing
* Fix new lines
* Make messages not depend on modlog
* Yay voicemutes
* black+import
* what is your ducking problem vscode
* adress review
* this is driving me mad
* Check the config in `_send_dm_notification` to avoid code repetition
* Fix incorrect type hints
* Remove no longer needed line changes
* Remove unused function
* Update the type hints from commit 946299 in the MixinMeta too
* Fixed wrong variable being passed to the method and ensure DMs aren't sent when we couldn't get the member object
* They call me dumb for a reason
* Stop overriding variable with duration + various formatting tweaks
* :(
* We need to differ between voice and text in two places, interesting...
* Show info about no reason provided in embed
* Apparently, the `reason` can also be an empty string :|
* Update redbot/cogs/mutes/mutes.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Make the dev env flexible
* Fix rst format in docstrings
* Reproduce current behaviour for _ in repl
* Prevent adding existing or reserved names
* Fix typo with environment
* Docstring changes
Apply suggestions from code review
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Get env before loop
* Hey I'm not the only one doing typos
* Keep new messages in env
* Clear exception of stack frames
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Include the `channel` variable in the reserved names
* And we're also missing `discord` :)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update help.py
* Create 3040.enhance.rst
* remove towncrier entry
* Make it i18n friendly.
* That was uneeded to change this actually.
* ...
* ..
* .
* Add a setting for aliases.
* DOTS
* Update redbot/core/core_commands.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Address requested changes maybe
* New format + changes requested.
* okay we'll get there someday
* honk
* aaaaaaaaaaaaaaa
* Black
* Fix missing humanize_timedelta import.
* style
* Two things from my very old pending review, see commit desc
```py
valid_alias_list = [
af
for a in aliases
if (af := f"{a}")
and len(af) < 500
and ((a_counter + len(af)) < 500)
and (a_counter := a_counter + len(af))
]
```
^ This can be simplified:
```suggestion
valid_alias_list = [
alias
for alias in aliases
if (a_counter := a_counter + len(alias)) < 500
]
```
Although I think it would be somewhat clearer to use a `for` loop rather than a list comprehension (+ we can just `break` when there's not gonna be another alias that could fit in the list since it's sorted):
```suggestion
valid_alias_list = []
for alias in aliases:
if (a_counter := a_counter + len(alias)) < 500:
valid_alias_list.append(alias)
else:
break
```
* style *again*
* use qualified name of the parent command
* meh
* another meh
* Revert the last commit...
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: Drapersniper <27962761+drapersniper@users.noreply.github.com>
* [Streams] Remove the blank suppression of errors
* Okay, maybe do gracefully handle it a little bit...
* Update redbot/cogs/streams/streams.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* update image
* MAXIMISE THE QUALITY
* add storage driver as JSON (#3935)
* fk
* REEEE
how am i faling to use git so much
* rich!
* make image width 696 pixels so it doesn't scale
* Pop stash
* add rich to setup
* Added forceful enabling of rich logging
* revert some unintended pushed
* Fix possible unbound var
Fix possible 0 members w/out members intent
* One day I won't forget to do style passes
* So this is a thing apperently...
* Bump rich to 9.5.1
* Lock secondary deps
* Different stuff, see the full commit description for more info
- Change few things from print to log.info
- put the log handlers on the root logger instead of individual loggers
- capture warnings to a logger
* Modify log handler to show logger name
* Add a Triboolian to force disable rich
* Style checks
* shortened time, added logger name... again.
* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
* Style & linking
* Be or not to be? Whatever man, it's 4:30 in the morning, goto sleep >.<
* Reintroduce outdated message.
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update CodeQL to resolve warnings.
* Make CodeQL analyze our Python dependencies
* `fetch-depth` should be no longer needed
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Mod] Check for reason length & remove unused vars
This PR also remove unused variable.
* Blame me
* Apply Kowlin order.
Text will get truncate in audit logs in case we're going over 512 characters.
* This is already handled by ban_user()
* Use `get_audit_reason()` in `[p]tempban`
* Add a new kwarg to `get_audit_reason()` instead
* Include `[p]voiceban` and `[p]voiceunban`
* Include Mutes cog
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Make command usage in help for required arguments consistent
* Bob 3
* Bob 1
* Docstring updates
* Address Flame's review
* Update cog guides in docs
* Properly handle slotmin/slotmax rules
* Use a variable to reduce config calls. No reason to process differently half way through a command anyways.
* Update redbot/cogs/economy/economy.py
* Add positive int converter for slotmin/slotmax
* Option to allow bad mins and maxes.
* Update economy.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Resolve bug with [p]streamalert youtube
The command didn't handle channels that were not provided as IDs
* Provide a different message if the scheduled date has passed
* Ignore streams scheduled for more than an hour
* General geography category :D
* Fixes
* Fixed typo
* Added some more questions
* Made some changes, and accuracy fixes, corrections
* *state, not actual river
* Started docstrings
* Add to index
* First generated guide
* Indented examples, some more docstrings
* Aliases are now `in ticks and fully qualified`
* More economy docstrings
* Started docstrings
* Add to index
* First generated guide
* Indented examples, some more docstrings
* Aliases are now `in ticks and fully qualified`
* More economy docstrings
* Regenerate docs
* Much more docstrings and regenerate docs
* Better explaination of `bank set` and grammar changes
* Regenerate docs
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Catch scheduled livestreams
* Announce scheduled streams and starts
* Add setting, fix bugs
* Add new dependency
* Black reformat
* Fix the duplicated messages bug
* Do not send messages for schedules
* Format embed
* Getting started guide
* Remove DigitalOcean referral link
* Fix typos and mispells, thanks to @Flame442
* Remove cogs.red hyperlink until it is finished
* Add towncrier entry
* Add prolog.txt
This is not necessary for this PR but all of the other cog guides rely on this file.
The cog guides are individual branches based on this one, which is why I'm adding this file right now.
* Add changelog entry
* Add CogManagerUI guide
* Remove towncrier
* CogManagerUI update
* Apply suggestions from code review
Co-authored-by: Vexed <sebdazeley@gmail.com>
* Apply suggestions from code review
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* Add section for downloader
Co-authored-by: Toby Harradine <Tobotimus@users.noreply.github.com>
Co-authored-by: Vexed <sebdazeley@gmail.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* Add to index, url matching links, and add link to customcommands.rst
* Some docstring rewriting
* Adding arguments and more details.
* Handle aliases, rest of arguments and examples.
* Black formatting
* Switch to alphabetical
* Apparently forgot to regenerate this.
* Update redbot/cogs/customcom/customcom.py
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* Update docs/cog_guides/customcommands.rst
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* [Streams] Remove the `__del__`
* Add a teardown function to call Streams.cog_unload()
* Apparently I forgot cog_unload is called automatically (Thanks @rapptz
lol)
Co-authored-by: palmtree5 <3577255+palmtree5@users.noreply.github.com>
* Autogenerated doc and index spot
* Update command descriptions
* Use qualified name in titles and new command descriptions
* Add arguments to descriptions and cleanup self examples.
* Examples are bulleted and indented.
* Handle aliases (none), examples are bulleted and indented
* Switch to alphabetical
* Fix X typo
* add 2 get_or_fetch methods
* style
* local tox didnt scream and blow up
* ewh extra space is ugly
* Jack meant this
* I think jack wanted this.
* Nope Jack desired this
* aaaaaaaaaaaaa Jack just say you are reviewing it come on
* add get_or_fetch_member
* Update redbot/core/bot.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Wubba Lubba Dub Dub
* woa!! this one was really HARD! (sweats)
* fiiiiire
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* New stuff from RLL 0.7.0
* discard here
* formatting
* do this properly
* make it more unique
* bump RLL
* nuke `[p]llset restport`, only `[p]llset wsport` matters
* Update setup.cfg
* properly deprecate Rest port and Ensure Nodes are properly closed upon running LLSET commands
* restore player on a attempt reconnect
* restore player as a task
* ensure we send the signal only if not playing.
* register events a little earlier
* hmmm
* ffs
* update application.yml
* fix permissions edge case
* Remove use of asyncio.gather
* black
* typo
* lol 1 character difference
* Let's try this instead
* another typo, it's too early to read
* Add max concurrency on makerole command and prevent multiple roles being added created
* Add Hockey Trivia
* Add more questions and address review
* cleanup authors for now
* Add missing authors
* address vexed's review
* new trivia
* Add New Jersey Devils Trivia
* Add Vancouver Canucks Trivia
* Address Flame's grammar review
do commit messages require proper grammar?
* revert the revert the revert git is hard...
* and remove old mutes
* make voicemutes less yelly
* fix error when no args present in mute commands
* update docstrings
* address review
* black
* oops
* fix voicemutes
* remove mutes.py file
* Remove _voice_perm_check from mod since it's now in mutes cog
* remove naive datetimes
prevent muting the bot
prevent muting yourself
fix error message when lots of channels are present
* change alias for channelunmute
Be more verbose for creating default mute role
* add `[p]activemutes` to show current mutes in the server and time remaining on the mutes
* improve resolution of unmute time
* black
* Show indefinite mutes in activemutes and only show the current servers mutes in activemutes
* replace message.created_at with timezone aware timezone
* remove "server" from activemutes to clean up look since channelmutes will show channel
* better cache management, add tracking for manual muted role removal in the cache and modlog cases
* Fix keyerror in mutes command when unsuccessful mutes
* add typing indicator and improve config settings
* flake8 issue
* add one time message when attempting to mute without a role set, consume rate limits across channels for overwrite mutes
* Don't clear the whole guilds settings when a mute is finished. Optimize server mutes to better handle migration to API method later. Fix typehints.
* Utilize usage to make converter make more sense
* remove decorator permission checks and fix doc strings
* handle role changes better
* More sanely handle channel mutes return and improve failed mutes dialogue. Re-enable task cleaner. Reduce wait time to improve resolution of mute time.
* Handle re-mute on leave properly
* fix unbound error in overwrites mute
* revert the revert the revert git is hard...
* and remove old mutes
* make voicemutes less yelly
* fix error when no args present in mute commands
* update docstrings
* address review
* black
* oops
* fix voicemutes
* Remove _voice_perm_check from mod since it's now in mutes cog
* remove naive datetimes
prevent muting the bot
prevent muting yourself
fix error message when lots of channels are present
* change alias for channelunmute
Be more verbose for creating default mute role
* add `[p]activemutes` to show current mutes in the server and time remaining on the mutes
* improve resolution of unmute time
* black
* Show indefinite mutes in activemutes and only show the current servers mutes in activemutes
* replace message.created_at with timezone aware timezone
* remove "server" from activemutes to clean up look since channelmutes will show channel
* better cache management, add tracking for manual muted role removal in the cache and modlog cases
* Fix keyerror in mutes command when unsuccessful mutes
* add typing indicator and improve config settings
* flake8 issue
* add one time message when attempting to mute without a role set, consume rate limits across channels for overwrite mutes
* Don't clear the whole guilds settings when a mute is finished. Optimize server mutes to better handle migration to API method later. Fix typehints.
* Utilize usage to make converter make more sense
* remove decorator permission checks and fix doc strings
* handle role changes better
* More sanely handle channel mutes return and improve failed mutes dialogue. Re-enable task cleaner. Reduce wait time to improve resolution of mute time.
* Handle re-mute on leave properly
* fix unbound error in overwrites mute
* remove mutes.pt
* remove reliance on mods is_allowed_by_hierarchy since we don't have a setting to control that anyways inside this.
* black
* fix hierarchy check
* wtf
* Cache mute roles for large bots
* fix lint
* fix this error
* Address review 1
* lint
* fix string i18n issue
* remove unused typing.Coroutine import and fix i18n again
* missed this docstring
* Put voiceban and voiceunban back in mod where it's more appropriate
* Address review 2 electric boogaloo
* Make voicemutes use same methods as channel mute
* black
* handle humanize_list doesn't accept generators
* update voicemutes docstrings
* make voiceperm check consistent with rest of error handling
* bleh
* fix modlog case spam when overrides are in place
* <a:pandaexplode:639975629793787922>
* bleck
* use total_seconds() instead of a dict, sorry everyone already using this lmao
* <:excited:474074780887285776> This should be everything
* black
* fix the things
* bleh
* more cleanup
* lmao hang on
* fix voice mutes thingy
* Title Case Permissions
* oh I see
* I'm running out of funny one-liners for commit messages
* oof
* ugh
* let's try this
* voicemutes manage_permissions
* Cleanup mutes if they expire when member is not present
* black
* linters go brr
Co-authored-by: Drapersniper <27962761+drapersniper@users.noreply.github.com>
* handles #4491
* add typing indicators to audio playlists commands like discussed with aika.
* recheck perms upon change of token to avoid needing a reload.
* Ensure the player lock is always released... on rewrite to this as a callback to the task.
* ffs
* resolves#4495
* missed one
* aaaaaaaaa
* fix https://canary.discord.com/channels/133049272517001216/387398816317440000/766711707921678396
* some tweaks
* Clear errors to users around YouTube Quota
* Fix cleanup self not working in private.
This fix#4408.
* Apply Jack's logic.
* Obviously Black fault.
AGAIN!
* Apply Jack's trick.
* This is not a converter so let's move this to a different file
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* handle verified bots, and more specific errors
* stuff
* fuck, I forgot
* Improve errors by splitting into few different messages
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* ban revamp
* black & converters fix
* discord.object
* Update redbot/cogs/admin/admin.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* remove discord.user converter
* black
* .
* Update redbot/cogs/mod/kickban.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/cogs/mod/kickban.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/cogs/mod/kickban.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/cogs/mod/kickban.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* incomplete
* massban support
* black
* Use 2-tuple to separate result and the message in `ban_user()`
This also fixes the issue with `True` being equal to `1` which caused a problem with previously returned types
* Whoops...
* trailing whitespace...
* I missed this one
* Update kickban.py
* Update kickban.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* First commit - Bring everything from dev cog minus NSFW support
* Add a toggle for auto deafen
* Add a one off Send to Owners
* aaaaaaa
* Update this to ensure `get_perms` is not called if the API is disabled
* Apply suggestions from code review
Co-authored-by: Vuks <51289041+Vuks69@users.noreply.github.com>
* silence any errors here (in case API is down so it doesnt affect audio)
* update the message to tell the mto join the Official Red server.
* remove useless sutff, and change dj check order to ensure bot doesnt join VC for non DJ's
* ffs
* Update redbot/cogs/audio/core/tasks/startup.py
Co-authored-by: Twentysix <Twentysix26@users.noreply.github.com>
* Aikas Review
* Add #3995 in here
* update
* *sigh*
* lock behind owner
* to help with debugging
* Revert "to help with debugging"
This reverts commit 8cbf17be
* resolve last review
Co-authored-by: Vuks <51289041+Vuks69@users.noreply.github.com>
Co-authored-by: Twentysix <Twentysix26@users.noreply.github.com>
* [Core] Pagify cog unload output properly
When you unload a large amount of cogs (close to message limit on characters), the character count is easily pushed over 2k characters on the command response with the cog names each being wrapped in 2x backticks. The current implementation breaks in the middle of cog names or wherever else it feels like it. 1600 might have been a safe value for splitting but at 1500 I don't see how multiple short cog names could make it break at least.
* Address review
* add an `[all]` extras_requires
* can go here
* add a [dev] which includes [all] + development extras (style, test, docs)
* special case all and dev in update message
* Optimize by changing the place of the check for "special" extras
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* add get_shared_api_keys
* add set listapi command
* fix typo
* refactor `[p]set listapi` into `[p]set api list`
* remove unnecessary check
* fix decorators
* corrected wording
* add remove_shared_api_services
* add `set api remove`
* further typo sniping
* bugsniping
* minor typo
* aaaaaaaaa
* Apply suggestions from code review
Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com>
* update api docstring to reflect new subcommands
* Apply suggestions from code review
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* update framework_apikeys.rst with new methods
* Update redbot/core/bot.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* rewrite get_shared_api_services into a special case of
get_shared_api_tokens
* rewrite api_list to include keys and tokens in response
* don't show secrets
* better api_remove response
* black
* remove nonexistent method
* remove unnecessary import
* fix wording
* Improve docstrings and type hints
- added overloads to help out developers a bit more
* this wasn't necessary, but development tools work better
with this information
- fixed type hint to use Union as now
its return type depends on whether `service_name` is passed
- updated docstrings to contain information about the added behavior
* Use `humanize_list()` rather than `str.join()`
This is done for consistency within Red
and it makes the list have the last element joined
with `and` (or its equivalent in chosen locale)
* Use `.format()` after translation is applied
If `.format()` is used before `_()`, the search for translation is done
with the string that already has the dynamic text added,
which results in no matches.
* Add plural support
* Improve error message
Updated message to be more specific
(used phrases: "None of the services" and "had any keys set")
and a bit more nice to the user (judging word "anyway" removed)
* Improve readability of `[p]set api list`
It's a lot clearer when the sublists are indented,
especially on mobile where code blocks aren't colored at all.
New look:
https://user-images.githubusercontent.com/6032823/94614944-3bbd7c80-02a7-11eb-89e4-64bdf06c650b.png
Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Account for duplicated mentions
* Spelling fix + Wording change
* Requested changes *hopefully*
* forgot to formattttttttttttttttttttttt
* Improve the consistency with existing commands in inconsistent `[p]modset` group
* What was the point of defining `guild` if you didn't end up using it, Jack!?
* I hate you, web editor ಠ益ಠ
* You could have just copy-pasted this Jack, seriously...
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Modlog] Fix typehints for create_case
* Simplify Logic after review
* discord.abc.User to catch both member and user objects and other potential discord.Object's being sent
* fix typehints and Case.edit()
* fix docstrings in create_case
* Add note about last_known_username
* fix the weird thing that scared me
* URL encode user input in the general cog
Adds URL encoding to `[p]lmgtfy` via `urllib2.parse.quote_plus()`
and to `[p]urban` via `aiohttp.ClientSession.get`'s `params` argument
* Black reformatting
* Update CODEOWNERS
* Prepend with backslash, add downloader fixtures
* Update CODEOWNERS
* Schemas are closely related to Downloader...
...so I should know about the changes to those.
* Would be nice to add my name (thanks Draper)
* JSON schemas for cogs and repos
* newline at the end
* capitalization
* Remove *.json from .gitignore
* Remove empty line
* resolve requested changes
* resolve requested changes, again
Co-authored-by: Fixator10 <fixator10@users.noreply.github.com>
* [ctx] Suppress all mentions in maybe_send_embed
Whether this method should mention shouldn't be tied to an unrelated setting.
* black
* Update changelog_3_4_0.rst
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Getting started guide
* Remove DigitalOcean referral link
* Fix typos and mispells, thanks to @Flame442
* Remove cogs.red hyperlink until it is finished
* Add towncrier entry
* Add prolog.txt
This is not necessary for this PR but all of the other cog guides rely on this file.
The cog guides are individual branches based on this one, which is why I'm adding this file right now.
* Add changelog entry
* Add alias cog guide
* QA changes
* More QA changes
considering -> assuming
red is a girl, not non-binary
* Fix some mistakes
* Fix references
* More and better examples, with arguments
* A first quick fix for review
* An attempt to fix the review by @Flame442
* Delete 1734.docs.3.rst
Co-authored-by: Toby Harradine <Tobotimus@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Only send a message telling the user the file will be send via DM if the original message didn't come from a DM
* Remove unused import for AsyncIter
* Changed channel instance comparison to discord.DMChannel
Co-authored-by: douglas-cpp <douglasc.dev@gmail.com>
* [streams]allowed_mentions on stream announcement
Allows role mentions for discord.py 1.4+
# Type
[x] Bugfix
[ ] Enhancement
[ ] New feature
Description of the changes
Referencing line 747. Gives permissions to mention role on stream announcement.
* Update streams.py
* Add `mention_everyone` defaults
Lines for reference:
- [751-753]:
```py
if can_mention_everyone:
await self.save_streams()
return # if bot can mention everyone already, let's stop here```
- [722-774]:
```py
if can_mention_everyone:
mentions.append(role.mention)
return # if bot can mention everyone already, let's stop here (part two)```
Hopefully, this is what you had in mind? Humbly admit I may not have a business in biting this piece but looking forward to feedback on the best methodology for the wanted outcome.
Thanks!
* *sweats*
* imagine variable naming
Should complete all passes.
* misplaced unindent on return
* Update redbot/cogs/streams/streams.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/cogs/streams/streams.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update redbot/cogs/streams/streams.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* You're a beast jack
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* this would cover all channels in guild (think)
* give this a reeeeee
* Update streams.py
* adds channel argument
https://github.com/Cog-Creators/Red-DiscordBot/pull/4182#pullrequestreview-468012281
* image style checking, self
* imagine
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Getting started guide
* Remove DigitalOcean referral link
* Fix typos and mispells, thanks to @Flame442
* Remove cogs.red hyperlink until it is finished
* Add towncrier entry
* Admin guide
* Add prolog.txt
* Use substitutions for arguments
* Some grammar fixes
* Add prolog.txt
This is not necessary for this PR but all of the other cog guides rely on this file.
The cog guides are individual branches based on this one, which is why I'm adding this file right now.
* Add changelog entry
* Add serverlock
* Apply suggestions from code review
Co-Authored-By: Vexed <51716387+Vexed01@users.noreply.github.com>
* Suggestions from vexed
* Update to new admin commands
* Delete 1734.docs.2.rst
* Apply the changes requested by reviewers
Plus add a small tuto on how to make a bot private
* Fix arguments inconsistency
* Remove ctx from argments
* Update docs/cog_guides/admin.rst
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* Quotes aaaaaa
Co-authored-by: Toby Harradine <Tobotimus@users.noreply.github.com>
Co-authored-by: Vexed <51716387+Vexed01@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* Use aware objects instead of naive ones
* Use aware objects when storing and reading UTC timestamps
* Remove unneeded parentheses
* Fixed naive and aware objects unable to be compared here
* Address feedback
* Fix the newly added `modlog.create_case()` calls
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Mention spam addition
Adjust code to allow for warning and kicking in mention spam automoderation.
Added new subcommand group, mentionspam. Which will display settings of warn, kick, ban, mentionspam when called.
Adjust config to account for this.
* Condense config + removal of comments
Condense config into one variable to make one call.
Removed unneeded comments I left.
* Add warning casetype
Copied over from warnings cog
* Update strings + change function names
* Changed prints and logs. Account for showsettings, removed blocking.
If this style breaks, blame draper...
* Black format...still blaming draper.
* Adding period at end of description
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
* config migration
* Fix TypeError, add default information.
* Max_mention wording change
Thanks to @zephyrkul for suggesting the word changes.
* Require argument for max_mention
* Fix warn modlog case creation
* Fix casetype conflict
maaaaaaaaaagicccccccccc timeeeeeeeeeeeeeeeeeeeeeeeee
Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
In line 60 I removed the word also as it implies that the bot can is already being hosted by someone but you can host it too. I also removed the word installation from line 65 and changed it to installing as that makes more sense or you would have to change the word updating.
* Getting started guide
* Remove DigitalOcean referral link
* Fix typos and mispells, thanks to @Flame442
* Remove cogs.red hyperlink until it is finished
* Add towncrier entry
* Add prolog.txt
This is not necessary for this PR but all of the other cog guides rely on this file.
The cog guides are individual branches based on this one, which is why I'm adding this file right now.
* Add Bank cog guide
* Add changelog entry
* Bank guide
* Nope get out from here potato
* Remove reference to the payday command
* reword + drop a character
Co-authored-by: Toby Harradine <Tobotimus@users.noreply.github.com>
Co-authored-by: palmtree5 <3577255+palmtree5@users.noreply.github.com>
* [Streams] Change hitbox to smashcast.
as hitbox is now smashcast.
* Add files via upload
* reee
* :thonk:
* oof
* Add missing new lines at end of file
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now
`[p]bankset maxbal` can be used to set the maximum bank balance
Signed-off-by: Guy <guyreis96@gmail.com>
* Migrates ``humanize_list`` over to babel, and uses the existing `get_babel_locale` function to get a valid locale based on bot locale.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Migrates ``humanize_list`` over to babel, and uses the existing `get_babel_locale` function to get a valid locale based on bot locale.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fixes docs
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Add reference to Babel's `format_list`
* Add Babel to intersphinx
* remove towncrier entry
* Migrates ``humanize_list`` over to babel, and uses the existing `get_babel_locale` function to get a valid locale based on bot locale.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fixes docs
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Add reference to Babel's `format_list`
* Fix order, make the parameters keyword-only
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
[Core] Data Deletion And Disclosure APIs
- Adds a Data Deletion API
- Deletion comes in a few forms based on who is requesting
- Deletion must be handled by 3rd party
- Adds a Data Collection Disclosure Command
- Provides a dynamically generated statement from 3rd party
extensions
- Modifies the always available commands to be cog compatible
- Also prevents them from being unloaded accidentally
* [RPC] Fix for non-rpc users
- RPC probably needs rewriting.
- Also, I noticed some extremely sharp edges
and a potential crash point (unrelated to the fixed issue)
on windows that the side effects from have been mitigated here
partially.
* sysexit on initialization failure
* Prevent LicenseInfo command from being a source of user command spam
* add dep-warn explaining whats needed for this
* name issues
* Tests...
* An empty commit unbroke some of it, but still style issues
* Bump deps
* use html5 writer
* appdirs<1.4.4 compatibility fix
* more bumping
* Revert "appdirs<1.4.4 compatibility fix" (Jack did a dumb)
This reverts commit cc5299d987.
* And another ~~one~~ bump!
I'm gonna blame Neuro for being nice and contributing to aiohttp-json-rpc.
* just one more and pls merge this Kowlin
* Kowlin, pls merge
* create cog disbale base
* Because defaults...
* lol
* announcer needs to respect this
* defaultdict mishap
* Allow None as guild
- Mostly for interop with with ctx.guild
* a whitespace issue
* Apparently, I broke this too
* Apply suggestions from code review
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* This can probably be more optimized later, but since this is a cached value, it's not a large issue
* Report tunnel closing
* mod too
* whitespace issue
* Fix Artifact of prior method naming
* these 3 places should have the check if i understood it correctly
* Announce the closed tunnels
* tunnel oversight
* Make the player stop at next track
* added where draper said to put it
* Apply suggestions from code review
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: Drapersniper <27962761+drapersniper@users.noreply.github.com>
* [Core] Add `Red.message_eligible_as_command`
- This is a small utility function which makes it easy for cog
creators to treat non-command messages as commands correctly.
- This also modifies `Red.ignored_channel_or_guild`'s signature to
explicitly add support for passing a message object (the only needed
attributes are entirely shared with context)
* Update redbot/core/bot.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* address review
* Rename
* remove webhhok check, the issue wasn't possible under normal operation
* Ah yes, ctx.bot in a method of the bot...
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Remove users from tempban unban list when hackbanning them
* black and missing bracket
* make sure this actually gets processed
* let the user know when a tempban was upgraded
* say more things
* reduce config calls
* jack loves performance
* adress review
* review the 2nd
Any group which sent help + settings views has had the settings view
split into a seperate command. This ensures that custom help behavior
does not interfere with settings views.
* update wording for giphy api
* of cource master draper
#3938 - make the command untranslateable
* i18n <your_api_key_here>
* commas to parens as discused in discord
* Make deprecation notice specify minor release based on soonest date
* Stop specifying a specific release in shared libs deprecation notice
* Add actual deprecation warning for `APIToken` (OMG, this is so cool)
* Add dates (2020-08-05 for all)
* address review
* improve consistency
* Add __dir__ and show APIToken in docs (or maybe I want to annoy Flame)
* fix module name when importing non-existent name from parent package
* Fix stack level used by depr warn in `redbot.core.commands`
* Only send notify_owners in mod migration if at least 1 scope entry has a non default value
* update string
* use asynciter on these potentially large loops
* check server settings too
* since i have no clue when RW will be release ... lets add this as it helps out a lot
* update branch name regex
* recheck version after download since now we are showing it.
* Change regex and the error message
* few changes see ^^^ GH comment
if it doesn't pass the RegEx `[a-zA-Z0-9_\.]*` then:
- if on Linux and contains a "-" anywhere, not allowed
- if it contains a space or starts with a "-", not allowed
- if the top two don't trigger, then `confirm()` with the user.
* black why
* 3.3.9
* fk
* ty aika
* review :aha:
* oopsie
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* this is just vexed tries and jack fixes
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* quite sad really
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* add duration atribute
* sanity checks
* add days parameter
* maybe resolve conflicts?
* black and make linting happy
* right... I need to send this
* but I still need to return... oops
* Send Notify owner messages only when a key has been invalidated since last notify_owner
* grammar
* welp im dumb
* Black and lower config call frequency
* Update redbot/cogs/streams/streams.py
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* dont use a generic name now to avoid a config migration later
* be even more explicit with var name
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Only Send out of date message to Final builds available on PyPi
* Only Send out of date message to Final builds available on PyPi
* sorted the resulting list so that the newest build is first in the list
* forgot about this one
* well jack is a bitch but we love him.
* simplify logic
* Add the new function to `__all__`
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* [Trivia] Minor correction in greekmyth trivia
In greekmyth trivia, there is a question: `Who is the God of Medicine and the son of Apollo?` and the only answer written in the yaml file is `Asclepius` , however `Aesculapius` or `Hepius` can also be considered as a right answer.
Source: https://en.wikipedia.org/wiki/Asclepius
* Lord of The Rings trivia
* Added AUTHOR key
* Revert "Added AUTHOR key"
This reverts commit d60e336771.
* Revert "Lord of The Rings trivia"
This reverts commit d7365e87b9.
Co-authored-by: Jyu Viole Grace <thisisjvgrace@users.noreply.github.com>
* [Permissions] Prevent guild owner lockouts
- Guild owners will always be able to access the guild configuration
commands in permissions
- This includes `permissions explain` and `permissions canrun` as
informational tools useful for ensuing a correct configuration
resolves#3107
* minor nitpicking over ordering consistency
* a single new line for style compliance
* Fix a typo + alphabet went wrong
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* update `dm` docstring
* few changes
* hmm
* cant make my mind up how to word it
* fk i forgot "and"
this is the last one, i promise
* add missing full stop in `contact` as im in this area of core_commands
* oh, see ^^^ review
* `click on` instead of `select`
Co-authored-by: Vexed01 <>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Lets show active storage on start up message
* Lets show active storage on start up message
* let's make it like in `[p]debuginfo`
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Redefine max length with livestream exception
* Address review
* is_track_too_long -> is_track_length_allowed for a more accurate description of what the function actually is doing
* we now rely on Track.is_stream for determining whether item is a livestream (or unseekable/non-known audio length like OGG files) for determining whether it can bypass the user-set max track length
* Removal of passing track length/an int to is_track_length_allowed - will always pass the full Track object now
* Address review
* add class docstring to downloader
idk what to say rly
um hi all nice to be back after about 6 months
pls no hate my PRs
apoligies if i get in the way
if you read this far then you deserve an achievement um i dunno what err how about the achievement of unboredness
* add class docstring to reports
* add class docstring to streams
* black formatting
oops lets not forget what tox checks for
* wording changes
* add cog board link
* hmm actually no (undo)
* wait grammar exists? who knew...
* remove admin only commands
* Review
* Remove always
- and consequently reorganise the words
* Add "one or more"
* Fix spelling of creator
- changed from creater
* add toggle to allow switching off sending the name of the person who uhhh used? the warning
* the Kowlin way of life
* reduced config calls to stay in line with #3766 and hopefully didn't break anything (as per Draper suggestion)
* more performance magic
* found an error + black
* forgot warning channel existed
* await... seriously... how long have you done async stuff now dav?
* unify (most) config calls in ``[p]warn``
* fix all the things
* Add bot.set_prefixes; change set serverprefix and set prefix to new method
* Address requested changes
* Apply suggestions from code review
* One more
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
idk what to say rly
um hi all nice to be back after about 6 months
pls no hate my PRs
apoligies if i get in the way
if you read this far then you deserve an achievement um i dunno what err how about the achievement of unboredness
* [Docs] Update docs now mention need to restart
Previously the update docs never mentioned that you have to restart yur bot for the update to take effect.
* That actually makes sense...
* Aaand those should probably be turned off as well
* jack and draper.... oi
* Update docs/update_red.rst
* Update docs/update_red.rst
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Handle the ints for user objects in Modlog appropriately (#3784)
* God, this is stupid
* Add logging of unexpected exceptions
* Add more specific info for Forbidden error
* add i18n support
* Use `openjdk-r` ppa for Ubuntu 16.04
* Don't add `deadsnakes` ppa for Ubuntu 20.04
* Use Java 11 for Arch Linux
* Update getting started guide to recommend Ubuntu 20.04 over 18
* Use Java 11 for Fedora Linux
* Use Java 11 for openSUSE Tumbleweed
* remove unneded `-u` for ubuntu 20.04 and 18.04
* use `openjdk-11-jre-headless` in all ubuntus
* use headless jre everywhere
* add non interactive flag to zypper calls
* Add emphasis on info about pyenv's warning
* reverse order of Ubuntu LTS versions
* Install Git 2.11+ with `yum replace` on CentOS/RHEL 7
* Add `--gpg-auto-import-keys` flag to non-interactive `zypper ar` usage
* update pyenv instructions to use Python 3.8.3
* Install git after installing everything else in CentOS 7 instructions
* use zypper flags properly
* improve the sentence a little
* I like consistency
* add missing `sudo`s in CentOS instructions
* add tk-devel to CentOS instructions per pyenv's recommendations
* Install gcc 8 from SCL in CentOS 7
* use git222 instead of git2u on CentOS 7
* Add missing `source ~/.bashrc` line
* use git224 instead of git222 on CentOS 7
* use yum swap over yum-plugin-replace in CentOS 7
* Fix invite_url_re
Found that the regex used previously could falsely catch strings such as discord member and discord gggggg which aren't invites and shouldn't be caught, testing with this regex string still catches all invite url variations while allowing these other previously caught strings to keep working
* Update redbot/core/utils/common_filters.py
Co-Authored-By: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Use Babel in `[p]set locale` to allow any valid locale
* Remove `[p]listlocales` and link to Crowdin in `[p]set locale`
* import babel.Locale as BabelLocale to avoid confousion
* Added `[p]cleanup spam` function
* formatting
* accepts number and considers command message to total counts
* use existing kwarg instead
Safer to use the before kwarg as other messages might get included accidentally between invoking and executing
Co-Authored-By: jack1142 <6032823+jack1142@users.noreply.github.com>
* safer way to compare embeds and skip attachment only msgs
Co-Authored-By: jack1142 <6032823+jack1142@users.noreply.github.com>
* keeps the original message before the spam starts
* now asks if its ok to delete 100+ spam msgs if found
* unnecessary calculations, just add after
* code styling and reverted history oldest_first option
* switched to recommended logging formatting, thank you jack1142
* now using `get_messages_for_deletion()`, added needed limit kwarg
* ugh forgot to swap em
* duh
* small string clarification
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* fix stacklevels of warnings
* stop using loop arg when calling start_adding_reactions
* [Audio] Stop using loop arg when calling start_adding_reactions
* [General] Add shard ID on serverinfo if there is over than two shards
* Update general.py
* Update general.py
* Update general.py
* Update general.py
* Improvements of "serverinfo" command
- Added some more informations about the server.
(Verification level, AFK channel and timeout, custom emojis and special features).
- Added custom texts for Region (and Verification levels).
- Added more details about members (Number of humans, bots, and all status).
- Show special features only if the server has one.
- Show "Verified" logo only if the server is verified.
- And changed the footer by adding how many time the bot as join the server.
* Black formatting for serverinfo
* Black formatting fix and Sinbad suggestions
* Fix the discord.errors.NotFound on server command
Added exception on server command for the phrase "To leave a server, just type its number.".
* Update core_commands.py
* Delete core_commands.py
* Create core_commands.py
* Update core_commands.py
* Update core_commands.py
* Delete core_commands.py
* Create core_commands.py
* Update core_commands.py
* Update core_commands.py
* Little changes on serverinfo command
- Adding "lurkers" check, for the new feature that are on bot which allow users to join a server in read-only (Works only on verified servers for now)
- Adding streaming status.
- Adding mobile status with suggestion of Sinbad.
* Black style fix
* Add verbose for serverinfo and disable lurkers
I've added a bool that are False by default and sent the original serverinfo command, and if set to True send my edited version.
And I've disabled the lurkers detection until this bug (https://github.com/discordapp/discord-api-docs/issues/855) isn't fixed.
* Add of India region
* Code cleanup
* Emojis are not needed to be translated
* Update serverinfo
* Changelog.
* Update 2382.enhancement.rst
* Adress Jack's requests changes.
* oops
* Put guild description first + few last nitpicks
Co-authored-by: PredaMart <46051820+PredaMart@users.noreply.github.com>
Co-authored-by: Toby Harradine <Tobotimus@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* use correct prefixes when sending messages to owners
* make internal util for this instead
* oops
* fix circular import
* let's add back the actual fix I made this PR for...
* fix wrong logger name
* improve log message
* Handle when users leave a server while we're applying mutes
Goddamn guilds with >100 text channels >.<
* Damn you tox.
* Damn you Bread.
* Fixed a bug whereby Guild would always return a success
Also handled error checking on NotFound so that the propper handling can be done.
* Fixed flake8 compile error (whoops)
* Revert "Fixed flake8 compile error (whoops)"
This reverts commit ec8b672347.
* Revert "Fixed a bug whereby Guild would always return a success"
This reverts commit 8d08ac31af.
* Apply the lost commits that we actually want
Since cherry picking is hard.
* Isn't the English language FUN!?
* *sigh*
* Move ignored guilds and channels to core
Add caching for ignored guilds and channels
Add caching for whitelist and blacklist
Fix#3220
Add consume-rest for whitelist and blacklist commands to add multiple users or roles in one command
* Add ability to ignore channel categories
* black
* moveignorechannels should be owner only and cleanup changes
* add changelog entries
* address Feedback
* schema v1
* set hidden to True for shared libs
* fix test data
* add warning about invalid top-level structure
* don't show full traceback for JSONDecodeError
* [dev] allow top-level await in code statements
* style
* use staticmethod, cls is unneeded
* add asyncio and aiohttp to env
* fix repl
* add __builtins__ to repl env
* style...
* fix debug with no coro
* add `optimize=0` to eval
* passing loop to certain things was deprecated. additionally, `asyncio.get_event_loop()` is being deprecated
* awesome, checks are functioning as intended
* fun with fixtures
* we can just stop misuing that anyhow
* Update redbot/pytest/downloader.py
Co-Authored-By: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Attempt 1, I suppose.
* Add the remaining 2 out of 3 jobs
* Spacing matters T_T
* So does formatting...
* More formatting fixing.
* First attempt at postgres services.
* Postgres attempt 2
* Update tests.yml
Flatten a python version I suppose.
* Update tests.yml
* Update tests.yml
* Update tests.yml
* Update tests.yml
* I wonder if this works lmao
* this is fun™
* let's go back
* add fail-fast
* Added publishing workflows
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Add an arg in cli to change message cache size
* Add an arg in cli to change message cache size
* Changelog
* Actually pass None in message_cache_size
* Update cli.py
* Add a cli arg to disable message cache.
* Add a cli arg to disable message cache.
* well go away you useless
* you actually are an int
* Check if message cache is higher than 0 when set it.
* Use sys.maxsize as max cache size.
* Update cli.py
* Add bot.max_messages property.
* typos
* 🤦
* style
* feat: allow to edit prefixes through `redbot --edit`
* enhance: allow to setup multiple prefixes
* fix: gotta break out of the loop
* fix: gotta sort prefixes in reversed order
* fix: editing prefix shouldn't save it as token
* fix: sort prefixes when using flag too
* chore(changelog): add towncrier entry
* docs: update help for `--edit` flag
* [Commands Module] Better Typehint Support
We now do a lot more with type hints
- No more rexporting d.py commands submodules
- New type aliases for GuildContext & DMContext
- More things are typehinted
Note: Some things are still not typed, others are still incorrectly
typed, This is progress.
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
- However, we are not changing the signature
- This was previously special cased for reasons related to the older
version of the help formatter we used and never re-evaluated for need.
- We should leave the signature as is both for lack of breaking, and
for potential future changes
// actually this was already done once in GH-2966 but got accidentally overwritten
* Cache prefixes
- This works towards #3148
- Ends up centralizing some logic
- Including that prefixes should be a reverse sorted list
* handle global prefix attempts at none
* fix prefix set for server
* cache using guild id
* new code
Added the admin check to warnings and removed the part where the user could check themselves.
Added new mywarns which replaces part of the old behaviour of warn
* Update warnings.py
* Create 2900.enhance.rst
* Fixed command name
Because appearently I can't remember a command for 10 seconds
* Commands in backticks
Put command names in changelog in double backticks after being advised to do so in discord
* made user not optional, and the other thing sinbad requested
* switched parts. magic
resolves#2900
* Be quieter in expected cases
* lets put this in the log file
* inline description use because setuptools entrypoint scripts are dumb
* Another setuptools entrypoint related issue
* maybe don't crash the bot on tasks
* improve the handling a bit more + document some of the lower level bits from the perspective of 'why?'
* Adding myself to codeowners on this one
* Let's not clobber our exit code
* And, there we go
* finish that thought
* right, I bumped the python version for (part of) this
* Update redbot/__main__.py
Co-Authored-By: jack1142 <6032823+jack1142@users.noreply.github.com>
* Okay, we should be good now
* correct exit code enum use
* cosmetic
* minor fix for linux and ctrl+c
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Update downloader.py
* Update json_mixins.py
* Update installable.py
* changelog pt 1
* changelog pt2
* edit of changelog pt1
* edit of changelog pt 2 (last commit before review)
* Kidding, this is the last one before review.
* feat(downloader): add `[p]cog reinstallreqs` command
* enhance: clear lib folder on minor Python version change
* chore(changelog): add towncrier entries
* enhance: warn user about detected change in OS or arch
* enhance: use actual prefix instead of `[p]`
* Whoops...
Co-Authored-By: Michael H <michael@michaelhall.tech>
* enhance: wrap message sending in try except
Co-authored-by: Michael H <michael@michaelhall.tech>
* enhance: add `Red.wait_until_red_ready()` for post connection startup
* enhance: fill `bot.owner_id` in our `on_ready`
* enhance: log missing destinations in `get_owner_notification_destinations`
* chore(changelog): add towncrier entries
* chore(changelog): use past form of verb "add"
* enhance(setup): use instance name in default data path
* chore(changelog): add towncrier entries
* enhance(setup): tell user that instance name is case-sensitive
* do better with loop cleanup
* changelog
* remove redundant line
* Do this a bit better than the initial pass
* Improve windows support
Make some other things coroutines to work with improved design
* Wish we'd have done this right from the start...
* Update deps surrounding this
- see bpo-23057
- neccessary for windows users
- nice for consistent support channel info / feature availability
* dep issue
* Fix tests
* duplication plugin py version
* actually handle this
* Reconfigure some checks with codeclimate, disable pylint for now
* style
* Is my exasperation showing yet?
* handle some stupid stuff
* meh
* dep changelog
* update windows deps instructions
* changelog
* be more explicit that manual dependency handling is an excersice left to the reader
* let's only grab the MSVC C++ stuff here...
* Meh
* update language
* Update install_windows.rst
* it's really that easy
* create
* add the code
* change de logs
* lets remember linux exists
* fix formtting and change wording
* change the wording a bit more... after running `sphinx-build` it def looks like i used bold a lot
god that was a long commit mesage
* review changes
* draper's review (see description)
i have put or worse partially to scare users and partially as there are other possible effects of a downgrade
* review
* clarity
* feat: dispatch `on_red_api_tokens_update` event on api keys update
* docs: add event reference in Shared API Keys docs
* chore(changelog): add tonwcrier entries
* fix: wrap dispatched api tokens in MappingProxyType
* docs: reflect change of type change to read-only Mapping
* Update core_commands.py
* Create 3115.feature.rst
* Rename 3115.feature.rst to 3118.feature.rst
* Add a message if there's any disabled commands.
* Use the same format as [p]command disable/enable
* Make strings more i18n friendly.
* Flame's requested changes.
* [audio] adds typing indicator to playlist dedupe
* [audio] not sure what happened here lol
* [audio] forgot the return
* add changelog
* [audio] fix for black
* reorder some startup to prevent heartbeat issues
* changelog
* handle startup cleanup in audio
* style
* rebased to handle conflict
* be a little smarter to prevent (some) infinite hangs
* Fix a pre-existing NoneType Error
* Migrate config before things are using it...
* another place we should ensure we're ready
* rename-toavoid-issues
* fix cache ordering and mis-use of ensure_future
* remove incorrect typehints
* style
* feat(downloader): Install cog from specific commit in repo (initial commit)
- Repo and Installable have commit property now
- New class inheriting from Installable -
InstalledCog (old one from converters.py removed)
- New Repo.checkout() method, which is also async ctx manager
ref #2527
* fix(downloader): Keep information about repo's branch in config
- This is needed to make sure that repo can go back from detached state in some rare unexpected
cases
- current branch is determined by `git symbolic-ref` now as this command errors for detached
HEAD
* feat(downloader): Update repo without cogs, update single cog
The most important part of issue #2527 has been added here
- `[p]repo update` command added
- new conf format - nested dictionary repo_name->cog_name->cog_json
installed libraries are now kept in conf too
- `InstalledCog` renamed to `InstalledModule` - installed libraries use this class
- `Downloader.installed_libraries()` and `Downloader.installed_modules()` added
- `Downloader._add_to_installed()` and `Downloader._remove_from_installed()`
now accept list of modules, of both cogs and libraries
- `[p]cog install` tells about fails of copying cog and installing shared libraries
- `[p]cog update` will truly update only chosen cogs (if provided) or cogs that need update
- pinned cogs aren't checked
- before update, repos are updated
- to determine if update is needed `Repo.get_modified_modules()` is used
- `[p]cog pin` and `[p]cog unpin` commands for pinning/unpinning cogs added
- `Repo.checkout()` allows to choose ctx manager exit's checkout revision
- `Repo.install_cog()` returns `InstalledModule` now and raises CopyingError (maybe breaking?)
- `Repo.install_libraries()` returns 2-tuple of installed and failed libraries (maybe breaking?)
- `RepoManager.get_all_cogs()` added, which returns cogs from all repos
- `RepoManager.repos` property added, which contains tuple of `Repo`
* test(downloader): Repo.current_branch() throws an exception, when branch can't be determined
* style(downloader): rename _add_to_installed to _save_to_installed
This method is used for both adding and updating existing modules in Config
* refactor(downloader): add ctx.typing() for few commands
`[p]cog install` is nested hell, can't wait for moving install logic to separate method
* fix(downloader): refactor and fix `set` usage
* perf(downloader): update commits for ALL checked modules to omit diffs next time
This will also disable running git diff for cogs that have the same commit as the latest one
* style(downloader): few style improvements
- use of mutable object in method definition
- make Repo._get_full_sha1() public method
- too long
line
- don't use len to check if sequence is empty
* feat(downloader): add `[p]cog updateallfromrepos` and `[p]cog updatetoversion` commands
- moved cog update logic into `Downloader._cog_update_logic()` (lack of better name)
- splitted
whole cog update process into smaller methods
- might still need some improvements
- added new
methods to `Repo` class:
- `is_on_branch()` to check if repo is currently checked out to branch
- `is_ancestor()` to check if one commit is ancestor of the other
- fix for
`Downloader._available_updates()` behaviour
broken by commit
5755ab08ba67556b3863e907c6f44d80f4f13d88
* feat(downloader): try to find last commit where module is still present
Enhancements:
- `Installable` now has `repo` attribute containing repo object or `None` if repo is
missing
- `Downloader._install_cogs()` and `Downloader._reinstall_libraries()` are able to install
modules from different commits of repo
- `Repo.checkout()` as ctx manager will now exit to commit
which was active before checking out
- unification of `rev` and `hash` terms:
All function
parameters are explicitly called `hash`, if it can only be commit's full sha1 hash or `rev` if it
can be anything that names a commit object, see
[link](https://git-scm.com/docs/git-rev-parse#_specifying_revisions)
- new
`Repo.get_last_module_occurence()` method, which gets module's Installable from last commit in which
it still occurs
* docs(downloader): Add basic description for `InstalledModule`
* fix(downloader): cog ignored during updates if its commit was missing
After config format update, commit string is empty until update and when such cog was checked and it
wasn't available in repo anymore, it was ignored
* refactor(downloader): Installing cogs from specific rev will pin them
* perf(downloader): Don't checkout when current commit equals target hash
- changes to `Repo.checkout()`:
- `exit_to_rev` is now keyword only argument
- added
`force_checkout` to force checkout even if `Repo.commit` value is the same as target hash
* refactor(downloader): Repo._run() stderr is redirected to debug log now
- added two keyword arguments:
- `valid_exit_codes` which specifies valid exit codes, used to
determine if stderr should be sent as debug or error level in logging
- `debug_only` which
specifies if stderr can be sent only as debug level in logging
* style(downloader): stop using `set` as arg name in `_load_repos()`
* feat(downloader): pass multiple cogs to `[p]cog (un)pin`
* refactor(downloader): accept module name instead of instance, fix spelling
* style(downloader): few small style changes
* fix(downloader): add type annotations + fixes based on them
- fix wrong type annotations and add a lot of new ones
- add checks for `Installable.repo` being `None`
- fix wrong return type in `Downloader._install_requirements`
- show repo names correctly when updating all repos
- fix error when some requirement fails to install
BREAKING CHANGE:
- type of `Repo.available_modules` is now consistent (always `tuple`)
* tests: use same event loop policy as in Red's code
* enhance(downloader): fully handle ambiguous revisions
* build(deps): add pytest-mock dependency to tests extra
* fix(downloader): minor fixes
* feat(downloader): add tool for editing Downloader's test repo
This script aims to help update the human-readable version of repo
used for git integration tests in ``redbot/tests/downloader_testrepo.export``
by exporting/importing it in/from provided directory.
Note
----
Editing `downloader_git_test_repo.export` file manually is strongly discouraged,
especially editing any part of commit directives as that causes a change in the commit's hash.
Another problem devs could encounter when trying to manually edit that file
are editors that will use CRLF instead of LF for new line character(s) and therefore break it.
I also used `.gitattributes` to prevent autocrlf from breaking testrepo.
Also, if Git ever changes currently used SHA-1 to SHA-256 we will have to
update old hashes with new ones. But it's a small drawback,
when we can have human-readable version of repo.
Known limitations
-----------------
``git fast-export`` exports commits without GPG signs so this script disables it in repo's config.
This also means devs shouldn't use ``--gpg-sign`` flag in ``git commit`` within the test repo.
* tests(downloader): add git tests and test repo for them
Also added Markdown file that is even more clear than export file
on what the test repo contains.
This is manually created but can be automated on later date.
* test(downloader): add more tests related to RepoManager
These tests use expected output that is already guaranteed by git tests.
* chore(CODEOWNERS): add jack1142 to Downloader's folders
I know this doesn't actually give any benefit to people that don't have
write permission to the repo but I saw other big fella devs doing this,
so I think this might be advisable.
* enhance(downloader): allow easy schema updates in future
* enhance(downloader): more typing fixes, add comments for clarity
* feat(downloader): add python and bot version check to update process
follow-up on #2605, this commit fully fixes#1866
* chore(changelog): add towncrier entries
* fix(downloader): use `*args` instead of `commands.Greedy`
* fix(downloader): hot-reload issue - `InstallableType` now inherits from `IntEnum`
There's desync of `InstallableType` class types due to hot-reload
and `IntEnum` allows for equality check between different types
* enhance(downloader): ensure there's no cog with same name installed
should fix#2927
* fix(downloader): last few changes before marking as ready for review
* uvloop + python3.8
* Lavalink bump to 3.2.1_846
* [Release] 3.1.7
- Handles a dependency issue for python3.8
- Updates the Lavalink jar used
- This include's Nin's stat fix
- Streaming from Soundcloud is working again, at least for now.
* 3.1.7
* Add MS Azure to the list of hosting providers
* Fix some typos, wording, incorrect commands
* towncrier
* Update docs/getting_started.rst
Co-Authored-By: Michael H <michael@michaelhall.tech>
* Use stable instead of dev version
* changelog entry
* Rename 3020.docs.rst to 3021.docs.rst
* update wording in Getting Started
* add note about package layout
* fix some formatting
* spellcheck
* add cookiecutter note
* Update 3021.docs.rst
* fix(core,downloader): add lib folder to sys.path before loading cogs
* chore(changelog): add towncrier entry
* fix(core): always append 3rd-party lib path to the end of `sys.path`
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now
`[p]bankset maxbal` can be used to set the maximum bank balance
Signed-off-by: Guy <guyreis96@gmail.com>
* Remove duplicated call in `[p]playlist update`
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Handle both ModuleNotFoundError and ImportError and pull a more complete error message to forward to the user and fix grammar.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Since we aren't 100% certain of message length here due to using the error message for the raised error ... lets use pagify so this doesn't bite us in the future.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* .... Lets not reinvent the wheel
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Address Jack's review
* docs: change links to d.py docs to use stable version instead of v1.0.1
* chore(changelog): add towncrier entry
* docs: add |DPY_VERSION| substitution and :dpy_docs: role
* chore(changelog): update towncrier entries to reflect new changes
* More changes
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed auto play defaulting to playlist
Signed-off-by: Guy <guyreis96@gmail.com>
* Localtrack fix
Signed-off-by: Guy <guyreis96@gmail.com>
* Updated deps .. since for some reason aiosqlite is not being auto installed for everyone
Signed-off-by: Guy <guyreis96@gmail.com>
* Yupo
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed a crash in [p]now
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed crash on playlist save
Signed-off-by: Guy <guyreis96@gmail.com>
* Debugging Commit
Signed-off-by: Guy <guyreis96@gmail.com>
* Yet more prints
Signed-off-by: Guy <guyreis96@gmail.com>
* Even more spammy debug
Signed-off-by: Guy <guyreis96@gmail.com>
* Debugging commit + NEw Dispatches
Signed-off-by: Guy <guyreis96@gmail.com>
* Debugging commit + NEw Dispatches
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed localpath checks
Signed-off-by: Guy <guyreis96@gmail.com>
* more fixes for Localpaths
Signed-off-by: Guy <guyreis96@gmail.com>
* Spelling mistake on method
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed Crash on event handler
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed Crash on local search
Signed-off-by: Guy <guyreis96@gmail.com>
* Reduced fuzzy match percentage threshold for local tracks to account for nested folders
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed a crash on queue end
Signed-off-by: Guy <guyreis96@gmail.com>
* Sigh ... Removed a duplicate dispatch
Signed-off-by: Guy <guyreis96@gmail.com>
* Sigh i removed this before ...
Signed-off-by: Guy <guyreis96@gmail.com>
* Reorder dispatch signatures so all 3 new dispatch have matching signature
Signed-off-by: Guy <guyreis96@gmail.com>
* Formatting
Signed-off-by: Guy <guyreis96@gmail.com>
* Edited Error Event to support localtracks
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix a Crash on track crash :awesome:
Signed-off-by: Guy <guyreis96@gmail.com>
* Yikes soo much spam
Signed-off-by: Guy <guyreis96@gmail.com>
* Remove spam and improve existance check
Signed-off-by: Guy <guyreis96@gmail.com>
* Repeat and Auto-play are mutually exclusive now
Signed-off-by: Guy <guyreis96@gmail.com>
* DEBUGS for Preda
Signed-off-by: Guy <guyreis96@gmail.com>
* Vimeo tracks can be from both these domains "vimeo.com", "beam.pro"
Signed-off-by: Guy <guyreis96@gmail.com>
* I mean Mixer can be from those 2 domains ....
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed `search sc` command
Signed-off-by: Guy <guyreis96@gmail.com>
* Run everything though lints.
rename localtracks module to dataclasses
Clear lock on errors
Signed-off-by: Draper <guyreis96@gmail.com>
* Try to speed up long playlist loading
Signed-off-by: Draper <guyreis96@gmail.com>
* Im an idiot
Signed-off-by: Draper <guyreis96@gmail.com>
* Im an idiot
Signed-off-by: Draper <guyreis96@gmail.com>
* Added logging for writes
Signed-off-by: Draper <guyreis96@gmail.com>
* Fix crash on cog reload
Signed-off-by: Draper <guyreis96@gmail.com>
* Fix for runtimewarning ?
Signed-off-by: Draper <guyreis96@gmail.com>
* Fix for Local Track cache
Signed-off-by: Draper <guyreis96@gmail.com>
* Remove broken tracks from queue on exception
Theoretically do not auto play if track stop reason is Stopped or cleanup
Signed-off-by: Draper <guyreis96@gmail.com>
* Previous commit was a fluke ... ignore it
Signed-off-by: Draper <guyreis96@gmail.com>
* Change from cleanup to Replaced
Signed-off-by: Draper <guyreis96@gmail.com>
* Fixed AttributeError: 'Track' object has no attribute 'info'.
[p]skip will only work for autoplay is there a track being played.
Fixed Console spam if query saving failed in the background while reloading bot.
Autoplay now respect [p]stop command
Signed-off-by: Guy <guyreis96@gmail.com>
* Black formatting
Fix Issue with auto play working when there is songs in the queue
Stop notifying queue ended if autoplay is on
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed a crash on track load timeout
Signed-off-by: Guy <guyreis96@gmail.com>
* [p]playlist start will now show the playlist name in embed body
Improved Logic for handling broken tracks when repeat is on.
Signed-off-by: Draper <guyreis96@gmail.com>
* Enqueue tracks as soon as we have the youtube URL ....
This basically changes how spotify urls are handled
Need to test saving spotify playlist
Need to test loading a spotify playlist from file
Need to test enqueuing a spotify playlist
Signed-off-by: Draper <guyreis96@gmail.com>
* Updated a track whrn enqueuing spotify playlist
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Debug
Signed-off-by: Draper <guyreis96@gmail.com>
* Revert spotify_enqueue changes
Signed-off-by: Draper <guyreis96@gmail.com>
* Revert spotify_enqueue changes
Signed-off-by: Draper <guyreis96@gmail.com>
* Allow to set Lavalink jar version from Environment vars
Signed-off-by: Draper <guyreis96@gmail.com>
* Allow to set Lavalink jar version from Environment vars
Signed-off-by: Draper <guyreis96@gmail.com>
* Fix for a crash on Equalizer, Merge Spotify_enqueue changes and revert manager changes
Signed-off-by: Draper <guyreis96@gmail.com>
* Break playlist enqueue after 10 consecutive failures
Signed-off-by: Draper <guyreis96@gmail.com>
* Auto DC, is not compatible with Auto Play
Signed-off-by: Draper <guyreis96@gmail.com>
* Make notifier aware of guild its being called for
Signed-off-by: Draper <guyreis96@gmail.com>
* Type checking
Signed-off-by: Draper <guyreis96@gmail.com>
* Remove lock from 2 exits that i didn't before
Signed-off-by: Draper <guyreis96@gmail.com>
* Fixed TypeError: spotify_enqueue() got an unexpected keyword argument 'notify'
Signed-off-by: Guy <guyreis96@gmail.com>
* Reorder toggles to alphabetical order
Signed-off-by: Guy <guyreis96@gmail.com>
* Update Query to handle spotify URIs
Signed-off-by: Guy <guyreis96@gmail.com>
* update database
Signed-off-by: Guy <guyreis96@gmail.com>
* Dont say tracks enqued on invalid link
Make autop lay a mod only setting
Signed-off-by: Draper <guyreis96@gmail.com>
* Dont say tracks enqued on invalid spotify link
Signed-off-by: Draper <guyreis96@gmail.com>
* Set default age to 365 days
Signed-off-by: Draper <guyreis96@gmail.com>
* Allow Audio mods to set auto play playlists.
Save playlists songs to cache when migrating
Signed-off-by: Guy <guyreis96@gmail.com>
* Black formatting
Signed-off-by: Guy <guyreis96@gmail.com>
* [p]eq cooldown is not triggered is player check fails (i.e if nothing is currently playing)
Adding and removing reaction is no longer a blocking action
Signed-off-by: Guy <guyreis96@gmail.com>
* changelog for non blocking reaction handles
Signed-off-by: Guy <guyreis96@gmail.com>
* Show auto dc and auto play settings by default
Signed-off-by: Guy <guyreis96@gmail.com>
* lint is being a bitch
Signed-off-by: Guy <guyreis96@gmail.com>
* lint changes
Signed-off-by: Draper <guyreis96@gmail.com>
* stop caching local tracks
Signed-off-by: Draper <guyreis96@gmail.com>
* List of Lavalink.Tracks natively added to Playlist Objects
Signed-off-by: Draper <guyreis96@gmail.com>
* Fix UX changes and should fix autoplay
Signed-off-by: Draper <guyreis96@gmail.com>
* Fixed Skip x number of tracks
Signed-off-by: Draper <guyreis96@gmail.com>
* Lint changes
Signed-off-by: Draper <guyreis96@gmail.com>
* Remvoe dead code
Signed-off-by: Draper <guyreis96@gmail.com>
* Update playlist embed formatting to reflect Preda's suggestions
Signed-off-by: Draper <guyreis96@gmail.com>
* Update change logs
Signed-off-by: Draper <guyreis96@gmail.com>
* Add `async with ctx.typing():` to queue and to local folder
Signed-off-by: Draper <guyreis96@gmail.com>
* Stop queuing now when queue is empty with [p]queue
Signed-off-by: Draper <guyreis96@gmail.com>
* fix ctx.typing()
Signed-off-by: Draper <guyreis96@gmail.com>
* fix ctx.typing()
Signed-off-by: Draper <guyreis96@gmail.com>
* Part 1
Signed-off-by: Draper <guyreis96@gmail.com>
* Dont check local track author and name if title is Unknown
Signed-off-by: Guy <guyreis96@gmail.com>
* Makes auto play more random
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes local play
Fixed missing format
Signed-off-by: Guy <guyreis96@gmail.com>
* Query.process_input accept lavalink.Track objects
Signed-off-by: Draper <guyreis96@gmail.com>
* docstrings
Signed-off-by: Draper <guyreis96@gmail.com>
* Add TODO for timestamp support
Signed-off-by: Draper <guyreis96@gmail.com>
* Improve autoplay from cache logic (possibly slightly slower but more efficient overall)
Signed-off-by: Draper <guyreis96@gmail.com>
* Add My Lavalink PR as a dependency
Remember to remove this .... The PR will bump it to 0.3.2
Signed-off-by: Draper <guyreis96@gmail.com>
* Add My Lavalink PR as a dependency
Remember to remove this .... The PR will bump it to 0.3.2
Signed-off-by: Draper <guyreis96@gmail.com>
* Add My Lavalink PR as a dependency
Remember to remove this .... The PR will bump it to 0.3.2
Signed-off-by: Draper <guyreis96@gmail.com>
* Compile all regex at runtime
Signed-off-by: Draper <guyreis96@gmail.com>
* Fixes local play
Fixed missing format
Signed-off-by: Guy <guyreis96@gmail.com>
* Revert Dep error
Signed-off-by: Guy <guyreis96@gmail.com>
* black
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed attribute error
Signed-off-by: Guy <guyreis96@gmail.com>
* add `self.bot.dispatch("audio_disconnect", ctx.guild)` dispatch when the player is disconnected
Signed-off-by: Guy <guyreis96@gmail.com>
* Removed shuffle lock on skip
Signed-off-by: Guy <guyreis96@gmail.com>
* Better logic for auto seek (timestamps)
Signed-off-by: Guy <guyreis96@gmail.com>
* Better logic for auto seek (timestamps)
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes timestamps on spotify tracks
Signed-off-by: Guy <guyreis96@gmail.com>
* Add ctx typing to playlist enqueue
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix Deps
Signed-off-by: Guy <guyreis96@gmail.com>
* Black formatting + Using new lavalink methods for shuffling
Signed-off-by: Guy <guyreis96@gmail.com>
* remove ctx.typing from playlist start
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes typerror when enqueuing spotify playlists
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix keyerror
Signed-off-by: Guy <guyreis96@gmail.com>
* black formatting, + embed for [p]audioset cache as I forgot it before
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix Error on playlist upload
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix Text help for bump
Signed-off-by: Guy <guyreis96@gmail.com>
* Allow track bumping while shuffle is on
Signed-off-by: Guy <guyreis96@gmail.com>
* Edit bump embed to be consistent with other embed
Hyperlink tracks and removed dynamic title
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* Errors not printing fix?
Signed-off-by: Guy <guyreis96@gmail.com>
* Errors not printing fix?
Signed-off-by: Guy <guyreis96@gmail.com>
* Track enqueued footer now shows correct track position when shuffle is on
Signed-off-by: Guy <guyreis96@gmail.com>
* Update changelogs
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix is_owner check in audioset settings
Signed-off-by: Guy <guyreis96@gmail.com>
* Changelogs
Signed-off-by: Guy <guyreis96@gmail.com>
* Dont store searches with no results in cache, fix malformated playlist to cache upon settings migration
Signed-off-by: Guy <guyreis96@gmail.com>
* _clear_lock_on_error > Needs to be reviewed to see if it has been done correctly
Signed-off-by: Guy <guyreis96@gmail.com>
* _clear_lock_on_error > Needs to be reviewed to see if it has been done correctly
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix Query search so that it works with absolute paths for localtracks
Signed-off-by: Guy <guyreis96@gmail.com>
* Extra error if lavalink is set to external and the query is a localtrack and nothing is found
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* More detailed error message
Signed-off-by: Guy <guyreis96@gmail.com>
* [p]seek and [p]skip can be used by user if they are the song requester while DJ mode is enabled, if votes are disabled. , [p]queue shuffle can be used to shuffle the queue manually. and [p]queue clean self can be used to remove all songs you requested from the queue.
Signed-off-by: Guy <guyreis96@gmail.com>
* black
Signed-off-by: Guy <guyreis96@gmail.com>
* All the fixes + a `should_auto_play` dispatch for the tech savy peeps
Signed-off-by: Guy <guyreis96@gmail.com>
* Spellchecker + Pythonic changes
Signed-off-by: Guy <guyreis96@gmail.com>
* NO spam for logs
Signed-off-by: Guy <guyreis96@gmail.com>
* Pass Current voice channel to `red_audio_should_auto_play` dispatch
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* playlist upload also updates cache in the background
Signed-off-by: Guy <guyreis96@gmail.com>
* playlist upload also updates cache in the background
Signed-off-by: Guy <guyreis96@gmail.com>
* Add scope to playlist picker
Signed-off-by: Guy <guyreis96@gmail.com>
* Delete Playlist picker message once something is selected
Signed-off-by: Guy <guyreis96@gmail.com>
* OCD Fix
Signed-off-by: Guy <guyreis96@gmail.com>
* Facepalm
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix a Potential crash
Signed-off-by: Guy <guyreis96@gmail.com>
* Update my stupidity
Signed-off-by: Guy <guyreis96@gmail.com>
* Auto Pause + Skip tracks already in playlist upon playlist append + a command to remove duplicated tracks from playlist
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix DJ mode when Role is deleted - Credits go to Neuro Assassin#4779
Fix an issue where auto play MAY not trigger
Signed-off-by: Guy <guyreis96@gmail.com>
* Change log to Neuro Assassin#4779 fix
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* Dont auto pause manual pauses
Signed-off-by: Guy <guyreis96@gmail.com>
* Adds `[p]autoplay` that can be run by mods or higher
Signed-off-by: Guy <guyreis96@gmail.com>
* 🤦
Signed-off-by: Guy <guyreis96@gmail.com>
* 2x 🤦
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed wrong import
Signed-off-by: Guy <guyreis96@gmail.com>
* Added Autoplay notify
Signed-off-by: Guy <guyreis96@gmail.com>
* Added Autoplay notify
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* Store Track object as prev song instead of URI
Signed-off-by: Guy <guyreis96@gmail.com>
* Black why do u hate me
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix command name
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix Autoplay notify
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix missing await and TypeError, Thanks Flame
Signed-off-by: Guy <guyreis96@gmail.com>
* Add a list of tracks to show as a menu
Signed-off-by: Guy <guyreis96@gmail.com>
* adds the `[p]genre` command which uses the Spotify and Youtube API
Signed-off-by: Guy <guyreis96@gmail.com>
* Enqueue Playlists from genre command
Signed-off-by: Guy <guyreis96@gmail.com>
* Pretify `[p]genre`
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix a Typo and correct jukebox charge order
Signed-off-by: Guy <guyreis96@gmail.com>
* Add genre command to error handling
Signed-off-by: Guy <guyreis96@gmail.com>
* Type checking
Signed-off-by: Guy <guyreis96@gmail.com>
* Update naming scheme for `[p]genre`
Signed-off-by: Guy <guyreis96@gmail.com>
* Black why do you hate me
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixed `[p]local start`
Playlist picker auto selects if theres just 1 playlist found
`[p]queue cleanself` added
Signed-off-by: Guy <guyreis96@gmail.com>
* *sigh* back compatibility with old localtrack paths
Signed-off-by: Guy <guyreis96@gmail.com>
* *sigh* back compatibility with old localtrack paths, even more
Signed-off-by: Guy <guyreis96@gmail.com>
* *sigh* back compatibility with old localtrack paths Even more
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes localtracks in playlist info command
Signed-off-by: Guy <guyreis96@gmail.com>
* Debug Local Strings
Signed-off-by: Guy <guyreis96@gmail.com>
* Debug Local Strings
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes `[p]playlist info` for local tracks + fixed error in `[p]remove`
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes formatting in `[p]playlist info`
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix an issue with User Scope playlists were not being deleted
Signed-off-by: Guy <guyreis96@gmail.com>
* Typechecking
Signed-off-by: Guy <guyreis96@gmail.com>
* Black
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix the logic of `delegate_autoplay`
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix a Crash on Load due to type hinting
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix a Crash on Load due to type hintingBlack + fix order of `red_audio_should_auto_play`
Signed-off-by: Guy <guyreis96@gmail.com>
* Add `red_audio_initialized` dispatch so that ownership of auto play can be maintained after a reload
Signed-off-by: Guy <guyreis96@gmail.com>
* Check if the current owner is loaded before raising an error
Signed-off-by: Guy <guyreis96@gmail.com>
* Fixes the Existence Check in `delegate_autoplay`
Signed-off-by: Guy <guyreis96@gmail.com>
* Turns `own_autoplay` in a property of Audio and improves `delegate_autoplay` Thanks Sinbad!
Signed-off-by: Guy <guyreis96@gmail.com>
* Fix for Localtracks playlists
Signed-off-by: Guy <guyreis96@gmail.com>
* When disconnecting send `Disconnecting...`
Fix Stop after a skip
Fix UX discrepancy on Playlist IDs
Fixed Exception when theres a track error
Signed-off-by: Guy <guyreis96@gmail.com>
* add `on_red_audio_unload` dispatch
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fix a crash on track start where `player.current` can be none?
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Missing new line
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Allow `--author` for playlist to be used to filter playlist for an specific author.
Plus a few bugfixes for UX
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Rename `remdupe` to `dedupe`
Make global scope always be referenced as Global
add missing backwards quotes around the Playlist ID for 1 string
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Towncrier entries for dep changes
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Remove track index when shuffle is on
Fix Progress bar for livestreams
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Trigger autoplay on `QUEUE_END` event instead of `TRACK_END`
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Can't reproduce Ians bug but here a safeguard agaisnt it just in case
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fixes 2 Messages that had the wrong formatting
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* standerdize playlist naming scheme
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fix `[p]autoplay` message when Notify is enabled
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* y u h8 me black
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fix an issue with `[p]audioset localpath` where the localtracks folder was incorrect
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Pythonic formatting
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Ugh
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fix a typo
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Silently try to delete messages + fixes error Ian found with `[p]genre`
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* sigh black
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Add humanize_number usage correctly
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Bump RLL to 0.4.0
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Update changelog entries
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Change `bot.db` to new API's added by #2967
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Additional reformatting
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Remove PyCharm noise + Fixes a few Pycharm warnings
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Rework `index` parsing for youtube urls
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Addess Aika's review
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fix a potential crash, saves guild ID to playlists to avoid an scheme change in the future
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Add handling for Python installs without sqlite3.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Address Flame's review
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Fix ma stupidity
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Address Aika's latest review.
1. Update docstring for `[p]playlist rename`.
2. Fix punctuation for playlist matching.
3. `[p]playlist update` now respect playlist management perms
4. Playlist management errors now shows playlist name, id and scope where possible
5. Remove duplicated code and dead code.
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Pluralize string
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Getting started guide
* Remove DigitalOcean referral link
* Fix typos and mispells, thanks to @Flame442
* Remove cogs.red hyperlink until it is finished
* Add towncrier entry
* Add prolog.txt
This is not necessary for this PR but all of the other cog guides rely on this file.
The cog guides are individual branches based on this one, which is why I'm adding this file right now.
* QA changes
* More QA changes
considering -> assuming
red is a girl, not non-binary
* commit
* add launcher depricate to linix/mac
* sorry linux i still ignored you
capitalise some linix stuff i couldnt be bothered to do before
* remove mentions of launcher & update changelog enrty
* Add quotes to clarify helpset tagline
Add quotation marks to helpset tagline's response so two consecutive full stops don't appear.
* more commiting
* make travis/black happy
* for review
make no longer repeat tagline
* fix(commands): ``cls`` parameter can now be passed like in d.py
* chore: add changelog entry
* Update changelog.d/2881.misc.rst
Co-Authored-By: Toby Harradine <Tobotimus@users.noreply.github.com>
* Rename 2881.misc.rst to 2881.enhance.rst
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now
`[p]bankset maxbal` can be used to set the maximum bank balance
Signed-off-by: Guy <guyreis96@gmail.com>
* Adds `invoke_without_command` to `[p]trivial leaderboard`
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Reserves command names
- Currently, only reserving ``cancel``
- This should only impact matching command qualified names
- This also checks aliases
- This makes cc and alias use the new module constant with info about
this
- Module constant is available for use by 3rd party cogs which may
dynamically create responses.
* Change misleading var name
* style
* Thanks Flame!
* Handles issues with CC
* Change the hierarchy issue messages,
because they are difficult to translate with the verb variable.
* Fix typos
* Add changelog entry
* Reformatting with black
* More privatization, and some error helpers
This makes a lot more things private. Continued from #2967, fixes#2984
Adds public methods for various things.
Below is a brief summary of things available elsewhere, though this
particular set of changes may warrant a detailed section in the release notes.
- bot.db.locale -> redbot.core.i18n.get_locale
- Note: This one already existed.
- bot.db.help -> redbot.core.commands.help.HelpSettings
- bot db whitelist/blaclist? -> bot.allowed_by_whitelist_blacklist
- This has also been made a single cannonical function for this
purpose including check usage
- bot color? -> bot.get_embed_color/bot.get_embed_colour
- bot.id.api_tokens? ->
- bot.get_shared_api_tokens
- bot.set_shared_api_tokens
- bot.remove_shared_api_tokens
-bot.db.prefix -> bot.get_valid_prefixes
- (Note: This is a wrapper around bot.get_prefix)
Other changes include
- removing `bot.counter` as it was never used anywhere
- Adding properties with helpful error messages for moved and renamed
things
- making bot.uptime a property with an error on set
- adding a migration to the bot config for shared_api_tokens
* Remove overly encompassing message redaction, eval is a risk, dont run in dev if you cant manage it
* address Flame's feedback
* rephrase example
* changelog extras
* You saw nothing
* style(permissions): clear out usage of commands with <who_or_what>
* chore(changelog): add towncrier entry
* style(permissions): fix black formatting
* Rename `bot.db` as `bot._config`
- Continues work towards strong version guarantees
- Added methods for cog use for a few things which were previously
only accessible via direct access.
- Retained private use in a few internal use locations, though most
methods were updated away from this.
- Updated documentation for shared api token users
* changelog
* more detail
* docstring fixes
* Apparently, I forgot to commit something I had locally
- + a copy/paste failue in the changelog
* *sigh*:
* *sigh*
Also made the Makefile work slightly nicer with other tools, e.g. IDE run configurations, by allowing the python executable to be set as an env var.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Docs] Update linux install docs, redo venv docs
Some of our pre-req installation docs needed updating on Windows - this adds new sections for Fedora Linux and Debian/Raspbian Buster, and also removes some unnecessary pre-requirements from other distributions. These have all been tested on fresh VPSes, installing Red both in venvs and with --user, and they all seem to work.
Also, apparently the venv docs were too scary before. These changes try to make it clear that it's easier to use than users may think.
This also includes a little note to stop users from accidentally installing Python with pyenv after installing pre-requirements on Ubuntu.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add changelog entries
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Update officially supported platforms in README.md
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Combine sections and add openSUSE
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Include example of using `--user` flag
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Use `py -3.7` on Windows outside of venv
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Reorganise changelog entries
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add command to remove dead members from bank
* Add a global check
* Added a FIXME so `bank_local_clean` is updated once bulk-update is implemented
Added a brief warning to warn devs not to use the `_get_base_group` as it can mess up their config files
Removed a redundant existence check
* Updated commit to reflect changes requested in review
* Updated commit to reflect changes requested in review
* 🤦
* Return command to run with user id so we don't worry about safeguarding the command agaisn't invalid formats
* Braaaainnn
Removed aliases that used old naming scheme
* TL:DR Added global bank support, and rework permissions
Renamed `bank_local_clean` to `bank_prune`
Added support for global banks to `bank_prune`
`bank_prune` will now raise `BankPruneError` if trying to prune a local bank and `guild` is not supplied
Renamed `cleanup` subgroup to `prune`
`prune` subgroup will have 3 commands:
`user` : Deletes the bank account for the specified member : Accepts `Union[discord.Member, discord.User, int]`
`global` : Prune global bank accounts for all users who no longer share a server with the bot
`local` : Prune local bank accounts for all users who are no longer in the guild
Changed check for `prune` subgroup to be `@check_global_setting_admin()`
[p]bank prune local : Can be run by Guild owners only
[p]bank prune global : Can be run by Bot Owner only
[p]bank prune user : Can be run by Admins, Guild owners and Bot Owner
* Yikes ... Updated kwarg name
* Fixed unexpected unindent: docstring of redbot.core.bank.bank_prune:14:Field list ends without a blank line
* ...
* 3rd time lucky?
* 4th time lucky?
* Fix Docstring
* Initial commit to address review by Flame
* Updated code to reflect Flame's comments
* Skip pruning of unavailable guilds
* Fixed typo in string
* *sigh* black is the bane of my existence
* addressed Flames commends
Fixed [p]bank prune user, When run via DM it will now return an error message to the user (Thanks jack1142)
* Time to get some sleep
* 'DM' > 'DMs' in string
* Add towncrier entries
Signed-off-by: Draper <guyreis96@gmail.com>
* Update to reflect Flame's review
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Catch discord.errors.Forbidden when DMing a user the invite message
Uses the same error message as `[p]help`
* Create 2948.bugfix.rst
* You saw nothing
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now
`[p]bankset maxbal` can be used to set the maximum bank balance
Signed-off-by: Guy <guyreis96@gmail.com>
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now
`[p]bankset maxbal` can be used to set the maximum bank balance
Signed-off-by: Guy <guyreis96@gmail.com>
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now
`[p]bankset maxbal` can be used to set the maximum bank balance
Signed-off-by: Guy <guyreis96@gmail.com>
* Rename method 🤦
Signed-off-by: Guy <guyreis96@gmail.com>
* Updated this to be aware of #2925
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Addressed Flames review + Fixed 1 bug in errors.py + `[p]leaderboard` and `[p]bank balance` will set the users balance to max balance if the bank maxbal is lower than the previous user balance
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Missed this clarification
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* address Flames review
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
- ``redbot-setup delete`` no longer errors about "unexpected keyword argument" (fix#2955)
- ``redbot-setup delete`` no longer prompts about backup when user passes ``--no-prompt`` option (fix#2956)
- ``--[no-]backup``, ``--[no-]drop-db`` and ``--[no-]remove-datapath`` in ``redbot-setup delete`` command are now on/off flags. ``--no-prompt`` was changed to flag too, but it doesn't have ``--prompt`` equivalent as there's no much point in having it
- ``redbot-setup`` now uses `click.confirm` for confirmation prompts and thy now also have default values for user convenience
* fix(mod): past names are now properly recorded in `on_user_update` event
* chore(changelog): add towncrier entry
* chore(changelog): specify what commands were affected
* Fixed `[p]local start`
Playlist picker auto selects if theres just 1 playlist found
`[p]queue cleanself` added
Signed-off-by: Guy <guyreis96@gmail.com>
* Black.... you are supposed to trigger before commits
Signed-off-by: Guy <guyreis96@gmail.com>
* Added `BalanceTooHigh` to the docstrings of `bank.transfer_credits()`
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* Bring this in line with #2926 to reduce conflicts,`is_global()` already is called inside `get_currency_name` and as such it does not need to be called outside
Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
* [Economy] House always wins in slots
- Expected payout is negative
- No flat increase payouts, all payouts are multiplicative
* actually do math properly
* UX + Changelog
* How the hell did I mess that up?!
* PostgreSQL driver and general drivers cleanup
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Make tests pass
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add black --target-version flag in make.bat
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Rewrite postgres driver
Most of the logic is now in PL/pgSQL.
This completely avoids the use of Python f-strings to format identifiers into queries. Although an SQL-injection attack would have been impossible anyway (only the owner would have ever had the ability to do that), using PostgreSQL's format() is more reliable for unusual identifiers. Performance-wise, I'm not sure whether this is an improvement, but I highly doubt that it's worse.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Reformat
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Fix PostgresDriver.delete_all_data()
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Clean up PL/pgSQL code
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* More PL/pgSQL cleanup
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* PL/pgSQL function optimisations
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Ensure compatibility with PostgreSQL 10 and below
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* More/better docstrings for PG functions
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Fix typo in docstring
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Return correct value on toggle()
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Use composite type for PG function parameters
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Fix JSON driver's Config.clear_all()
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Correct description for Mongo tox recipe
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Fix linting errors
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Update dep specification after merging bumpdeps
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add towncrier entries
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Update from merge
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Mention [postgres] extra in install docs
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Support more connection options and use better defaults
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Actually pass PG env vars in tox
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Replace event trigger with manual DELETE queries
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
I thought it'd be fun to offer lyrics as a trivia, but it can be tricky selecting songs which are known widely enough that a significant number of people have a reasonable chance of answering the questions correctly.
As such, to narrow down the scope, these add trivia questions for Michael Jackson and Prince, two of the most well-known artists across the world whose musical collections are extensive and popular enough to dedicate an entire trivia too.
They're comprised of a variety of lyrics, two lyrics for each song. Players need to name the song from the lyric. Most of the songs are well-known songs from the artist, but there are plenty of challenges too.
Stop saving json files with 4 indents, this will significantly reduce file size and improve `.set()` performance for config saves when using the JSON driver.
Signed-off-by: Draper <guyreis96@gmail.com>
* I know this needs a changelog entry and docs still
* update tests for new behavior
* update docs, filter; add changelog
* Ready for review
* stop fetching the same Audit logs when the bot is the mod
* I forgot to press save
* fix a comprehension
* Fix AttributeError
* And the other place that happens
* timing fixes
* [i18n] Update translation catalogs
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Install redgettext 3.1 in travis crowdin deployment
Last time the catalog templates were updated, redgettext 3.0 was used. I'd rather Travis didn't upload them after extracting with an older version.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Make Requires.verify() wait until rules are loaded
Also ensures `Requires` objects are reset when unloaded, particularly in case a `Command` object manages to stay in memory between cog unload and load, and its permissions rules change between those events.
Also, this PR re-ordered some of the event loop policy stuff, because it was required that the event loop policy be set before creating any `Requires` objects. This may or may not have an effect on other `get_event_loop()` calls elsewhere (either in our code, a dependency's, or asyncio's). Either way, these effects would be a *correction*, and any bugs that arise from it are likely to have been occurring silently beforehand.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Remove calls to `remove_listener()` in permissions
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Fix adding rules for permissions cog/commands itself
Also addresses feedback
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Clean up indentation when setting uvloop policy
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Use `set(walk_commands())` to traverse `Group` subcommands
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [ModLog] Prevent duplicate kwarg error
The `name` key used to be set in the Config for casetypes.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Don't mutate `data` argument
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
This was causing a KeyError to be raised whenever a key containing $ or . was part of the identifiers path, even if the value was actually in the dict.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Context] Adds react_quietly method to context
This allows developers to emojis to command messages
This is a modified version of tick()
It accepts True/False for Tick/Cross emoji and in addition to that any other emoji the bot can see
* Removed True/False support from react quietly
* Stopped catching InvalidArgument on react_quietly so that is propagated to devs
The `folder:` and `localfolder:` prefixes are used internally with some localtracks strings to define what to do with the item when it's cycled through the search function. Users theoretically should have never seen this issue as [p]search is used on the user side for YouTube and Soundcloud searching and not local searching, but this handles the issue where a folder is being passed to these functions that doesn't exist.
Loading repos is already done in initialize() method.
This could actually turn out badly
if both
of git processes would touch the same repo at the same time.
This also fixes create_backup in
setup.py - now it properly generates repos.json
- uvloop is now a dependency on non-Windows CPython systems
- `make setupenv` renamed to `make newenv`
- `make syncenv` added to sync local venv to current dependencies
- `dev-requirements.txt` moved into `tools` directory
* [Core] Fix user output on cog load/reload
- Properly fixes the load/reload exception handling
- Fixes some i18n use here to not make assumptions about other
languages pluralization rules.
* Fix some typos
* Address Flame's Feedback
* It's important to save before committing ...
* formatting
* Fix some formats...
* Fix duplicate commands in fuzzy help
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Use help command's filter for all fuzzy
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
### Replacement for pipenv's environment setup
First of all, there's a new Make recipe for all devs and contributors on both Windows and Posix, `make setupenv`, which is kind of a replacement for `pipenv install --dev`. It creates a virtual environment in `.venv` using the inbuilt `venv` module, clearing out any existing virtual environment if needed first. Then it installs all dev dependencies using our new `dev-requirements.txt` file. `CONTRIBUTING.md` has been updated to reflect all of this.
### Dependency version bumping tool
Secondly, I've added a python script, `tools/bumpdeps.py` to help with bumping dependency versions. It has its own Make recipe too, `make bumpdeps`. This script won't work on Windows (yet). It reads the `tools/primary_deps.ini` file, which contains the primary requirements of Red and its extras with loose version specifiers, and outputs all pinned dependencies, in `setup.cfg` format. It's not a foolproof dependency resolver, it's quite simple, but it's bound to help out a lot. It'll try to give warnings if there might be a version conflict, but updating `setup.cfg` with its output and then doing `pip install -r dev-requirements.txt` will allow pip to issue warnings if something is conflicting.
So to add a new dependency, add it to `tools/primary_deps.ini` in the appropriate place, and either use `make bumpdeps` to completely update all dependencies, or simply add it to `setup.cfg` manually with its sub-dependencies, and all versions pinned.
### Sphinx 2.1.2 (docs changes)
The sphinx update brought along the ability to disable type annotations being rendered in function and method signatures, and I have gladly gone and done that. Type annotations should already be specified under the "Parameters" section, and the way sphinx renders them in function signatures makes them much harder to read.
Also, documented classes will now display what classes they inherit from.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Modlog was the biggest culprit for seriously large documents in the MongoDB backend, since it stored all cases as nested dicts in the guild scope. So, for example, on the Fortnite server, the guild document for Kowlin's bot had exceeded 8MB.
This commit gives each case its own document. It also does the same for casetypes. Not only does it remove the possibility of the document exceeding the maximum size in MongoDB, it's also just more efficient for all backends.
Other misc changes: Fixed a bunch of type-hints, and also added more support for when an object related to a case (user, moderator, channel etc.) can't be found (because it was deleted or something rather)
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* add role mentions to userinfo and reverse role sorting
This small PR adds the role mentions to userinfo and reverses the sorting so that the top most role of a user is at the left of the embed
* Remove sorting as it's handled by d.py
* Adds Schema versioning
- Adds Migration tool
- Adds tool to migrate to allow multiple admin and mod roles
- Supports Multiple mod and admin roles
* Ensures migration is run prior to cog load and connection to discord
* Updates to not rely on singular mod/admin role id
* Update requires logic for multiple mod/admin roles
* Add new commands for managing mod/admin roles
* Feedback
Update strings
Update docstrings
Add aliases
* Use snowflakelist
* paginate
* Change variable name
* Fix mistake
* handle settings view fix
* Fix name error
* I'm bad at Ux
* style fix
- Fixes defaults being mixed into custom groups above the document level when doing `Group.all()`
- Fixes `Config.clear_all()` with Mongo driver
- Fixes `Group.set()` with Mongo driver on custom groups above the document level
- Fixes `IdentifierData.custom_group_data` being set to the wrong thing in `BaseDriver.import/export_data` (although this was an inconsequential bug)
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
- More errors will be logged to the console with clearer messages when something goes wrong
- Downloading the Lavalink Jar will abort after 5 failed attempts. The connect task will also abort if an unhandled exception occurs whilst downloading or connecting to Lavalink. After this occurs, instead of responding "Connection to Lavalink has not yet been established" to commands, the bot will respond "Connection to Lavalink has failed". This has no effect on other commands which don't involve connecting to Lavalink (e.g. settings commands).
- Logs this message when Lavalink jar is successfully downloaded: `Successfully downloaded Lavalink.jar (<x> bytes written)`
- Uses [`tqdm`](https://github.com/tqdm/tqdm/) to display a progress bar whilst downloading Lavalink.jar.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
This still preserves the new event, which was a welcome change. However, context still needs to be invoked when a command isn't found, so `on_command_error` can still catch `commands.CommandNotFound`.
Fixes broken fuzzy help.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add inviteset group command
* Fix errors
* Fix line break
* Remove user bot support
* Fix docstrings line breaks
* Remove embed specific formatting
* Remove invite redirect
* Add self argument to _can_get_invite_url
* Remove unused import
* fix errors related to classes + double help
* Removed self bot support
* same stuff, but with some more spurious error supression
* fix issue in permissions found in this
* fix a few more spurious errors
* fix another issue
* semi-spurious error fixes
* .
* formatting
* move this to properly log
* distutils import + virtualenv
* more fixes
* [Help] Detatch menu usage into a task
- This resolves#2712
- This is a minor API change. Conceptually, the difference is minor in
nature `bot.send_help_for` returns when help has been sent, however
this can now be prior to when the help menu (if one is in use) is
closed.
- This should not be considered breaking as there is and has been a
a warning about this file's APIs being still up for unannounced modifications
No developers should be currently relying on this behavior.
* operator precendence
* [Help] Fix long cog helps
- Why do people thing a category help of over 250 characters is more
useful than putting the help in relevent commands?!
* toss an MD fix in here too I guess
* Add a timedelta converter
This reuses a lot of logic from @mikeshardmind 's scheduler cog with permission
It adds a timedelta converter
It keeps it generalized as requested
It keeps the function available for non converter use as requested
* Handle feedback
* style fix
* Add bot.send_to_owner
resolves#2665
Adds some basic methods and config entries.
Does not add commands for modifying this yet.
* Use send_to_owners in events
* handle feedback
* Add respectable aliases for consistency
* General command name for alias.py
* Forgot one for alias
* General command for filter
* General command for warnings
* Whoops
Resolves#1749
* Fixes some issues with `[p]streamset youtubekey/twitchtoken`
Lots of general formatting bugs and clarity issues.
* General formatting bugs and clarity issues
* [Help] Add settings for various things
- Fixes a small issue in a previously not-exposed logic path
- Fixes an issue with denied commands help invocation
- Adds some global usage settings
* remove outdated comment
* improve intent of strings
* added punctuation
* Add DM forbidden handling
* use a slightly different method for shortening embed width specifically
- fixes#2696
- My fault for just looking at the github diff and seeing the logic fix
on this one, without verifying the name validity in surrounding
context. (see my review in #2679)
* Tools for marking things unsafe for general use
* I'm facepalming so much...
Actually, make the two do something different
instead of getting distracted writing different docs for both based on intended usage.
* local scopes mmkay + tests
* Move file to adress feedback
* typo fix
* Update __init__.py
* Fix issue with exported names in __init__
* changelog
* [Bot] Support new design
* [Context] use the new help in `ctx.send_help`
* [Commands] Update Cog and Group for help compat
- Removes a trap with all_commands, this isn't a good way to check this
- Adds a help property
- Fixes command parsing in invoke
* Redesigns red's help
* handle fuzzy help
* style
* handle a specific ugly hidden interaction
* fix bot-wide help grouping
* changelog
* remove no longer needed -
* Add release notes for major functionality changes and instructions
* Update docs/changelog_3_1_0.rst
Co-Authored-By: Michael H <michael@michaelhall.tech>
* [V3 Economy] lookup users from the guild instead of using stored names
* Make user ID only appear when owner calls the leaderboard and the user is not in the guild also black formatting
* Slight optimizations in formatting and fix error when no banks exist
* Added co-owners to potentially DMd users
* Fetch the cached of every guild, see comments of #2664
* Ensure owners can be DM'd.
* Refactoring try block.
* [Audio] Update for Red-Lavalink #55
* Update setup.cfg
* Catch all the exceptions
* Update version range on Red-Lavalink
* Catch excepts on Spotify tracks/playlist upload
* No prefix needed
* Refactor internal Lavalink server management
Killing many birds with one stone here.
- Made server manager into class-based API with two public methods: `start()` and `shutdown()`. Must be re-instantiated each time it is restarted.
- Using V3 universal Lavalink.jar hosted on Cog-Creators/Lavalink-Jars repository.
- Uses output of `java -jar Lavalink.jar --version` to check if a new jar needs to be downloaded.
- `ServerManager.start()` won't return until server is ready, i.e. when "Started Launcher in X seconds" message is printed to STDOUT.
- `shlex.quote()` is used so spaces in path to Lavalink.jar don't cause issues.
- Enabling external Lavalink will cause internal server to be terminated.
- Disabling internal Lavalink will no longer reset settings in config - instead, hard-coded values will be used when connecting to an internal server.
- Internal server will now run both WS and REST servers on port 2333, meaning one less port will need to be taken up.
- Now using `asyncio.subprocess` module so waiting on and reading from subprocesses can be done asynchronously.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Don't use shlex.quote on Windows
Signed-off-by: Toby <tobyharradine@gmail.com>
* Don't use shlex.quote at all
I misread a note in the python docs and assumed it was best to use it. Turns out the note only applies to `asyncio.create_subprocess_shell`.
Signed-off-by: Toby <tobyharradine@gmail.com>
* Missed the port on the rebase
* Ignore invalid architectures and inform users when commands are used.
* Style fix
* Add `[p]cleanup between`
At the moment, only deletes the messages in between, does not delete the messages specified when running the command.
* Create converter for message IDs; remove f-strings; use converters in a few extra commands
* Sacrifice to the style gods
* feat(downloader): add `min_bot_version` and `max_bot_version`
Adds actually working way of specifying minimum and maximum bot version and removes not working
`bot_version`
BREAKING CHANGE: - removal of `bot_version` attribute in `Installable`
* test(downloader): `Installable` tests fix for new bot version attributes
* docs(changelog): added changelog entries for this PR
* [Streams] Add ability to exclude rerun streams from alerts
* [Docs] Changelog entries for contributions by EgonSpengler
* Changelog entry for #2620 [Streams] Ignore Reruns In Alerts
* docs(changelog): [Mod] Allow admin to choose amount of repeats for "deleterepeats" #2437
* docs(changelog): Spelling correction of method name in Tunnel #2496
* docs(changelog): Tunnel fix - When tunnel closes, message should be sent to other end #2507
* docs(changelog): [V3 Downloader] Tell user how to load the cog after [p]cog install #2523
* docs(changelog): [V3 Audio] If bot has move members perm, it can join to user-limited channels #2525
* docs(changelog): [Trivia] Fix of dead image link (world flags) #2540
* docs(changelog): [V3 Test] Make sure that trivia test will use utf-8 encoding #2565
* docs(changelog): [V3 Core] Print actual version, when `--version` flag is used #2567
* docs(changelog): [V3 Downloader] Stop including subpackages in cog list #2590
* docs(changelog): [V3 Downloader] Uninstall multiple cogs #2592
* docs(changelog): [V3 Downloader] Always remove cog from installed in `[p]cog uninstall` #2595
* Dependency update
discord.py==1.0.1
websockets<7
[style]
black==19.3b0
[Docs]
jinja==2.10.1
urllib3==1.24.2
Changes related to breaking changes from discord.py have also been made
to match
As of this commit, help formatter is back to discord.py's default
* Adds a check to [p]set locale
Fixes#2552
I would like a little bit of feedback on this change.
- Right now, `locale_name` is case sensitive. Should that remain case sensitive or should I allow it to accept it case insensitively?
- I made the invalid locale string an i18n string, however I don't know the process for how those are supposed to be made or if that will break anything. Should that remain an i18n string or should I make it a normal string?
* Case insensitivity and explicit en-US
-`[p]set locale` is now case insensitive
-`en-US` added to `[p]listlocales` instead of only existing in `[p]set locale`'s help text
* Remove spacing
* feat(mod): configurable amount of repeats for "deleterepeats"
resolves#2267
* fix(mod): check user input instead of changing it if it's invalid
* fix(mod): only purge cache when argument is valid
* perf(mod): fetch repeats from config only when guild not in cache
* Pretties up the output when libraries fail to install
* Stupid double quote bullshit
* Added jack1142's suggestion
* I will never satisfy the eldritch being named black
* [V3 Warnings] Utilize modlog cases
This update utilizes modlog cases for warnings and slightly improves usage of custom warnings if enabled.
* remove BadArgument error response
* Utilize Optional and consume-rest for points and reason
* black format
* Remove unnecessary imports, cleanup error handling, and improve docstrings
* swap to click for setup
* Initial changes
* expose some stuff to allow for per-driver optimizations
* overwrite base config
* add red log
* add one print juuuust in case
* fix this
* thanks kowlin
* damn
* oops
* fix thing
* partial commit
* Working mongo -> json conversion, it sucks tho
* remove unused line
* Wrote initial optimized json importer
* optimized json importer
* remove useless line
* update mongo to json converter
* lets try writing the correct entry
* oops
* style fix
* add some garbage data filters going from old mongo to json
* ignore garbage data in mongov2 conversions
* simplify code a bit and add a completion message
* missed one
* Update pipfile lock
* Lock click version
* Do things differently
* Uncomment critical lines
* Reduce, reuse, recycle
* Check groups on all new config objects after a cog loads
* I don't know why this is failing now or why we need the global keyword
* gotta fix this too
* Fix message when user hits max credits
Fixes the error message when a users issues the payday command when having max credits
* Update economy.py
Changed message when user hits max payday and bank is global to match message when bank is per server
* Update economy.py
made statements match
* Require custom group initialization before usage and write that data to disk
* Style
* add tests
* remove custom info update method from drivers
* clean up remnant
* Turn config objects into a singleton to deal with custom group identifiers
* Fix dumbassery
* Stupid stupid stupid
* modify config to use identifier data class and update json driver
* move identifier data attributes into read only properties
* Update mongo get and set methods
* Update get/set to use UUID separately, make clear work
* Remove not implemented and fix get_raw
* Update remaining untouched get/set/clear
* Fix get_raw
* Finally fix get_raw and set_raw
* style
* This is better
* Sorry guys
* Update get behavior to handle "all" calls as expected
* style again
* Why do you do this to me
* style once more
* Update mongo schema
* Logging enhancements and cleanup
- Removed debug log messages every time `Config.get_conf` is used or a JSON file is read/saved. The basic configuration is now logged once with DEBUG when the bot starts up instead.
- Changed logging output format to reverse date order, include seconds, and use the logger's name instead of the module, function and line number.
- Log files are now kept in the `DATAPATH/core/logs` directory. Each time Red is restarted, a new log is created, and the old ones renamed in a rotating fashion. There can be a maximum of 9 logs in total.
- Each log file now has a smaller max size of 500KB before it will be split into multiple parts. There are also a maximum of 9 parts of each log.
- Discord.py logger now uses the same output formatter as red's loggers
- Moved logging setup code into `redbot.logging` module.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Reformat
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Implement discussed changes
- We maintain a red.log over multiple runtimes, alongside a latest.log and previous.log for individual runtimes.
- Naming convention changed a bit. E.g. when latest.log is just one part, it will be named latest.log. When it becomes two parts, they will both be named latest-part1.log and latest-part2.log.
- Rotation direction is reversed. This means as the files end up being named in chronological order.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Filter] Performance increases.
The filter was already using re to split words, this just does the entire search in re instead.
A further improvement to this would cache patterns used and update them if the wordlist changes.
* Add a pattern cache
* exit on no-words
* formatting pass
* keep the return type consistent, even though this doesnt break core since this is available to cogs
* ...
* Quit being an idiot
* Slight further improvements, a fix, and restructure
Moved actual set creation out of the inner portion.
Reduced config lookups in case of no filter.
Fixed channel wordlist fetching.
* I really should go back to using a pre-commit hook for the style stuff
This change adds the help text of "If calling from a command or method of your cog, this should be self." from `bundled_data_path` to `cog_data_path`. This bit of text can help people who are unsure of what a "cog instance" is to understand how to use `cog_data_path`.
* [V3 Mod] Use a composite class for mod
This turns mod.py into acomposite class
I've split things in this up based on purpose, including `movetocore`
`movetocore` is a set of things which likely belong in the core bot and
not relying on mod being loaded.
This is part of #2500
Per discussion in discord, this should be the first thing in #2500
merged
* Move this back,
mod was importable,
and this was intended as non-breaking
* Prevent fix from being lost if merged before this.
see Cog-Creators/Red-DiscordBot#2510
* Move case creation to before sending
see #2515
* fix failed merge done in web
* [V3 Audio] Add Spotify support
* [V3 Audio] Update LICENSE
* Appeasing the style gods
* Extra word removal on LICENSE
* Update for #2389
Thanks to TrustyJAID for the help.
* Playlist command support for Spotify URLs or codes
* Add exception for dc while loading Spotify tracks
* Allow Spotify urls by default in audioset restrict
Matches the behavior of Spotify codes already being allowed by default.
* Update audio.py
* .format() moving
* Added a character to try to make Travis behave
- Seek can now seek to a specific position, formatted like 00:00:00 or 00:00. Using negative or positive ints still functions the same as previously and will seek ahead or behind by that value instead.
- This PR requires the `_time_convert` func added in #2465 and should be merged after that one.
Revert player.is_playing check added to the playing players list for audioset status in #2473. This addition would cause no status to be shown when a local track was played and skip was used.
Searching for a song and pressing the reaction to queue a song would not add the song to the queue if `[p]audioset maxlength` was off. This was an omission from #2465.
This addition adds a toggle for having the bot instantly disconnect when the queue ends. It takes precedence over the `[p]audioset emptydisconnect` setting as it disconnects immediately when the queue or single song is finished.
* Fix translations of multiline strings
Resolves#2408.
Also did a few little optimisations here and there, we're no longer just using copied code from another project.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Reformat
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Also included a Makefile recipe which makes use of the Crowdin CLI's `crowdin download` command. This requires whoever is using it to provide the project's API key in an environment variable, but we may automate this at some point.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Bot owners can use `[p]playlist download playlistname` to download a playlist file that is compatible with the playlist upload command. Songs can also be exported for v2 use by using `[p]playlist download playlistname True`, which strips out tracks besides YouTube or Soundcloud URLs.
SHARED_LIBRARY Installable types did not have the requirements as
defined in info.json automatically installed. This change updates the
installation of libraries to also install their requirements.
Resolves#2381
* Added `[p]audioset maxlength`, which takes seconds or 00:00-style of formatted input for restricting the player to songs that have a length under that threshold.
- Refactored disconnect_timer, the function behind audioset emptydisconnect, to be more appropriately responsive (thanks to TrustyJAID)
- Refactored status clearing/status changing when emptydisconnect or other Lavalink player statuses would have a TRACK_END event but no QUEUE_END event. This should clear or modify the bot's status event appropriately when [p]audioset status is on and the bot disconnects due to emptydisconnect and ideally play a little nicer with other cogs that set statuses.
This creates a central location to store external API tokens that can be used between cogs without requiring each cog to be loaded for it to work.
A new set option for `[p]set api` is created to assist in forming bot readable API token locations.
This also updates the Streams cog to utilize the central database.
Tokens are moved from the old data locations in core cogs on load.
`[p]local folder` will now accept folder names in the command instead of having to navigate through the reaction menu. Also added an alias of `[p]local start` to help users coming from v2 audio.
Also:
- restart and reconnect if connection settings change
- shutdown and restart if not configured to use external
- show a message in [p]play et al. when the connection hasn't been made
- move the JAR download to manager so audio.py can access it
- only start if no process exists
- bump red-lavalink to 0.2.3
Resolves#2306
Also:
- restart and reconnect if connection settings change
- shutdown and restart if not configured to use external
- show a message in [p]play et al. when the connection hasn't been made
- move the JAR download to manager so audio.py can access it
- only start if no process exists
Resolves#2306
This incorporates default rules into the same resolution techniques used by concrete rules.
Resolves#2313.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Utilise setup.cfg, move version info to redbot package
- `redbot.__init__` now is safe to import without installing dependencies.
- Now deploying binary wheel distribution from travis
- Include locale files in sub-packages of cog packages
- python_requires now has no upper limit
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
- When creating a venv, use `python3.7` instead of `python3`
- Remove unnecessary dependency from pyenv pre-requirements on Debian
- Use curl over wget for get-pip on Xenial
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
It would groups the cogs until it is **greater** than the set `page_char_limit` in helpset. This leads to inconsistent page sizes when a large cog was appended to something barely under the limit.
I think this commit will reign in the weirdness by adjusting the secondary grouping to aim for **less than** `page_char_limit` grouping.
This removes the compiler detection logic in setup.py. python-Levenshtein-wheels includes pre-built wheels for virtually all operating systems and architectures we support.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
This is in anticipation of #2246, although I've written that PR to not break on 3.6, the feature itself is not usable on 3.6. So I think the best way forward is to simply require python 3.7. This also allows devs and cog creators to utilise all of the new features in 3.7, and it also updates the docs so all operating systems will have 3.7 installed.
Signed-off-by: Toby <tobyharradine@gmail.com>
- Update to red-lavalink v0.2.0 (blocked by Cog-Creators/Red-Lavalink#41)
- Force lavalink to use TLSv1.2 on java 11+ (blocked by #2270)
I would add equalizer support, but there's no way to know the full
Lavalink version and thus whether it's supported ahead of time.
- Removed `redbot.cogs.mod.checks` module
- Moved logic for formatting a user-friendly list of permissions to `redbot.core.utils.chat_formatting`
- `[p]voice(un)ban` and `[p](un)mute voice` now check permissions in the user's voice channel
Resolves#2296.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
- Removed memory-sided `CogManager._paths` attribute, as it has no practical use.
- `[p]removepath` now removes the actual path displayed with the index specified in `[p]paths`.
- New method for retreiving a deduplicated list of user-defined paths as `Path` objects
- General cleanup so we don't have to do so much head-scratching next time an issue arises here
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
- `load_bundled_data` is now deprecated and obselete
- Bundled data is now no longer copied to the cog's data folder, greatly simplifying its operations under the hood. Instead, `bundled_data_path` will now return the path to the folder from which the files would have previously been copied.
Resolves#2329.
Resolves#2280.
This is a safety measure to prevent accidentally passing a model which has the same name as another model, potentially modifying rules for the unwanted one.
* regex extension on java -version
* make it a non capturing group
* alphanumeric matching
* Match specification: Style, line length
* Update manager.py
Using the OpenJDK 11 from java.net on Ubuntu 18 reports "11" as the version, which failed the Java version check on loading audio on a new instance. This change will return "11 0" as the version, passing the check, instead of just "11".
Also fixed a misspelled kwarg in reports.
Also now raising TypeError for an empty `@checks.has_permissions()` decorator.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Resolves#2091.
This doesn't fix every OverflowError with MongoDB; but at least the seemingly easiest one to achieve with core cogs.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Uses a menu, optionally embedded with respect to the embed settings, for scrolling through the custom command list, each cc with a ~50 character preview. Format is purposefully similar to the help menu.
Resolves#2104.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Some in-progress work slipped through #2149, and I figure it should be fixed before RC2.
I've also just decided to allow discovery of permissions hooks from superclasses as well. We should try to be more aware of the possibility of cog superclasses moving forward.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
- Helper methods mute_user and unmute_user now take GuildChannel instead of solely TextChannel.
- The bot will not attempt to mute a member with the Administrator permission, as that permission bypasses channel overwrites anyway. The bot will still unmute members with the Administrator permission (see #2076).
- Audit reasons are now specified for mass mutes / unmutes.
- A few typos and missing keyword specifiers were corrected.
- Streamlined some logic and used some already-existing functions.
Renames the `current_build` key to `current_version`. This means the `current_version` key will always be a dict and never a list, and `current_build` having no defaults means it won't mess with `[p]audioset settings`.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Allows cog creators to explain clearly why a cog cannot load by raising `redbot.core.errors.CogLoadError`. Instead of having to check in the console what's wrong, the message will directly be sent in the context channel.
When multiple warning actions were registered, and the user didn't exceed the points for the highest action on the list, no action was taken.
Resolves#2106.
Also commented out the casetype registration for warnings, since it's not actually using modlog yet.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Essentially resolves#2038, although this is escaping and not rejecting keys as that issue implies.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
This is a step towards a more consistent front-end behaviour of Config, where errors are either circumvented or raised in the same way regardless of the driver being used.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Resolves#2094.
This command needs some more fixing and cleaning up than this, this is just a simple bugfix which gets it mostly working for now.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
This was thrown when the "default" key existed and Permissions tried to iterate over the list mapping keys as ints.
Also fixed some issues with saving config with keys as `int` instead of `str`.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Alias help would only return the first character of the invoked command previously. This change shows help for basic commands that are aliased (i.e. just `ping`) or aliased commands that have an argument included (i.e. `audioset role beep` with `beep` being a role name)
in the updates were for the i18n translation strings the payday command message was accidentally changed to +(amount) (new balance). This changes it back to its original message +(amount) (currency name)
Allows for non-coroutine awaitables (such as config's `_ValueCtxManager`) to be awaited from debug.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
current_build is now set as a dict, but its default was a list.
This resolves the error an `[p]audioset settings`.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
The new `redbot.core.commands.converter` module was causing default converters to never be found.
Also cleaned up some of the other code (made some methods static, fixed some typing violations)
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Cleanup's helper method to collect messages to delete was incorrectly filtering by check rather than message_filter, causing delete_after to be ignored.
Fix for `playlist list`: added forgotten variable plus return for formatting (fixes#2190)
i18n addditions: DJ Role toggle, Thumbnail display toggle
`audioset settings`: added missed end of line return
`queue` fix: added indentation to not have the currently playing song info repeated in the queue display when playing local songs
`local play` and `local folder` now display the appropriate menu when DJ role is on.
* Implements our required subset of PEP 440 in redbot.core.VersionInfo
* Added unit tests for version string parsing and comparisons
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
[i18n] Improves the coverage and quality of extracted user-facing string literals in the `redbot.core` package and makes them less ambiguous for the translator.
* Uses classmethods to create predicates
* Classmethods allow using a combination of different parameters to describe context
* Some predicates assign a captured `result` to the predicate object on success
* Added `ReactionPredicate` equivalent to `MessagePredicate`
* Added `utils.menus.start_adding_reactions`, a non-blocking method for adding reactions asynchronously
* Added documentation
* Uses these new utils throughout the core bot
Happened to also find some bugs in places, and places where we were waiting for events without catching `asyncio.TimeoutError`
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add files via upload
* Update predicates.py
Changed sender from a discord.Member object to ctx.
Added a channel check.
Combined the same method and channel method into a validator and applied through-out.
valid_role and has_role methods now check for either an id or a name.
contained now uses string.lower() when testing for membership in a collection.
Signed-off-by: Redjumpman <redjumpman@users.noreply.github.com>
Resolves#2160.
Also resolves another issue where the bot will error out when getting the guild's invites when it doesn't have the Manage Server permission.
API changes:
- Cogs must now inherit from `commands.Cog` (see #2151 for discussion and more details)
- All functions which are not decorators in the `redbot.core.checks` module are now deprecated in favour of their counterparts in `redbot.core.utils.mod`. This is to make this module more consistent and end the confusing naming convention.
- `redbot.core.checks.check_overrides` function is now gone, overrideable checks can now be created with the `@commands.permissions_check` decorator
- Command, Group, Cog and Context have some new attributes and methods, but they are for internal use so shouldn't concern cog creators (unless they're making a permissions cog!).
- `__permissions_check_before` and `__permissions_check_after` have been replaced: A cog method named `__permissions_hook` will be evaluated as permissions hooks in the same way `__permissions_check_before` previously was. Permissions hooks can also be added/removed/verified through the new `*_permissions_hook()` methods on the bot object, and they will be verified even when permissions is unloaded.
- New utility method `redbot.core.utils.chat_formatting.humanize_list`
- New dependency [`schema`](https://github.com/keleshev/schema)
User-facing changes:
- When a `@bot_has_permissions` check fails, the bot will respond saying what permissions were actually missing.
- All YAML-related `[p]permissions` subcommands now reside under the `[p]permissions acl` sub-group (tbh I still think the whole cog has too many top-level commands)
- The YAML schema for these commands has been changed
- A rule cannot be set as allow and deny at the same time (previously this would just default to allow)
Documentation:
- New documentation for `redbot.core.commands.requires` and `redbot.core.checks` modules
- Renewed documentation for the permissions cog
- `sphinx.ext.doctest` is now enabled
Note: standard discord.py checks will still behave exactly the same way, in fact they are checked before `Requires` is looked at, so they are not overrideable.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Use `async with Lock` instead of deprecated `with await lock` usage.
Forces a file fsync prior and a directory fsync (where available) after rename to prevent issues with left behind temp files.
Also should clarify: this is not threadsafe. Comments were clarified, function names remain misleading.
If the member is in the guild, delegates to existing ban logic.
Additionally, check that we have ban perms prior to attempting to fetch the existing ban list.
Fixes#2127.
What's changed:
- Fixed issues mentioned on #2031
- Fuzzy help displays more like help manual
- Fuzzy help is easier and more flexible to use
- Fuzzy help string-matching ratio lowered to 80
- Help formatter is more extendable
- Help command has been optimized, cleaned up and better incorporates fuzzy help
- Added async_filter and async_enumerate utility functions because I was using them for this PR, then no longer needed them, but decided they might be useful anyway.
- Added `Context.me` property which is a shortcut to `Context.guild.me` or `Context.bot.user`, depending on the channel type.
Previously, when downloader was loaded, the RepoManager would spawn a task to load available repos. If one repo failed loading for some reason, the function would raise and the remaining repos would never be loaded, however downloader would still appear to load correctly.
This change handles exceptions better during repo loading, but also, if an unhandled exception is raised, downloader will fail to load as it should.
Also included, as requested in #1968, is the --recurse-submodules flag in cloning/pulling repositories.
This change resolves#1950.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Set 3.6.6 as minimum python version on Windows
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Conditional python_requires in setup.py
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Should probably add the comment too
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Downloader] Parse tree URLs when cloning repos
Signed-off-by: Toby <tobyharradine@gmail.com>
* Only match GitHub and GitLab URLs
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [V3 CustomCom] Custom Command Parameters
Allows specifying more parameters for CC's via {0}, {1}, etc. that will be filled by the user invoking the CC. Python-style type hinting and attribute access is also allowed for Discord and builtin types.
> [p]cc add simple greet Hi, {0.mention:Member}!
> ...
> [p]greet zephyrkul
> Hi, @zephyrkul!
The bot will reply with the standard help messages if the cc is incorrectly executed.
> [p]greet me
> Member "me" not found
* black formatting
* check command failure
Only call the custom command if the faked command succeeded.
* misc fixes
1) don't str.strip all the time, it's not family-friendly and doesn't match transform_parameter
2) transform_arg now actually returns strings in every case
3) improve prepare_args parsing security
4) help parameters will show what type they expect
5) make linter less angery
* customcom documentation
I hate rst
* don't require repeated type hinting
If a parameter was type hinted previously, don't require it again.
Ex: `{0.display_name:Member}#{0.discriminator}` is now possible.
* add cog_customcom.rts to index
I despise rst
* don't enforce order
Allow type hinting and attribute access to be in either order.
Ex. `{0:Member.mention}` is now valid.
* clean up on_message
We're building context anyway, may as well use it.
* [doc] correct cog name
Cog class is named CustomCommands, not CustomCom
* minor on_message optimization
only build context if it's needed
* update cc_add docstring
Old one wasn't user-friendly. Replaced with a link to the new docs.
Link will not function until PR is merged and docs refreshed.
* [doc] change repeat to say
repeat is an audio command, use say in the example instead
* compare ctx.prefix to None
allows for null prefixes, which is a bad idea but who am I to judge
* address review
* raise error on conflicting colon notation
bugfix I was working on but failed to actually commit
* Just a test
* another test
* undoing my test
* First solution, style issue
* Works functionally, but there are is a minor style issue
* style fixed
* Revert README changes
* Use ProactorEventLoop on Windows
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Set the actual loop instead of the policy
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* more filters
* note to future people touching this
* chan mentions were almost missed...
* Swap strategies as the previous escaped the mention, while still pinging the user/role
* Correct minimum version
see #2092
While this is needed because of an import just for typing, I see no reason not to bump the minimum version since this is a minor version difference since this is several minor version behind the latest 3.6, and there have been both security and performance improvements since.
That said, we need to be testing on our lowest supported version to ensure we don't have this happen again, right now our tests run on whatever Travis grabs for 3.6, which I assume is 3.6.6, but could be wrong.
* Update other mentions of min version to 3.6.2
* [Streams] Set YouTube channel name when added by ID
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Move unset token raise to correct place
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Correct logic in get_stream
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Fetch name explicitly instead
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Audio] Do less strict matching for java version
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Audio] Fix java version bounds to account for Oracle's bullshit
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [Trivia] Move trivia lists back home
Removes red-trivia as a dependency.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Include package data in distribution
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Add test from red-trivia repo, and fix package data setup
* The distribution will now include all files under any data/ sub-directory of a package, as well as all *.po files under any locales/ sub-directory (as it should have been before).
* MANIFEST.in has been simplified to comply with these changes and redbot/cogs/audio/application.yml has been moved to the data/ sub-directory to maintain consistency in how we declare package data.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* [i18n] Use redgettext over pygettext
* Clear out autogenerated `messages.pot` files
* Remove redundant `regen_messages.py` files
* Refactor `generate_strings.py` to use redgettext
* Install redgettext in Travis Crowdin job
* Clean up some problematic usages of gettext function
* Reformat
* Replace generate_strings.py with Makefile argument
* Update to redgettext 2.1, use exclusion pattern
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Make calling groups useful
This makes config.Group.__call__ effectively an alias for Group.all(),
with the added bonus of becoming a context manager.
get_raw has been updated as well to reflect the new behaviour of
__call__.
* Fix unintended side-effects of new behaviour
* Add tests
* Add test for get_raw mixing in defaults
* Another cleanup for relying on old behaviour internally
* Fix bank relying on old behaviour
* Reformat
* Add output sanitization defaults to context.send
Add some common regex filters in redbot.core.utils.common_filters
Add a wrapper for ease of use in bot.send_filtered
Sanitize ModLog Case's user field (other's considered trusted as moderator input)
Sanitize Usernames/Nicks in userinfo command.
Santize Usernames in closing of tunnels.
* Add documentation
* [V3 Launcher] --user CLI flag
* Better handling of the sys arguments
* Black reformat to -l 99
* Update launcher to PR#2025
* Always append --user if not in a virtualenv
* Remove --user flag
* Revert "[Cleanup] Hotfix for [p]cleanup after (#2004)"
This reverts commit 7959654dc8.
* refactor cleanup
* formatting pass
* put back in try/except block
* Handle missing cogs correctly, add some helpful algorithms
For cog loading, only show "cog not found" if the module in question was the one
that failed to import. ImportErrors within cogs will show an error as they should.
- deduplicator, benchmarked to be the fastest
- bounded gather and bounded async as_completed
- tests for all additions
* Requested changes + wrap as_completed instead
So I went source diving and realized as_completed works the way I want it to,
and I don't need to reinvent the wheel for cancelling tasks that remain
if the generator is `break`ed out of. So there's that.
* [V3] Stop `tmp` dir showing up
* [V3] Remove requirements.txt and declare in install_requires
* Remove requirements.txt from tox.ini
* Update and pin all dependencies and sub-dependencies
* Update for breaking changes
* Reformat
* Update docs/requirements.txt and tox.ini requirements
* Add 3.7 to identifiers and travis/tox builds
* Attempt at fixing the travis build matrix
* Attempt #2
* Attempt 3
* aiohttp.ClientSession.close() -> detach() in sync code
* Add raven-aiohttp to requirements
* Fix stuff in setup.py
- Added discord.py back into requirements list
- Fix typo in alabaster extra requirement
Also in the Pipfile:
- Removed allow_prereleases and explicitly pinned black, since this is the only dep we want a prerelease for.
* Update to Rapptz/discord.py@8ccb98d395
* Add proper 3.7 build in Travis
See travis-ci/travis-ci#9815
* Which version of 3.6 does Xenial install then?
* Maybe we should stop pipenv installing useless stuff
* Nevermind, back to specific minor version
* Remove lots of WET dependency stuff
* Fix egg fragment for dependency link
* enforce commands as ours
* clearer user feedback
* No more 'one more tweak' commits without verifying anyway
* more detailed error with docs link + docs update
Resolves#1972.
* [CogManager] Correctly manage core and install paths
This keeps the core and install paths separate from those set in the
config.
It also displays the core path separately in `[p]paths`
Resolves#1982.
* [CogManager] Fix old reference to method removed in previous commit
Also did a bit of a general cleanup of cog_manager.py's code
* Make the core path a class attribute
* [CogManager] Paths should default to a list
* [V3 Modlog] Make the case number optional
If not specified, it will be the latest case.
* Fix some errors
* Black reformat
* More info for usage string
* Use isdigit instead of isnumeric
Fixes#1943
This just skips cogs when `__module__` is None. Also:
- backported rapptz/discord.py#621
- moved RPC handler unregister to remove_cog()
- raise an exception when a load would overwrite an existing extension
* Changed urban dictionary for my embed version
* Used black for formatting
* Fixed everything according to Tobotimus's review
* Fixed the description limit to 2048 characters
* Better fix adding "..." at the end if neccessary
* Add non-embed version
* Blackify
* [V3 Audio] Fix for playlist queue duplicates
And some sanitizing of playlist names.
* [V3 Audio] Playlist naming standardization
Enforced single-word playlist name across all playlist commands, removed A-Z 0-9 name standardization. [p]playlist delete will still accept playlist names with quotes as there should be a way to remove already-existing playlists with spaces in their name.
* [V3 Audio] Black formatting
* [V3 Warnings] clarify text on entering commands
* Fix up action commands and allow for no command on both add and remove
* Notify warned user when they receive a warning + disallow warning and unwarning self
* Add myself to COOWNERS for the warnings cog
* basic caching layer
* bit more work, now with an upper size to the cache
* cache fix
* smarter cache invalidation
* One more cache case
* Put in a bare skeleton of something else still needed
* more logic handling improvements
* more work, still not finished
* mass-resolve is done in theory, but needs testing
* small bugfixin + comments
* add note about before/after hooks
* LRU-dict fix
* when making comments about optimizations, provide historical context
* fmt pass
* [v3 Reports] Rewording Responses/Docstrings
* Add the old name for [p]reportset toggle as alias
Also made some lines a bit shorter
* A few more
* Fix typo
* Clarity in [p]report docstring
When [p]payday is used with a global bank, the number place shown on the message is relative to the global leaderboard. Since [p]leaderboard shows the server leaderboard by default, this can be confusing on a global bank as payday will most likely report a different place number than the user's server leaderboard does.
* Ability to run Red with token without instance
* --no-instance flag
* Reformatted cli with black
* Fix changes requested by @Tobotimus
- Use "system reboot" to be clearer
- save_default_config renamed to create_temp_config
- More documentation for the create_temp_config function
* Update create_temp_config call
* Fix up imports
* [V3 Downloader] Allow to use the prefix in install msg
* Update docs
* Let's do the same for repo addition
* Fix indent
* Use replace instead of format
* Update docs
* [V3 Mod] Userinfo past nicks/names
Prevents trying to do a string replace on a NoneType
* address root cause as well
* remove extra whitespace that got pasted in from web editor
* [V3 JSON] Return deepcopy in JSON driver
* Add a test
* foo not bar
* Add a test for setting and then mutating
* Resolve issue for setting and mutating as well
* Reformat
* This fixes the issue on report's side
* This prevents delete_delay from causing future issues where message objects are needed
* black format pass
* use the tools we have to clean this logic up a lot
* Switch RPC libs for websockets support
* Implement RPC handling for core
* Black reformat
* Fix docs for build on travis
* Modify RPC to use a Cog base class
* Refactor rpc server reference as global
* Handle cogbase unload method
* Add an init call to handle mutable base attributes
* Move RPC server reference back to the bot object
* Remove unused import
* Add tests for rpc method add/removal
* Add tests for rpc method add/removal and cog base unloading
* Add one more test
* Black reformat
* Add RPC mixin...fix MRO
* Correct internal rpc method names
* Add rpc test html file for debugging/example purposes
* Add documentation
* Add get_method_info
* Update docs with an example RPC call specifying parameter formatting
* Make rpc methods UPPER
* Black reformat
* Fix doc example
* Modify this to match new method naming convention
* Add more tests
* prevent the bot from being a modlog target
* prevent heirarchy issues in mod
* modify this comparison to avoid more complex mocking of the guild object in mod test
* spelling
* Cleanup quotes in cogs
* More quote cleanup that I missed
fixed a little bit of grammar here and there as well.
* [V3 Warnings] Change allowcustomreasons docstring
To help not confuse users who would believe that the command would use allow or disallow.
* Run black reformat
* implements local whitelist/blacklist which had unused bot.db settings
This includes a role listing
* format pass
* Update core_commands.py
* .
* black format pass
* [V3 Fuzzy search] fix several issues with this feature
* Make it check if parent commands are hidden
* Check if compiler available in setup.py
* Let's just compile a dummy C file to check compiler availability
* Add a missing import + remove unneeded code
* [V3] Ignore .idea folder entirely
Since we're not including anything from it currently, so there's no reason not to ignore it.
* Ignore IDEA project files
* Extract load/unload/reload
* Add a few more commands
* Refactor load/unload signature
* Add invite URL and version info
* Black fixes
* Split the incoming cog names in reload correctly
* Reformat
* Remove meta.bot
* use bot's color if it has one
* add bot color support to context
* alias color to colour too to match d.py consistency
* Update context.py
* Update context.py
* black fix
* Give modlog case objects the bot as an attribute
* Dispatch modlog_case_create and modlog_case_edit events
* case.bot, not just bot
* fix a couple more issues resulting from refactor
* Case.edit doesn't need the bot parameter lol
* Make create_case return the case object (because tests)
* Modify create_case docstring
* Fix a docstring
* Update and rename README.rst to README.MD
* Update and rename README.MD to README.rst
Changed the file type back to rst from MD
* Update README.rst
Changed image size.
* Update README.rst
Changed the cogs.red link to point at issue 1398 until the portal displays V3 cogs.
* Update README.rst
Changed image host to imgur
* [V3 Core] Enhance [p]backup to exclude some files
* Backup the repo list too
* Lol Sinbad's pre-commit hook
* Add option of sending the backup to the owner via DM
* Drop an unnecessary config object in RepoManager
* Move the backup functionality in redbot-setup to the new stuff
* More work on implementation, including backing up the instance data
* [V3 Core] add support for setting a color for embeds
* Add a guild toggle for whether to use the bot color
* Add a function for getting embed color in Context
* Coroutines need to be awaited lol
* [V3 Launcher] Fixed issue with update choice
extras_selectors() was run even if what the user did input for the development choice (stable/dev) was wrong
* [V3 Launcher] Option to go back when updating
* [V3 Launcher] Fixed coding style
* [V3] Start work on fuzzy command search
* Implement in command error handler
* Something isn't working here, try fixing
* Style compliance
* Add fuzzywuzzy to pipfile
* Dump the short doc part if there is no short doc
* Add fuzzy command search on command not found in help
* Move things around, implement for use of default d.py help formatter
* Formatting compliance
* Undo pipfile changes
* This starts setting up checks.py to handle managed permission overrides
* A decent starting point, more work to come
* missing else fix
* more work on this
* reduce redundant code
* More work on this...
* more progress
* add a debug flag to some things in .resolvers to help with exploring why checks behave in a certain way
* modify this to be a list for ease of showing full resolution order
* more
* don't bypass is_owner, ever
* remove old logic about ownercommands
* better handling of chec validity
* anonymous functions return None for __module__, remove some code as a result
* mutable default bind fix
* Add a caching layer (to be invalidated as needed)
Ensure checks in the chain inserted before the core logic only return None or False
(whitelists then blacklists are checked first in core logic, from most to least specific scope, overriding this with an allow does not make sense)
* more progress, slow work as I have time
* Modifies the predicates so that their inner functions are accesible from cogs without
being a check
* Update checks.py
Safety for existing permissions.py cogs
* This is where I take a change of course on setting this up,
because this would have been the most long winded interactive command ever as
it was starting to progress.
This is going to support individual entry updates, settings from yaml, gettings, and clearing existing settings
as well as printing a settings template out and referring people to what is going to be very well written docs
* block permissions cog from being unblocked by the permissions cog as a safety feature (really, co-owner exists at this point)
* WIP
* Okay, this has the intent of the changes, just to actually test these as working as intended + add corresponding guild functions
* oh nice, missed a couple files, sec...
* WIP, also, something's broken in resolvers or check_overrides >>
* This is working now (still needs docs and more...)
* unmerge changes from other PR
* is_owner still needs to exist in here due to management of non checked commands
* Update this to new style standards
* forgot to commit some local changes earlier
* fix update logic
* fix update logic
* b14 fix, lol
* fix issue with management command name
* this isnt a real fix
* Ok..
* perms
* This is working, but needs docs and more configuration opts now
* more
* Ux functions, need testing
* style
* fix using the obj str rather than the id
* fix CogOrCommand converter
* Return the correct things in the converter
* last fix, needs docs, and possibly some extra Ux utils
* start doc writing
* extra user facing commands
* yaml docs
* yaml fix
* secondary checks-fix
* 3rd party check stuff
* remove warning that this isn't ready yet
* swap ctx.tick for real responses, require emoji perms for interactive menuing, better attr handling for nicknames
* send file to author
* alias to `p`
* more ctx tick removal
(This is a long ass changelog...)
* [V3 Docs] drop ffmpeg from CentOS install guide
* [V3 Install Docs] move all to Python 3.6
* Update the toctree
* Needed a blank line
* drop a .6 that wasn't needed
* Update CONTRIBUTING.md with details on new dev workflow
* Fix typos
* Update link in README.rst
* tiny grammar fix
* Specify the line length
* Update CONTRIBUTING.md
* Fix links in contents
* Add section for keeping dependencies up-to-date
* Include notes about Makefile
* [V3 Audio] [p]llsetup fixes
[p]llset wsport changed to not use the rest port setting and both the rest and ws ports were changed to use ints instead of strings.
* [V3 Audio] Version change
* Update travis to not sip pipfile lock
update pipfile dependencies
additional black formatting pass to conform to black 18.5b
* .
* pin async timeout until further discussion of 3.5 support
* .
* Configure tox environments for install, dev install and docs build
* Configure Travis to run tox
* Use 3.5.1 since it's our minimum supported version
* Bump lower travis build version to 3.5.2
Turns out a dependency is incompatible with 3.5.1.
* Modify Travis config to install from pipenv
* Try without skipping the lock
* Try without pip cache
* D the dev install with pipenv
* See if adding the pip cache back in breaks
* Remove the development installation
It doesn't really make any sense considering we already should be installed in develop mode, as does Travis.
* Oops, tox should go under dev packages
* Do black --check with tox
* Uncache pip again...
* Try a build matrix, and try ignoring virtualenvs
* Activate pipenv shell on travis
* Try installing prereleases
* Try the build matrix like this
* Try exclusion
* Upgrade pip
* Try this environment marker
* Back to stages...
* Try run over shell
* Try skipping the lock again
* This'll be faster but probably ignore 3.5
Because Travis
* Just manually list sources for black to check
* Magic?
* What if I told you...
That this worked perfectly on Tobotimus/Red-DiscordBot@test_travis_matrix
* It couldn't possibly be this easy
* Let's add some comments to be nice
* Let's change back to trusty just in case the stages fuck up
* Add another comment because why not
* Let's try caching pip one more time
* We don't need to whitelist these
* Upgrade sphinx version to 1.7+
* Fix title overlines/underlines in autostart_systemd.rst
* Skip trying to document a method from discord.py
* Add escaped space after backtick
* Escape underscores (sphinx tries to interpret a hyperlink)
* Use fully qualified reference for class
* Fix reference in tunnel.py
* Remove python syntax highlighting in data_converter.py
For some reason sphinx couldn't lex these as python. Removing the highlighting seems like the logical solution for now, since if it wasn't being lexed, it wouldn't highlight anyway.
* Comment out static path since we're not using it right now
* Update sphinx version in docs requirements too
Would rather remove this duplication but RTD is a special snowflake
* This starts setting up checks.py to handle managed permission overrides
* missing else fix
* don't bypass is_owner, ever
* Modifies the predicates so that their inner functions are accesible from cogs without
being a check
* Update checks.py
Safety for existing permissions.py cogs
* block permissions cog from being unblocked by the permissions cog as a safety feature (really, co-owner exists at this point)
* un mix the 2 PRs (*sigh*)
* Update checks.py
remove debug prints that got lost inshuffle
* [V3 Audio] Update queue and search to use menus
* [V3 Audio] Fix for playlist upload saving
* [V3 Audio] Add position in queue to enqueued songs
Also a bit of cleanup.
* [V3 Audio] Improvements for mobile formatting
* This sets the default behavior for `get_messages_for_deletetion()` to not include pinned messages, while providing a way to override that
resolves#1589
* actually make commands parse for pinned deletion
* fix capitalization
* [V3 Streams] cache stream alert messages across restarts
* Add some stuff to debug this
* More debug stuff
* More debug stuff
* Actually save when updating a stream alert
* Remove debug stuff
Fixes#1620
* moves ping to core commands
defaults ping behavior to reacting with a ping pong paddle with ball
adds an optional boolean flag to ping to get the avg latency from the bot
(strikes a middle ground with intended behavior from dev standpoint, and how users want it)
* casing for @Kowlin
* use correct check for permissions
* remove latency
* Framework for internationalised command help
* Translator for class docstring of cog
* Remove references to old context module
* Use CogManagerUI as PoC
* Replace all references to RedContext
* Rename CogI18n object to avoid confusion
* Update docs
* Update i18n docs.
* Store translators in list instead of dict
* Change commands module to package, updated refs in cogs
* Updated docs and more references in cogs
* Resolve syntax error
* Update from merge
* [V3 Parser] Added --load-cogs flag
* Removed old PR data
* Removed old PR data
* Removed old PR data
* Slightly reword help for flag
* Stick to convention for checking if sequence is empty
* Fix some logic errors
* Don't print packages which failed to load
* [V3 Launcher] Reinstall Red option
* [V3 Setup] Divided remove_instance function
* Removing changes from another PR
* Indent fails fix
* use remove_instance_interaction for --delete
* Fix some issues with remove_instance
removed `index: int` because what's being passed there is a string
data -> instance_data
* bug fixes, working version
* [V3 Utils] start on a menu system
* Fix conflicting names
* [V3 Menus] change order of default controls
* [V3 Menus] add a message check to the react check
* Add a note about original source and who ported
* Compare message ids, not the objects themselves
* [V3 Audio] Add Lavalink Jar build to settings
Added Lavalink Jar build to Lavalink settings since build number now stored in config.
* Forgot import
Added import
* Left align
K im done for real this time
* Add settings for external lavalink servers
* Add external lavalink server to settings display
* Add simple error handling
* Remove future permissions conflict
Assuming base Red permissions will be accessed with the 'p' command in the future
* Update prev to set requester to user instead of id
* Various fixes
Jukebox: Plebs not in a channel will not have the song cost deducted before the warning to join a channel first.
DJ role: Finer grained permissions for plebs that are alone: they can use prev (if shuffle is off), skip, pause, resume
* Update permissions
* Add track number to footer when queueing
* Add basic playlist saving
More subcommands to come later
* Check if user is not in voice
* Restrict playlist deletion to author and mods
* Add playlist info command
* supress pynacl warning
* move the supression to __init__.py
* ..
* Revert "move the supression to __init__.py"
This reverts commit ee7ba9c968.
Doesn't properly work here
* Changes are fine in __init__.py
Needs a module level import in __main__.py or the console scripts generated by pip setup don't ever run the code in __init__
* supress pynacl warning
* puts the changes back again to avoid duplicate module import warning
* Okay, let's fix the issues here hopefully.
* This is working now
* Unfinished, and needs a lot of testing.
* more work
* working
* minor thing to remove
* improve i18n and usage feedback
* Added Arch Installation guide
For prereqs:
python-pip pulls python which pulls required packages libffi and openssl
Removed ffmpeg for Java replacement
* index
Adding the guide to the index sounds like a smart idea...
* Removed libsodium
Not needed after all
* added --user flag to installs for pip
* Documentation extras
Added links to each distro's user add functions
Added systemd service guide
Added --user operator to pip install commands
* Update autostart_systemd.rst
Added no-prompt flag
* typo fix
* update docs with up to date reqs (remove old) and reccommend venv usage
* remove youtube_dl from reqs
* adding the mac doc update after verifying correctness
* venv installation required for py3.5 ...
* remove venv stuff, that can be handled on a unified page in a later PR
* More docstrings
* still not ready...
* push this untested pile of code.
* working, menu needs cleaning up though, modlog converter not here yet
* menu cleanup
* add note about the fact that values are overwritten
* add i18n
* User friendlier quitting
* Better naming of a function
* setup automodule for dataconverter
* More documentation
* use Config.MEMBER (etc) instead of 'MEMBER' (etc)
* [V3 Audio] Add voteskip and DJ role
* Fix connection time storage for audiostats
* Update pause command for more explicit handling
Partially fixes#1478. Users will need to use pause twice before resuming until issue no. 20 on the Red-Lavalink repo is addressed.
* Update pause command
* Update pause command
* Add jukebox mode
Adds a price option for enqueuing songs. If DJ mode is active when jukebox mode is active, no one is charged credits as mods are exempt and plebs can't queue songs without the DJ role.
* Add the identifier as an initialization parameter
* Remove config object singleton and opt for a shared JSON datastore
* Fix bot unloading to deal with memory leaks
* Fix tests
* Fix clear all bug
* [V3 Image] actually check if a client id is set before making request
* Clarify imgurcreds docstring + drop guild_only from [p]imgur
* Fix the actual problem (bad urls)
* needs to be params not data
* [V3 Audio] Bump timeout connecting to Lavalink
Lavalink server can take 20-35 seconds to start, bumped to 50 seconds for good measure.
* Update audio.py
Added proper timeout
* Update __init__.py
Removed old timeout
* [V3 CogManagerUI] implement text-only support in [p]cogs
* Change page length to 1800 + workaround for pages starting with delim
* [V3 Core] text mode support for [p]contact and [p]dm
* Implement text-only support in modlog and fix everything that broke because of it
* Fix modlog stuff in filter too
* Fix tests
* Implement optional embed support in [p]help
* move to .format
* [V3 Instance setup] import backup support for instances using Mongo
* remove_instance is now a coroutine + remove NIE
* move Mongo import down
* move another import
* [V3] Allow load, unload and reload to deal with multiple packages
This PR allows multiple packages to be loaded, unloaded or reloaded with the one command, the packages are delimited by the space character as suggested by Will
This is just the functionality, I'm sure the code could be better
* introduced helper function for getting package load strings
* missed characters
* forgotten import 👀
Forgot to include the import `inline` method from chat_formatting
* [V3 Core] add settings for whether to use embeds or not
* Implement commands to toggle embed settings
* Add a function to context for finding whether to use embeds or not
* Hide [p]embedset for now
* Move embed_requested to bot
* Add a simple helper in context
* [V3 Streams] fix community alerts
* drop unneeded parentheses + delete messages when removing from cache
* move to one embed for a community
* fix adding image to embed
* Remove unneeded params
* Really helps to point to the right place
* drop the game, move channel name+link to value
* Use stream title in embeds
* Increase number of streams to grab to 100
* filter out streams with existing individual alerts in the channel
* need channel id, not stream id in filtering function
* sample from the list
* we only want to break out if the alert is a TwitchStream alert
* drop off sending the mentions if there are none
* [V3 Audio] Update audio for Red-Lavalink
* Update requirements for new library
* Fix logic for connect time storage for audiostats
Only store time when connecting to the voice channel.
* [V3 Economy] implement suggestions from #1371
* Fix a typo
* Add functions for getting leaderboard and leaderboard position
* Use the new functions to get leaderboard position and leaderboard (overrides https://github.com/Cog-Creators/Red-DiscordBot/pull/1435)
* Actually implement showing only guild members on leaderboard when bank is global
* get_leaderboard_position needs to be awaited
* For global bank, pass None for guild to get_leaderboard when trying to find position
* Remove some unneeded code
* Wrong index...
* Combine 3 messages into 1
* Fix guild leaderboard while bank is global
* add missing parentheses
* Modify the leaderboard formatting
* More work on leaderboard formatting
* no subtraction
* [V3 Instance Setup] start work on storage swapping
* This should do the trick for Mongo -> JSON
* Fix typo
* Fix a few more typos
* resolve the data path
* Upsert the imported data
* need a list of the documents
* to_list is a coro
* [V3 Cleanup] refactor to consolidate duplicate code
* [V3 Cleanup] make the prompting function a staticmethod
* Drop continuing message + add punctuation to docstrings
Help didn't account for docstrings passing length limits which I noticed a while ago and as noticed again when Palm forgot a dual newline in a command docstring.
This PR sees to fix this by enforcing length limits on description, field names and field values
* Revert "[V3 Core] Encoding issue fix (#1365)"
This reverts commit f6903cf582.
* Don't let the system encoding screw with things,
specify opens as happening with utf-8 encoding
(cherry picked from commit c10e4dddca)
* Don't let the system encoding screw with things,
specify opens as happening with utf-8 encoding
* And also deal with encoding issues because windows is a special snowflake
(see: #1366)
* let's just use the encoding param in str() rather than encode/decode...
* Fix repeat
Also remove restriction on if the player is playing.
* Auto-delete existing Now Playing message
* Auto-delete existing notify message
* Wrap line on Now Playing message
* Add connected duration to audiostats
_dynamic_time based on a function written by Redjumpman
* Return negative seek past song start as 00:00:00
* Version number
* [V3 Warning] initial work on a warning system for v3
* [V3 Warning] rename some stuff and add a case type
* [V3 Warnings] rename package from warning
* [V3 Warnings] restructuring commands
* [V3 Warnings] remove expiry stuff + other refactoring
* [V3 Warnings] refactoring action logic
* [V3 Warnings] rewrites to action logic
* [V3 Warnings] add regen_messages.py
* Add get_raw/set_raw
* Add default to get_raw
* Add custom group method to the config object
* Add more methods for custom groups
* Add some docstrings
* Deepcopy the result of get_raw, throw TypeError if no value is passed to set_raw
* Do it right..
* Better way to require kwarg
* Fix#1326
Checks to see if `author` is a `valid_user` (of `Member` class) before checking to see if the bot `is_mod_or_superior` to the `author`.
* Fix#1202
Raises `TypeError` when `User` objects are passed into `is_mod_or_superior` or `is_admin_or_superior`, as only `Member` objects have a `guild` attribute.
* Fixes#1202
Checks to see if `author` is a `valid_user` (of `Member` class) before checking to see if the bot `is_mod_or_superior` to the `author`.
* Fix#1321
Modifies the game-checking lines so that they don't assume `user.game` is not a NoneType object.
* Fix#1321
Modifies the game-checking lines so that they don't assume user.game is not a NoneType object. Also alerts the user to go bother @tekulvw if somehow the invariants of `user` having a `game` attribute and the `game` attribute either being `None` of having a `type` attribute in `[0, 1, 2, 3]` are broken.
* Update general.py
The use of `popitem` makes the right side of line 642 return a tuple of the form `(repo, (old, new))` instead of a dictionary of the form `{repo: (old, new)}`, as expected by the left hand side of the same line.
2018-02-19 22:41:19 -05:00
1805 changed files with 761366 additions and 14766 deletions
First off, thank you for contributing to the further development of Red. We're always looking for new ways to improve our project and we appreciate any help you can give us.
### Why do these guidelines exist?
Red is an open source project. This means that each and every one of the developers and contributors who have helped make Red what it is today have done so by volunteering their time and effort. It takes a lot of time to coordinate and organize issues and new features and to review and test pull requests. By following these guidelines you will help the developers streamline the contribution process and save them time. In doing so we hope to get back to each and every issue and pull request in a timely manner.
### What kinds of contributions are we looking for?
We love receiving contributions from our community. Any assistance you can provide with regards to bug fixes, feature enhancements, and documentation is more than welcome.
# Ground Rules
We've made a point to use [ZenHub](https://www.zenhub.com/) (a plugin for GitHub) as our main source of collaboration and coordination. Your experience contributing to Red will be greatly improved if you go get that plugin.
1. Ensure cross compatibility for Windows, Mac OS and Linux.
2. Ensure all Python features used in contributions exist and work in Python 3.5 and above.
3. Create new tests for code you add or bugs you fix. It helps us help you by making sure we don't accidentally break anything :grinning:
4. Create any issues for new features you'd like to implement and explain why this feature is useful to everyone and not just you personally.
5. Don't add new cogs unless specifically given approval in an issue discussing said cog idea.
6. Be welcoming to newcomers and encourage diverse new contributors from all backgrounds. See [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/).
# Your First Contribution
Unsure of how to get started contributing to Red? Please take a look at the Issues section of this repo and sort by the following labels:
* beginner - issues that can normally be fixed in just a few lines of code and maybe a test or two.
* help-wanted - issues that are currently unassigned to anyone and may be a bit more involved/complex than issues tagged with beginner.
**Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
At this point you're ready to start making changes. Feel free to ask for help; everyone was a beginner at some point!
# Getting Started
### Testing
We've recently started adding unit-testing into Red. All current tests can be found in the `tests/` directory at the root level of the repository. You will need `py.test` installed in order to run them (which is already in `requirement.txt`). Tests can be run by simply calling `pytest` once you've `cd`'d into the Red repository folder.
### To contribute changes
1. Create your own fork of the Red repository.
2. Make the changes in your own fork.
3. If you like the changes and think the main Red project could use it:
* Ensure your code follows (generally) the PEP8 Python style guide
* Create a Pull Request on GitHub with your changes
### How To Report A Bug
Please see our **ISSUES.MD** for more information.
### How To Suggest A Feature Or Enhancement
The goal of Red is to be as useful to as many people as possible, this means that all features must be useful to anyone and any server that uses Red.
If you find yourself wanting a feature that Red does not already have, you're probably not alone. There's bound to be a great number of users out there needing the same thing and a lot of the features that Red has today have been added because of the needs of our users. Open an issue on our issues list and describe the feature you would like to see, how you would use it, how it should work, and why it would be useful to the Red community as a whole.
# Code Review Process
We have a core team working tirelessly to implement new features and fix bugs for the Red community. This core team looks at and evaluates new issues and PRs on a daily basis.
The decisions we make are based on a simple majority of that team or by decree of the project owner.
### Issues
Any new issues will be looked at and evaluated for validity of a bug or for the usefulness of a suggested feature. If we have questions about your issue we will get back as soon as we can (usually in a day or two) and will try to make a decision within a week.
### Pull Requests
Pull requests are evaluated by their quality and how effectively they solve their corresponding issue. The process for reviewing pull requests is as follows:
1. A pull request is submitted
2. Core team members will review and test the pull request (usually within a week)
3. After a majority of the core team approves your pull request:
* If your pull request is considered an improvement or enhancement the project owner will have 1 day to veto or approve your pull request.
* If your pull request is considered a new feature the project owner will have 1 week to veto or approve your pull request.
4. If any feedback is given we expect a response within 1 week or we may decide to close the PR.
5. If your pull request is not vetoed and no core member requests changes then it will be approved and merged into the project.
### Differences between "new features" and "improvements"
The difference between a new feature and improvement can be quite fuzzy and the project owner reserves all rights to decide under which category your PR falls.
At a very basic level a PR is a new feature if it changes the intended way any part of the Red project currently works or if it modifies the user experience (UX) in any significant way. Otherwise, it is likely to be considered an improvement.
# Community
You can chat with the core team and other community members about issues or pull requests in the #coding channel of the Red support server located [here](https://discord.gg/red).
* [5.3 Differences between "new features" and "improvements"](#53-differences-between-new-features-and-improvements)
* [6. Community](#6-community)
# 1. Introduction
**Welcome!** First off, thank you for contributing to the further development of Red. We're always looking for new ways to improve our project and we appreciate any help you can give us.
### 1.1 Why do these guidelines exist?
Red is an open source project. This means that each and every one of the developers and contributors who have helped make Red what it is today have done so by volunteering their time and effort. It takes a lot of time to coordinate and organize issues and new features and to review and test pull requests. By following these guidelines you will help the developers streamline the contribution process and save them time. In doing so we hope to get back to each and every issue and pull request in a timely manner.
### 1.2 What kinds of contributions are we looking for?
We love receiving contributions from our community. Any assistance you can provide with regards to bug fixes, feature enhancements, and documentation is more than welcome.
# 2. Ground Rules
1. Ensure cross compatibility for Windows, Mac OS and Linux.
2. Ensure all Python features used in contributions exist and work in Python 3.8.1 and above.
3. Create new tests for code you add or bugs you fix. It helps us help you by making sure we don't accidentally break anything :grinning:
4. Create any issues for new features you'd like to implement and explain why this feature is useful to everyone and not just you personally.
5. Don't add new cogs unless specifically given approval in an issue discussing said cog idea.
6. Be welcoming to newcomers and encourage diverse new contributors from all backgrounds. See [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/).
# 3. Your First Contribution
Unsure of how to get started contributing to Red? Please take a look at the Issues section of this repo and sort by the following labels:
* beginner - issues that can normally be fixed in just a few lines of code and maybe a test or two.
* help-wanted - issues that are currently unassigned to anyone and may be a bit more involved/complex than issues tagged with beginner.
**Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github)
At this point you're ready to start making changes. Feel free to ask for help; everyone was a beginner at some point!
# 4. Getting Started
Red's repository is configured to follow a particular development workflow, using various reputable tools. We kindly ask that you stick to this workflow when contributing to Red, by following the guides below. This will help you to easily produce quality code, identify errors early, and streamline the code review process.
### 4.1 Setting up your development environment
The following requirements must be installed prior to setting up:
- Python 3.8.1 or greater
- git
- pip
If you're not on Windows, you should also have GNU make installed, and you can optionally install [pyenv](https://github.com/pyenv/pyenv), which can help you run tests for different python versions.
1. Fork and clone the repository to a directory on your local machine.
2. Open a command line in that directory and execute the following command:
```bash
make newenv
```
Red, its dependencies, and all required development tools, are now installed to a virtual environment located in the `.venv` subdirectory. Red is installed in editable mode, meaning that edits you make to the source code in the repository will be reflected when you run Red.
3. Activate the new virtual environment with one of the following commands:
- Posix:
```bash
source .venv/bin/activate
```
- Windows:
```powershell
.venv\Scripts\activate
```
Each time you open a new command line, you should execute this command first. From here onwards, we will assume you are executing commands from within this activated virtual environment.
**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -Ur tools/dev-requirements.txt` after setting it up.
### 4.2 Testing
We're using [tox](https://github.com/tox-dev/tox) to run all of our tests. It's extremely simple to use, and if you followed the previous section correctly, it is already installed to your virtual environment.
Currently, tox does the following, creating its own virtual environments for each stage:
- Runs all of our unit tests with [pytest](https://github.com/pytest-dev/pytest) on python 3.8 (test environment `py38`)
- Ensures documentation builds without warnings, and all hyperlinks have a valid destination (test environment `docs`)
- Ensures that the code meets our style guide with [black](https://github.com/psf/black) (test environment `style`)
To run all of these tests, just run the command `tox` in the project directory.
To run a subset of these tests, use the command `tox -e <env>`, where `<env>` is the test environment you want tox to run. The test environments are noted in the dot points above.
Your PR will not be merged until all of these tests pass.
### 4.3 Style
Our style checker of choice, [black](https://github.com/psf/black), actually happens to be an auto-formatter. The checking functionality simply detects whether or not it would try to reformat something in your code, should you run the formatter on it. For this reason, we recommend using this tool as a formatter, regardless of any disagreements you might have with the style it enforces.
Use the command `black --help` to see how to use this tool. The full style guide is explained in detail on [black's GitHub repository](https://github.com/psf/black). **There is one exception to this**, however, which is that we set the line length to 99, instead of black's default 88. This is already set in `pyproject.toml` configuration file in the repo so you can simply format code with Black like so: `black <src>`.
### 4.4 Make
You may have noticed we have a `Makefile` and a `make.bat` in the top-level directory. For now, you can do a few things with them:
1. `make reformat`: Reformat all python files in the project with Black
2. `make stylecheck`: Check if any `.py` files in the project need reformatting
3. `make newenv`: Set up a new virtual environment in the `.venv` subdirectory, and install Red and its dependencies. If one already exists, it is cleared out and replaced.
4. `make syncenv`: Sync your environment with Red's latest dependencies.
The other make recipes are most likely for project maintainers rather than contributors.
You can specify the Python executable used in the make recipes with the `PYTHON` environment variable, e.g. `make PYTHON=/usr/bin/python3.8 newenv`.
### 4.5 Keeping your dependencies up to date
Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `tools/dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make syncenv`. You could also simply do `make newenv` to install them to a clean new virtual environment.
### 4.6 To contribute changes
1. Create a new branch on your fork
2. Make the changes
3. If you like the changes and think the main Red project could use it:
* Run tests with `tox` to ensure your code is up to scratch
* Create a Pull Request on GitHub with your changes
- If you are contributing a behavior change, please keep in mind that behavior changes
are conditional on them being appropriate for the project's current goals.
If you would like to reduce the risk of putting in effort for something we aren't
going to use, open an issue discussing it first.
### 4.7 How To Report A Bug
Please see our **ISSUES.MD** for more information.
### 4.8 How To Suggest A Feature Or Enhancement
The goal of Red is to be as useful to as many people as possible, this means that all features must be useful to anyone and any server that uses Red.
If you find yourself wanting a feature that Red does not already have, you're probably not alone. There's bound to be a great number of users out there needing the same thing and a lot of the features that Red has today have been added because of the needs of our users. Open an issue on our issues list and describe the feature you would like to see, how you would use it, how it should work, and why it would be useful to the Red community as a whole.
# 5. Code Review Process
We have a core team working tirelessly to implement new features and fix bugs for the Red community. This core team looks at and evaluates new issues and PRs on a daily basis.
The decisions we make are based on a simple majority of that team or by decree of the project owner.
### 5.1 Issues
Any new issues will be looked at and evaluated for validity of a bug or for the usefulness of a suggested feature. If we have questions about your issue we will get back as soon as we can (usually in a day or two) and will try to make a decision within a week.
### 5.2 Pull Requests
Pull requests are evaluated by their quality and how effectively they solve their corresponding issue. The process for reviewing pull requests is as follows:
1. A pull request is submitted
2. Core team members will review and test the pull request (usually within a week)
3. After a member of the core team approves your pull request:
* If your pull request is considered an improvement or enhancement the project owner will have 1 day to veto or approve your pull request.
* If your pull request is considered a new feature the project owner will have 1 week to veto or approve your pull request.
4. If any feedback is given we expect a response within 1 week or we may decide to close the PR.
5. If your pull request is not vetoed and no core member requests changes then it will be approved and merged into the project.
### 5.3 Differences between "new features" and "improvements"
The difference between a new feature and improvement can be quite fuzzy and the project owner reserves all rights to decide under which category your PR falls.
At a very basic level a PR is a new feature if it changes the intended way any part of the Red project currently works or if it modifies the user experience (UX) in any significant way. Otherwise, it is likely to be considered an improvement.
# 6. Community
You can chat with the core team and other community members about issues or pull requests in the #coding channel of the Red support server located [here](https://discord.gg/red).
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
This project vendors discord.ext.menus package (https://github.com/Rapptz/discord-ext-menus) made by Danny Y. (Rapptz) which is distributed under MIT License.
Copy of this license can be found in discord-ext-menus.LICENSE file in redbot/vendored folder of this repository.
Artwork created by [Sinlaire](https://sinlaire.deviantart.com/) on Deviant Art for the Red Discord
Bot Project.
This project vendors [discord.ext.menus](https://github.com/Rapptz/discord-ext-menus) package made by Danny Y. (Rapptz) which is distributed under MIT License.
A copy of this license can be found in the [discord-ext-menus.LICENSE](redbot/vendored/discord-ext-menus.LICENSE) file in the [redbot/vendored](redbot/vendored) folder of this repository.
Creating a virtual environment is really easy and usually prevents many common installation
problems.
**What Are Virtual Environments For?**
Virtual environments allow you to isolate Red's library dependencies, cog dependencies and python
binaries from the rest of your system. There is no performance overhead to using virtual environment
and it saves you from a lot of troubles during setup. It also makes sure Red and its dependencies
are installed to a predictable location which makes uninstalling Red as simple as removing a single folder,
without worrying about losing your data or other things on your system becoming broken.
--------------------------------------------
Virtual Environments with Multiple Instances
--------------------------------------------
If you are running multiple instances of Red on the same machine, you have the option of either
using the same virtual environment for all of them, or creating separate ones.
..note::
This only applies for multiple instances of V3. If you are running a V2 instance as well,
you **must** use separate virtual environments.
The advantages of using a *single* virtual environment for all of your V3 instances are:
- When updating Red, you will only need to update it once for all instances (however you will still need to restart all instances for the changes to take effect)
- It will save space on your hard drive
On the other hand, you may wish to update each of your instances individually.
..important::
Windows users with multiple instances should create *separate* virtual environments, as
updating multiple running instances at once is likely to cause errors.
Paste the following in the file, and replace all instances of :code:`username` with the Linux username you retrieved above, and :code:`path` with the python path you retrieved above.
..code-block:: none
:emphasize-lines:8-10
[Unit]
Description=%I redbot
After=multi-user.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=path -O -m redbot %I --no-prompt
User=username
Group=username
Type=idle
Restart=on-abnormal
RestartSec=15
RestartForceExitStatus=1
RestartForceExitStatus=26
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
Save and exit :code:`ctrl + O; enter; ctrl + x`
---------------------------------
Starting and enabling the service
---------------------------------
..note:: This same file can be used to start as many instances of the bot as you wish, without creating more service files, just start and enable more services and add any bot instance name after the **@**
To start the bot, run the service and add the instance name after the **@**:
..prompt:: bash
sudo systemctl start red@instancename
To set the bot to start on boot, you must enable the service, again adding the instance name after the **@**:
..prompt:: bash
sudo systemctl enable red@instancename
If you need to shutdown the bot, you can use the ``[p]shutdown`` command or
type the following command in the terminal, still by adding the instance name after the **@**:
..prompt:: bash
sudo systemctl stop red@instancename
..warning:: If the service doesn't stop in the next 10 seconds, the process is killed.
Check your logs to know the cause of the error that prevents the shutdown.
To set the bot to not start on boot anymore, you must disable the service by running the following command, adding the instance name after the **@**:
..note:: This guide assumes that you already have a working Red instance.
-----------------------
Creating the batch file
-----------------------
Create a new text document anywhere you want to. This file will be used to launch the bot, so you may want to put it somewhere convenient, like Documents or Desktop.
Open that document in Notepad, and paste the following text in it:
..code-block::batch
@ECHO OFF
:RED
CALL"%userprofile%\redenv\Scripts\activate.bat"
python -O -m redbot <your instance name>
IF%ERRORLEVEL%== 1 GOTORESTART_RED
IF%ERRORLEVEL%== 26 GOTORESTART_RED
EXIT /B %ERRORLEVEL%
:RESTART_RED
ECHO Restarting Red...
GOTORED
Replace ``<your instance name>`` with the instance name of your bot.
If you created your VENV at a location other than the recommended one, replace ``%userprofile%\redenv\Scripts\activate.bat`` with the path to your VENV.
Click "File", "Save as". Change the dropdown "Save as type" to "All Files (*.*)". Set the filename to ``start_redbot.bat``, and click save.
There should now be a new file in the location you created the text document in. You can delete that text document as it is no longer needed.
You can now use the ``start_redbot.bat`` batch file to launch Red by double clicking it.
This script will automatically restart red when the ``[p]restart`` command is used or when the bot shuts down abnormally.
-------------------------
Launch the bot on startup
-------------------------
Create a shortcut of your ``start_redbot.bat`` file.
Open the "Run" dialogue box using Windows Key + R.
Enter ``shell:startup`` if you want the bot to launch only when the current user logs in, or ``shell:common startup`` if you want the bot to launch when any user logs in.
Drag the shortcut into the folder that is opened. The bot will now launch on startup.
6. If you want others to be able to invite your bot tick the **Public Bot**. Keeping it unticked will prevent others from inviting your bot to their servers and only you will be able to add the bot to servers (provided that you have needed permissions in the server you want to add the bot to).
- Make sure **Require OAuth2 Code Grant** is unchecked.
Red bots with over 100 servers require `bot verification <https://support.discord.com/hc/en-us/articles/360040720412>`_ which is not covered in this guide.
Remember that :ref:`we do not support public bots <intents>`. We encourage you to read that page before scaling up your bot.
*Parts of this guide have been adapted from*`discord.py intro <https://discordpy.readthedocs.io/en/stable/discord.html#discord-intro>`_*and*`discord.py privileged intents <https://discordpy.readthedocs.io/en/stable/intents.html#privileged-intents>`_.
CustomCommands allows you to create simple commands for your bot without requiring you to code your own cog for Red.
If the command you attempt to create shares a name with an already loaded command, you cannot overwrite it with this cog.
---------
Cooldowns
---------
You can set cooldowns for your custom commands. If a command is on cooldown, it will not be triggered.
You can set cooldowns per member or per thread/channel, or set a cooldown guild-wide. You can also set multiple types of cooldown on a single custom command. All cooldowns must pass before the command will trigger.
------------------
Context Parameters
------------------
You can enhance your custom command's response by leaving spaces for the bot to substitute.
You can further refine the response with dot notation. For example, {author.mention} will mention the user who called the command.
------------------
Command Parameters
------------------
You can further enhance your custom command's response by leaving spaces for the user to substitute.
To do this, simply put {#} in the response, replacing # with any number starting with 0. Each number will be replaced with what the user gave the command, in order.
You can refine the response with colon notation. For example, {0:Member} will accept members of the server, and {0:int} will accept a number. If no colon notation is provided, the argument will be returned unchanged.
You can specify more than the above with colon notation, but those are the most common.
As with context parameters, you can use dot notation to further refine the response. For example, {0.mention:Member} will mention the Member specified.
Set, edit, or view the cooldown for a custom command.
You may set cooldowns per member, thread/channel, or guild. Multiple
cooldowns may be set. All cooldowns must be cooled to call the
custom command.
Examples:
- ``[p]customcom cooldown pingrole``
- ``[p]customcom cooldown yourcommand 30``
- ``[p]cc cooldown mycommand 30 guild``
**Arguments:**
-``<command>`` The custom command to check or set the cooldown.
-``[cooldown]`` The number of seconds to wait before allowing the command to be invoked again. If omitted, will instead return the current cooldown settings.
-``[per]`` The group to apply the cooldown on. Defaults to per member. Valid choices are server / guild, user / member, and channel.
.._customcommands-command-customcom-create:
""""""""""""""""
customcom create
""""""""""""""""
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]customcom create <command> <text>
..tip:: Alias: ``customcom add``
**Description**
Create custom commands.
If a type is not specified, a simple CC will be created.
This is the cog guide for the downloader cog. You will
find detailed docs about usage and commands.
``[p]`` is considered as your prefix.
..note:: To use this cog, load it by typing this::
[p]load downloader
.._downloader-usage:
-----
Usage
-----
Install community cogs made by Cog Creators.
Community cogs, also called third party cogs, are not included
in the default Red install.
Community cogs come in repositories. Repos are a group of cogs
you can install. You always need to add the creator's repository
using the ``[p]repo`` command before you can install one or more
cogs from the creator.
.._downloader-commands:
--------
Commands
--------
.._downloader-command-cog:
^^^
cog
^^^
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]cog
**Description**
Base command for cog installation management commands.
.._downloader-command-cog-checkforupdates:
"""""""""""""""""""
cog checkforupdates
"""""""""""""""""""
**Syntax**
..code-block::none
[p]cog checkforupdates
**Description**
Check for available cog updates (including pinned cogs).
This command doesn't update cogs, it only checks for updates.
Use ``[p]cog update`` to update cogs.
.._downloader-command-cog-info:
""""""""
cog info
""""""""
**Syntax**
..code-block::none
[p]cog info <repo> <cog>
**Description**
List information about a single cog.
Example:
- ``[p]cog info 26-Cogs defender``
**Arguments**
-``<repo>`` The repo to get cog info from.
-``<cog>`` The cog to get info on.
.._downloader-command-cog-install:
"""""""""""
cog install
"""""""""""
**Syntax**
..code-block::none
[p]cog install <repo> <cogs...>
**Description**
Install a cog from the given repo.
Examples:
- ``[p]cog install 26-Cogs defender``
- ``[p]cog install Laggrons-Dumb-Cogs say roleinvite``
**Arguments**
-``<repo>`` The name of the repo to install cogs from.
-``<cogs...>`` The cog or cogs to install.
.._downloader-command-cog-installversion:
""""""""""""""""""
cog installversion
""""""""""""""""""
**Syntax**
..code-block::none
[p]cog installversion <repo> <revision> <cogs...>
**Description**
Install a cog from the specified revision of given repo.
Revisions are "commit ids" that point to the point in the code when a specific change was made.
The latest revision can be found in the URL bar for any GitHub repo by `pressing "y" on that repo <https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository/getting-permanent-links-to-files#press-y-to-permalink-to-a-file-in-a-specific-commit>`_.
Older revisions can be found in the URL bar by `viewing the commit history of any repo <https://cdn.discordapp.com/attachments/133251234164375552/775760247787749406/unknown.png>`_
This is the cog guide for the filter cog. You will
find detailed docs about usage and commands.
``[p]`` is considered as your prefix.
..note:: To use this cog, load it by typing this::
[p]load filter
.._filter-usage:
-----
Usage
-----
This cog is designed for "filtering" unwanted words and phrases from a server.
It provides tools to manage a list of words or sentences, and to customize automatic actions to be taken against users who use those words in channels or in their name/nickname.
This can be used to prevent inappropriate language, off-topic discussions, invite links, and more.
.._filter-commands:
--------
Commands
--------
.._filter-command-filter:
^^^^^^
filter
^^^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]filter
**Description**
Base command to add or remove words from the server filter.
Use double quotes to add or remove sentences.
.._filter-command-filter-add:
""""""""""
filter add
""""""""""
**Syntax**
..code-block::none
[p]filter add [words...]
**Description**
Add words to the filter.
Use double quotes to add sentences.
Examples:
- ``[p]filter add word1 word2 word3``
- ``[p]filter add "This is a sentence"``
**Arguments:**
-``[words...]`` The words or sentences to filter.
.._filter-command-filter-channel:
""""""""""""""
filter channel
""""""""""""""
**Syntax**
..code-block::none
[p]filter channel
**Description**
Base command to add or remove words from the channel filter.
..note:: To use this cog, load it by typing this::
[p]load mod
.._mod-usage:
-----
Usage
-----
A range of highly customizable moderation tools used to protect your
guild from users who cannot follow the rules.
.._mod-commands:
--------
Commands
--------
.._mod-command-ban:
^^^
ban
^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]ban <user> [days] [reason]
**Description**
Ban a user from this server and optionally delete days of messages.
``days`` is the amount of days of messages to cleanup on ban.
**Arguments**
*``<user>``: The user to ban. |user-input|
*``[days]``: The amount of days of messages to cleanup on ban. This parameter defaults to the defaultdays setting, or no days if this has not yet been configured.
*``[reason]``: The reason why the user was banned (optional).
**Example Usage**
*``[p]ban 428675506947227648 7 Continued to spam after told to stop.``
This will ban the user with ID 428675506947227648 and it will delete 7 days worth of messages.
*``[p]ban @Twentysix 7 Continued to spam after told to stop.``
This will ban Twentysix and it will delete 7 days worth of messages.
A user ID should be provided if the user is not a member of this server.
If days is not a number, it's treated as the first word of the reason.
Minimum 0 days, maximum 7. If not specified, the defaultdays setting will be used instead.
.._mod-command-kick:
^^^^
kick
^^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]kick <member> [reason]
**Description**
Kick a user.
**Arguments**
*``<member>``: The member to kick. |member-input|
*``[reason]``: The reason why the user was kicked (optional).
**Example Usage**
*``[p]kick 428675506947227648 wanted to be kicked.``
This will kick the user with ID 428675506947227648 from the server.
*``[p]kick @Twentysix wanted to be kicked.``
This will kick Twentysix from the server.
If a reason is specified, it will be the reason that shows up
in the audit log.
.._mod-command-massban:
^^^^^^^
massban
^^^^^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]massban <user_ids...> [days] [reason]
..tip:: Alias: ``hackban``
**Description**
Mass bans user(s) from the server.
**Arguments**
*``<user_ids...>``: The users to ban. This must be a list of user IDs separated by spaces.
*``[days]``: The amount of days of messages to cleanup on massban.
*``[reason]``: The reason why these users were banned.
**Example Usage**
*``[p]massban 345628097929936898 57287406247743488 7 they broke all rules.``
This will ban all the added userids and delete 7 days worth of their messages.
.._mod-command-modset:
^^^^^^
modset
^^^^^^
..note:: |guildowner-lock|
**Syntax**
..code-block::none
[p]modset
**Description**
Manage server administration settings.
.._mod-command-modset-defaultdays:
""""""""""""""""""
modset defaultdays
""""""""""""""""""
**Syntax**
..code-block::none
[p]modset defaultdays [days=0]
**Description**
Set the default number of days worth of messages to be deleted when a user is banned.
The number of days must be between 0 and 7.
**Arguments**
*``[days=0]``: The default number of days of messages to be deleted when a user is banned.
..note:: This value must be between 0 and 7.
.._mod-command-modset-defaultduration:
""""""""""""""""""""""
modset defaultduration
""""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset defaultduration <duration>
**Description**
Set the default time to be used when a user is tempbanned.
Accepts: seconds, minutes, hours, days, weeks
**Arguments**
*``<duration>``: The default duration for when a user is temporarily banned. Accepts seconds, minutes, hours, days or weeks.
**Example Usage**
*``[p]modset defaultduration 7d12h10m``
*``[p]modset defaultduration 7 days 12 hours 10 minutes``
.._mod-command-modset-deletenames:
""""""""""""""""""
modset deletenames
""""""""""""""""""
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]modset deletenames [confirmation=False]
**Description**
Delete all stored usernames, global display names, and server nicknames.
**Arguments**
-``<confirmation>``: Whether to delete all stored usernames, global display names, and server nicknames. |bool-input|
.._mod-command-modset-deleterepeats:
""""""""""""""""""""
modset deleterepeats
""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset deleterepeats [repeats]
**Description**
Enable auto-deletion of repeated messages.
**Arguments**
*``[repeats]``: The number of repeated messages needed before further messages are deleted.
..note:: Must be between 2 and 20. Set to -1 to disable this feature.
.._mod-command-modset-dm:
"""""""""
modset dm
"""""""""
**Syntax**
..code-block::none
[p]modset dm [enabled]
**Description**
Toggle whether a message should be sent to a user when they are kicked/banned.
If this option is enabled, the bot will attempt to DM the user with the guild name
and reason as to why they were kicked/banned.
**Arguments**
*``[enabled]``: Whether a message should be sent to a user when they are kicked/banned. |bool-input|
.._mod-command-modset-hierarchy:
""""""""""""""""
modset hierarchy
""""""""""""""""
**Syntax**
..code-block::none
[p]modset hierarchy
**Description**
Toggle role hierarchy check for mods and admins.
..warning:: Disabling this setting will allow mods to take actions on users above them in the role hierarchy!
This is enabled by default.
.._mod-command-modset-mentionspam:
""""""""""""""""""
modset mentionspam
""""""""""""""""""
**Syntax**
..code-block::none
[p]modset mentionspam
**Description**
Manage the automoderation settings for mentionspam.
.._mod-command-modset-mentionspam-ban:
""""""""""""""""""""""
modset mentionspam ban
""""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset mentionspam ban <max_mentions>
**Description**
Set the autoban conditions for mention spam.
Users will be banned if they send any message which contains more than
``<max_mentions>`` mentions.
**Arguments**
*``<max_mentions>``: Must be 0 or greater. Set to 0 to disable this feature.
.._mod-command-modset-mentionspam-kick:
"""""""""""""""""""""""
modset mentionspam kick
"""""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset mentionspam kick <max_mentions>
**Description**
Set the autokick conditions for mention spam.
Users will be kicked if they send any message which contains more than
``<max_mentions>`` mentions.
**Arguments**
*``<max_mentions>``: Must be 0 or greater. Set to 0 to disable this feature.
.._mod-command-modset-mentionspam-strict:
"""""""""""""""""""""""""
modset mentionspam strict
"""""""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset mentionspam strict [enabled]
**Description**
Setting to account for duplicate mentions.
If enabled all mentions will count including duplicated mentions.
If disabled only unique mentions will count.
Use this command without any parameter to see the current setting.
**Arguments**
*``[enabled]``: Whether all mentions will count, including duplicated mentions. |bool-input|
.._mod-command-modset-mentionspam-warn:
"""""""""""""""""""""""
modset mentionspam warn
"""""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset mentionspam warn <max_mentions>
**Description**
Sets the autowarn conditions for mention spam.
Users will be warned if they send any messages which contain more than
``<max_mentions>`` mentions.
**Arguments**
*``<max_mentions>``: Must be 0 or greater. Set to 0 to disable this feature.
.._mod-command-modset-reinvite:
"""""""""""""""
modset reinvite
"""""""""""""""
**Syntax**
..code-block::none
[p]modset reinvite
**Description**
Toggle whether an invite will be sent to a user when unbanned.
If this is True, the bot will attempt to create and send a single-use invite
to the newly-unbanned user.
.._mod-command-modset-showsettings:
"""""""""""""""""""
modset showsettings
"""""""""""""""""""
**Syntax**
..code-block::none
[p]modset showsettings
**Description**
Show the current server administration settings.
.._mod-command-modset-trackallnames:
""""""""""""""""""""
modset trackallnames
""""""""""""""""""""
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]modset trackallnames [enabled]
**Description**
Toggle whether all name changes should be tracked.
Toggling this off also overrides the tracknicknames setting.
**Arguments**
*``[enabled]``: Whether all name changes should be tracked. |bool-input|
.._mod-command-modset-tracknicknames:
"""""""""""""""""""""
modset tracknicknames
"""""""""""""""""""""
**Syntax**
..code-block::none
[p]modset tracknicknames [enabled]
**Description**
Toggle whether server nickname changes should be tracked.
This setting will be overridden if trackallnames is disabled.
**Arguments**
*``[enabled]``: Whether all nickname changes should be tracked. |bool-input|
.._mod-command-movedeletedelay:
^^^^^^^^^^^^^^^
movedeletedelay
^^^^^^^^^^^^^^^
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]movedeletedelay
**Description**
Move deletedelay settings to core
.._mod-command-moveignoredchannels:
^^^^^^^^^^^^^^^^^^^
moveignoredchannels
^^^^^^^^^^^^^^^^^^^
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]moveignoredchannels
**Description**
Move ignored channels and servers to core
.._mod-command-names:
^^^^^
names
^^^^^
**Syntax**
..code-block::none
[p]names <member>
**Description**
Show previous usernames, global display names, and server nicknames of a member.
**Arguments**
*``<member>``: |member-input|
.._mod-command-rename:
^^^^^^
rename
^^^^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]rename <member> [nickname]
**Description**
Change a member's server nickname.
Leaving the nickname argument empty will remove it.
**Arguments**
*``<member>``: |member-input|
*``[nickname]``: The new server nickname for the member.
.._mod-command-slowmode:
^^^^^^^^
slowmode
^^^^^^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]slowmode [interval=0:00:00]
**Description**
Changes thread's or channel's slowmode setting.
Interval can be anything from 0 seconds to 6 hours.
Use without parameters to disable.
**Arguments**
*``[interval=0:00:00]``: The time for the thread's/channel's slowmode settings.
..note::
Interval can be anything from 0 seconds to 6 hours.
Use without parameters to disable.
.._mod-command-softban:
^^^^^^^
softban
^^^^^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]softban <member> [reason]
**Description**
Kick a member and delete 1 day's worth of their messages.
**Arguments**
*``<member>``: The member to softban. |member-input-quotes|
*``[reason]``: Reason for the kick (optional).
.._mod-command-tempban:
^^^^^^^
tempban
^^^^^^^
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]tempban <member> [duration] [days] [reason]
**Description**
Temporarily ban a user from this server.
**Arguments**
*``<member>``: The member to temporarily ban. |member-input-quotes|
*``[duration]``: The amount of time the user should be banned for.
*``[days]``: The amount of days of messages to cleanup on tempban.
*``[reason]``: The reason for the tempban (optional).
**Example Usage**
*``[p]tempban @Twentysix Because I say so``
This will ban Twentysix for the default amount of time set by an administrator.
..note:: To use this cog, load it by typing this::
[p]load mutes
.._mutes-usage:
-----
Usage
-----
Mute users temporarily or indefinitely.
.._mutes-commands:
--------
Commands
--------
.._mutes-command-activemutes:
^^^^^^^^^^^
activemutes
^^^^^^^^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]activemutes
**Description**
Displays active mutes on this server.
.._mutes-command-mute:
^^^^
mute
^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]mute <users...> [time_and_reason]
**Description**
Mute users.
Examples:
*``[p]mute @member1 @member2 spam 5 hours``
*``[p]mute @member1 3 days``
**Arguments**
*``<users...>``: A space separated list of usernames, ID's, or mentions.
*``[time_and_reason]``: The time and reason. If no time is provided, the mute will use the default set time or indefinite if this hasn't been configured.
.._mutes-command-mutechannel:
^^^^^^^^^^^
mutechannel
^^^^^^^^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]mutechannel <users...> [time_and_reason]
..tip:: Alias: ``channelmute``
**Description**
Mute a user in the current text channel (or in the parent of the current thread).
*``<users...>``: A space separated list of usernames, ID's, or mentions.
*``[time_and_reason]``: The time and reason. If no time is provided, the mute will use the default set time or indefinite if this hasn't been configured.
.._mutes-command-muteset:
^^^^^^^
muteset
^^^^^^^
**Syntax**
..code-block::none
[p]muteset
**Description**
Mute settings.
.._mutes-command-muteset-defaulttime:
"""""""""""""""""""
muteset defaulttime
"""""""""""""""""""
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]muteset defaulttime [time]
..tip:: Alias: ``muteset time``
**Description**
Set the default mute time for the mute command.
If no time interval is provided this will be cleared.
**Arguments**
*``[time]``: The length of time for a default mute.
.._mutes-command-muteset-makerole:
""""""""""""""""
muteset makerole
""""""""""""""""
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]muteset makerole <name>
**Description**
Create a Muted role.
This will create a role and apply overwrites to all available channels
to more easily setup muting a user.
If you already have a muted role created on the server use
``[p]muteset role ROLE_NAME_HERE``
**Arguments**
*``<name>``: The name of the muted role to create.
.._mutes-command-muteset-notification:
""""""""""""""""""""
muteset notification
""""""""""""""""""""
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]muteset notification [channel]
**Description**
Set the notification channel for automatic unmute issues.
If no channel is provided this will be cleared and notifications
about issues when unmuting users will not be sent anywhere.
**Arguments**
*``[channel]``: The channel to receive unmute issue updates. |channel-input|
.._mutes-command-muteset-role:
""""""""""""
muteset role
""""""""""""
..note:: |admin-lock|
**Syntax**
..code-block::none
[p]muteset role [role]
**Description**
Sets the role to be applied when muting a user.
If no role is setup the bot will attempt to mute a user
by utilizing server timeouts.
..Note::
If no role is setup a user may be able to leave the server
and rejoin no longer being muted.
**Arguments**
*``[role]``: The role for muted users to receive. |role-input|
.._mutes-command-muteset-senddm:
""""""""""""""
muteset senddm
""""""""""""""
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]muteset senddm <true_or_false>
**Description**
Set whether mute notifications should be sent to users in DMs.
**Arguments**
*``<true_or_false>``: Whether to enable or disable this setting, must provide ``true`` or ``false``.
.._mutes-command-muteset-settings:
""""""""""""""""
muteset settings
""""""""""""""""
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]muteset settings
..tip:: Alias: ``muteset showsettings``
**Description**
Shows the current mute settings for this guild.
.._mutes-command-muteset-showmoderator:
"""""""""""""""""""""
muteset showmoderator
"""""""""""""""""""""
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]muteset showmoderator <true_or_false>
**Description**
Decide whether the name of the moderator muting a user should be included in the DM to that user.
**Arguments**
*``<true_or_false>``: Whether to enable or disable this setting, must provide ``true`` or ``false``.
.._mutes-command-unmute:
^^^^^^
unmute
^^^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]unmute <users...> [reason]
**Description**
Unmute users.
**Arguments**
*``<users...>``: A space separated list of usernames, ID's, or mentions.
*``[reason]``: The reason for the unmute.
.._mutes-command-unmutechannel:
^^^^^^^^^^^^^
unmutechannel
^^^^^^^^^^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]unmutechannel <users...> [reason]
..tip:: Alias: ``channelunmute``
**Description**
Unmute a user in this channel (or in the parent of this thread).
**Arguments**
*``<users...>``: A space separated list of usernames, ID's, or mentions.
*``[reason]``: The reason for the unmute.
.._mutes-command-timeout:
^^^^^^^
timeout
^^^^^^^
..note:: |mod-lock|
**Syntax**
..code-block::none
[p]timeout <users...> [time_and_reason]
**Description**
Timeout users.
Examples:
*``[p]timeout @member1 @member2 spam 5 hours``
*``[p]timeout @member1 3 days``
**Arguments**
*``<users...>``: A space separated list of usernames, ID's, or mentions.
*``[time_and_reason]``: The time and reason. If no time is provided, the mute will use the default set time or give an error if this hasn't been configured.
.._mutes-command-voicemute:
^^^^^^^^^
voicemute
^^^^^^^^^
**Syntax**
..code-block::none
[p]voicemute <users...> [time_and_reason]
**Description**
Mute a user in their current voice channel.
Examples:
*``[p]voicemute @member1 @member2 spam 5 hours``
*``[p]voicemute @member1 3 days``
**Arguments**
*``<users...>``: A space separated list of usernames, ID's, or mentions.
*``[time_and_reason]``: The time and reason. If no time is provided, the mute will use the default set time or indefinite if this hasn't been configured.
.._mutes-command-voiceunmute:
^^^^^^^^^^^
voiceunmute
^^^^^^^^^^^
**Syntax**
..code-block::none
[p]voiceunmute <users...> [reason]
**Description**
Unmute a user in their current voice channel.
**Arguments**
*``<users...>``: A space separated list of usernames, ID's, or mentions.
This is the cog guide for the permissions cog. You will
find detailed docs about usage and commands.
``[p]`` is considered as your prefix.
..note:: To use this cog, load it by typing this::
[p]load permissions
.._permissions-usage:
-----
Usage
-----
Customise permissions for commands and cogs.
This cog extends the default permission model of the bot. By default, many commands are restricted based on what the command can do.
This cog allows you to refine some of those restrictions. You can allow wider or narrower access to most commands using it. You cannot, however, change the restrictions on owner-only commands.
When additional rules are set using this cog, those rules will be checked prior to checking for the default restrictions of the command.
Global rules (set by the owner) are checked first, then rules set for servers. If multiple global or server rules apply to the case, the order they are checked in is:
1. Rules about a user.
2. Rules about the voice channel a user is in.
3. Rules about the text channel or a parent of the thread a command was issued in.
4. Rules about a role the user has (The highest role they have with a rule will be used).
5. Rules about the server a user is in (Global rules only).
.._permissions-commands:
--------
Commands
--------
.._permissions-command-permissions:
^^^^^^^^^^^
permissions
^^^^^^^^^^^
**Syntax**
..code-block::none
[p]permissions
**Description**
Command permission management tools.
.._permissions-command-permissions-acl:
"""""""""""""""
permissions acl
"""""""""""""""
..note:: |guildowner-lock|
**Syntax**
..code-block::none
[p]permissions acl
**Description**
Manage permissions with YAML files.
..tip:: See :ref:`here <cog_permissions>` for more information with configuring these yaml files.
.._permissions-command-permissions-acl-getglobal:
"""""""""""""""""""""""""
permissions acl getglobal
"""""""""""""""""""""""""
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]permissions acl getglobal
**Description**
Get a YAML file detailing all global rules.
.._permissions-command-permissions-acl-getserver:
"""""""""""""""""""""""""
permissions acl getserver
"""""""""""""""""""""""""
..note:: |guildowner-lock|
**Syntax**
..code-block::none
[p]permissions acl getserver
**Description**
Get a YAML file detailing all rules in this server.
.._permissions-command-permissions-acl-setglobal:
"""""""""""""""""""""""""
permissions acl setglobal
"""""""""""""""""""""""""
..note:: |owner-lock|
**Syntax**
..code-block::none
[p]permissions acl setglobal
**Description**
Set global rules with a YAML file.
..warning::
This will override reset *all* global rules
to the rules specified in the uploaded file.
This does not validate the names of commands and cogs before
setting the new rules.
.._permissions-command-permissions-acl-setserver:
"""""""""""""""""""""""""
permissions acl setserver
"""""""""""""""""""""""""
..note:: |guildowner-lock|
**Syntax**
..code-block::none
[p]permissions acl setserver
**Description**
Set rules for this server with a YAML file.
..warning::
This will override reset *all* rules in this
server to the rules specified in the uploaded file.
*``<points>``: The number of points with the new reason.
*``<description>``: The description of the new warn reason.
.._warnings-command-warnreason-delete:
"""""""""""""""""
warnreason delete
"""""""""""""""""
**Syntax**
..code-block::none
[p]warnreason delete <reason_name>
**Description**
Delete a warning reason.
**Arguments**
*``<reason_name>``: The name of the reason to delete.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.