Compare commits

..

466 Commits

Author SHA1 Message Date
Jakub Kuczys
63359ce831 Fix changelog date 2023-09-14 22:43:25 +02:00
github-actions[bot]
6b81d80588 Version bump to 3.5.5 (#6250)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-14 22:02:52 +02:00
github-actions[bot]
97377a9f8d Automated Crowdin downstream (#6251)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-14 20:02:01 +00:00
Jakub Kuczys
56377b0596 Red 3.5.5 - Changelog (#6249)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2023-09-14 21:50:17 +02:00
Jakub Kuczys
4d4cb14725 Bump dependencies (#6248) 2023-09-14 21:36:34 +02:00
Jakub Kuczys
1132498f6c Fix [p]diagnoseissues edge case for commands without a cog (#6237) 2023-09-13 22:04:21 -04:00
Kreusada
5069f464cc Sort cogs alphabetically inside [p]cog list (#6215) 2023-09-14 01:35:59 +02:00
Jakub Kuczys
2157ed4f9b Fix formatting of nested result lists in [p]diagnoseissues (#6238)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2023-09-13 20:24:50 +00:00
MAX
ef098c8d02 fix the discord format in ban, kick and tempban (#6245)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2023-09-13 20:22:22 +00:00
Karlo Prikratki
64deccff5f [Streams] Switch to Twitch's newer follower endpoint (#6247) 2023-09-06 10:41:35 -08:00
Jakub Kuczys
d844c6f1f8 Bump Python versions in pyenv instructions (#6241) 2023-08-27 23:31:21 +02:00
Jakub Kuczys
9ef4271afa Use more restrictive tag pattern in publish release workflow (#6242) 2023-08-26 21:02:49 +02:00
github-actions[bot]
bb2e3687fc Version bump to 3.5.5.dev1 (#6235)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-12 16:38:51 +02:00
github-actions[bot]
979a6aa9eb Version bump to 3.5.4 (#6233)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-12 16:26:04 +02:00
github-actions[bot]
0747b92653 Automated Crowdin downstream (#6234)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-12 14:25:40 +00:00
Jakub Kuczys
47cc879b80 Red 3.5.4 - Changelog (#6232) 2023-08-12 16:19:24 +02:00
Auguste Charpentier
b6471797cc Remove type-breaking annotation on cog_i18n decorator (#6231)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-08-12 14:13:24 +00:00
Jakub Kuczys
742339a990 Bump dependencies (#6225) 2023-08-12 16:11:03 +02:00
aikaterna
e8c89d4d08 [Audio] Update Lavalink.jar build (#6221) 2023-08-12 04:50:43 +02:00
ADudeCalledLeo
483682dfb5 Fix Picarto channel avatar in Streams cog (#6230) 2023-08-12 04:50:10 +02:00
Jakub Kuczys
100de11ce6 Fix http errors for interaction deferring and message changes (#6229) 2023-08-11 02:51:36 +02:00
Jakub Kuczys
dbb91dfce8 Fix poor fuzzy results due to changes in rapidfuzz 3.0 (#6224)
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
2023-08-09 22:03:21 -07:00
Jakub Kuczys
3ac2512c14 Fix local search's issue with bad escapes causing non-local playback (#6223) 2023-08-09 20:50:44 -07:00
Predä
a06a704365 Make use of dpy commands.Range on set status commands (#6227) 2023-08-10 03:15:41 +02:00
Predä
9e23c3a5b8 Add custom status support (#6226)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-08-10 02:45:24 +02:00
Jakub Kuczys
1248927fb6 Update supported versions in the security policy (#6222) 2023-08-06 19:29:51 +02:00
github-actions[bot]
93b51acf31 Version bump to 3.5.4.dev1 (#6213)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-24 21:40:32 +02:00
github-actions[bot]
7e03756f06 Version bump to 3.5.3 (#6211)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-24 20:16:02 +02:00
github-actions[bot]
d04cc36bc6 Automated Crowdin downstream (#6212)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-24 20:15:23 +02:00
Jakub Kuczys
6fbcdfc74a Red 3.5.3 - Changelog (#6210)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2023-07-24 20:06:42 +02:00
Jakub Kuczys
7e05bec6a0 Include instance name in the instance not found error (#6206) 2023-07-24 14:00:23 -04:00
Jakub Kuczys
6f920daeed Improve unreleased Command.is_enabled() and document related methods (#6209)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2023-07-23 21:12:33 -04:00
Jakub Kuczys
df7bbe5b55 Add changelog to PyPI project URLs (#6207) 2023-07-24 00:41:23 +02:00
Jakub Kuczys
8e1b906012 Bump dependencies (#6185) 2023-07-23 23:14:36 +02:00
Jakub Kuczys
ba210bd08e Use action='extend' for all multi-argument cli flags (#6200) 2023-07-19 22:47:38 +02:00
Jakub Kuczys
d8e584b5e8 Fix CancelledError handling in done callbacks of cog init tasks (#6203) 2023-07-19 22:45:44 +02:00
Jakub Kuczys
bad23a4a93 Ensure bot doesn't indefinitely hang on an exception in on_ready (#6202) 2023-07-19 22:44:38 +02:00
Zephyrkul
48cfde7b8c Fix _ValueCtxManager.__await__ typehint (#6163)
Co-authored-by: zephyrkul <zephyrkul@users.noreply.github.com>
2023-07-19 22:13:54 +02:00
Kreusada
8ee3ac9352 [Cleanup] Fix [p]cleanup self inside DMs (#6197) 2023-06-29 06:06:44 +02:00
Jakub Kuczys
9c85917dad Handle exception chaining and groups in Dev's traceback handling (#6178) 2023-06-22 01:42:01 +02:00
Jakub Kuczys
fdcbe00143 Include command-line arguments in debuginfo (#6164)
Co-authored-by: TrustyJAID <TrustyJAID@gmail.com>
2023-06-22 01:15:40 +02:00
TrustyJAID
7dff136937 Add ConfirmView utility (#6176)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-06-21 10:47:47 -06:00
Jakub Kuczys
49bf103891 Update the Lavalink version parsing and add tests for it (#6093) 2023-06-21 15:52:00 +02:00
Om
41204ccf77 Pass timeout to SimpleMenu (#6173) 2023-06-20 23:18:58 +02:00
AAA3A
b1c3b37235 Clear the view in [p]set api after timeout (#6166) 2023-06-20 13:09:01 +02:00
Jakub Kuczys
4dc7efab29 Hide diffs for .po files by default (#6168) 2023-06-20 12:38:20 +02:00
aikaterna
85cf0f52d9 Update Audio terminology in LICENSE (#6193) 2023-06-20 12:00:01 +02:00
Jakub Kuczys
8acc1c3e02 Support and switch to Java 17 everywhere except CentOS 7 (#6190) 2023-06-20 11:29:50 +02:00
Jakub Kuczys
be5751a7ea Handle empty name case when splitting description field in help (#5941) 2023-06-19 14:15:34 +02:00
AAA3A
30dc128c39 Shorten max page size in [p]slash list to account for box size (#6167) 2023-06-19 14:02:33 +02:00
Jakub Kuczys
3b92c225ac Add a usage example to get_end_user_data_statement_or_raise() (#6171) 2023-06-19 14:00:55 +02:00
Draper
9d04f17cd2 Add an option to auto-use default HTTP(S) port for Lavalink (#5629)
Co-authored-by: Jakub Kuczys <me@jacken.men>
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
2023-06-19 13:56:59 +02:00
Kreusada
31700a226e Fix NUMBER_EMOJIS breakages inside Audio (#6170)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-06-19 13:44:51 +02:00
Jakub Kuczys
dc94c96c9e Drop Fedora 36, RHEL 8.4, Ubuntu 18.04 + extras (#6189) 2023-06-18 02:06:47 +02:00
Jakub Kuczys
10e09d6abc d.py 2.3 / pomelo changes (#6130)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2023-06-14 04:56:50 +02:00
Jakub Kuczys
3abf4cac05 Use backtracking resolver in pip-compile (#6184) 2023-06-12 19:08:27 +02:00
Michael Oliveira
9b7aa17564 Clarify requirements for delisting an approved cog (#6180)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-06-05 18:43:24 -04:00
Predä
f47d1dffb3 Use a SnowflakeList for Command disable instead of checks (#5552) 2023-05-17 21:33:04 +01:00
github-actions[bot]
edb3369169 Version bump to 3.5.3.dev1 (#6162)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-14 20:42:48 +00:00
github-actions[bot]
e8ce3d8682 Version bump to 3.5.2 (#6160)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-14 22:18:32 +02:00
github-actions[bot]
a59e73a605 Automated Crowdin downstream (#6161)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-14 22:17:45 +02:00
Jakub Kuczys
69cf604e0e Fix workflow completion watcher in release helper 2023-05-14 22:15:47 +02:00
Jakub Kuczys
1ec95beb56 Red 3.5.2 - Changelog (#6157) 2023-05-14 21:59:14 +02:00
Jakub Kuczys
1262921b17 Handle delete_after in interaction error handling for followup (#6159) 2023-05-14 21:55:10 +02:00
Michael Oliveira
8dfa5c2a86 Fix interaction docs example code (#6154)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-05-14 12:12:04 +02:00
Jakub Kuczys
327f2fed50 Bump dependencies (#6155) 2023-05-13 14:16:35 -04:00
Ryan Ramboer
6cd7a380f4 Update bad looking 'diff' code blocks with 'markdown' (#6152)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-05-13 19:21:27 +02:00
TrustyJAID
ecb60c0856 Fix menus passing PartialEmoji instead of str (#6143) 2023-05-13 18:14:42 +02:00
Jakub Kuczys
cbe50bf82e Use proper Parameter type in CustomCommands cog (#6149)
Co-authored-by: Jamie <31554168+flaree@users.noreply.github.com>
2023-05-13 16:55:10 +01:00
Jakub Kuczys
a2132ad0a5 Add global prefixes to debuginfo (#6153) 2023-05-13 16:45:25 +01:00
Vexed
2386b8363f Fix visual issues with Discord's new Markdown (#6101)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-05-13 12:39:57 +02:00
Jakub Kuczys
7f820dab0c Fix max heapsize calculation on 32-bit platforms (#6150) 2023-05-12 16:51:59 -07:00
Karlo Prikratki
5893d590a7 Fix NoneType error and channelmute saying user is already muted (#6144)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-05-12 21:54:10 +02:00
Karlo Prikratki
59216e2632 Fix set serverprefix docstring and update its docs (#6004)
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
2023-05-12 21:33:34 +02:00
Jakub Kuczys
31b975eecc Address change in behavior of bool(Permissions()) on d.py 2.x (#6148) 2023-05-12 14:02:41 -04:00
Jakub Kuczys
2369017f6a Add data_manager.instance_name() public API (#6146) 2023-05-12 11:53:53 +01:00
Jakub Kuczys
91f19c7410 Make mentions of x86-64-v2 accurate for AMD (#6147) 2023-05-12 11:04:18 +01:00
Jakub Kuczys
70ca8ff1f4 Add snippet numbers to filenames in the Dev cog to fix exception formatting (#6135) 2023-05-11 18:27:19 -04:00
Jakub Kuczys
e7d7eba68f Fix the bot starting when using --debuginfo (#6131) 2023-05-11 16:55:13 -04:00
Jakub Kuczys
1d828c447c Update documentation with x86-64-v2 changes (#6141) 2023-05-11 00:33:47 -04:00
Ben Armstrong
66fe981ea8 Include vendored menus update for guild attribute (#6139) 2023-05-10 17:11:20 +02:00
github-actions[bot]
41d89c7b54 Version bump to 3.5.2.dev1 (#6128)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 08:45:55 +02:00
github-actions[bot]
30d452b311 Version bump to 3.5.1 (#6126)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-05-04 08:27:53 +02:00
github-actions[bot]
c52ef73097 Automated Crowdin downstream (#6127)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 08:22:59 +02:00
Jakub Kuczys
d3310f80fa Red 3.5.1 - Changelog (#6125)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-05-04 08:20:46 +02:00
Jakub Kuczys
d7455ff568 Include --no-cogs flag in Updating Red document (#6123) 2023-05-04 08:16:36 +02:00
Jakub Kuczys
b52f7ede46 Fix ValueError on bot startup when update is available (#6124) 2023-05-04 08:16:11 +02:00
github-actions[bot]
1d654c2edc Version bump to 3.5.1.dev1 (#6122)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 07:44:35 +02:00
github-actions[bot]
a04fb84ffd Version bump to 3.5.0 (#6118)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 06:26:43 +02:00
Jakub Kuczys
5f4b0e853e Fix issues with channel unmutes for mute data from 3.4.x (#6121) 2023-05-04 06:22:54 +02:00
Jakub Kuczys
c541425b57 Mention bank cog in Read before updating section for 3.5 (#6120)
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
2023-05-04 05:40:03 +02:00
github-actions[bot]
7b80043d19 Automated Crowdin downstream (#6119)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 03:04:41 +02:00
Flame442
b3fd90ae4c Red 3.5.0 - Changelog (#6106)
Co-authored-by: Jakub Kuczys <me@jacken.men>
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
2023-05-04 02:53:02 +02:00
Jakub Kuczys
525c3885cd Fix broken links to d.py's docs pages (#6117) 2023-05-03 16:32:25 -07:00
Jakub Kuczys
ba1bf23363 Remove unused ConversionFailure (#6113) 2023-05-03 23:49:12 +02:00
Jakub Kuczys
970f8a7a1e Bump dependencies (#6100) 2023-05-02 20:35:08 -04:00
Jakub Kuczys
8996aee7fb Fix shutdown handling failing when exit code is not ExitCodes instance (#6112) 2023-05-02 20:25:35 -04:00
Jakub Kuczys
af307377ad Update exit codes in the autostart doc for Windows (#6111) 2023-05-02 20:08:09 -04:00
Jakub Kuczys
0cc9bccb86 Drop Debian (not RPi OS) 10, add Fedora 38 and Ubuntu 23.04 (#6110) 2023-05-02 19:07:53 -04:00
Jakub Kuczys
2fe251ecf3 Port TiV changes applied to voice channels to stage channels (#6109) 2023-05-02 19:05:44 -04:00
Jakub Kuczys
f1439a37c8 Add Incompatible changes document (#5603)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-05-02 18:04:17 -04:00
Jakub Kuczys
b7c710ac04 Make it possible to set slowmode in stage/voice channels (#6108) 2023-05-02 16:05:51 -04:00
Jakub Kuczys
6a53d7dcd5 Add checks submodule to redbot.core.app_commands (#6107) 2023-05-02 10:50:55 -04:00
Jakub Kuczys
4edf975996 Merge pull request #6099 from Jackenmen/bump_black
Reformat with Black 2023 formatting changes
2023-05-02 00:55:19 +02:00
Jakub Kuczys
3de5b56216 Bump Black and its deps 2023-05-02 00:52:02 +02:00
Jakub Kuczys
226d8d734d Reformat with Black 2023 formatting changes 2023-05-02 00:51:29 +02:00
Flame442
6cef8408e8 Fix help breaking when removing a command without removing its cog (#6104) 2023-04-28 02:01:46 +02:00
Kowlin
2abafbcc10 Add guide for slash commands (#6008)
Co-authored-by: Jamie <31554168+flaree@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-27 18:51:11 -04:00
Vexed
db1892da65 Fix AttributeError from slash command tree (#6103) 2023-04-27 22:20:18 +02:00
Jakub Kuczys
5fecff0779 Bump platformdirs to 3.x and remove the migration code for 2.x (#6098) 2023-04-25 07:29:10 +02:00
Jakub Kuczys
d8d4b4f15a Improve consistency of shutdown message across Python versions (#6095) 2023-04-24 14:29:51 -04:00
Jakub Kuczys
c6551f4bcc Suppress importlib 3.12 warning about load_module (#6094) 2023-04-24 14:09:18 -04:00
Flame442
ab8f00ae7b [Trivia] Fix string interpolation in test errors (#5955)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-04-21 01:52:56 +02:00
Jakub Kuczys
e2737a08d2 Stop manually adding category to automated PRs (#6089) 2023-04-20 15:43:36 +02:00
Jakub Kuczys
588fa19594 Red 3.4.19 - Changelog (#6082)
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-20 03:51:34 +02:00
Jakub Kuczys
1ed64949aa Add require_var_positional=True to [p]selfroleset add/remove (#6084) 2023-04-19 21:41:55 -04:00
aikaterna
0d284cabe9 Use the contributor list URL instead of the org in [p]info (#6079)
Co-authored-by: Kowlin <git@wyvern.blue>
2023-04-20 02:34:11 +02:00
aikaterna
e1f5d65d16 [Audio] Update Lavalink.jar build (#6033)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-04-19 21:32:56 +02:00
Jakub Kuczys
9681cac820 Bump Red-Lavalink to stable 0.11.0 (#6030) 2023-04-19 04:07:31 +02:00
Jakub Kuczys
f48f0bd1d1 Fix wrong extract location in Publish Release workflow (#6029) 2023-04-19 03:30:52 +02:00
aikaterna
f98db62b69 [Audio] Don't escape formatting on Playlist Enqueued message (#6025) 2023-04-17 18:39:10 -04:00
Jakub Kuczys
f051eae92d Privatize APIs by renaming or removing them from __all__ (#6021) 2023-04-17 17:44:33 -04:00
AAA3A
eafbb06756 Add public positive_int and finite_float converters (#5969)
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
2023-04-17 22:33:44 +01:00
Samuel
fa305cb060 [Help] Optimisation on getting commands in Cog-help (#5354)
Co-authored-by: npc203 <npc203@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-16 17:17:10 -04:00
Jakub Kuczys
64c72e79b5 Switch the Publish Release workflow to use OpenID Connect (#6012) 2023-04-16 22:53:27 +02:00
Samuel
c2da29c93e Dispatch a cog unload event [on_cog_remove] (#5570)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-15 16:56:17 -04:00
Jakub Kuczys
67f4dd5201 Fix missing app_commands import (#6019) 2023-04-15 15:29:27 -04:00
Jakub Kuczys
2c4bd38ba1 Show source code in tracebacks sent by Dev cog commands (#5843)
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
2023-04-15 10:30:19 +01:00
Flame442
aa51fd9ad1 Allow force enabling app commands using flag in extras (#6018) 2023-04-14 15:59:21 -06:00
Flame442
ccdd1ca892 Add global checks to app commands (#6015) 2023-04-14 15:58:02 -06:00
yuansheng1549
030607fb04 Add Traceback prompt (#5851)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-04-14 18:50:39 +02:00
Draper
896d5e9200 Remove deprecated checks in checks module (#6016) 2023-04-13 23:15:22 +02:00
Jakub Kuczys
d47c91cca8 Allow any Messageable in MessagePredicate's channel parameter (#5942)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-13 15:21:56 -04:00
Jakub Kuczys
145b2e43ce Allow any Messageable in MessagePredicate's channel parameter (#5942)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-13 15:21:36 -04:00
Jakub Kuczys
533f036ed2 Improve performance of pagify() (#5698)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2023-04-13 14:52:54 -04:00
Kreusada
79d11e947c Use the commands module instead of checks for permission decorators (#5463)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-04-13 14:16:12 -04:00
Jakub Kuczys
a70f444255 Add brew shellenv to shell profile in macOS install guide (#5993) 2023-04-13 12:48:47 -04:00
Jakub Kuczys
44e129bc66 Add redbot.core.app_commands namespace (#6006) 2023-03-27 20:49:59 -04:00
Kowlin
c79d0d723e Fix the handling of PartialMessageable channels (#6005)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-03-27 19:35:36 -04:00
Kowlin
0a5aa94cde Fix file endings (#6002) 2023-03-21 23:34:01 +01:00
Flame442
f06b734e15 Application Command Manager (#5992)
Co-authored-by: Danny <1695103+Rapptz@users.noreply.github.com>
2023-03-20 21:31:37 +01:00
Kowlin
b2e17775a0 Bump just Discord.py to 2.2.2 (#5998) 2023-03-20 17:59:06 +01:00
Kowlin
469b2de391 Drop the launcher (#5999)
Co-authored-by: palmtree5 <3577255+palmtree5@users.noreply.github.com>
2023-03-18 22:25:56 -04:00
Flame442
d597c35fff [Docs] Windows batch autostart docs (#5996) 2023-03-19 02:44:19 +01:00
Flame442
6774801649 Always allow licenseinfo to be run with a mention prefix (#5865)
Co-authored-by: Zephyrkul <23347632+Zephyrkul@users.noreply.github.com>
2023-03-18 22:32:52 +01:00
Dav
7c7e5edb19 [Modlog]Raise error instead of failing silently on invalid arguments (#5386)
Co-authored-by: Dav <dav@mail.stopdavabuse.de>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-03-18 17:31:28 -04:00
Vexed
2ab204438e Document setting overrides in Trivia list format (#5390)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-03-02 15:54:51 +01:00
Kreusada
8de6b97700 Add JSON Schema for Trivia Lists (#5565)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-03-02 15:43:55 +01:00
Tom Marcot
d9c46342d4 Fix typos issues (#5977)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-02-14 04:36:40 +00:00
Lioness100
a89a27cadf docs: fix typos (#5989)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2023-02-13 21:36:09 -05:00
Jakub Kuczys
9811e4e871 Fix labeler patterns for changelogs (#5987) 2023-02-13 00:17:51 +01:00
Jakub Kuczys
6c32ff58e4 Revamp of automatically applied PR labels (#5954)
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
2023-02-12 23:34:00 +01:00
aikaterna
7e7d5322b7 [Audio] Use more of the newer Managed/Unmanaged terminology (#5952)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-02-12 22:07:46 +01:00
Leet
e0c335eda2 [Trivia] Handle FileNotFoundError when adding a custom trivia list (#5950) 2023-02-03 13:52:43 -05:00
Jakub Kuczys
d0f22a7773 Fallback to asyncio's default exception handler when possible (#5813)
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
2023-01-31 11:02:49 -05:00
keqking
c390b89bd2 [Core] fix error in [p]ignore list (#5973) 2023-01-23 14:49:05 -05:00
Jakub Kuczys
2168585ee1 Improve changelog format (#5602)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2023-01-23 14:39:15 -05:00
Jakub Kuczys
794d486bc0 Bump OS version ranges - Fedora to <36, 37>, macOS to <11, 13> (#5974) 2023-01-19 11:54:37 +01:00
Jakub Kuczys
0358aabd1f Use newer RTD config syntax (#5774) 2023-01-15 17:01:13 +01:00
aikaterna
a13870b45f Remove llsetup alias for llset (#5953)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-01-14 15:33:03 +01:00
Lemon Rose
eda1288bea Add missing help descriptions for flags in redbot-setup (#5818)
Co-authored-by: Lemon Rose <japandotorg@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
Co-authored-by: Leet <36166244+leetfin@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-01-14 14:18:01 +00:00
Jakub Kuczys
f13d910f66 Disallow NaN and Infinity in Trivia CONFIG schema (#5949) 2023-01-02 06:13:12 +01:00
Vexed
b493103dcb Improve validation in trivia (#5947)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2023-01-02 05:24:27 +01:00
Jakub Kuczys
7db635a05b Change 'Managed' to 'External' in [p]llset secured's output (#5944) 2022-12-31 16:35:06 -08:00
Kreusada
b98156c589 Use usage attr to remove appended underscore for from_ parameter in [p]reorderpath (#5946) 2022-12-30 17:28:44 -05:00
Ryan
82e92a8dc3 Update enqueued track message to distinguish album from playlist (#5569)
Co-authored-by: aleclol <50505980+aleclol@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-30 04:48:44 +01:00
Predä
60a9d47003 Core - Add invoke error message customisation (#5894)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-30 04:43:37 +01:00
Jakub Kuczys
88a348210c Add support for sdists and git-archive to _get_version() (#5814)
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
2022-12-30 03:52:49 +01:00
Jakub Kuczys
fa6b2f8c10 Fix incorrect default argument value in [p]streamalert twitch (#5945) 2022-12-30 03:24:05 +01:00
Jakub Kuczys
519acedf46 Make some dependency changes, support Python 3.10 and 3.11 (#5611)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2022-12-30 03:21:57 +01:00
Karlo Prikratki
d3308af0e2 [Streams] Add toggleable button to stream alerts (#5856)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-29 20:18:26 +01:00
Karlo Prikratki
9b1171ea8c Use Discord's relative timestamps as command cooldown countdown (#5893)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-29 17:55:11 +01:00
Flame442
0e97c26b2d Test implicit subclass type conversion in config defaults/sets (#5874)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-29 06:50:18 +01:00
Honkertonken
19ebd02595 Change/Update casing in findcog command. (#5772)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-28 00:52:02 +01:00
Jakub Kuczys
99479342ea Fix ordering of 3.0.0.dev1 and 3.0.0a1.dev1 versions (#5932) 2022-12-27 17:22:56 -05:00
Kreusada
abb0101420 [CogManagerUI] Resolve core path under bot._cog_mgr.CORE_PATH (#5142)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-27 21:58:01 +01:00
Julien Mauroy
d9dd37b867 Remove multiple paths (#5859)
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-27 21:51:13 +01:00
Draper
1ab303bce7 Fix managed LL subprocess's stdout overflowing and deadlocking (#5903)
Signed-off-by: Draper <27962761+Drapersniper@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-27 20:33:50 +01:00
Jakub Kuczys
43ab6e2ef5 Add missing empty line in error output of Trivia unit test (#5659)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2022-12-27 14:42:20 +01:00
Jakub Kuczys
14f142da2b Update installation URLs for Homebrew and Chocolatey (#5776)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2022-12-27 14:28:34 +01:00
Kowlin
f890f65c35 Updated excluded features (#5919)
Co-authored-by: Zephyrkul <23347632+Zephyrkul@users.noreply.github.com>
2022-12-27 11:29:05 +01:00
Predä
7af2ed13ec Update disable commands logic during cogs loading (#5550)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-12-26 19:29:54 -05:00
Jakub Kuczys
e88884edb6 Fix usage of file/folder names without suffix in Downloader (#5938) 2022-12-26 18:39:17 -05:00
sravan
f02491a092 Update intents screenshot (#5936) 2022-12-26 07:50:39 +01:00
Jakub Kuczys
e8c044a9bf Use different exit codes for critical errors vs configuration errors (#5674)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2022-12-25 16:27:07 -05:00
Kowlin
0e58897bfc Add SECURITY.md to the repo (#5929)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-25 14:40:35 +00:00
Flame442
9bfc3ecbce Fix tests badge in readme (#5934) 2022-12-25 15:25:40 +01:00
Kreusada
1c7178a10b Add automodule reference for the antispam module (#5641)
Co-authored-by: Jakub Kuczys <me@jacken.men>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-12-22 17:49:44 -05:00
Kowlin
3cb17116be Revert `mock and mockmsg` back to a guild_only state (#5926) 2022-12-22 17:41:52 -05:00
SnappyDragon64
eb613ea154 [Trivia] Who's that Pokemon? Generation VII and VIII trivia lists (#5890)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-12-19 00:44:01 -05:00
Dav
4dd496c67f [Modlog API] Stop modlog.get_case() from erroring if no modlog channel is set up (#5866)
Co-authored-by: Dav <dav@mail.stopdavabuse.de>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-12-18 19:23:57 -05:00
Lemon Rose
333e359bbb [Admin] add reasoning to addrole & removerole. (#5927)
Co-authored-by: Matt <psykzz@users.noreply.github.com>
2022-12-17 22:36:40 -05:00
MAX
fb3dc51fe2 [Docs] Update bot hosting list. (#5928) 2022-12-11 21:25:37 +01:00
Jakub Kuczys
f7c14b4321 Modernize packaging-related things in Red (#5924) 2022-12-09 18:50:37 +01:00
Kowlin
72172ff1cb Bump discord.py to version 2.1.0 (#5920) 2022-12-02 19:40:15 +01:00
AntonioNarra
b018a76b61 Core - #5891 Recovering Server Prefixes (#5918) 2022-12-01 18:58:11 -05:00
TrustyJAID
bbb15924b9 Allow send_interactive to upload a file containing all content (#5902)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-11-24 16:05:07 -05:00
Flame442
6c8b6eb71c [CustomCom] Fix [p]cc cooldown docstring & docs (#5914) 2022-11-23 01:37:20 +01:00
Kreusada
ed4f36a529 Add serverlock warning to [p]invite (#5898) 2022-11-17 18:11:56 -05:00
Ryan
1fbd6d854b [General] Fix [p]lmgtfy URL generation (#5909)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-11-17 17:22:44 -05:00
Jakub Kuczys
66f906c274 Update CODEOWNERS file with my new username (#5911) 2022-11-17 20:16:01 +01:00
Jakub Kuczys
4574f13ad5 Fix flaky CI caused by flake8's flakiness (GitHub migration) (#5910) 2022-11-17 19:58:24 +01:00
TrustyJAID
0580213cb6 Fix [p]helpset usemenus disable (#5907) 2022-11-15 23:56:56 -05:00
Jakub Kuczys
6023f9015c Restrict first/last character in instance name (#5680)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-11-13 22:50:02 +00:00
Visne
d5cdebcd76 Improve topography trivia (#5572)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-11-12 18:49:33 -05:00
Ankur Gupta
e864924acb Harrypotter questions (#5887)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
Co-authored-by: Lemon Rose <78662983+japandotorg@users.noreply.github.com>
2022-11-12 18:44:13 -05:00
Kowlin
86aed37769 Fix HTTPException in set api's send_modal (#5860)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-11-11 19:59:51 -05:00
Jakub Kuczys
51fa3f502e Remove bordered() utility function (#5692) 2022-11-11 15:37:49 +01:00
Jakub Kuczys
0f20f15c26 Stop using deprecated set-output GH Actions command (#5876) 2022-11-11 15:12:54 +01:00
Alex
3f749b840f fix usage/syntax info in command_audioset_autoplay_playlist docstring (#5592)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-11-01 12:33:21 -04:00
OofChair
6cda937ec2 [Modlog] Make modlogset cases docstring less vague (#5352)
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
2022-10-30 21:06:32 -07:00
Jakub Kuczys
0c35c9686b Add Lavalink version parsing (#5872) 2022-10-30 19:20:45 -07:00
Kreusada
236a10c464 [Docs] Audio Cog Guide (#5871)
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-10-30 18:43:19 -07:00
aikaterna
236d30f335 [Audio] Adjust docstrings (#5895) 2022-10-30 21:00:32 -04:00
AA
115083b18b Case-Insensitive SelfRole (#3865)
Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-10-30 18:00:21 -04:00
Kreusada
85288c1d06 [Docs] Dev Cog Guide (#5869)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-10-25 18:57:32 -04:00
Kreusada
cc5c31999d Document new [p]set usebuttons command (#5885) 2022-10-23 00:36:41 +02:00
Mark Heath
16465c8d83 Fix typo in league of legends trivia list (#5888) 2022-10-22 18:00:46 +02:00
Kreusada
86aff952f0 Update [p]helpset usemenus documentation with converter changes (#5886)
Co-authored-by: Kowlin <10947836+Kowlin@users.noreply.github.com>
2022-10-21 21:03:56 +02:00
Vexed
3be22b683c [Mod] Account for roles in mention spam (#5388)
Co-authored-by: Kowlin <10947836+Kowlin@users.noreply.github.com>
2022-10-20 18:56:40 +02:00
Kreusada Lavranocoyaskalas
a90974d659 Exclude files_from_attatch member from Tunnel automodule (#5778) 2022-10-16 21:13:11 +02:00
Jakub Kuczys
86c6f199b3 Get rid of localized guild feature list in serverinfo (#5830) 2022-10-13 14:04:57 +02:00
Jakub Kuczys
a3de616e4d Properly handle missing schemas/tables in PostgreSQL driver (#5855) 2022-10-13 13:38:43 +02:00
Kreusada Lavranocoyaskalas
a82c08c9d3 Add core/_debuginfo.py to labeler configuration (#5797) 2022-10-13 13:36:42 +02:00
Leet
fcbe37b956 [Docs] Use gender neutral language in remaining places where it isn't (#5873) 2022-10-13 13:34:14 +02:00
keqking
1cb5836db4 [cleanup] fix error in [p]cleanup spam command (#5879) 2022-10-13 11:57:41 +02:00
Leet
64e6044aba [Cleanup] Pass reason for bulk message deletion to audit log (#5863)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-10-12 23:02:37 +02:00
Kowlin
501c2b97dd Fix a lack of permission checks on usebuttons (#5878) 2022-10-12 20:40:49 +00:00
TrustyJAID
b0a3f00f41 Add global buttons to base menus (#5683)
Co-authored-by: Kowlin <10947836+Kowlin@users.noreply.github.com>
2022-10-12 22:13:33 +02:00
TrustyJAID
aaeb1b5daa Add buttons to help (#5634)
Co-authored-by: Zephyrkul <23347632+Zephyrkul@users.noreply.github.com>
Co-authored-by: Kowlin <10947836+Kowlin@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
2022-10-12 16:29:10 +02:00
Kreusada Lavranocoyaskalas
4158244117 Use bot embed colour in [p]dm command (#5868) 2022-10-11 23:01:47 +02:00
Flame442
76c0ee243e [Mod] Hide config migration commands (#5870) 2022-10-11 22:57:18 +02:00
TrustyJAID
f8b0cc6c6a Add support for Hybrid commands in Red (#5681)
Co-authored-by: Kowlin <10947836+Kowlin@users.noreply.github.com>
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
Co-authored-by: Candy <28566705+mina9999@users.noreply.github.com>
Co-authored-by: Matt Chandra <55866950+matcha19@users.noreply.github.com>
Co-authored-by: Lemon Rose <78662983+japandotorg@users.noreply.github.com>
Co-authored-by: Honkertonken <94032937+Honkertonken@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
Co-authored-by: River <18037011+RheingoldRiver@users.noreply.github.com>
Co-authored-by: AAA3A <89632044+AAA3A-AAA3A@users.noreply.github.com>
Co-authored-by: Lemon Rose <japandotorg@users.noreply.github.com>
Co-authored-by: Julien Mauroy <pro.julien.mauroy@gmail.com>
Co-authored-by: TheThomanski <15034759+TheThomanski@users.noreply.github.com>
2022-10-11 22:52:43 +02:00
Honkertonken
7ff89302b2 [Trivia] Various typo fixes. (#5867) 2022-10-07 11:32:58 -04:00
Jakub Kuczys
1241ea165c Fix unintended moving *between* VCs when channel muting (#5854) 2022-10-03 18:11:37 +02:00
Jakub Kuczys
f02528378f discord.py 2.0 update (3d914e08->2.0.1) (#5709) 2022-10-03 16:07:15 +02:00
AlexRatman
d7d6ab46f4 Add missing period which caused ignore list to fail (#5850) 2022-09-17 20:23:50 +02:00
Jakub Kuczys
9d820234bb Fix Tunnel.message_forwarder's handling of >2000 strings (#5844) 2022-09-12 19:34:34 -04:00
Kreusada Tagiazala
cadcffbae5 [Dev] Fix __repr__() errors in REPL when referencing an instance of a class & catch Exception (#5794)
* initial fix (test)

* Replace instances of bare excepts by catching Exception
2022-08-22 20:32:02 -04:00
TheThomanski
6f04698013 Renamed the country of Turkey to Türkiye (#5795)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-08-22 19:31:30 -04:00
Julien Mauroy
d07eb0f7b2 fix: use correct typehint in Config.user's docstring (#5791)
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-08-22 22:59:29 +00:00
Jakub Kuczys
008fb0f042 Red 3.4.18 - Changelog (#5829) 2022-08-15 12:55:08 +02:00
Jakub Kuczys
a32f10d758 Use the new ready line from LL dev build 1352+ (#5775)
* 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+
2022-08-14 12:03:48 -07:00
Jakub Kuczys
4daf81aa5b Bump Lavalink.jar version and update the default application.yml (#5823)
* Bump Lavalink.jar version

* Update the default Lavalink YAML file

* Let's add schema migration too...

* Fix migration (but still actually untested)
2022-08-14 19:57:15 +02:00
Jakub Kuczys
87a9c10369 Remove Temurin version pin on Windows (#5815) 2022-08-10 02:26:09 +02:00
Lemon Rose
4d1381d7c9 [General] show stage channels in [p]serverinfo 1 (#5785)
* [General] show stage channels in `[p]serverinfo 1`

* [General] Formatted with black

* fix black

* [General] Newline `\n` to match the current formatting.

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

Co-authored-by: Lemon Rose <japandotorg@users.noreply.github.com>
Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-08-08 19:55:43 -04:00
Kreusada Tagiazala
fb5f9b6498 Fix [p]set api docstring (#5807) 2022-07-26 20:54:09 +02:00
AAA3A
6ced7ba945 [Core] Add --unload-cogs cli flag. (#5802)
* [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>
2022-07-19 17:10:45 +02:00
Jakub Kuczys
7429b4ff89 Add remaining RHEL 9 derivatives EOL dates (#5803)
Rocky Linux 9 released today so it is time.
2022-07-14 23:34:51 +02:00
River
a0f72ed7dd Update documentation about messages intent (#5798)
* Update documentation about messages intents

* Remove note

* Update screenshot
2022-07-10 22:42:36 +02:00
Kreusada Tanfala
ae80e62a13 Prevent / being used in bot or server prefixes (#5693)
* Update `[p]set prefix`/`[p]set serverprefix`

* Update cli

* style

* update __main__

* style

* improve checks

* Raise in Red.set_prefixes, update responses

* uniform responses

* Fixes

* Keep generator variable names consistent across files
2022-06-28 19:19:20 -04:00
Flame442
febc503df1 Update workflow versions (#5789)
* Update auto_labeler_issues.yml

* Update auto_labeler_pr.yml

* Update codeql-analysis.yml

* Update crowdin_upload_strings.yml

* Update lint_python.yaml

* Update prepare_release.yml

* Update publish_release.yml

* Update tests.yml

* Update for breaking change in actions/github-script@v5

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2022-06-27 17:16:11 +02:00
Kreusada Tanfala
ccec53eef3 Exclude get_embed_color member from Bot framework (#5782) 2022-06-24 18:33:39 +02:00
Lemon Rose
9455ccabfa New Music Trivia List (#5687)
* new trivia category - music

* fix

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* ty aika

* fixed

"Mr. Custer" would be more appropriate than "please mister custer" in respect of the original title of the song.

* Out of context for a trivia list

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/music.yaml

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>

* Made changes as per Aika's change requests

* duplicate removed

* add alternative answers/remove duplicates

Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
2022-06-23 09:19:13 -07:00
Jakub Kuczys
0cc964b87c Drop openSUSE Leap 15.2, add openSUSE Leap 15.4 (#5777)
* Add openSUSE Leap 15.4 to list in version guarantees

* Drop openSUSE Leap 15.2
2022-06-16 18:41:07 +02:00
Honkertonken
cc4ccd8414 Update Clash Royale Info in trivia. (#5771)
typo + changes
2022-06-13 16:55:30 -04:00
Jack Reusayda
68557336da Geography Trivia: Update most populous city in Africa (Kinshasa) (#5743)
Kinshasa -> Lagos
2022-06-11 23:50:02 -04:00
Lemon Rose
7a41becbde fixed outdated flags (#5684)
* fixed outdated flags

* made changes as per suggested
2022-06-11 20:02:13 -04:00
Jakub Kuczys
c00f8b3aab Red 3.4.17 - Changelog (#5763) 2022-06-07 04:44:33 +02:00
Kreusada
9c11e85bb4 Include commit hash for each cog inside [p]cog listpinned (#5563)
* 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>
2022-06-05 19:27:36 +02:00
Matt Chandra
5522f909bd Allow sending the file in follow-up message in ACL upload commands (#5685)
Added follow up message when uploading acl file in permissions cog.
2022-06-05 17:51:02 +02:00
Kreusada
1fd9324171 Prepend emojis to better differentiate between [p]canrun responses (#5711)
* Add emojis to better differentiate between canrun responses

* Apply `success()`

Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>

* Apply `error()`

Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>

* add imports

Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
2022-06-05 17:42:11 +02:00
Kowlin
4580a13e98 Minor bugfixes resolving around modlog UI (#5615)
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.
2022-06-05 17:38:46 +02:00
Candy
485e6837ca [Modlog] Check if guild is unavailable (#5647)
fix for  AttributeError: 'NoneType' object has no attribute 'guild_permissions'
2022-06-05 17:16:33 +02:00
Kreusada
cc3c1a6a95 Add use_spoilers property to TRIVIA_LIST_SCHEMA schema (#5566)
* Add `use_spoilers` to schema

* Update session.py

Co-authored-by: Jakub Kuczys <6032823+jack1142@users.noreply.github.com>
2022-06-05 17:07:41 +02:00
Kreusada
9d50a851eb Escape Discord's formatting in [p]servers command (#5744)
* Escape formatting in `[p]servers` command

* style...
2022-06-05 16:19:52 +02:00
Jakub Kuczys
ee69f6e17f Add RHEL 9 (+ derivatives) install guide (#5721)
* 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
2022-06-05 04:11:16 +02:00
Jakub Kuczys
22ede49462 Update Visual Studio Build Tools to 2022 (#5702) 2022-06-05 04:06:17 +02:00
Jakub Kuczys
e93057093e Add Ubuntu 22.04 install guide (#5720)
* Add Ubuntu 22.04 install guide

* Add Ubuntu 22.04 to End-user guarantees

* Add missing information about supported arches in install guide
2022-06-05 03:08:02 +02:00
Jakub Kuczys
cf85a6470f Wait for two 'Started Launcher' lines before connecting to managed LL (#5751) 2022-06-05 02:46:17 +02:00
Jakub Kuczys
9cdcf07773 Add Fedora 36 and RHEL 8.6 to list in version guarantees (#5701)
* Add Fedora 36 to list in version guarantees

* Add RHEL 8.6

* Drop Fedora Linux 34
2022-06-04 17:32:23 +02:00
Jakub Kuczys
6bb11ad227 Use Temurin 11 instead of discontinued AdoptOpenJDK on macOS (#5718) 2022-06-04 15:24:30 +02:00
Jakub Kuczys
3f1d02598e Replace removed git224 package with git236 in CentOS 7 guide (#5700) 2022-06-02 12:59:02 +02:00
Jakub Kuczys
53bf387f01 Pin Temurin version on Windows until fixed version exists (#5717) 2022-06-02 12:55:02 +02:00
aikaterna
1e8f4fc2a2 [Audio] Update Lavalink.jar build (#5712) 2022-06-01 01:05:52 +02:00
Jakub Kuczys
e36d1bccbf Use latest d.py docs rather than removed master docs (#5713) 2022-06-01 01:00:13 +02:00
aikaterna
d13d02ebfc Fix for using redbot name --edit for changing data location (#5541)
* Update __main__.py

* style
2022-05-31 18:40:35 -04:00
aikaterna
1cf497b128 Fix changing instance name with redbot --edit (#5540) 2022-05-31 18:36:07 -04:00
Kowlin
acdc1df084 Add support for set api Modals (#5637)
* 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>
2022-05-20 13:58:18 -06:00
Jakub Kuczys
ec55622418 Update Downloader's git tests to work with Git 2.36+ (#5690)
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.
2022-04-30 23:28:17 +02:00
MAX
23023da09c [General] update [p]serverinfo 1 guild features. (#5655) 2022-04-18 23:47:30 +02:00
Kowlin
60b495091a Prevent an IndexError from occuring (#5430)
* Prevent an IndexError from occuring

If an page value is negative it doesn't properly loop around to the end.

* Update menus.py

* I'm smart 👍
2022-04-16 17:05:57 -04:00
Kreusada
22df591db2 Add FIFA World Cup Trivia List (#5639)
* Create fifa world cup trivia

* fix formatting

* add source

* Update redbot/cogs/trivia/data/lists/worldcup.yaml

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/worldcup.yaml

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/worldcup.yaml

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/worldcup.yaml

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Update redbot/cogs/trivia/data/lists/worldcup.yaml

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Netherlands change

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add Estadio Nacional Julio Martínez Prádanos

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add various rasunda alternatives

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add Republic of South Africa

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add various alternative names for Soccer City

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add alternatives for Luzhniki Stadium

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add Estádio Jornalista Mário Filho and Maracana alternatives

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add alternatives for Stade de Colombes

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add various match-ups for 2 year combos

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add Empire Stadium alias to Wembley

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add Estádio Jornalista Mário Filho to Maracana

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add alternatives for International Stadium

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Add alternatives for Monumental de Núñez

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* Treat double year as literal string

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-04-16 17:00:05 -04:00
Jakub Kuczys
27bed5010f Make controls in menu() optional (#5678)
* 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
2022-04-16 13:29:12 -06:00
Kreusada
955b40ac6d Various updates to geography trivia (#5638)
* Various updates to geography trivia

* Remove discriminator from AUTHOR key
2022-04-12 16:36:07 -04:00
jack1142
96e8d8cdf5 Make DEFAULT_CONTROLS and ReactionPredicate.*_EMOJIS immutable (#5666)
* Make ReactionPredicate.*_EMOJIS immutable

* Make menus.DEFAULT_CONTROLS immutable

* Actually convert NUMBER_EMOJIS to tuple
2022-04-09 21:35:11 +02:00
jack1142
6cb2378e2e Stop suppressing exceptions by early-exiting in finally (#5673)
* Stop suppressing exceptions in entrypoints due to sys.exit in finally

* Remove returns in finally in Modlog API as well...
2022-04-09 20:49:45 +02:00
jack1142
02c0328002 Add info about supported arches to guides and version guarantees (#5677)
* Update version guarantees document with supported arches

* Add note about supported architecture to each install guide
2022-04-09 20:47:31 +02:00
jack1142
61c73f2f1f Add CentOS Stream 9 docs (#5537) 2022-04-09 20:17:10 +02:00
jack1142
841b922e9c Use absolute path to which to avoid aliases (#5547) 2022-04-09 20:16:31 +02:00
jack1142
56c9241de4 Allow passing channel to [p]streamalert and show platform in streamalert list (#5160)
* 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>
2022-04-09 20:08:41 +02:00
jack1142
c9f1a45854 Make --debuginfo more like [p]debuginfo (#5662) 2022-04-09 19:34:12 +02:00
jack1142
bc9f34c04b Fix invalid version error with _get_version()-provided version (#5670)
* 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.
2022-04-05 16:48:03 -06:00
jack1142
88d2cb3976 Suppress stderr in _get_version() (#5667) 2022-04-05 22:33:43 +02:00
Kreusada
0b8dec77c3 Remove caching and safety utilities (#5653)
* Remove caching

* Remove safety

* Remove unused private usage
2022-04-03 04:31:53 +02:00
TrustyJAID
2995a457f6 Fix AttributeError in new decorators added to requires (#5665) 2022-04-03 04:27:24 +02:00
jack1142
35f1681dc1 Include tag distance and commit hash in dev versions when possible (#5664)
* Include tag distance and commit hash in dev versions when possible

* Fix test
2022-04-02 19:51:34 -06:00
jack1142
febca8ccbb Migration to discord.py 2.0 (#5600)
* 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
2022-04-03 03:21:20 +02:00
Kreusada
c9a0971945 Reference how to reply in the [p]contact command with embed settings (#5529) 2022-04-02 02:57:06 +02:00
Draper
78e64ec559 add timestamps to all audio embeds (#5632) 2022-04-02 02:37:44 +02:00
jack1142
d932abad16 Use Guild.fetch_ban() over Guild.bans() (#5656) 2022-04-02 01:44:30 +02:00
jack1142
67e43eb00b Ignore d.py's |coro| substitution in Sphinx (#5648) 2022-03-31 15:12:31 +02:00
Draper
d8e20afa1d Fix an incorrect comparison in audio (#5643)
Signed-off-by: Draper <27962761+Drapersniper@users.noreply.github.com>
2022-03-31 12:40:29 +02:00
Draper
511de5163f Update Audio to use RLL 0.11.0rc0 (#5631)
* Replace player.manager to player.node

* Try using bot.is_closed instead of get_voice_ws.

* Use Shard.is_closed instead of bot.is_closed.

* Use RLL PR as dep.

* Update audio to use add dep to https://github.com/Cog-Creators/Red-Lavalink/pull/122

* few thing missing

* Missing `player.manager.node` -> `player.node` change

* Update setup.cfg

Co-authored-by: PredaaA <46051820+PredaaA@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2022-03-31 11:44:09 +02:00
Draper
9ec85d4819 Audio changes (#5593)
* 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>
2022-03-28 08:23:30 -07:00
TrustyJAID
5a5b22003f Fix embed requested in DMs (#5635)
* 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
2022-03-22 21:04:45 +01:00
jack1142
c69e8d31fd Reformat with Black 22.1.0 2022-03-22 18:37:17 +01:00
jack1142
f6d9632c8f Bump Black version to 22.1.0 2022-03-22 18:37:17 +01:00
jack1142
d87199779e Prefer home directory even for system users if it exists (#5022) 2022-03-21 10:43:52 -06:00
jack1142
ed4f2cf466 Switch from low-level loop.create_task and asyncio.ensure_future (#5626)
* 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
2022-03-21 10:24:46 -06:00
jack1142
7a5ada2d92 Make decorator combining in Requires more consistent (#5625)
* Allow combining bot_has_permissions() decos

* Improve consistency for Requires.user_perms
2022-03-21 10:23:23 -06:00
jack1142
aa55b08a0a Set Red._color before login rather than in on_ready (#5627) 2022-03-21 10:23:09 -06:00
jack1142
0f299ae195 Support all Messageables in bot.embed_requested() (#5576)
* 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
2022-03-21 10:22:55 -06:00
Draper
f763d29fd4 Add and use Red-Commons library (#5624)
* 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>
2022-03-18 23:41:42 +01:00
Leothelion
335988c916 Update Kazakh Capital City Answer (#5599) 2022-03-18 17:52:25 -04:00
TrustyJAID
c8ff3c4cce Catch overflow errors for mutes time conversion (#5605) 2022-03-18 17:48:32 -04:00
Kuro
193cb3b035 [Downloader] Add argument to immediately reload or not (#5623)
* Add argument to immediately reload or not

* Style

* More detailed (and clear) description

* Better desc (ig)

* plurality

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2022-03-18 15:47:41 -04:00
Draper
2d9548ec0e Audio cleanup (#5618)
* 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
2022-03-16 09:42:17 -07:00
Draper
593eeb5362 Add a custom Logger class with both verbose and trace levels. (#5613)
* rearrange commits

* Update redbot/setup.py

* change rich log level colours
2022-03-15 16:20:37 -04:00
GhOsT
7d716a2d67 Fix formatting breaking with nested formatting utils in help (#5601)
* 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>
2022-03-06 17:48:48 +01:00
jack1142
02f1ad919d Ask if changes were tested in PR template (#5580) 2022-02-28 18:08:16 +01:00
TrustyJAID
58d8cb4d1f Fix grammar in uptime command (#5596) 2022-02-28 15:57:59 +00:00
aikaterna
2ee64618af Fix spelling error (#5588) 2022-02-23 02:48:37 +00:00
jack1142
a6590b0380 Update redgettext to version 3.4.2 (#5584) 2022-02-21 15:21:59 +00:00
jack1142
50f3168b14 Update redgettext to version 3.4.1 (#5583) 2022-02-21 15:10:58 +00:00
jack1142
299a537f84 Update redgettext to version 3.4 (#5582) 2022-02-21 15:56:33 +01:00
jack1142
eeffbf8231 Avoid potential memory leak in Filter cog (#5578) 2022-02-20 22:52:58 +01:00
jack1142
0338e8e0a8 Avoid 'editing' message with no changes when case is created (#5577) 2022-02-20 16:42:56 -05:00
jack1142
78dc1d4cd8 Update discord-ext-menus vendor to latest commit (#5579)
Vendor `discord.ext.menus` from commit `fbb8803779373357e274e1540b368365fd9d8074` at Rapptz/discord-ext-menus
2022-02-20 22:01:40 +01:00
crayyy_zee
8d46568180 Add typechecking to config from_id methods (#5564)
* [config] Add typechecking for parameters

* change instance check

* Knew it, shouldnt have added these

* black
2022-02-20 15:50:07 -05:00
jack1142
b0ab6186ef Ensure that registered Config defaults are serializable to JSON (#5557) 2022-02-20 15:49:39 -05:00
jack1142
9baf9ba546 Fix number of cogs in Getting started doc after Bank cog removal (#5516) 2022-02-20 15:48:59 -05:00
jack1142
669f3e3073 Emphasize lines with things to replace in autostart guides (#5548)
* Emphasize lines with things to replace in autostart guides

* Use 'default' pygments style instead
2022-02-16 12:47:22 -05:00
Dav
c6517d5087 [Core/Core Cogs] Prevent translation errors and use formatting utils (#5435)
* 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>
2022-02-15 20:25:21 -05:00
Vexed
9ab307c1ef Remove specific number of steps in update docs (#5556)
* change 4 to a few bc 4 is a lie

* wait linux exists

* 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>
2022-01-29 18:30:15 +01:00
jack1142
e33985f969 Disallow crawling of versioned documentation in robots.txt (#5549) 2022-01-29 17:16:44 +01:00
Flame442
b05933274a [Audio] Fix UnboundLocalError in edge case (#5394)
* Fix UnboundLocalError in edge case

* Fix typehint for fetch

* Style
2022-01-12 09:20:22 -08:00
untir_l
05cd11b657 Fix typo in Audio seek command description (#5530) 2022-01-11 08:35:50 -08:00
jack1142
de53d15cf8 Update copyright (#5526) 2022-01-10 17:52:36 +01:00
jack1142
cfa8f15faa Update "copyright notice" for Dev cog (#5527) 2022-01-10 17:52:20 +01:00
aikaterna
6ff844e605 Fix formatting in error message about already installed cog (#5531) 2022-01-05 01:52:15 +01:00
jack1142
fbe378657c Red 3.4.16 - Changelog (#5520)
* Red 3.4.16 - Changelog

* Add contribs!
2021-12-31 19:08:06 +01:00
jack1142
a4ba249e27 Red 3.4.15 - Changelog (#5504)
* Red 3.4.15 - Changelog

* Use stronger words

* Add jar stuff

* Add 5499

* Minor grammar stuff

* add 5472

* Add 5452

* Add 5448

* Add date and contributors

* Update docs/changelog_3_4_0.rst

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

* the other thing

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2021-12-31 03:13:00 +01:00
jack1142
1ecbe6cebb Only check for permissions when check_permissions is True (#5510) 2021-12-31 02:51:06 +01:00
Just-Jojo
a787033e1d [Events] Rename guild remove listener (#5498)
* [Events] on_guild_leave => on_guild_remove

* [Events] on_guild_leave => on_guild_remove
2021-12-31 02:22:29 +01:00
jack1142
8cc004f70f Add non-interactive mode to redbot-setup (#5448)
* 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`
2021-12-31 02:08:18 +01:00
jack1142
ff7c146b62 Make embeds in help output consistent (#5452)
* Add `check_permissions` kwarg to `bot.embed_requested()`

* Make embeds in help consistent regardless of why it's being sent
2021-12-31 02:01:23 +01:00
Kowlin
faab711ec8 Ensure Nitro users can't make CCs that are too long (#5499)
* 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>
2021-12-31 01:39:39 +01:00
aikaterna
c49d0ec9d3 Update Lavalink.jar, Red-Lavalink and make changes to support it (#5474)
* Lavalink error handling update

* comment typo

* address review

* Update redbot/cogs/audio/core/events/lavalink.py

* Bump jar version

* Bump RLL version

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-31 01:16:28 +01:00
GhOsT
337f58f9fb Fix short help in docstrings for core cogs and commands (#5502)
* fix part of command description not appearing in the help command.

* Add more

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-30 22:31:01 +01:00
Flame442
dce2378806 Prevent unexpected timedelta matches (#5393)
* 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
2021-12-30 00:46:36 +01:00
jack1142
9c05db1104 Allow mocking attachment-only msg, fix docstring, small refactor (#5446)
* Use the logic from `[p]mock` in `[p]mockmsg`, fix docstring

* Let people mock attachment-only messages

* Use empty string, not None
2021-12-26 22:04:36 +01:00
jack1142
90406be9ea Remove old note about updating Red in Unix install guides (#5439)
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.
2021-12-26 21:50:54 +01:00
jack1142
d1df27bc14 Update supported OSes (add Alma Linux, RPi OS 11, drop EOL OSes) (#5440)
* 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
2021-12-26 21:50:22 +01:00
jack1142
e5b8fc4585 Bump Python version in install guides to 3.9.9 (#5447) 2021-12-26 21:45:56 +01:00
jack1142
db0f4ce44d Add jack1142 as code owner of install/update guides (#5493) 2021-12-26 21:12:23 +01:00
Parnassius
5a047bf979 Make emptydisconnect disconnect when all vc members are bots (#5421)
* [Audio] Disconnect from voice chat when every connected user is a bot

* Update condition according to code review

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-26 19:09:37 +01:00
Stonedestroyer
6297bfcab6 Make invite URL part of public API (#5424)
* Make invite URL public API

* Add doc and RPC

* Lint

* Update redbot/core/core_commands.py

Co-authored-by: Matt <psykzz@users.noreply.github.com>

* Update redbot/core/bot.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* RPC handling,

* Fix appinfo

* Change docs

* Fix docs

* Change docs

* Update redbot/core/core_commands.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Docstring changes

* nit

Co-authored-by: Matt <psykzz@users.noreply.github.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 22:08:32 +01:00
Vexed
d27dbded8a Fix RPC cog load and unload by returning dicts (#5453)
* use dicts for CoreLogic package management returns

* address review

* failed_packages->notloaded_packages in _unload

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 21:11:48 +01:00
Alex
a228a0d0b3 Show role payday amounts in economyset showsettings (#5457)
* [V3/develop] show RolePaydayAmounts in showsettings command

* Update economy.py

* Switch to using a list (nitpicky optimizations)

https://docs.python.org/3/faq/programming.html#what-is-the-most-efficient-way-to-concatenate-many-strings-together

* Mark the text as translatable

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 18:08:13 +01:00
Jan
7db3339aba isolate direction of username within modlog (#5422)
* isolate direction of username within modlog

* Add link to Unicode's usage

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 17:34:02 +01:00
MAX
b091f13df5 [Core] Changed prefix length to 40. (#5476)
* Update core_commands.py

* Docs yes facebook's metaverse

*jokes on me*

* meta

* forgot here

* Update core_commands.py

* Forgot here

* And forgot here
2021-12-25 04:14:16 +01:00
Toby Harradine
e878483318 [Config] Add type-hints to _ValueContextManager methods (#5344)
Without these type-hints, I've found that PyCharm misidentifies the returned type, causing a number of false positives in static type checking.
2021-12-25 03:19:18 +01:00
MAX
551e6d9f55 Update host list with new locations for Hetzner and Contabo (#5475) 2021-12-25 03:12:03 +01:00
Vexed
cef55459c6 Fix issues with loading config.json when it doesn't exist (#5416)
* 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>
2021-12-25 03:02:44 +01:00
aleclol
5e527cb27d Add necessary None checks to Core's usage of Requires.privilege_level (#5477)
* Check if it has a privilege level

* Let's fix this in warnings too

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 02:04:33 +01:00
Ryan
bae85c35c1 [Docs] Correct set api examples to be consistent for Spotify (#5444)
* consistant usage

* switch audiodb to youtube

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 01:05:23 +01:00
PredaaA
4e469ce15e Remove voice region field in [p]serverinfo (#5449)
* [General] Remove guild region on serverinfo

* Remove in string too.
2021-12-25 01:02:37 +01:00
Kreus Amredes
e068294cc8 Restrict [p]cleanupset notify to guild only (#5466) 2021-12-25 00:54:37 +01:00
krak3n
2c51182e8e Add plural forms to the responses of [p]leave command (#5391)
* Improve the response of `[p]leave` command

* Update core_commands.py

* Update core_commands.py

* style?

* fix maybe

* black

* fixed typo in docstring

* aaa

* style

* Few more changes

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-12-25 00:51:17 +01:00
sravan
442cad7917 [Mod] Typo in unban command (#5470) 2021-12-23 02:51:55 +01:00
Leet
e993e749ee Update links to installation guides in README (#5426)
* 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
2021-12-23 02:48:05 +01:00
Kreus Amredes
bf0fab8575 Remove Bank cog from labeler configuration (#5464) 2021-12-11 15:57:05 +01:00
Kowlin
0158dbab1d Reorganize [p]set command group (#5432)
* Reorganised Set command group

* Moved custominfo

* Tox styling

* Make `set locale&regionalformat` 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>
2021-12-01 21:35:30 +01:00
palmtree5
6acdcdeae9 Move modlogset/bankset commands to core (#4486)
* 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>
2021-11-25 10:06:30 +01:00
jack1142
fc560db72d Stop fetching the messages when getting the cases in Modlog (#4977)
* Use PartialMessage when Case is fetched from Config

* Update docstring
2021-11-05 12:18:23 +01:00
jack1142
4ec0d2bb01 Add guarantees for supported OS versions (#5437) 2021-11-03 18:11:46 +01:00
jack1142
78c92cc766 Address common issues with load path configuration in docs (#5356)
* 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
2021-11-02 12:38:06 -07:00
Kowlin
6c4e5af5ee Check to avoid an IndexError (#5429) 2021-11-02 11:53:42 -07:00
jack1142
3f4842603b Remove currently deprecated functionality (#5433) 2021-11-02 13:04:45 +01:00
jack1142
f071ec09e2 Try to fix base branch in Publish Release workflow *again* (#5340) 2021-11-02 13:02:01 +01:00
Predeactor
483ef36d1b Modernize syntax in chat formatting module and add success() (#5427)
* Downloader's plurial & Fix

* Don't forget pipinstall

* Fix syntax issue

* This f****** fix that took me too much of my time for nothing.

* Black

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Fix Jack's syntax, remove numbers & fix bad calculated cogs

* Black ofc

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Update redbot/cogs/downloader/downloader.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* Address my review comment

* Simplify

* this is kinda a lot but shh

* Change format to f-string

* Add success function to char_formatting

* Revert "Merge branch 'V3/develop' of github.com:Predeactor/Red-DiscordBot into master/chat-formatting-enhancement"

This reverts commit c338da7b66, reversing
changes made to f2422ad782.

* For once I would have appreciated if style checks were failing...

Co-authored-by: Predeactor <ubuntu@vps-35e65bf5.vps.ovh.net>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-10-27 14:34:20 +02:00
Rasmus Wriedt Larsen
42293afd43 Fix CodeQL workflow (#5412)
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.
2021-10-20 16:50:01 +02:00
jack1142
7abc9bdcf1 Pre-fetch app owners and fail early on no owners (#4926)
* Pre-fetch app owners and fail early on no owners

* Improve command mention in error message

* Further change the order of startup actions
2021-10-20 12:13:07 +02:00
jack1142
6db5c866af Rename RedBase to Red, remove the old Red (#5159)
* Rename RedBase to Red, remove the old Red

* Update docs references

* add noindex directives
2021-10-20 12:12:55 +02:00
Crossedfall
a70f0b7872 [Docs] Removes LXC as an unsupported hosting platform (#5351) 2021-10-20 12:10:13 +02:00
Ryan
4348318fd1 Update JDK URL and add Python version upper-bound in Windows guide (#5403)
* 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>
2021-10-20 11:41:43 +02:00
Kreus Amredes
b64ece3ee9 [Admin] Add [p]selfroleset clear command (#5387) 2021-10-17 18:51:04 +02:00
Flame442
d56f31a708 [Mutes] Fix vars not getting formatted due to previous PR (#5404)
* Fix vars not getting formatted due to #5364

* Only format a second time if needed

* Format only on string literals
2021-10-17 02:56:26 +02:00
Kowlin
67bcd72d9c Update the timestamping we forgot to Discord compatible timestamping (#5395) 2021-10-16 21:38:52 +02:00
Dav
1d34e9e47b [Downloader] Show repo name in findcog (#5383)
* show repo name in findcog

* how did i manage to overcomplicate this?

* for Kreusada

* I wanted to do that... but forgot
2021-10-16 02:10:57 +02:00
WreckRox
9aee8ce28f Fix descriptions for examples of ID-based command invocations in Mod (#5372)
* 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
2021-10-16 01:29:15 +02:00
krak3n
17dc9e0c47 [Mod] Indicate successful run in [p]voicekick (#5367) 2021-10-16 00:50:58 +02:00
MAX
b8535ee53e Add a tick on traceback command when it's sent to DMs (#5353)
* add a `tick` when sent to dm.

* confused ™️

* did i learn now? :P

* i'm not confused anymore :3
2021-10-16 00:47:13 +02:00
jack1142
4b70acb989 Do not include expected wait_for responses in translated strings (#5364)
* Do not include 'I agree' prompt in translation string

* Add more stuff

* Address review comment

* Address review comments
2021-10-16 00:02:35 +02:00
jack1142
334cd4fa2a Add optional message to send when bot can't react in ctx.tick() and ctx.react_quietly() (#4092)
* Update context.py

* Pre-emptive check to avoid hitting the API
2021-10-15 18:44:12 +02:00
Kreus Amredes
a8f35f762c Improve helpset showaliases docstring (#5376) 2021-10-07 12:22:35 -07:00
aikaterna
6eb922e7d9 [Audio] Remove extra whitespace (#5366) 2021-10-03 21:10:32 +02:00
Fixator10
b4037a80d8 fix possible issue when joined_at is None (#5361) 2021-10-02 11:08:17 -04:00
El Laggron
cb18a66336 Initialize driver before starting the backup (#5315) 2021-09-23 22:38:50 +02:00
jack1142
cddd99eba7 Red 3.4.14 - Changelog (#5335)
* Red 3.4.14 - Changelog

* Add contributor list

* proofreading 1

* Fix plural form
2021-09-23 21:08:47 +02:00
River
92cabd134d Update some link texts in docs for accessibility (#5310)
* 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>
2021-09-23 18:41:51 +00:00
jack1142
2c8c97490b Maybe fix the base branch used in dev bump automation (#5307) 2021-09-23 17:56:33 +02:00
Leet
2ce8e65527 Only initialize and teardown driver if actually needed (#5313)
* 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>
2021-09-23 17:34:38 +02:00
MAX
d69326b1fe Use discord native timestamp in [p]uptime (#5323)
* support for discord's timestamp on uptime

* woops not supposed to remove `_`.

* ups

* ups x2

* Apply suggested change.

* hehe
2021-09-23 16:22:16 +02:00
jack1142
cbbb9d9b9b Split documents per OS, fix few things, drop and add few OSes (#5328)
* 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'
2021-09-22 20:13:58 -07:00
aikaterna
b2e9b38a03 [Audio] Update Lavalink.jar build (#5329) 2021-09-23 02:32:11 +02:00
Kowlin
89e3a78ead Fix Case's modified_at attr and its format in message content (#5317)
* Fix modified_at field to properly format.

* let's just fix the type hints

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-14 02:42:20 +02:00
jack1142
eeed082542 Red 3.4.13 - Changelog (#5302)
* Add 3.4.13 section

* PR 5156 (issue 4997)

* PR 5178 (issue 5177)

* PR 5185, 5187

* PR 5184

* PR 5186

* PR 5165

* PR 5188

* PR 5225

* PR 5180

* PR 5181 (issue 4868)

* PR 5221 (issue 5216)

* PR 4659 (issue 4571)

* PR 5173

* PR 5155, 5241

* PR 5199

* PR 5205 (issue 4074)

* PR 5238 (issue 5237)

* PR 5169

* PR 5214

* PR 4981 (issue 4841)

* PR 4837 (issue 4836)

* PR 5218 (issue 4732)

* PR 5233

* PR 5211 (issue 5187)

* PR 5108

* PR 5223 (issue 5195)

* PR 5234

* PR 5243 (issue 4717)

* PR 5000 (issue 4140)

* PR 5206 (issue 5171)

* PR 5121 (issue 4655)

* PR 5217 (issue 5213)

* PR 5037

* PR 5109, 5163, 5172, 5191

* PR 4968

* PR 5048, 5092, 5149, 5207, 5209, 5215, 5219, 5220

* Fill 'Read before updating' section

* Add contributor list

* few fixes

* Apply suggestions from code review

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>

Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com>
2021-09-09 23:48:51 +02:00
PhenoM4n4n
e5b236fb1c Add CommandConverter and CogConverter + add usage in Core (#5037)
* 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>
2021-09-07 23:43:29 +02:00
Kreus Amredes
63fd7cc95f [Docs] Update Cleanup docs with new cleanupset command group (#5245)
* Add cleanupset commands to cleanup docs

* fix spacing

* shown -> sent

* update command docstring

* Fix trailing whitespace and use same style for docs

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-07 21:12:46 +00:00
Ryan
33dddaf5b4 Add Debian 11 to install guide and clarify "Buster" as Debian 10 (#5217)
* 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...
2021-09-06 23:33:34 +02:00
palmtree5
3254698c78 Update deps, allow Python 3.9, drop Fedora 32 (#5121)
* 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>
2021-09-06 18:43:29 +02:00
Just-Jojo
0dded8aa47 [Core] Add more APIs for allowlists and blocklists (#5206)
* [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>
2021-09-06 18:38:07 +02:00
Zoë F
ed9bb77eec Add RelativedeltaConverter and parse_relativedelta (#5000)
* 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>
2021-09-06 02:50:21 +02:00
jack1142
86649e897f Add [p]diagnoseissues command (#5243)
* 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
2021-09-05 19:01:46 +02:00
jack1142
d84c8efa34 Update Mac OS instructions to work properly on Apple Silicon (#5234) 2021-09-04 10:56:43 -07:00
jack1142
a0a433b13d Improve and add more usage of discord timestamps (#5241)
* Improve and add more usage of discord timestamps

* How did that whitespace get there?
2021-09-04 09:14:05 +02:00
PredaaA
4366af6f6c [Cleanup] Handle NotFound error of prompt in check_100_plus (#5191)
* [Cleanup] Handle HTTPException of prompt in check_100_plus

* Update redbot/cogs/cleanup/cleanup.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-04 00:38:03 +02:00
PredaaA
42edb12b2e [Trivia] Handle potential Discord errors in session (#5172)
* [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.
2021-09-04 00:36:48 +02:00
Lui
36ea867dcf [Streams] Check non-existent streams more than once (#5223)
* [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
2021-09-03 16:25:01 +02:00
Samuel
cad7f400f9 Add commands for editing aliases (#5108)
* [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>
2021-09-03 01:50:08 +00:00
jack1142
6d40de8da3 Invalidate cache in filter clear commands 2021-09-03 03:37:25 +02:00
Enul
8880251749 [Mod] Add user hierarchy check to [p]rename (#5211)
* 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>
2021-09-03 01:08:46 +00:00
aikaterna
17d24b28f1 [Audio] Update Lavalink.jar build (#5233) 2021-09-03 02:30:04 +02:00
Jamie
c4f8f65d4d Add toggleable notification of deleted messages count in Cleanup (#5218)
* Addition of cleanup notification.

* black

* subtract invoking message from count

* Update redbot/cogs/cleanup/cleanup.py

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* be explicity about kwarg

* address review

* style

* Fix type hints

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-03 01:12:28 +02:00
Kreus Amredes
4e2e4bfe6a [Mod] Send ban reason on Temp Bans (#4837)
* [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>
2021-09-02 19:07:07 +02:00
Kreus Amredes
f628093208 [Filter] Add filter clear commands (#4981)
* [Filter] Add filter clear commands

* define messagepredicate

* actually send msg, lol

* deco fixes

* black

* [Docs] Update filter documentation

* fixes

* style

* Add missing whitespace

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-02 17:55:58 +02:00
jack1142
6f0a8b11d7 Add test for presence of upper and lower bound on Python version (#5198)
* 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!
2021-09-02 01:52:27 +02:00
jack1142
f6cf0d5670 Allow dots in the middle of repo names (#5214)
* Allow dots in the middle of repo names

* Screw you, Black
2021-09-02 01:45:25 +02:00
PredaaA
8eac787f7b [Streams] Improve config calls in stream alerts (#4968)
* [Streams] Improve config calls in stream alerts.

* config->guild_data, style changes

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-02 01:40:15 +02:00
jack1142
88abe469b6 Accept mentions in [p]cleanup user (#5169)
* Accept mentions in `[p]cleanup user`

* Updated spacing & formatting on info logging

* Whoops...

Co-authored-by: Kowlin <boxedpp@gmail.com>
2021-09-02 01:08:13 +02:00
Kreus Amredes
b0f93a3ce1 [Admin] Allow selfroleset command to consume multiple roles (#5238)
* 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>
2021-09-01 22:37:45 +00:00
Vexed
f8664a4e8a [Help] Let owners set menu reaction timeout (#5205)
* initial help reaction timeout with min 15, max 300

* slight wording change

* docs!

* aaa

* Suggestions from code review, thank Jack!

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-01 18:35:11 +02:00
Kreus Amredes
6a8968e34d [Docs] Fix changelog entry from being under the wrong section (#5236) 2021-09-01 03:10:50 +02:00
Kreus Amredes
dbd25e92a1 Document parameters in remaining chat_formatting functions (#5215) 2021-09-01 02:51:59 +02:00
GhOsT
c57ef4828e [Core] add ctx.tick() to [p]invite (#5199) 2021-08-31 23:27:11 +02:00
Kreus Amredes
6bf85a42f8 [Downloader] Fix various formatting issues in cog update notices (#5185)
* again :P

* some more

* fix
2021-08-31 23:20:29 +02:00
Kreus Amredes
d15011e2c5 [Downloader] Suppress NotFound errors in [p]cog update command (#5109)
* [Downloader] Suppress NotFound errors when cog update message is deleted

* occurance 2
2021-08-31 23:19:15 +02:00
Kowlin
f05debc923 Initial support for Discord timestamping (#5155)
* 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>
2021-08-31 19:55:33 +00:00
PredaaA
b586c2f990 [Mod] Check if guild is unavailable in tempban expirations (#5173)
* [Mod] Check if guild.me is None else continue in tempban expirations.

* Check for guild.unavailable instead of guild.me being None.
2021-08-31 20:48:21 +02:00
Kreus Amredes
c34f1e2f01 [Mutes] Fix NotFound error when trying to delete message (#5163)
* [Mutes] Fix NotFound error when trying to delete message

* other occurances
2021-08-31 20:47:32 +02:00
Kreus Amredes
299d6c57d9 [Alias] Fix double plural grammar in alias docstring (#5092) 2021-08-31 20:46:12 +02:00
Grant LeBlanc
173127e015 [Trivia] Validate custom trivia file upload using schema (#4659)
* 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>
2021-08-31 20:44:25 +02:00
Twentysix
91ecd6560a [Docs] Add intents / public bots guide (#5221)
* [Docs] Add intents / public bots guide

* [Docs] Intent guide: update on d.py
2021-08-30 17:41:41 -04:00
Vexed
7413e3c350 [Logging] Make Rich more copy-/paste-able (#5181)
* commit work, mostly untested

* v minor refactor

* force new renderer

* Code style changes

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-08-30 22:15:26 +02:00
Kreus Amredes
d13d6477c5 [Docs] Update alias userdoc to reflect updated help menu layout (#5048) 2021-08-29 15:36:14 +02:00
Kreus Amredes
ee0627f41f [Docs] Getting started guide: fix incorrect information / typos (#5180) 2021-08-29 15:26:13 +02:00
Kreus Amredes
ec5428f1e9 [Docs] Fix argument formatting in Admin cog guide 2021-08-29 14:36:10 +02:00
Vexed
37c52d6066 [Docs] Add Oracle Cloud $300 credits to hosting guide 2021-08-29 14:33:00 +02:00
Kreus Amredes
48fa10343c [Docs] Fix warning block in Mod cog guide (#5220) 2021-08-29 14:31:13 +02:00
aikaterna
43071e3fa2 [Audio] Add a wait time before auto disconnect (#5188)
* Update lavalink.py

* Add comment

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-08-13 18:01:31 +02:00
jack1142
80e7a70f9e Fix base branch used for PyPI release? (#5212) 2021-08-13 04:08:39 +02:00
Kreus Amredes
11913806a4 fix typo (#5207) 2021-08-13 02:36:57 +02:00
fredster33
f42d675ac0 Update DO link (#5209) 2021-08-13 02:36:15 +02:00
Kowlin
e154a630df Add a per guild max volume setting (#5165)
* Oh great... someone touched Audio again.

* How did that get in there?

* Style? Style.
2021-07-16 14:45:54 -07:00
MAX
2b67b9d06d [Audio] UX improvements to [p]summon command (#5186) 2021-07-13 19:52:46 +02:00
Vexed
2ab46fbe41 use rich console print for red colour (#5184) 2021-07-07 04:46:47 +02:00
Kreusada
49cc9374d4 [Downloader] Fix formatting for red version requirement notices (#5183) 2021-07-06 18:50:10 +02:00
Just-Jojo
ad6b8662b2 [Warnings] Allow for 0 point warnings (#5178) 2021-07-03 23:52:59 +00:00
jack1142
9d35df2048 Add cherry_picker configuration (#5168) 2021-07-02 21:05:12 +02:00
jack1142
ec26687e9e Improve release correctness and safety by using GH Environments (#5167)
* Improve release safety by using GH Environments

* Exit early when just returning version
2021-06-30 17:24:18 +02:00
Kowlin
3b7f9e24b4 Refined debuginfo (#5156)
* 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>
2021-06-27 03:54:27 +02:00
Dav
0fb7c8bdba Raise on an uncompliant message in Context.maybe_send_embed() (#4465)
* Raise on uncompliant message

* just wait for me to be done flame! (grammar+testing)

* i liked this better
2021-06-24 08:22:58 +02:00
Draper
34b912bc7c Allow menu() to listen to both adding and removing reactions (#4517) 2021-06-23 18:48:06 +00:00
jack1142
a9dc93cf81 Version bump to 3.5.0.dev1 (#5154) 2021-06-23 20:33:02 +02:00
1176 changed files with 104075 additions and 113842 deletions

40
.git-blame-ignore-revs Normal file
View File

@@ -0,0 +1,40 @@
# Since version 2.23 (released in August 2019), git-blame has a feature
# to ignore or bypass certain commits.
#
# This file contains a list of commits that are not likely what you
# are looking for in a blame, such as mass reformatting or renaming.
# You can set this file as a default ignore file for blame by running
# the following command.
#
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
# [V3] Update code standards (black code format pass) (#1650)
b88b5a2601f56bda985729352d24842f087a8ade
# Black tests and setup.py (#1657)
e01cdbb0912387749d9459e1d934f9ed393a9b51
# Black formatting for generate_strings.py and docs/conf.py (#1658)
1ecaf6f8d5f2af731bec3eb6ad3a9721ab7a2812
# [V3 Travis] Update travis to not skip pipfile lock... (#1678)
# additional black formatting pass to conform to black 18.5b
d3f406a34a5cae6ea63664e76e8e74be43f9949f
# [V3] Update black version and reformat (#1745)
14cc701b25cea385fd0d537cdb6475d341c017c5
# [V3] Clean up some ugly auto-formatted strings (#1753)
622382f42588ac1d8a52bd3e39bf171c89ff0224
# [CI] Improve automated checks (#2702)
16443c8cc0c24cbc5b3dc7de858edb71b9ca6cd3
# Bump black to 20.8b1 (and reformat) (#4371)
85afe19455f91af21a0f603705eeb5d9599b45cc
# Reformat with Black 22.1.0 (#5633)
c69e8d31fdadbe10230ec0ea2ef35402e5c4cf43
# Reformat with Black 2023 formatting changes
226d8d734de43e1d5ea96a528a8e480641604db1

2
.git_archive_info.txt Normal file
View File

@@ -0,0 +1,2 @@
$Format:%h$
$Format:%(describe:tags=true)$

7
.gitattributes vendored
View File

@@ -2,3 +2,10 @@
# binary file excludsions
*.png binary
# include commit/tag information in `.git_archive_info.txt` when packing with git-archive
.git_archive_info.txt export-subst
# hide diffs for .po files by default
# https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github
*.po linguist-generated

15
.github/CODEOWNERS vendored
View File

@@ -1,18 +1,25 @@
# Cogs
/redbot/cogs/audio/** @aikaterna @PredaaA
/redbot/cogs/downloader/* @jack1142
/redbot/cogs/downloader/* @Jackenmen
/redbot/cogs/streams/* @palmtree5
/redbot/cogs/mutes/* @TrustyJAID
# Docs - Install and update guides
/docs/install_guides/** @Jackenmen
/docs/update_red.rst @Jackenmen
# Docs - Version guarantees
/docs/version_guarantees.rst @Jackenmen
# Trivia Lists
/redbot/cogs/trivia/data/lists/whosthatpokemon*.yaml @aikaterna
# Tests
/redbot/pytest/downloader* @jack1142
/tests/cogs/downloader/* @jack1142
/redbot/pytest/downloader* @Jackenmen
/tests/cogs/downloader/* @Jackenmen
# Schemas
/schema/* @jack1142
/schema/* @Jackenmen
# CI
/.travis.yml @Kowlin

View File

@@ -1 +1,17 @@
### Description of the changes
### Have the changes in this PR been tested?
<!--
Choose one (remove the line that doesn't apply):
-->
Yes
No
<!--
If the question doesn't apply (for example, it's not a code change), choose Yes.
Please respond to this question truthfully. We do not delay nor reject PRs
based on the answer to this question but it allows to better review this PR.
-->

403
.github/labeler.yml vendored
View File

@@ -1,189 +1,328 @@
"Category: Admin":
"Category: CI":
- .github/workflows/**/*
"Category: Cogs - Admin":
# Source
- redbot/cogs/admin/*
# Docs
- docs/cog_guides/admin.rst
"Category: Alias":
- docs/.resources/admin/**/*
"Category: Cogs - Alias":
# Source
- redbot/cogs/alias/*
# Docs
- docs/cog_guides/alias.rst
"Category: Audio Cog":
# Tests
- redbot/pytest/alias.py
- tests/cogs/test_alias.py
- docs/.resources/alias/**/*
"Category: Cogs - Audio":
# Source
- any:
- redbot/cogs/audio/**/*
all:
- "!redbot/cogs/audio/**/locales/*"
"Category: Bank API":
# Source
- redbot/core/bank.py
# Docs
- docs/framework_bank.rst
"Category: Bank Cog":
# Source
- redbot/cogs/bank/*
# Docs
- docs/cog_guides/bank.rst
"Category: Bot Core":
# Source
- redbot/*
- redbot/core/__init__.py
- redbot/core/_diagnoser.py
- redbot/core/_sharedlibdeprecation.py
- redbot/core/bot.py
- redbot/core/checks.py
- redbot/core/cli.py
- redbot/core/cog_manager.py
- redbot/core/core_commands.py
- redbot/core/data_manager.py
- redbot/core/errors.py
- redbot/core/events.py
- redbot/core/global_checks.py
- redbot/core/settings_caches.py
# Docs
- docs/framework_apikeys.rst
- docs/framework_bot.rst
- docs/framework_cogmanager.rst
- docs/framework_datamanager.rst
- docs/framework_events.rst
- docs/cog_guides/cog_manager_ui.rst
- docs/cog_guides/core.rst
"Category: CI":
- .github/workflows/*
"Category: Cleanup Cog":
- docs/cog_guides/audio.rst
# Tests
- tests/cogs/audio/**/*
"Category: Cogs - Bank": [] # historical label for a removed cog
"Category: Cogs - Cleanup":
# Source
- redbot/cogs/cleanup/*
# Docs
- docs/cog_guides/cleanup.rst
"Category: Command Module":
# Source
- any:
# Source
- redbot/core/commands/*
# Docs
- docs/framework_checks.rst
- docs/framework_commands.rst
all:
- "!redbot/core/commands/help.py"
"Category: Config":
# Source
- redbot/core/drivers/*
- redbot/core/config.py
# Docs
- docs/framework_config.rst
"Category: CustomCom":
"Category: Cogs - CustomCommands":
# Source
- redbot/cogs/customcom/*
# Docs
- docs/cog_customcom.rst
- docs/cog_guides/customcommands.rst
"Category: Dev Cog":
"Category: Cogs - Dev":
# Source
- redbot/core/dev_commands.py
# Docs
- docs/cog_guides/dev.rst
"Category: Docs":
- docs/**/*
"Category: Downloader":
# Tests
- tests/core/test_dev_commands.py
"Category: Cogs - Downloader":
# Source
- redbot/cogs/downloader/*
# Docs
- docs/cog_guides/downloader.rst
"Category: Economy Cog":
# Tests
- redbot/pytest/downloader.py
- redbot/pytest/downloader_testrepo.*
- tests/cogs/downloader/**/*
"Category: Cogs - Economy":
# Source
- redbot/cogs/economy/*
# Docs
- docs/cog_guides/economy.rst
"Category: Filter":
# Tests
- redbot/pytest/economy.py
- tests/cogs/test_economy.py
"Category: Cogs - Filter":
# Source
- redbot/cogs/filter/*
# Docs
- docs/cog_guides/filter.rst
"Category: General Cog":
"Category: Cogs - General":
# Source
- redbot/cogs/general/*
# Docs
- docs/cog_guides/general.rst
"Category: Help":
"Category: Cogs - Image":
# Source
- redbot/cogs/image/*
# Docs
- docs/cog_guides/image.rst
"Category: Cogs - Mod":
# Source
- redbot/cogs/mod/*
# Docs
- docs/cog_guides/mod.rst
# Tests
- redbot/pytest/mod.py
- tests/cogs/test_mod.py
"Category: Cogs - Modlog":
# Source
- redbot/cogs/modlog/*
# Docs
- docs/cog_guides/modlog.rst
"Category: Cogs - Mutes":
# Source
- redbot/cogs/mutes/*
# Docs
- docs/cog_guides/mutes.rst
"Category: Cogs - Permissions":
# Source
- redbot/cogs/permissions/*
# Docs
- docs/cog_guides/permissions.rst
- docs/cog_permissions.rst
# Tests
- redbot/pytest/permissions.py
- tests/cogs/test_permissions.py
"Category: Cogs - Reports":
# Source
- redbot/cogs/reports/*
# Docs
- docs/cog_guides/reports.rst
"Category: Cogs - Streams":
# Source
- redbot/cogs/streams/*
# Docs
- docs/cog_guides/streams.rst
"Category: Cogs - Trivia":
# Source
- redbot/cogs/trivia/*
# Docs
- docs/cog_guides/trivia.rst
- docs/guide_trivia_list_creation.rst
- docs/.resources/trivia/**/*
# Tests
- tests/cogs/test_trivia.py
"Category: Cogs - Trivia - Lists":
- redbot/cogs/trivia/data/lists/*
"Category: Cogs - Warnings":
# Source
- redbot/cogs/warnings/*
# Docs
- docs/cog_guides/warnings.rst
"Category: Core - API - Audio": [] # potential future feature
"Category: Core - API - Bank":
# Source
- redbot/core/bank.py
# Docs
- docs/framework_bank.rst
"Category: Core - API - App Commands Package":
# Source
- redbot/core/app_commands/*
# Tests
- tests/core/test_app_commands.py
"Category: Core - API - Commands Package":
# Source
- any:
- redbot/core/commands/*
- "!redbot/core/commands/help.py"
# this isn't in commands package but it just re-exports things from it
- redbot/core/checks.py
# Docs
- docs/framework_checks.rst
- docs/framework_commands.rst
# Tests
- tests/core/test_commands.py
"Category: Core - API - Config":
# Source
- any:
- redbot/core/_drivers/**/*
- "!redbot/core/_drivers/**/locales/*"
- redbot/core/config.py
# Docs
- docs/framework_config.rst
# Tests
- tests/core/test_config.py
"Category: Core - API - Other":
# Source
- redbot/__init__.py
- redbot/core/__init__.py
- redbot/core/data_manager.py
- redbot/core/errors.py
- redbot/core/tree.py
# Docs
- docs/framework_datamanager.rst
- docs/framework_tree.rst
# Tests
- redbot/pytest/data_manager.py
- tests/core/test_cog_manager.py
- tests/core/test_data_manager.py
- tests/core/test_version.py
"Category: Core - API - Utils Package":
# Source
- any:
- redbot/core/utils/*
- "!redbot/core/utils/_internal_utils.py"
# Docs
- docs/framework_utils.rst
# Tests
- tests/core/test_utils.py
"Category: Core - Bot Class":
# Source
- redbot/core/bot.py
# Docs
- docs/framework_apikeys.rst
- docs/framework_bot.rst
"Category: Core - Bot Commands":
# Source
- redbot/core/core_commands.py
- redbot/core/_diagnoser.py
# Docs
- docs/.resources/cog_manager_ui/**/*
- docs/cog_guides/cog_manager_ui.rst
- docs/cog_guides/core.rst
"Category: Core - Command-line Interfaces":
- redbot/__main__.py
- redbot/logging.py
- redbot/core/_cli.py
- redbot/core/_debuginfo.py
- redbot/setup.py
"Category: Core - Help":
- redbot/core/commands/help.py
"Category: i18n":
"Category: Core - i18n":
# Source
- redbot/core/i18n.py
# Locale files
- redbot/**/locales/*
# Docs
- docs/framework_i18n.rst
"Category: Image":
# Source
- redbot/cogs/image/*
# Docs
- docs/cog_guides/image.rst
"Category: Meta":
- ./*
- .github/*
- .github/ISSUE_TEMPLATE/*
- .github/PULL_REQUEST_TEMPLATE/*
- schema/*
- tools/*
"Category: Mod Cog":
# Source
- redbot/cogs/mod/*
# Docs
- docs/cog_guides/mod.rst
"Category: Modlog API":
"Category: Core - Modlog":
# Source
- redbot/core/generic_casetypes.py
- redbot/core/modlog.py
# Docs
- docs/framework_modlog.rst
"Category: Modlog Cog":
"Category: Core - Other Internals":
# Source
- redbot/cogs/modlog/*
# Docs
- docs/cog_guides/modlog.rst
"Category: Mutes Cog":
- redbot/core/_cog_manager.py
- redbot/core/_events.py
- redbot/core/_global_checks.py
- redbot/core/_settings_caches.py
- redbot/core/_sharedlibdeprecation.py
- redbot/core/utils/_internal_utils.py
# Tests
- redbot/pytest/__init__.py
- redbot/pytest/cog_manager.py
- redbot/pytest/core.py
- tests/core/test_installation.py
"Category: Core - RPC/ZMQ":
# Source
- redbot/cogs/mutes/*
# Docs
- docs/cog_guides/mutes.rst
"Category: Permissions":
# Source
- redbot/cogs/permissions/*
# Docs
- docs/cog_guides/permissions.rst
- docs/cog_permissions.rst
"Category: Reports Cog":
# Source
- redbot/cogs/reports/*
# Docs
- docs/cog_guides/reports.rst
"Category: RPC/ZMQ API":
# Source
- redbot/core/rpc.py
- redbot/core/_rpc.py
# Docs
- docs/framework_rpc.rst
"Category: Streams":
# Source
- redbot/cogs/streams/*
# Docs
- docs/cog_guides/streams.rst
"Category: Tests":
- redbot/pytest/*
- tests/**/*
"Category: Trivia Cog":
# Source
- redbot/cogs/trivia/*
# Docs
- docs/cog_guides/trivia.rst
- docs/guide_trivia_list_creation.rst
"Category: Trivia Lists":
- redbot/cogs/trivia/data/lists/*
"Category: Utility Functions":
# Source
- redbot/core/utils/*
# Docs
- docs/framework_utils.rst
"Category: Warnings":
# Source
- redbot/cogs/warnings/*
# Docs
- docs/cog_guides/warnings.rst
# Tests
- redbot/pytest/rpc.py
- tests/core/test_rpc.py
- tests/rpc_test.html
"Category: Docker": [] # potential future feature
"Category: Docs - Changelogs":
- CHANGES.rst
- docs/changelog.rst
- docs/incompatible_changes/**/*
"Category: Docs - For Developers":
- docs/framework_events.rst
- docs/guide_cog_creation.rst
- docs/guide_cog_creators.rst
- docs/guide_migration.rst
- docs/guide_publish_cogs.rst
- docs/guide_slash_and_interactions.rst
"Category: Docs - Install Guides":
- docs/about_venv.rst
- docs/autostart_*.rst
- docs/.resources/bot-guide/**/*
- docs/bot_application_guide.rst
- docs/install_guides/**/*
- docs/update_red.rst
"Category: Docs - Other":
- docs/host-list.rst
- docs/index.rst
- docs/version_guarantees.rst
- README.md
"Category: Docs - User Guides":
- docs/getting_started.rst
- docs/intents.rst
- docs/red_core_data_statement.rst
# TODO: move these to `docs/.resources/getting_started` subfolder
- docs/.resources/red-console.png
- docs/.resources/code-grant.png
- docs/.resources/instances-ssh-button.png
- docs/.resources/ssh-output.png
"Category: Meta":
# top-level files
- any:
- '*'
- '!README.md'
- '!CHANGES.rst'
# .gitattributes files
- '**/.gitattributes'
# GitHub configuration files, with the exception of CI configuration
- .github/*
- .github/ISSUE_TEMPLATE/*
- .github/PULL_REQUEST_TEMPLATE/*
# documentation configuration, extensions, scripts, templates, etc.
- docs/conf.py
- docs/_ext/**/*
- docs/_html/**/*
- docs/make.bat
- docs/Makefile
- docs/prolog.txt
- docs/_templates/**/*
# empty file
- redbot/cogs/__init__.py
# py.typed file
- redbot/py.typed
# requirements files
- requirements/*
# schema files
- schema/*
# tests configuration, global fixtures, etc.
- tests/conftest.py
- tests/__init__.py
- tests/*/__init__.py
# repository tools
- tools/*
# "Category: RPC/ZMQ methods": [] # can't be matched by file patterns
"Category: Vendored Packages":
- redbot/vendored/**/*

View File

@@ -7,8 +7,7 @@ permissions:
issues: write
jobs:
build:
apply_triage_label_to_issues:
runs-on: ubuntu-latest
steps:
- name: Apply Triage Label

27
.github/workflows/auto_labeler_pr.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
name: Auto Labeler - PRs
on:
pull_request_target:
types:
- opened
- synchronize
- reopened
- labeled
- unlabeled
permissions:
pull-requests: write
jobs:
label_pull_requests:
runs-on: ubuntu-latest
steps:
- name: Apply Type Label
uses: actions/labeler@v4
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true
- name: Label documentation-only changes.
uses: Jackenmen/label-doconly-changes@v1
env:
LDC_LABELS: Docs-only

View File

@@ -0,0 +1,23 @@
name: Check label pattern exhaustiveness
on:
pull_request:
push:
jobs:
check_label_pattern_exhaustiveness:
name: Check label pattern exhaustiveness
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.8"
- name: Install script's pre-requirements
run: |
python -m pip install -U pip
python -m pip install -U pathspec pyyaml rich
- name: Check label pattern exhaustiveness
run: |
python .github/workflows/scripts/check_label_pattern_exhaustiveness.py

View File

@@ -26,7 +26,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install -U pip setuptools wheel
python -m pip install -U pip wheel
python -m pip install -e .[all]
# Set the `CODEQL-PYTHON` environment variable to the Python executable
# that includes the dependencies

View File

@@ -20,7 +20,7 @@ jobs:
echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
sudo apt-get update -qq
sudo apt-get install -y crowdin
pip install redgettext==3.3
pip install redgettext==3.4.2
- name: Generate source files
run: |
make gettext

View File

@@ -27,7 +27,7 @@ jobs:
echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
sudo apt-get update -qq
sudo apt-get install -y crowdin
pip install redgettext==3.3
pip install redgettext==3.4.2
- name: Generate source files
run: |
@@ -45,11 +45,11 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Automated Crowdin downstream
title: "[i18n] Automated Crowdin downstream"
title: "Automated Crowdin downstream"
body: |
This is an automated PR that is part of Prepare Release automated workflow (2 out of 2).
Please ensure that there are no errors or invalid files are in the PR.
labels: "Automated PR, Category: i18n, Changelog Entry: Skipped"
labels: "Automated PR, Changelog Entry: Skipped"
branch: "automated/i18n"
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
milestone: ${{ needs.pr_stable_bump.outputs.milestone_number }}

View File

@@ -2,7 +2,7 @@ name: Publish Release
on:
push:
tags:
- "*"
- "3.[0-9]+.[0-9]+"
jobs:
release_information:

84
.github/workflows/run_pip_compile.yaml vendored Normal file
View File

@@ -0,0 +1,84 @@
name: Generate requirements files with pip-compile.
on:
workflow_dispatch:
jobs:
generate_requirements:
name: Generate requirements files for ${{ matrix.os }} platform.
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
steps:
- name: Checkout the repository.
uses: actions/checkout@v3
- name: Set up Python 3.8.
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install -U pip-tools
- name: Generate requirements files.
id: compile_requirements
run: |
python .github/workflows/scripts/compile_requirements.py
- name: Upload requirements files.
uses: actions/upload-artifact@v3
with:
name: ${{ steps.compile_requirements.outputs.sys_platform }}
path: requirements/${{ steps.compile_requirements.outputs.sys_platform }}-*.txt
merge_requirements:
name: Merge requirements files.
needs: generate_requirements
runs-on: ubuntu-latest
steps:
- name: Checkout the repository.
uses: actions/checkout@v3
- name: Set up Python 3.8.
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install -U "packaging>=22.0"
- name: Download Windows requirements.
uses: actions/download-artifact@v3
with:
name: win32
path: requirements
- name: Download Linux requirements.
uses: actions/download-artifact@v3
with:
name: linux
path: requirements
- name: Download macOS requirements.
uses: actions/download-artifact@v3
with:
name: darwin
path: requirements
- name: Merge requirements files.
run: |
python .github/workflows/scripts/merge_requirements.py
- name: Upload merged requirements files.
uses: actions/upload-artifact@v3
with:
name: merged
path: |
requirements/base.txt
requirements/extra-*.txt

View File

@@ -1,13 +1,20 @@
import os
import re
import sys
from typing import Match
from typing import Any, Match
import redbot
GITHUB_OUTPUT = os.environ["GITHUB_OUTPUT"]
def set_output(name: str, value: Any) -> None:
with open(GITHUB_OUTPUT, "a", encoding="utf-8") as fp:
fp.write(f"{name}={value}\n")
if int(os.environ.get("JUST_RETURN_VERSION", 0)):
print(f"::set-output name=version::{redbot.__version__}")
set_output("version", redbot._VERSION)
sys.exit(0)
@@ -17,7 +24,7 @@ version_info = None
def repl(match: Match[str]) -> str:
global version_info
print(f"::set-output name=old_version::{match.group('version')}")
set_output("old_version", match.group("version"))
new_stable_version = os.environ.get("NEW_STABLE_VERSION", "auto")
if new_stable_version == "auto":
@@ -30,12 +37,12 @@ def repl(match: Match[str]) -> str:
version_info.micro += 1
version_info.dev_release = 1
return f'__version__ = "{version_info}"'
return f'_VERSION = "{version_info}"'
with open("redbot/__init__.py", encoding="utf-8") as fp:
new_contents, found = re.subn(
pattern=r'^__version__ = "(?P<version>[^"]*)"$',
pattern=r'^_VERSION = "(?P<version>[^"]*)"$',
repl=repl,
string=fp.read(),
count=1,
@@ -43,10 +50,10 @@ with open("redbot/__init__.py", encoding="utf-8") as fp:
)
if not found:
print("Couldn't find `__version__` line!")
print("Couldn't find `_VERSION` line!")
sys.exit(1)
with open("redbot/__init__.py", "w", encoding="utf-8", newline="\n") as fp:
fp.write(new_contents)
print(f"::set-output name=new_version::{version_info}")
set_output("new_version", version_info)

View File

@@ -0,0 +1,215 @@
import itertools
import operator
import os
import subprocess
from pathlib import Path
from typing import Any, Dict, Iterable, List, Optional
from typing_extensions import Self
import rich
import yaml
from rich.console import Console, ConsoleOptions, RenderResult
from rich.tree import Tree
from pathspec import PathSpec
from pathspec.patterns.gitwildmatch import GitWildMatchPattern
ROOT_PATH = Path(__file__).resolve().parents[3]
class Matcher:
def __init__(self, *, any: Iterable[str] = (), all: Iterable[str] = ()) -> None:
self.any_patterns = tuple(any)
self.any_specs = self._get_pathspecs(self.any_patterns)
self.all_patterns = tuple(all)
self.all_specs = self._get_pathspecs(self.all_patterns)
def __repr__(self) -> str:
return f"Matcher(any={self.any_patterns!r}, all={self.all_patterns!r})"
def __eq__(self, other: Any) -> bool:
if isinstance(other, self.__class__):
return (
self.any_patterns == other.any_patterns and self.all_patterns == other.all_patterns
)
return NotImplemented
def __hash__(self) -> int:
return hash((self.any_patterns, self.all_patterns))
@classmethod
def _get_pathspecs(cls, patterns: Iterable[str]) -> List[PathSpec]:
return tuple(
PathSpec.from_lines(GitWildMatchPattern, cls._get_pattern_lines(pattern))
for pattern in patterns
)
@staticmethod
def _get_pattern_lines(pattern: str) -> List[str]:
# an approximation of actions/labeler's minimatch globs
if pattern.startswith("!"):
pattern_lines = ["*", f"!/{pattern[1:]}"]
else:
pattern_lines = [f"/{pattern}"]
if pattern.endswith("*") and "**" not in pattern:
pattern_lines.append(f"!/{pattern}/")
return pattern_lines
@classmethod
def get_label_matchers(cls) -> Dict[str, List[Self]]:
with open(ROOT_PATH / ".github/labeler.yml", encoding="utf-8") as fp:
label_definitions = yaml.safe_load(fp)
label_matchers: Dict[str, List[Matcher]] = {}
for label_name, matcher_definitions in label_definitions.items():
matchers = label_matchers[label_name] = []
for idx, matcher_data in enumerate(matcher_definitions):
if isinstance(matcher_data, str):
matchers.append(cls(any=[matcher_data]))
elif isinstance(matcher_data, dict):
matchers.append(
cls(any=matcher_data.pop("any", []), all=matcher_data.pop("all", []))
)
if matcher_data:
raise RuntimeError(
f"Unexpected keys at index {idx} for label {label_name!r}: "
+ ", ".join(map(repr, matcher_data))
)
elif matcher_data is not None:
raise RuntimeError(f"Unexpected type at index {idx} for label {label_name!r}")
return label_matchers
class PathNode:
def __init__(self, parent_tree: Tree, path: Path, *, label: Optional[str] = None) -> None:
self.parent_tree = parent_tree
self.path = path
self.label = label
def __rich__(self) -> str:
if self.label is not None:
return self.label
return self.path.name
class DirectoryTree:
def __init__(self, label: str) -> None:
self.root = Tree(PathNode(Tree(""), Path(), label=label))
self._previous = self.root
def __bool__(self) -> bool:
return bool(self.root.children)
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
yield from self.root.__rich_console__(console, options)
def add(self, file: Path) -> Tree:
common_path = Path(os.path.commonpath([file.parent, self._previous.label.path]))
parent_tree = self._previous
while parent_tree != self.root and parent_tree.label.path != common_path:
parent_tree = parent_tree.label.parent_tree
for part in file.relative_to(common_path).parts:
if parent_tree.label.path.name == "locales":
if not parent_tree.children:
parent_tree.add(PathNode(parent_tree, parent_tree.label.path / "*.po"))
continue
parent_tree = parent_tree.add(PathNode(parent_tree, parent_tree.label.path / part))
self._previous = parent_tree
return parent_tree
class App:
def __init__(self) -> None:
self.exit_code = 0
self.label_matchers = Matcher.get_label_matchers()
self.tracked_files = [
Path(filename)
for filename in subprocess.check_output(
("git", "ls-tree", "-r", "HEAD", "--name-only"), encoding="utf-8", cwd=ROOT_PATH
).splitlines()
]
self.matches_per_label = {label_name: set() for label_name in self.label_matchers}
self.matches_per_file = []
self.used_matchers = set()
def run(self) -> int:
old_cwd = os.getcwd()
try:
os.chdir(ROOT_PATH)
self._run()
finally:
os.chdir(old_cwd)
return self.exit_code
def _run(self) -> None:
self._collect_match_information()
self._show_matches_per_label()
self._show_files_without_labels()
self._show_files_with_multiple_labels()
self._show_unused_matchers()
def _collect_match_information(self) -> None:
tmp_matches_per_file = {file: [] for file in self.tracked_files}
for file in self.tracked_files:
for label_name, matchers in self.label_matchers.items():
matched = False
for matcher in matchers:
if all(
path_spec.match_file(file)
for path_spec in itertools.chain(matcher.all_specs, matcher.any_specs)
):
self.matches_per_label[label_name].add(file)
matched = True
self.used_matchers.add(matcher)
if matched:
tmp_matches_per_file[file].append(label_name)
self.matches_per_file = sorted(tmp_matches_per_file.items(), key=operator.itemgetter(0))
def _show_matches_per_label(self) -> None:
for label_name, files in self.matches_per_label.items():
top_tree = DirectoryTree(f"{label_name}:")
for file in sorted(files):
top_tree.add(file)
rich.print(top_tree)
print()
def _show_files_without_labels(self) -> None:
top_tree = DirectoryTree("\n--- Not matched ---")
for file, labels in self.matches_per_file:
if not labels:
top_tree.add(file)
if top_tree:
self.exit_code = 1
rich.print(top_tree)
else:
print("--- All files match at least one label's patterns ---")
def _show_files_with_multiple_labels(self) -> None:
top_tree = DirectoryTree("\n--- Matched by more than one label ---")
for file, labels in self.matches_per_file:
if len(labels) > 1:
tree = top_tree.add(file)
for label_name in labels:
tree.add(label_name)
if top_tree:
rich.print(top_tree)
else:
print("--- None of the files are matched by more than one label's patterns ---")
def _show_unused_matchers(self) -> None:
for label_name, matchers in self.label_matchers.items():
for idx, matcher in enumerate(matchers):
if matcher not in self.used_matchers:
print(
f"--- Matcher {idx} for label {label_name!r} does not match any files! ---"
)
self.exit_code = 1
if __name__ == "__main__":
raise SystemExit(App().run())

View File

@@ -0,0 +1,36 @@
import os
import shutil
import subprocess
import sys
from pathlib import Path
GITHUB_OUTPUT = os.environ["GITHUB_OUTPUT"]
REQUIREMENTS_FOLDER = Path(__file__).parents[3].absolute() / "requirements"
os.chdir(REQUIREMENTS_FOLDER)
def pip_compile(name: str) -> None:
subprocess.check_call(
(
sys.executable,
"-m",
"piptools",
"compile",
"--upgrade",
"--resolver=backtracking",
"--verbose",
f"{name}.in",
"--output-file",
f"{sys.platform}-{name}.txt",
)
)
pip_compile("base")
shutil.copyfile(f"{sys.platform}-base.txt", "base.txt")
for file in REQUIREMENTS_FOLDER.glob("extra-*.in"):
pip_compile(file.stem)
with open(GITHUB_OUTPUT, "a", encoding="utf-8") as fp:
fp.write(f"sys_platform={sys.platform}\n")

View File

@@ -0,0 +1,134 @@
import os
from pathlib import Path
from typing import List, TextIO
from packaging.markers import Marker
from packaging.requirements import Requirement
REQUIREMENTS_FOLDER = Path(__file__).parents[3].absolute() / "requirements"
os.chdir(REQUIREMENTS_FOLDER)
class RequirementData:
def __init__(self, requirement_string: str) -> None:
self.req = Requirement(requirement_string)
self.comments = set()
@property
def name(self) -> str:
return self.req.name
@property
def marker(self) -> Marker:
return self.req.marker
@marker.setter
def marker(self, value: Marker) -> None:
self.req.marker = value
def get_requirements(fp: TextIO) -> List[RequirementData]:
requirements = []
current = None
for line in fp.read().splitlines():
annotation_prefix = " # "
if line.startswith(annotation_prefix) and current is not None:
source = line[len(annotation_prefix) :].strip()
if source == "via":
continue
via_prefix = "via "
if source.startswith(via_prefix):
source = source[len(via_prefix) :]
current.comments.add(source)
elif line and not line.startswith(("#", " ")):
current = RequirementData(line)
requirements.append(current)
return requirements
names = ["base"]
names.extend(file.stem for file in REQUIREMENTS_FOLDER.glob("extra-*.in"))
base_requirements = []
for name in names:
# {req_name: {sys_platform: RequirementData}
input_data = {}
all_platforms = set()
for file in REQUIREMENTS_FOLDER.glob(f"*-{name}.txt"):
platform_name = file.stem.split("-", maxsplit=1)[0]
all_platforms.add(platform_name)
with file.open(encoding="utf-8") as fp:
requirements = get_requirements(fp)
for req in requirements:
platforms = input_data.setdefault(req.name, {})
platforms[platform_name] = req
output = base_requirements if name == "base" else []
for req_name, platforms in input_data.items():
req = next(iter(platforms.values()))
for other_req in platforms.values():
if req.req != other_req.req:
raise RuntimeError(f"Incompatible requirements for {req_name}.")
req.comments.update(other_req.comments)
base_req = next(
(base_req for base_req in base_requirements if base_req.name == req.name), None
)
if base_req is not None:
old_base_marker = base_req.marker
old_req_marker = req.marker
req.marker = base_req.marker = None
if base_req.req != req.req:
raise RuntimeError(f"Incompatible requirements for {req_name}.")
base_req.marker = old_base_marker
req.marker = old_req_marker
if base_req.marker is None or base_req.marker == req.marker:
continue
if len(platforms) == len(all_platforms):
output.append(req)
continue
elif len(platforms) < len(all_platforms - platforms.keys()):
platform_marker = " or ".join(
f"sys_platform == '{platform}'" for platform in platforms
)
else:
platform_marker = " and ".join(
f"sys_platform != '{platform}'" for platform in all_platforms - platforms.keys()
)
new_marker = (
f"({req.marker}) and ({platform_marker})"
if req.marker is not None
else platform_marker
)
req.marker = Marker(new_marker)
if base_req is not None and base_req.marker == req.marker:
continue
output.append(req)
output.sort(key=lambda req: (req.marker is not None, req.name))
with open(f"{name}.txt", "w+", encoding="utf-8") as fp:
for req in output:
fp.write(str(req.req))
fp.write("\n")
comments = sorted(req.comments)
if len(comments) == 1:
source = comments[0]
fp.write(" # via ")
fp.write(source)
fp.write("\n")
else:
fp.write(" # via\n")
for source in comments:
fp.write(" # ")
fp.write(source)
fp.write("\n")

View File

@@ -27,8 +27,11 @@ jobs:
python_version: "3.9"
friendly_name: Python 3.9 - Tests
- tox_env: py310
python_version: "3.10-dev"
friendly_name: Python 3.10-dev - Tests
python_version: "3.10"
friendly_name: Python 3.10 - Tests
- tox_env: py311
python_version: "3.11"
friendly_name: Python 3.11 - Tests
- tox_env: style
friendly_name: Style
- tox_env: docs
@@ -46,7 +49,7 @@ jobs:
- name: Install tox
run: |
python -m pip install --upgrade pip
pip install "tox<4"
pip install tox
- name: Tox test
env:
TOXENV: ${{ matrix.tox_env }}
@@ -59,7 +62,8 @@ jobs:
python_version:
- "3.8"
- "3.9"
- "3.10-dev"
- "3.10"
- "3.11"
fail-fast: false
name: Tox - Postgres
services:
@@ -82,7 +86,7 @@ jobs:
- name: Install tox
run: |
python -m pip install --upgrade pip
pip install "tox<4"
pip install tox
- name: Tox test
env:
TOXENV: postgres

View File

@@ -1,12 +1,13 @@
version: 2
build:
image: latest
os: "ubuntu-22.04"
tools:
python: "3.8"
python:
version: 3.8
install:
- method: pip
path: .
extra_requirements:
- docs
- doc

View File

@@ -1,5 +1,494 @@
.. Red changelogs
Redbot 3.5.5 (2023-09-14)
=========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`Flame442`, :ghuser:`Jackenmen`, :ghuser:`karlsbjorn`, :ghuser:`Kreusada`, :ghuser:`ltzmax`, :ghuser:`palmtree5`
End-user changelog
------------------
Changes
*******
- **Core - Dependencies** - Red's dependencies have been bumped (:issue:`6248`)
- **Cogs - Downloader** - Cogs in the ``[p]cog list`` command are now listed alphabetically (:issue:`6214`, :issue:`6215`)
Fixes
*****
- **Core - Bot Commands** - Fixed handling of an edge case in the ``[p]diagnoseissues`` command that involved commands without a cog (:issue:`6237`)
- **Core - Bot Commands** - Fixed the formatting of nested result lists in the ``[p]diagnoseissues`` command (:issue:`6238`)
- **Cogs - Mod** - Fixed the formatting of the help description for the ``[p]ban``, ``[p]kick``, and ``[p]tempban`` commands (:issue:`6245`)
- |cool| **Cogs - Streams** - Updated the implementation of Twitch streams to no longer use the "Get Users Follows" endpoint that was deprecated in February 2023 (:issue:`6246`, :issue:`6247`)
Documentation changes
---------------------
Changes
*******
- Updated Python version in ``pyenv`` instructions (:issue:`6241`)
----
Redbot 3.5.4 (2023-08-12)
=========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`aikaterna`, :ghuser:`Jackenmen`, :ghuser:`laggron42`, :ghuser:`Leo40Git`, :ghuser:`PredaaA`, :ghuser:`TrustyJAID`
Read before updating
--------------------
#. Information for Audio users that are using an external Lavalink instance (if you don't know what that is, you should skip this point):
Red 3.5.4 uses a new Lavalink jar that you will need to manually update from `our GitHub <https://github.com/Cog-Creators/Lavalink-Jars/releases/tag/3.7.8>`__.
End-user changelog
------------------
Additions
*********
- |cool| **Core - Bot Commands** - Added ``[p]set status custom`` command allowing the bot owner to change the bot's custom status (:issue:`6226`)
Changes
*******
- **Core - Dependencies** - Red's dependencies have been bumped (:issue:`6225`)
Fixes
*****
- **Core** - Fixed errors showing in logs when the button menu timed out and the original message no longer existed (:issue:`6228`, :issue:`6229`)
- |cool| **Cogs - Audio** - Fixed YT playback (:issue:`6221`)
- **Cogs - Audio** - Fixed poor quality of ``[p]local/queue search``'s results when case sensitive matching was involved (:issue:`6129`, :issue:`6224`)
- **Cogs - Audio** - Fixed ``[p]local search`` resorting to YT playback when file name involved certain characters such as ``-`` (:issue:`6223`)
- **Cogs - CustomCommands** - Fixed poor quality of ``[p]customcom search``'s results when case sensitive matching was involved (:issue:`6224`)
- **Cogs - Streams** - Fixed Picarto channels showing without the channel avatar (:issue:`6230`)
----
Redbot 3.5.3 (2023-07-24)
=========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`AAA3A-AAA3A`, :ghuser:`aikaterna`, :ghuser:`Drapersniper`, :ghuser:`Flame442`, :ghuser:`flaree`, :ghuser:`Jackenmen`, :ghuser:`Kowlin`, :ghuser:`Kreusada`, :ghuser:`Om1609`, :ghuser:`PredaaA`, :ghuser:`TrustyJAID`, :ghuser:`Zephyrkul`
Read before updating
--------------------
#. Fedora 36, Ubuntu 18.04 LTS and versions of RHEL/Alma Linux/Oracle Linux/Rocky Linux older than 8.6 are no longer supported as they have already reached their end of life.
End-user changelog
------------------
Changes
*******
- |cool| Red has been updated to support `Discord's new username system <https://discord.com/blog/usernames>`__ (:issue:`6130`)
This means that we now support passing the new usernames as arguments
and properly display usernames/global display names in core commands and cogs where applicable.
- **Core** - All bots are are now considered to be immune to auto-moderation (:issue:`6130`)
- **Core** - Added list of command-line arguments to ``redbot --debuginfo <instance_name>`` and ``[p]debuginfo`` (:issue:`6164`)
- **Core - Bot Commands** - The ``[p]set api`` command will now hide the button once the time to open the modal to set API keys elapses (:issue:`6166`)
- **Core - Command-line Interfaces** - Multiple arguments to ``--co-owner``, ``--load-cogs``, and ``--unload-cogs`` flags can now be specified both by passing multiple arguments right after the flag and by repeating the flag multiple times with different arguments (:issue:`6200`)
- **Core - Dependencies** - Red's dependencies have been bumped (:issue:`6185`)
- |cool| **Cogs - Audio** - The managed Lavalink server can now be run with either Java 11 or Java 17 (:issue:`6190`)
- **Cogs - Audio** - Added an option to auto-use default HTTP/HTTPS port for unmanaged Lavalink server (:issue:`5629`)
- **Cogs - Mod** - The cog now tracks both the usernames *and* global display names (:issue:`6130`)
Removals
********
- **Core - OS Support** - Fedora 36, Ubuntu 18.04 LTS and versions of RHEL/Alma Linux/Oracle Linux/Rocky Linux older than 8.6 are no longer supported as they have already reached end of life (:issue:`6189`)
Fixes
*****
- **Core** - Red's menu timeout is now consistent between reaction and button menus (:issue:`6173`)
- **Core - Bot Commands** - Fixed message too long error in the ``[p]slash list`` command (:issue:`6167`)
- **Core - Command-line Interfaces** - Red will now properly exit with code ``1`` (``CRITICAL``) when the bot fails after connecting to Discord but before becoming ready instead of indefinitely hanging in non-working condition (:issue:`6202`)
- **Cogs - Audio** - Fixed playlist selection in the picker used by the playlist-related commands (:issue:`6169`, :issue:`6170`)
- **Cogs - Cleanup** - Fixed an issue with ``[p]cleanup self`` not working in DMs (:issue:`6196`, :issue:`6197`)
- **Cogs - Downloader** - Fixed ``CancelledError`` tracebacks showing up in logs when the bot is shut down quickly after the cog is loaded (:issue:`6203`)
- **Cogs - Mutes** - Fixed ``CancelledError`` tracebacks showing up in logs when the bot is shut down quickly after the cog is loaded (:issue:`6203`)
Developer changelog
-------------------
Additions
*********
- |cool| **Core - Utils Package** - Added new view (`ConfirmView`) that can be used to ask for confirmation (:issue:`6174`, :issue:`6176`)
- **Core - Commands Package** - Added `Command.is_enabled()` method allowing to check whether the command is disabled in a guild/globally (:issue:`4130`, :issue:`5552`, :issue:`6209`)
Fixes
*****
- **Core - Commands Package** - Fixed handling of cases where the string returned by `Cog.format_help_for_context()`/`Command.format_help_for_context()` starts with ``"\n\n"`` (:issue:`5941`)
- **Cogs - Dev** - Fixed issues with exception formatting in ``[p]eval/repl/debug`` commands not including the code for chained/grouped exceptions (:issue:`6178`)
Documentation changes
---------------------
Additions
*********
- Added usage example to `get_end_user_data_statement_or_raise()` (:issue:`6171`)
Changes
*******
- |cool| Added install instructions for Debian 12 Bookworm (:issue:`6190`)
- |cool| The install guides have been updated to install Java 17 when possible (:issue:`6190`)
----
Redbot 3.5.2 (2023-05-14)
=========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`aikaterna`, :ghuser:`flaree`, :ghuser:`Flame442`, :ghuser:`Jackenmen`, :ghuser:`karlsbjorn`, :ghuser:`rramboer`, :ghuser:`synrg`, :ghuser:`TrustyJAID`, :ghuser:`Vexed01`
End-user changelog
------------------
Changes
*******
- **Core** - Added list of global prefixes to ``redbot --debuginfo <instance_name>`` and ``[p]debuginfo`` (:issue:`6153`)
- **Core - Dependencies** - Red's dependencies have been bumped (:issue:`6155`)
- **Cogs - Downloader** - Updated the code block style in ``[p]repo list`` and ``[p]cog list`` to account for Discord client changes (:issue:`6003`, :issue:`6152`)
- **Cogs - Trivia** - Updated the code block style in the scoreboard to account for Discord client changes (:issue:`6152`)
Fixes
*****
- Fixed visual issues with numbered and unnumbered lists caused by Discord's new Markdown support (:issue:`6101`)
- **Core** - Fixed handling of cooldown errors for application commands (:issue:`6159`)
- **Core - Bot Commands** - Added missing backtick to the help of ``[p]set serverprefix`` (:issue:`6004`)
- **Core - Command-line Interfaces** - Fixed ``redbot --debuginfo`` trying to start/starting the bot (:issue:`6131`)
- **Cogs - Audio** - Fixed Audio's managed node trying to allocate 4 GB of memory on 32-bit platforms regardless of how much is actually available (:issue:`6137`, :issue:`6150`)
- **Cogs - Audio** - Fixed song selection in ``[p]search`` always picking the first option when buttons are used (:issue:`6136`, :issue:`6143`)
- **Cogs - CustomCommands** - Fixed parameter handling (:issue:`6138`, :issue:`6149`)
- **Cogs - Mutes** - Fixed ``[p]channelmute`` returning "That user is already muted" error when the user is not actually muted (:issue:`6144`)
- **Cogs - Mutes** - Fixed unexpected error in automatic channel unmuting when the relevant channel is not available (:issue:`6140`, :issue:`6144`)
- **Cogs - Reports** - Fixed ``[p]report`` command not working in DMs (:issue:`6148`)
- **Vendored Packages** - Fixed menus breaking in DMs (:issue:`6139`)
Developer changelog
-------------------
Additions
*********
- **Core - Data Manager** - Added a new `data_manager.instance_name()` public function (:issue:`6146`)
Fixes
*****
- **Core - Utils Package** - Fixed ``menu()`` passing an instance of `discord.PartialEmoji` instead of `str` when a button with a unicode emoji is used (:issue:`6143`)
- **Cogs - Dev** - Fixed issues with exception formatting in ``[p]eval/repl/debug`` commands failing when code from a previous invocation of any of those commands was used (:issue:`6135`)
Documentation changes
---------------------
Fixes
*****
- Fixed the search box on the documentation page returning no results (:issue:`6185`)
- Fixed command choices example in `Slash Commands and Interactions guide <guide_slash_and_interactions>` (:issue:`6154`)
- Updated `the 3.5.0 changelog <redbot-3-5-0-2023-05-04>`, `incompatible-changes-3.5`, and `end-user-guarantees` documents to mention the new ``x86-64-v2`` instruction set requirement (:issue:`6141`, :issue:`6147`)
----
Redbot 3.5.1 (2023-05-04)
=========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`Flame442`, :ghuser:`Jackenmen`
This is a hotfix release fixing documentation issues and a bug with the update notification logic
that caused Red to crash.
End-user changelog
------------------
Fixes
*****
- **Core** - Fixed a crash in the Red update notification logic (:issue:`6124`)
Documentation changes
---------------------
Fixes
*****
- Fix the instructions for updating Red (:issue:`6123`)
----
.. _redbot-3-5-0-2023-05-04:
Redbot 3.5.0 (2023-05-04)
=========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`AAA3A-AAA3A`, :ghuser:`aikaterna`, :ghuser:`alexratman`, :ghuser:`AntonioNarra`, :ghuser:`Arman0334`, :ghuser:`Dav-Git`, :ghuser:`Drapersniper`, :ghuser:`Flame442`, :ghuser:`Honkertonken`, :ghuser:`i-am-zaidali`, :ghuser:`Jackenmen`, :ghuser:`japandotorg`, :ghuser:`karlsbjorn`, :ghuser:`keqking`, :ghuser:`Kowlin`, :ghuser:`Kreusada`, :ghuser:`Kuro-Rui`, :ghuser:`leetfin`, :ghuser:`npc203`, :ghuser:`palmtree5`, :ghuser:`PredaaA`, :ghuser:`Predeactor`, :ghuser:`TrustyJAID`, :ghuser:`Vexed01`, :ghuser:`yuansheng1549`
Read before updating
--------------------
#. ``[p]bankset`` is now a core command and as a consequence, the bank cog has been removed. This means that when you start the bot for the first time after the update, you'll see a "Failed to load package bank" message. That is perfectly normal and this message can be ignored.
#. Red 3.5 comes with breaking changes for users. Look at `Backward incompatible changes in Red 3.5 document <incompatible-changes-3.5>` and `End-user changelog <important-350-1>` for full details.
Note that because this release also comes with breaking changes for developers,
the cogs you're currently using will likely not work with the new release
until you update (and that's *if* they have been updated).
`Our update instructions <update_red>` include instructions on how you can safely update
your bot and cogs from versions before 3.5. **Make sure** that you look at the instructions
for **the version you currently have**, not the version you're updating to.
Note that any cogs that have not yet been updated will likely not work
until their author releases an update.
#. Red 3.5 comes with breaking changes for cog developers. Look at `Backward incompatible changes in Red 3.5 document <incompatible-changes-3.5>` and `Developer changelog <important-350-2>` for full details.
#. Fedora 35 and Debian 10 (Buster) are no longer supported as they have already reached their end of life.
#. On x86-64 systems, we now require that the CPU supports x86-64-v2 instruction set. This roughly translates to us dropping support for Intel CPUs that have been released before 2009 and AMD CPUs that have been released before 2012.
.. _important-350-1:
End-user changelog
------------------
Breaking Changes
****************
- **Core** - The bot will no longer launch without an owner set (:issue:`4926`)
- **Core - OS support** - On x86-64 systems, we now require that the CPU supports x86-64-v2 instruction set. This roughly translates to us dropping support for Intel CPUs that have been released before 2009 and AMD CPUs that have been released before 2012 (:issue:`6100`)
Additions
*********
- |cool| **Core** - Preference for button menus over reaction menus can now be set with ``[p]set usebuttons``. While this depends on the cog, this should allow users to replace most existing reaction menus with button menus (:issue:`5683`, :issue:`5885`)
- **Core** - The error message for uncaught bot errors is now configurable. See help of ``[p]set errormsg`` for more details (:issue:`5622`, :issue:`5894`)
- |cool| **Core - Bot Commands** - Added ``[p]slash`` command for managing application commands (:issue:`5672`, :issue:`5992`, :issue:`6015`)
- **Core - Command-line Interfaces** - Added new launch flag ``--unload-cogs`` (:issue:`5796`, :issue:`5802`)
- **Cogs - Streams** - Added ``[p]streamset livebutton`` to add a link button under stream alerts (:issue:`5646`, :issue:`5856`)
Changes
*******
- **Core** - The home directory is now always preferred for the metadata file on Linux, even for system users (:issue:`5022`)
- **Core** - Bot prefixes can no longer start with ``/`` (:issue:`5693`)
- **Core** - Cooldown messages now use relative discord timestamps (:issue:`5893`)
- |cool| **Core** - Added the option to request a ``file`` containing all content remaining in interactive prompts (:issue:`5901`, :issue:`5902`)
- **Core** - Parsing errors for integer and number arguments are now more user-friendly (:issue:`5600`)
- |cool| **Core** - Reaction menus now trigger both when adding and removing the reaction (:issue:`4517`)
- **Core** - Threads will now inherit parent channel's embed settings (:issue:`5600`)
- |cool| **Core** - Commands can now be used in threads, voice channels, and stage channels (:issue:`5600`, :issue:`5709`)
- **Core** - Voice and stage channels can now be a destination for owner notifications (``[p]set ownernotifications adddestination``) (:issue:`5709`)
- **Core** - Channel embed settings can now be applied to forum, voice, and stage channels (:issue:`5709`)
- **Core** - Command invocations in specific threads can now be ignored with ``[p]ignore channel``. See `incompatible-changes-3.5` for details (:issue:`5600`)
- **Core - Bot Commands** - ``[p]modlogset`` and ``[p]bankset`` are now core commands (:issue:`4128`, :issue:`4486`)
- **Core - Bot Commands** - Moved ``[p]set`` subcommands: ``username``, ``nickname``, ``avatar``, ``description``, and ``custominfo`` to ``[p]set bot`` subgroup (:issue:`4612`, :issue:`5432`)
- **Core - Bot Commands** - Moved activity related ``[p]set`` subcommands to ``[p]set status`` (:issue:`4612`, :issue:`5432`)
- **Core - Bot Commands** - Moved status related ``[p]set`` subcommands to ``[p]set status`` (:issue:`4612`, :issue:`5432`)
- **Core - Bot Commands** - Moved ``[p]set globallocale`` to ``[p]set locale global`` (:issue:`4612`, :issue:`5432`)
- **Core - Bot Commands** - ``[p]set locale`` can now also be used through ``[p]set locale server`` (:issue:`4612`, :issue:`5432`)
- **Core - Bot Commands** - Moved ``[p]set globalregionalformat`` to ``[p]set regionalformat global`` (:issue:`4612`, :issue:`5432`)
- **Core - Bot Commands** - ``[p]set regionalformat`` can now also be used through ``[p]set regionalformat server`` (:issue:`4612`, :issue:`5432`)
- |cool| **Core - Bot Commands** - Help can now use buttons and/or select menus instead of reaction menus. See the help of ``[p]helpset usemenus`` command for more information (:issue:`5634`, :issue:`5886`)
- **Core - Bot Commands** - ``[p]set api`` now sends a modal to securely set api tokens when no arguments are passed (:issue:`5637`)
- **Core - Bot Commands** - ``[p]traceback`` now prompts to continue if the output requires multiple messages (:issue:`5621`, :issue:`5851`)
- **Core - Bot Commands** - ``[p]removepath`` now allows passing more than one path at once (:issue:`5820`, :issue:`5859`)
- **Core - Bot Commands** - Always available commands such as ``[p]licenseinfo`` now always accept a mention prefix (:issue:`5460`, :issue:`5865`)
- **Core - Bot Commands** - Added an optional ``server`` parameter to ``[p]set showsettings`` and ``[p]set serverprefix`` to prevent lock outs in servers after forgetting a prefix (:issue:`5891`, :issue:`5918`)
- **Core - Command-line Interfaces** - ``-v`` and ``--verbose`` are now aliased to ``--debug``, and the flag can be passed up to 3 times to increase the verbosity of the debugging logs (:issue:`5613`)
- **Core - Command-line Interfaces** - Updated the output of ``--debuginfo`` to be consistent with ``[p]debuginfo`` and allow passing the instance name for additional information (:issue:`5662`)
- **Core - Command-line Interfaces** - Added new exit codes ``2`` (invalid CLI usage) and ``78`` (configuration error) (:issue:`5069`, :issue:`5674`)
- **Core - Command-line Interfaces** - Instance names must now start and end with a letter or number (:issue:`5680`)
- **Core - Command-line Interfaces** - Instance names can no longer consecutive underscores (_) and periods (.) (:issue:`5680`)
- **Core - Command-line Interfaces** - Added descriptions for the ``--overwrite-existing-instance`` and ``--debug`` flags in ``redbot-setup --help`` (:issue:`5808`, :issue:`5818`)
- **Core - Command-line Interfaces** - Modified the console messages for shutting down the bot to be more consistent (:issue:`6095`)
- |cool| **Core - Dependencies** - Bumped ``discord.py`` to version 2.2.3 (:issue:`5600`, :issue:`5709`, :issue:`5920`, :issue:`5998`, :issue:`6100`, :issue:`6109`)
- **Core - Dependencies** - Added support for Python versions 3.10 and 3.11 (:issue:`5611`)
- **Core - Dependencies** - Red's other dependencies have been bumped (:issue:`5611`, :issue:`5631`, :issue:`6100`)
- **Core - Modlog** - Modlog channel can now be set to a voice or stage channel with the ``[p]modlogset channel`` command (:issue:`5709`)
- **Cogs - Admin** - Announcement channel can now be set to a voice or stage channel with the ``[p]announceset channel`` command (:issue:`5709`)
- **Cogs - Audio** - Expanded ``[p]llset`` to allow configuring the backend options of the internal/managed node (Lavalink) (:issue:`5593`)
- **Cogs - Audio** - The cog now uses verbose and trace level logging to improve readability of the debug logs (:issue:`5618`)
- **Cogs - Audio** - Swapped references from "internal"/"external" to "managed"/"unmanaged" (:issue:`5944`, :issue:`5952`)
- **Cogs - Cleanup** - Cleanups now include a message in the audit log detailing who triggered the deletion (:issue:`5861`, :issue:`5863`)
- **Cogs - CustomCommands** - ``{channel}`` substitution parameter may now be a thread, voice channel, or stage channel (:issue:`5600`)
- **Cogs - Downloader** - Added an argument allowing to automatically reload cogs after updating with ``[p]cog update`` (:issue:`3539`, :issue:`5623`)
- **Cogs - Economy** - Moved ``[p]economyset registeramount`` to ``[p]bankset registeramount`` (:issue:`4128`, :issue:`4486`)
- **Cogs - Economy** - Moved ``[p]bank reset`` to ``[p]bankset reset`` (:issue:`4128`, :issue:`4486`)
- **Cogs - Economy** - Moved ``[p]bank prune`` to ``[p]bankset prune`` (:issue:`4128`, :issue:`4486`)
- **Cogs - Filter** - Messages in threads will now be checked for the filtered words of thread's parent channel and server (:issue:`5600`)
- **Cogs - Filter** - Messages in voice or stage channels will now be checked for the filtered words and have their own channel word list (:issue:`5709`)
- **Cogs - General** - Added stage channel information to the extended output of ``[p]serverinfo`` (:issue:`5785`)
- **Cogs - Mutes** - Usage of ``[p]channelmute`` and ``[p]channelunmute`` commands in a thread will now mute the user in thread's parent channel (:issue:`5600`)
- **Cogs - Mutes** - The cog will now deny Send Messages in Threads, Create Public Threads, Create Private Threads, and Use Application Commands permissions in the generated mute role and channel overrides (:issue:`5600`, :issue:`5709`)
- **Cogs - Mutes** - Notification channel can now be set to a voice or stage channel with the ``[p]muteset notification`` command (:issue:`5709`)
- **Cogs - Mutes** - Channel/voice mutes will now behave differently for voice/stage channels: voice mute will only deny the Speak permission while channel mute will deny message permissions as well (:issue:`5709`)
- **Cogs - Permissions** - Red's command permission system will now use thread's parent channel for resolving rules (:issue:`5600`)
- **Cogs - Reports** - Reports channel can now be set to a voice or stage channel with the ``[p]reportset output`` command (:issue:`5709`)
- **Cogs - Streams** - ``[p]streamalert list`` now shows the platform of each channel (:issue:`3866`, :issue:`5160`)
- **Cogs - Streams** - ``[p]streamalert`` subcommands now accept an additional argument to toggle alerts in a particular channel (:issue:`3866`, :issue:`5160`)
- **Cogs - Streams** - Stream alerts can now be sent to a voice or stage channel (:issue:`5709`)
- **Cogs - Warnings** - Warn channel can now be set to a voice or stage channel with the ``[p]warningset warnchannel`` command (:issue:`5709`)
Removals
********
- **Core** - Removed ``redbot-launcher`` (:issue:`5999`)
- **Core - OS Support** - Fedora 35 and Debian 10 (Buster) are no longer supported as they have already reached end of life (:issue:`5974`, :issue:`6110`)
- **Cogs - Audio** - Removed the ``[p]llsetup`` alias of ``[p]llset`` (:issue:`5953`)
- **Cogs - Bank** - Removed the bank cog as its only command - ``[p]bankset`` - is now a core command (:issue:`4128`, :issue:`4486`)
Fixes
*****
- **Core** - Duration parsing in command arguments no longer matches on certain kinds of invalid data (:issue:`5385`, :issue:`5393`)
- **Core** - Optimized how disabled commands are checked when cogs are loaded (:issue:`5550`)
- **Core - Bot Commands** - The core path is now always an absolute path in ``[p]paths`` (:issue:`5142`)
- **Core - Command-line Interfaces** - Fixed an unintended suppression of exceptions in Red's shutdown logic (:issue:`5661`, :issue:`5673`)
- |cool| **Core - Modlog** - Fixed enormous performance issues with commands that have to gather a lot of cases such as ``[p]casesfor`` and ``[p]listcases`` (:issue:`4977`)
- **Core - Modlog** - Case messages are no longer edited immediately after being sent (:issue:`5577`)
- **Cogs - Audio** - Fixed a RAM allocation warning happening in unintended cases (:issue:`5643`)
- **Cogs - Audio** - Fixed the Audio's managed node becoming unresponsive after it's been used for a while (:issue:`5903`)
- **Cogs - Downloader** - Fixed a missing space to an output of ``[p]cog install`` (:issue:`5531`)
- **Cogs - Trivia - Lists** - Fixed some inaccuracies in the ``worldflags`` list (:issue:`5684`)
- **Cogs - Trivia - Lists** - Fixed some inaccuracies in the ``geography`` list (:issue:`5743`)
- **Cogs - Trivia - Lists** - Fixed some inaccuracies in the ``clashroyale`` list (:issue:`5771`)
.. _important-350-2:
Developer changelog
-------------------
Breaking Changes
****************
- **Core** - Fixed edge cases in the ordering logic of ``VersionInfo`` (:issue:`5932`)
- **Core** - Removed ``is_mod_or_superior()``, ``is_admin_or_superior()``, and ``check_permissions()`` from ``redbot.core.checks`` (:issue:`6016`)
- **Core - Bot Class** - Merged ``RedBase`` with the `Red` class (:issue:`5159`)
- **Core - Bot Class** - Removed the ``guild_id`` parameter from `Red.allowed_by_whitelist_blacklist()`. Use the ``guild`` parameter instead (:issue:`4905`, :issue:`4914`, :issue:`5433`)
- **Core - Bot Class** - Removed the ``user`` parameter from `Red.embed_requested()` (:issue:`5576`)
- **Core - Bot Class** - The ``command`` parameter of `Red.embed_requested()` is now keyword-only (:issue:`5576`)
- **Core - Bot Class** - The ``check_permissions`` parameter of `Red.embed_requested()` now defaults to ``True`` (:issue:`5576`)
- **Core - Bot Class** - `Red.add_cog()` will now raise `discord.ClientException` rather than `RuntimeError` when a cog with the same name is already loaded (:issue:`5600`)
- **Core - Bot Class** - Some of the method arguments in the `Red` class have been made positional-only. See `incompatible-changes-3.5` for more information (:issue:`5600`)
- **Core - Bot Class** - `Red.add_cog()` and `Red.remove_cog()` are now asynchronous methods (:issue:`5600`)
- **Core - Bot Class** - ``setup()`` and ``teardown()`` functions in cog packages are now required to be asynchronous (:issue:`5600`)
- **Core - Bot Class** - The list returned by `Red.get_owner_notification_destinations()` may now contain instances of `discord.VoiceChannel` and `discord.StageChannel` (:issue:`5709`)
- **Core - Commands Package** - `Context.maybe_send_embed()` now raises a `ValueError` if the message's length is not between 1 and 2000 characters (:issue:`4383`, :issue:`4465`)
- **Core - Commands Package** - Removed ``GuildConverter`` from the `redbot.core.commands.converter` namespace. Use ``discord.Guild`` or ``commands.GuildConverter`` as the converter instead (:issue:`4928`, :issue:`5433`)
- **Core - Commands Package** - :class:`~discord.ext.commands.BadArgument` is no longer wrapped with a ``ConversionFailure`` class (:issue:`5600`)
- **Core - Commands Package** - Some of the method arguments in the `commands.Command` and ``commands.CogMixin`` class have been made positional-only. See `incompatible-changes-3.5` for more information (:issue:`5600`)
- **Core - Commands Package** - Removed ``commands.requires.DM_PERMS`` (:issue:`5709`)
- **Core - Commands Package** - ``ctx.channel`` can now be a `discord.PartialMessageable` if it represents a DM channel (:issue:`5995`, :issue:`6005`)
- **Core - Config** - Unserializable values can no longer be registered as config defaults (:issue:`5557`)
- **Core - Config** - ``_from_id`` methods now raise a `TypeError` if the provided value is not an ``int`` (:issue:`5459`, :issue:`5564`)
- **Core - Modlog** - `Case.message` is now a `discord.PartialMessage` unless the case object is created with `modlog.create_case()` (:issue:`4977`)
- **Core - Modlog** - `modlog.get_modlog_channel()` may now return an instance of `discord.VoiceChannel` or `discord.StageChannel` (:issue:`5709`)
- **Core - Modlog** - `modlog.create_case()` now raises a `ValueError` when an invalid casetype is passed (:issue:`3346`, :issue:`5386`)
- **Core - Modlog** - `modlog.create_case()` now raises a `RuntimeError` when a bot user is passed as the ``user`` argument (:issue:`5386`)
- **Core - Utils Package** - `redbot.core.utils.menus.menu()` now listens to both reaction add and remove events (:issue:`4517`)
- **Core - Utils Package** - Removed ``redbot.core.utils.mod.is_allowed_by_hierarchy()`` (:issue:`4435`, :issue:`5433`)
- **Core - Utils Package** - Removed the ``caching`` and ``safety`` modules (:issue:`5653`)
- **Core - Utils Package** - `DEFAULT_CONTROLS`, `ALPHABET_EMOJIS`, and `NUMBER_EMOJIS` are now immutable (:issue:`5586`, :issue:`5666`)
Additions
*********
- **Core** - Added an ``on_cog_remove`` event which is dispatched when cogs are unloaded (:issue:`5570`)
- **Core** - Added `RedTree` and general app command support (:issue:`5672`, :issue:`5992`, :issue:`6015`)
- **Core** - Added ``redbot.core.app_commands`` package shadowing ``discord.app_commands``. We expect developers to use it instead of ``discord.app_commands`` when working with Red (:issue:`6006`)
- **Core - App Commands Package** - Allowed setting ``red_force_enable`` in ``extras`` to ``True`` in an app command to bypass ``[p]slash enable`` (:issue:`6018`)
- **Core - Bot Class** - Added `Red.send_interactive()` - a port of `Context.send_interactive()` that can be used with any `discord.abc.Messageable` (:issue:`5851`)
- **Core - Bot Class** - Added `Red.enable_app_command()`, `Red.disable_app_command()`, and `Red.list_enabled_app_commands()` (:issue:`5992`)
- **Core - Bank** - Added `redbot.core.bank.is_owner_if_bank_global()` (:issue:`3709`, :issue:`4486`)
- **Core - Commands Package** - Added `RawUserIdConverter` (:issue:`4486`)
- |cool| **Core - Commands Package** - Added support for hybrid commands (:issue:`5681`)
- **Core - Commands Package** - Added `positive_int` and `finite_float` converters (:issue:`5939`, :issue:`5969`)
- **Core - Commands Package** - Added new checks for proper permission resolution in both channels and threads: `bot_can_manage_channel()`, `bot_can_react()`, `can_manage_channel()`, `guildowner_or_can_manage_channel()`, `admin_or_can_manage_channel()`, `mod_or_can_manage_channel()` (:issue:`5600`)
- **Core - Dependencies** - Added ``red_commons`` as a dependency (:issue:`5624`)
- **Core - Modlog** - Added `Case.parent_channel` and `Case.parent_channel_id` (support for threads) (:issue:`5600`)
- **Core - Utils Package** - Added `SimpleMenu`, a template view subclass (:issue:`5634`)
- **Core - Utils Package** - Added `SetApiModal` and `SetApiView` (:issue:`5637`)
- **Core - Utils Package** - Added new utilities for proper permissions resolution in both channels and threads: `can_user_send_messages_in()`, `can_user_manage_channel()`, `can_user_react_in()` (:issue:`5600`)
Changes
*******
- |cool| **Core** - :func:`logging.getLogger()` now returns a custom logger subclass with support for ``verbose`` and ``trace`` level logging (:issue:`5613`)
- **Core** - Added extra information to version info for dev versions of Red (:issue:`5664`)
- **Core** - Modernized packaging-related things (:issue:`5924`)
- **Core** - Modified `developer-guarantees`, privatizing many APIs that were not intended to be public. See `incompatible-changes-3.5` for more details (:issue:`6021`)
- **Core - Bot Class** - `Red.ignored_channel_or_guild()` now accepts `discord.Interaction` objects (:issue:`6015`)
- **Core - Bot Class** - The ``channel`` parameter of `Red.embed_requested()` now accepts any messageable guild channel (:issue:`5576`)
- **Core - Bot Class** - The bot's color is now set earlier in the launch process (:issue:`5627`)
- **Core - Bot Class** - `Red.remove_cog()` returns a `commands.Cog` instance now (:issue:`5600`)
- **Core - Commands Package** - The provisional ``Literal`` converter has been replaced with discord.py's own `typing.Literal` implementation (:issue:`5600`)
- **Core - Commands Package** - Added a ``join_character`` parameter to `Red.send_interactive()` and `Context.send_interactive()` to allow choosing the character messages are joined with (:issue:`5901`, :issue:`5902`)
- **Core - Modlog** - `modlog.set_modlog_channel()` can now accept `discord.VoiceChannel` and `discord.StageChannel` (:issue:`5709`)
- **Core - Utils Package** - `menu()` now defaults to `DEFAULT_CONTROLS` if the ``controls`` argument is not passed (:issue:`5678`)
- **Core - Utils Package** - Removed ``bordered()`` (:issue:`5692`)
- **Core - Utils Package** - Optimized the performance of `pagify()` to better handle large inputs (:issue:`5698`)
- **Core - Utils Package** - ``channel`` parameter in `MessagePredicate`'s methods now accepts any `discord.abc.Messageable` (:issue:`5942`)
- |cool| **Cogs - Dev** - Tracebacks for code ran with ``[p]eval``, ``[p]debug``, and ``[p]repl`` commands now include source lines (:issue:`5843`)
Fixes
*****
- **Core - Commands Package** - Fixed decorator order inconsistencies in permissions checks (:issue:`5625`)
- **Core - Modlog** - Fixed `modlog.get_case()` and `modlog.get_all_cases()` raising a runtime error when no modlog channel is configured (:issue:`5644`, :issue:`5866`)
- **Core - Utils Package** - Fixed an unintended `IndexError` in menus when page number is below 0 or above last page number (:issue:`5430`)
- **Cogs - Dev** - Fixed line numbers in tracebacks (:issue:`5843`)
- **Cogs - Dev** - ``[p]mock`` only works in servers now (:issue:`5923`, :issue:`5926`)
Documentation changes
---------------------
Additions
*********
- Added `end-user-guarantees` codifying our support policy for different operating system versions (:issue:`5437`, :issue:`5677`)
- Added a list of currently supported operating system versions and architectures (:issue:`5437`, :issue:`5677`, :issue:`5803`, :issue:`5974`, :issue:`6110`)
- Added documentation for the `redbot.core.utils.antispam` module (:issue:`5641`)
- |cool| Added a cog guide for the Audio cog (:issue:`5871`, :issue:`5895`)
- Added documentation for creating app commands with Red (:issue:`6008`)
- Added documentation listing past and future breaking changes (:issue:`5603`)
Changes
*******
- Linux install guides have been updated to, if possible, use the Python versions already distributed through the official repositories (:issue:`5611`)
Fixes
*****
- Removed references to the ``master`` discord.py docs (:issue:`5713`)
- Removed some duplicated references (:issue:`5782`, :issue:`5778`)
- Fixed an inaccurate typehint in the documentation for `Config.user()` (:issue:`5790`, :issue:`5791`)
----
Redbot 3.4.19 (2023-04-20)
==========================
@@ -101,7 +590,9 @@ Changes
- Updated the screenshot showing what intents need to be selected (:issue:`5935`, :issue:`5936`)
- Updated bot hosting list with the new location for Contabo and addition of AlphaVPS (:issue:`5928`)
- Updated installation URLs for Homebrew and Chocolatey (:issue:`5776`)
- Updated the auto-restart script for Linux to only restart when there's a critical error (crash) or the restart command is ran (:issue:`5069`, :issue:`5674`)
----
Redbot 3.4.18 (2022-08-15)
==========================
@@ -357,8 +848,8 @@ Developer changelog
Additions
*********
- **Core - Bot Class** - Added optional ``check_permissions`` keyword-only argument to `Red.embed_requested() <RedBase.embed_requested()>` which, if ``True``, will make the method also check whether the bot can send embeds in the given channel (:issue:`5452`)
- |cool| **Core - Bot Class** - Added `Red.get_invite_url() <RedBase.get_invite_url()>` and `Red.is_invite_url_public() <RedBase.is_invite_url_public()>` that expose the functionality of ``[p]invite`` programmatically (:issue:`5152`, :issue:`5424`)
- **Core - Bot Class** - Added optional ``check_permissions`` keyword-only argument to `Red.embed_requested()` which, if ``True``, will make the method also check whether the bot can send embeds in the given channel (:issue:`5452`)
- |cool| **Core - Bot Class** - Added `Red.get_invite_url()` and `Red.is_invite_url_public()` that expose the functionality of ``[p]invite`` programmatically (:issue:`5152`, :issue:`5424`)
- |cool| **Core - Commands Package** - Added optional ``message`` argument to `Context.tick()` and `Context.react_quietly()` which is used if adding the reaction doesn't succeed (:issue:`3359`, :issue:`4092`)
Changes
@@ -538,14 +1029,14 @@ Additions
Here's the list of the methods that were added to the ``bot`` object:
- `Red.add_to_blacklist() <RedBase.add_to_blacklist()>`
- `Red.remove_from_blacklist() <RedBase.remove_from_blacklist()>`
- `Red.get_blacklist() <RedBase.get_blacklist()>`
- `Red.clear_blacklist() <RedBase.clear_blacklist()>`
- `Red.add_to_whitelist() <RedBase.add_to_whitelist()>`
- `Red.remove_from_whitelist() <RedBase.remove_from_whitelist()>`
- `Red.get_whitelist() <RedBase.get_whitelist()>`
- `Red.clear_whitelist() <RedBase.clear_whitelist()>`
- `Red.add_to_blacklist()`
- `Red.remove_from_blacklist()`
- `Red.get_blacklist()`
- `Red.clear_blacklist()`
- `Red.add_to_whitelist()`
- `Red.remove_from_whitelist()`
- `Red.get_whitelist()`
- `Red.clear_whitelist()`
- |cool| **Core - Commands Package** - Added `RelativedeltaConverter` and `parse_relativedelta` to the ``redbot.core.commands`` package (:issue:`5000`)
This converter and function return `dateutil.relativedelta.relativedelta` object that represents a relative delta.
@@ -873,7 +1364,7 @@ Changes
Deprecations
************
- **Core - Bot Class** - Added ``guild`` parameter to `bot.allowed_by_whitelist_blacklist() <RedBase.allowed_by_whitelist_blacklist()>` which is meant to replace the deprecated ``guild_id`` parameter (:issue:`4905`, :issue:`4914`)
- **Core - Bot Class** - Added ``guild`` parameter to `bot.allowed_by_whitelist_blacklist() <Red.allowed_by_whitelist_blacklist()>` which is meant to replace the deprecated ``guild_id`` parameter (:issue:`4905`, :issue:`4914`)
- Read the method's documentation for more information
- **Core - Commands Package** - Deprecated importing ``GuildConverter`` from ``redbot.core.commands.converter`` namespace (:issue:`4928`)
@@ -1054,8 +1545,8 @@ Additions
- Variables can be added and removed from the environment of Dev cog using two new methods:
- `bot.add_dev_env_value() <RedBase.add_dev_env_value()>`
- `bot.remove_dev_env_value() <RedBase.remove_dev_env_value()>`
- `bot.add_dev_env_value() <Red.add_dev_env_value()>`
- `bot.remove_dev_env_value() <Red.remove_dev_env_value()>`
Changes
*******
@@ -1429,9 +1920,9 @@ Developer changelog
Additions
*********
- **Core - Bot Class** - Added `bot.get_or_fetch_user() <RedBase.get_or_fetch_user()>` and `bot.get_or_fetch_member() <RedBase.get_or_fetch_member()>` methods (:issue:`4403`, :issue:`4402`)
- **Core - Bot Class** - Added `bot.remove_shared_api_services() <RedBase.remove_shared_api_services()>` to remove all keys and tokens associated with an API service (:issue:`4370`)
- **Core - Bot Class** - Added an option to return all tokens for an API service if ``service_name`` is not specified in `bot.get_shared_api_tokens() <RedBase.get_shared_api_tokens()>` (:issue:`4370`)
- **Core - Bot Class** - Added `bot.get_or_fetch_user() <Red.get_or_fetch_user()>` and `bot.get_or_fetch_member() <Red.get_or_fetch_member()>` methods (:issue:`4403`, :issue:`4402`)
- **Core - Bot Class** - Added `bot.remove_shared_api_services() <Red.remove_shared_api_services()>` to remove all keys and tokens associated with an API service (:issue:`4370`)
- **Core - Bot Class** - Added an option to return all tokens for an API service if ``service_name`` is not specified in `bot.get_shared_api_tokens() <Red.get_shared_api_tokens()>` (:issue:`4370`)
- **Core - Dependencies** - Added ``[all]`` and ``[dev]`` extras to the ``Red-DiscordBot`` package (:issue:`4443`)
- |cool| **Core - i18n** - Added API for setting contextual locales (:issue:`3896`, :issue:`1970`)
@@ -1582,7 +2073,7 @@ Additions
- |cool| **Core** - Added cog disabling API (:issue:`4043`, :issue:`3945`)
- New methods added: `bot.cog_disabled_in_guild() <RedBase.cog_disabled_in_guild()>`, `bot.cog_disabled_in_guild_raw() <RedBase.cog_disabled_in_guild_raw()>`
- New methods added: `bot.cog_disabled_in_guild() <Red.cog_disabled_in_guild()>`, `bot.cog_disabled_in_guild_raw() <Red.cog_disabled_in_guild_raw()>`
- Cog disabling is automatically applied for commands and only needs to be done manually for things like event listeners; see `recommendations-for-cog-creators` for more information
- |cool| **Core** - Added data request API (:issue:`4045`, :issue:`4169`)
@@ -1590,14 +2081,14 @@ Additions
- New special module level variable added: ``__red_end_user_data_statement__``
- These methods and variables should be added by all cogs according to their documentation; see `recommendations-for-cog-creators` for more information
- New ``info.json`` key added: ``end_user_data_statement``; see `Info.json format documentation <info-json-format>` for more information
- **Core - Bot Class** - Added `bot.message_eligible_as_command() <RedBase.message_eligible_as_command()>` utility method which can be used to determine if a message may be responded to as a command (:issue:`4077`)
- **Core - Bot Class** - Added `bot.message_eligible_as_command() <Red.message_eligible_as_command()>` utility method which can be used to determine if a message may be responded to as a command (:issue:`4077`)
- |cool| **Core - Commands Package** - Added a provisional API for replacing the help formatter. See `documentation <framework-commands-help>` for more details (:issue:`4011`)
- **Core - Commands Package** - `commands.NoParseOptional <NoParseOptional>` is no longer provisional and is now fully supported part of API (:issue:`4142`)
Changes
*******
- **Core - Bot Class** - `bot.ignored_channel_or_guild() <RedBase.ignored_channel_or_guild()>` now accepts `discord.Message` objects (:issue:`4077`)
- **Core - Bot Class** - `bot.ignored_channel_or_guild() <Red.ignored_channel_or_guild()>` now accepts `discord.Message` objects (:issue:`4077`)
- |cool| **Core - Commands Package** - Autohelp in group commands is now sent *after* invoking the group, which allows before invoke hooks to prevent autohelp from getting triggered (:issue:`4129`)
- **Core - Utils Package** - `humanize_list()` now accepts ``locale`` and ``style`` keyword arguments. See its documentation for more information (:issue:`2982`)
- |cool| **Core - Utils Package** - `humanize_list()` is now properly localized (:issue:`2906`, :issue:`2982`)
@@ -1850,7 +2341,7 @@ Developer changelog
Additions
*********
- **Core - Bot Class** - Added `bot.set_prefixes() <RedBase.set_prefixes()>` method that allows developers to set global/server prefixes (:issue:`3890`)
- **Core - Bot Class** - Added `bot.set_prefixes() <Red.set_prefixes()>` method that allows developers to set global/server prefixes (:issue:`3890`)
Documentation changes
@@ -2813,13 +3304,13 @@ Breaking Changes
New methods for this include:
- `RedBase.get_shared_api_tokens()`
- `RedBase.set_shared_api_tokens()`
- `RedBase.get_embed_colour()` (and its alias - ``get_embed_color()``)
- `RedBase.get_admin_roles()`
- `RedBase.get_admin_role_ids()`
- `RedBase.get_mod_roles()`
- `RedBase.get_mod_role_ids()`
- `Red.get_shared_api_tokens()`
- `Red.set_shared_api_tokens()`
- `Red.get_embed_colour()` (and its alias - ``get_embed_color()``)
- `Red.get_admin_roles()`
- `Red.get_admin_role_ids()`
- `Red.get_mod_roles()`
- `Red.get_mod_role_ids()`
- **Core - Bot Class** - Removed ``bot._counter``, Made a few more attributes private (``cog_mgr``, ``main_dir``) (:issue:`2976`)
- **Core - Modlog** - Modlog casetypes no longer have an attribute for auditlog action type (:issue:`2897`)
- **Core - Modlog** - Removed ``redbot.core.modlog.get_next_case_number()`` (:issue:`2908`)
@@ -2829,11 +3320,11 @@ Additions
- Added a few methods and classes replacing direct config access (which is no longer supported) (:issue:`2976`)
- `Red.allowed_by_whitelist_blacklist() <RedBase.allowed_by_whitelist_blacklist()>`
- `Red.get_valid_prefixes() <RedBase.get_valid_prefixes()>`
- `Red.remove_shared_api_tokens() <RedBase.remove_shared_api_tokens()>`
- `Red.allowed_by_whitelist_blacklist()`
- `Red.get_valid_prefixes()`
- `Red.remove_shared_api_tokens()`
- `redbot.core.commands.help.HelpSettings`
- **Core - Bot Class** - Added the method `Red.wait_until_red_ready() <RedBase.wait_until_red_ready()>` that waits until Red's post connection startup is done (:issue:`3273`)
- **Core - Bot Class** - Added the method `Red.wait_until_red_ready()` that waits until Red's post connection startup is done (:issue:`3273`)
- **Core - Bot Class** - New event ``on_red_api_tokens_update`` is now dispatched when shared api keys for a service are updated (:issue:`3134`)
- **Core - Config** - Added functions to acquire locks on Config groups and values. These locks are acquired by default when calling a value as a context manager. See `Value.get_lock()` for details (:issue:`2654`)
- **Core - Config** - Added methods to Config for accessing things by id without mocked objects (:issue:`2804`)
@@ -2862,8 +3353,8 @@ Additions
Changes
*******
- **Core - Bot Class** - `Red.send_filtered() <RedBase.send_filtered()>` now returns the message that is sent (:issue:`3052`)
- **Core - Bot Class** - `Red.send_to_owners() <RedBase.send_to_owners()>` and `Red.get_owner_notification_destinations() <RedBase.get_owner_notification_destinations()>` now log when they are not able to find the owner notification destination (:issue:`3273`)
- **Core - Bot Class** - `Red.send_filtered()` now returns the message that is sent (:issue:`3052`)
- **Core - Bot Class** - `Red.send_to_owners()` and `Red.get_owner_notification_destinations()` now log when they are not able to find the owner notification destination (:issue:`3273`)
- **Core - Commands Package** - Allowed passing ``cls`` in the `redbot.core.commands.group()` decorator (:issue:`2881`)
- **Core - Modlog** - Some generic modlog casetypes are now pre-registered for cog creator use (:issue:`2897`)
@@ -2876,10 +3367,10 @@ Fixes
*****
- **Core - Bank** - Bank functions now check the recipient balance before transferring and stop the transfer if the recipient's balance will go above the maximum allowed balance (:issue:`2923`)
- **Core - Bot Class** - Fixed `Red.remove_command() <RedBase.remove_command()>` throwing an error when trying to remove a non-existent command (:issue:`2888`)
- **Core - Bot Class** - Fixed `Red.remove_command()` throwing an error when trying to remove a non-existent command (:issue:`2888`)
- **Core - Bot Class** - Fixed ``is_automod_immune``'s handling of the guild check and added support for checking webhooks (:issue:`3100`)
- **Core - Bot Class** - ``Red.owner_id`` is now set in the post connection startup (:issue:`3273`)
- **Core - Bot Class** - `Red.send_to_owners() <RedBase.send_to_owners()>` and `Red.get_owner_notification_destinations() <RedBase.get_owner_notification_destinations()>` now wait until Red is done with post connection startup to ensure owner ID is available (:issue:`3273`)
- **Core - Bot Class** - `Red.send_to_owners()` and `Red.get_owner_notification_destinations()` now wait until Red is done with post connection startup to ensure owner ID is available (:issue:`3273`)
- **Core - Commands Package** - `Command.can_see()` now works as intended for disabled commands (:issue:`2892`)
- **Core - Commands Package** - Fixed ``Context.clean_prefix`` issues resulting from undocumented changes from discord (:issue:`3249`)
- **Core - Utils Package** - Fixed `MessagePredicate.greater()` and `MessagePredicate.less()` allowing any valid int instead of only valid ints/floats that are greater/less than the given value (:issue:`3004`)
@@ -3144,7 +3635,7 @@ Developer changelog
Additions
*********
- **Core - Bot Class** - Added `Red.send_to_owners() <RedBase.send_to_owners()>` and `Red.get_owner_notification_destinations() <RedBase.get_owner_notification_destinations()>` (:issue:`2665`, :issue:`2738`)
- **Core - Bot Class** - Added `Red.send_to_owners()` and `Red.get_owner_notification_destinations()` (:issue:`2665`, :issue:`2738`)
- **Core - Commands Package** - Added `DictConverter` (:issue:`2692`)
- **Core - Commands Package** - Added `TimedeltaConverter` and `parse_timedelta()` (:issue:`2736`)
- **Core - Commands Package** - Added ``assume_yes`` attribute to `redbot.core.commands.Context` (:issue:`2746`)

12
LICENSE
View File

@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Red - A fully customizable Discord bot
Copyright (C) 2017-2021 Cog Creators
Copyright (C) 2017-present Cog Creators
Copyright (C) 2015-2017 Twentysix
This program is free software: you can redistribute it and/or modify
@@ -653,7 +653,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Red-DiscordBot Copyright (C) 2017-2021 Cog Creators
Red-DiscordBot Copyright (C) 2017-present Cog Creators
Red-DiscordBot Copyright (C) 2015-2017 Twentysix
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
@@ -675,10 +675,10 @@ the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
The Red-DiscordBot project contains subcomponents in audio.py that have a
separate copyright notice and license terms. Your use of the source code for
these subcomponents is subject to the terms and conditions of the following
licenses.
The Red-DiscordBot project contains subcomponents in the Audio module that
have a separate copyright notice and license terms. Your use of the source
code for these subcomponents is subject to the terms and conditions of the
following licenses.
This product bundles methods from https://github.com/Just-Some-Bots/MusicBot/
blob/master/musicbot/spotify.py which are available under an MIT license.

View File

@@ -2,6 +2,12 @@
include LICENSE
recursive-include redbot *.LICENSE
# include requirements files
include requirements/base.in
include requirements/base.txt
include requirements/extra-*.in
include requirements/extra-*.txt
# include locale files
recursive-include redbot locales/*.po
@@ -15,7 +21,7 @@ recursive-include redbot *.export
recursive-include redbot py.typed
# include *.sql files from postgres driver
recursive-include redbot/core/drivers/postgres *.sql
recursive-include redbot/core/_drivers/postgres *.sql
# include tests
graft tests

View File

@@ -52,7 +52,7 @@ bumpdeps:
# Development environment
newenv:
$(PYTHON) -m venv --clear .venv
.venv/bin/pip install -U pip setuptools wheel
.venv/bin/pip install -U pip wheel
$(MAKE) syncenv
syncenv:
.venv/bin/pip install -Ur ./tools/dev-requirements.txt

View File

@@ -27,9 +27,9 @@
</p>
<p align="center">
<a href="https://github.com/Cog-Creators/Red-DiscordBot/actions">
<img src="https://img.shields.io/github/workflow/status/Cog-Creators/Red-Discordbot/Tests?label=tests" alt="GitHub Actions">
<img src="https://img.shields.io/github/actions/workflow/status/Cog-Creators/Red-Discordbot/tests.yml?label=tests" alt="GitHub Actions">
</a>
<a href="http://red-discordbot.readthedocs.io/en/stable/?badge=stable">
<a href="http://docs.discord.red/en/stable/?badge=stable">
<img src="https://readthedocs.org/projects/red-discordbot/badge/?version=stable" alt="Red on readthedocs.org">
</a>
<a href="https://github.com/psf/black">
@@ -48,7 +48,7 @@
<a href="#installation">Installation</a>
<a href="http://red-discordbot.readthedocs.io/en/stable/index.html">Documentation</a>
<a href="http://docs.discord.red/en/stable/index.html">Documentation</a>
<a href="#plugins">Plugins</a>
@@ -86,9 +86,9 @@ community of cog repositories.**
**The following platforms are officially supported:**
- [Windows](https://red-discordbot.readthedocs.io/en/stable/install_windows.html)
- [MacOS](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
- [Most major linux distributions](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
- [Windows](https://docs.discord.red/en/stable/install_guides/windows.html)
- [MacOS](https://docs.discord.red/en/stable/install_guides/mac.html)
- [Most major linux distributions](https://docs.discord.red/en/stable/install_guides/index.html)
If after reading the guide you are still experiencing issues, feel free to join the
[Official Discord Server](https://discord.gg/red) and ask in the **#support** channel for help.
@@ -115,7 +115,7 @@ available 3rd party cogs!
**Red** is in continuous development, and its supported by an active community which produces new
content (cogs/plugins) for everyone to enjoy. New features are constantly added. If you cant
[find](https://index.discord.red) the cog youre looking for,
consult our [guide](https://red-discordbot.readthedocs.io/en/stable/guide_cog_creation.html) on
consult our [guide](https://docs.discord.red/en/stable/guide_cog_creation.html) on
building your own cogs!
Join us on our [Official Discord Server](https://discord.gg/red)!

38
SECURITY.md Normal file
View File

@@ -0,0 +1,38 @@
# Security Policy
## Supported Versions
The table below explains the current state of our versions. Currently, only version
3.5 and higher are supported and receive security updates. Versions lower than 3.5
are considered End of Life and will not receive any security updates.
| Version | Branch | Security Updates | End of Life |
|---------------|------------|--------------------|--------------------|
| < 2.0 | master | :x: | :white_check_mark: |
| >= 2.0, < 3.0 | develop | :x: | :white_check_mark: |
| >= 3.0, < 3.5 | V3/develop | :x: | :white_check_mark: |
| >= 3.5 | V3/develop | :white_check_mark: | :x: |
## Reporting a Vulnerability
For reporting vulnerabilities within Red-DiscordBot we make use of GitHub's
private vulnerability reporting feature (More information can be found
[here](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability)).
This ensures that all maintainers and key members have access to the reported
vulnerability.
### Opening a Vulnerability Report
To open a vulnerability report please fill out [this form](https://github.com/Cog-Creators/Red-DiscordBot/security/advisories/new)
You will be asked to provide a summary, details and proof of concept for your vulnerability report.
We ask that you fill out this form to the best of your ability, with as many details as possible.
Furthermore, you'll be asked to provide affected products and severity.
These fields are optional and will be filled appropriately by the maintainers if not provided.
### Timeline
We will try to answer your report within 7 days. If you haven't received an answer by then, we suggest you reach
out to us privately. This can best be done via our [Discord server](https://discord.gg/red), and contacting
a member who has the Staff role.

View File

@@ -52,9 +52,10 @@ Paste the following in the file, and replace all instances of :code:`username` w
User=username
Group=username
Type=idle
Restart=always
Restart=on-abnormal
RestartSec=15
RestartPreventExitStatus=0
RestartForceExitStatus=1
RestartForceExitStatus=26
TimeoutStopSec=10
[Install]

View File

@@ -21,10 +21,13 @@ Open that document in Notepad, and paste the following text in it:
CALL "%userprofile%\redenv\Scripts\activate.bat"
python -O -m redbot <your instance name>
IF %ERRORLEVEL% NEQ 0 (
ECHO Restarting Red...
GOTO RED
)
IF %ERRORLEVEL% == 1 GOTO RESTART_RED
IF %ERRORLEVEL% == 26 GOTO RESTART_RED
EXIT /B %ERRORLEVEL%
:RESTART_RED
ECHO Restarting Red...
GOTO RED
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.
@@ -45,4 +48,4 @@ 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.
Drag the shortcut into the folder that is opened. The bot will now launch on startup.

View File

@@ -19,7 +19,7 @@ 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 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.
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
@@ -27,19 +27,19 @@ Context Parameters
You can enhance your custom command's response by leaving spaces for the bot to substitute.
+-----------+----------------------------------------+
| Argument | Substitute |
+===========+========================================+
| {message} | The message the bot is responding to. |
+-----------+----------------------------------------+
| {author} | The user who called the command. |
+-----------+----------------------------------------+
| {channel} | The channel the command was called in. |
+-----------+----------------------------------------+
| {server} | The server the command was called in. |
+-----------+----------------------------------------+
| {guild} | Same as with {server}. |
+-----------+----------------------------------------+
+-----------+--------------------------------------------------+
| Argument | Substitute |
+===========+==================================================+
| {message} | The message the bot is responding to. |
+-----------+--------------------------------------------------+
| {author} | The user who called the command. |
+-----------+--------------------------------------------------+
| {channel} | The channel or thread the command was called in. |
+-----------+--------------------------------------------------+
| {server} | The server the command was called in. |
+-----------+--------------------------------------------------+
| {guild} | Same as with {server}. |
+-----------+--------------------------------------------------+
You can further refine the response with dot notation. For example, {author.mention} will mention the user who called the command.
@@ -81,7 +81,7 @@ Showing your own avatar
.. code-block:: none
[p]customcom add simple avatar {author.avatar_url}
[p]customcom add simple avatar {author.display_avatar}
[p]avatar
https://cdn.discordapp.com/avatars/133801473317404673/be4c4a4fe47cb3e74c31a0504e7a295e.webp?size=1024

View File

@@ -389,7 +389,7 @@ announceset channel
.. code-block:: none
[p]announceset channel [channel]
[p]announceset channel <channel>
**Description**
@@ -397,8 +397,8 @@ Sets the channel where the bot owner announcements will be sent.
**Arguments**
* ``[channel]``: The channel that will be used for bot announcements.
|channel-input| Defaults to where you typed the command.
* ``<channel>``: The channel that will be used for bot announcements.
|channel-input|
.. _admin-command-announceset-clearchannel:

3766
docs/cog_guides/audio.rst Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,186 +0,0 @@
.. _bank:
====
Bank
====
This is the cog guide for the bank 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 bank
.. _bank-usage:
-----
Usage
-----
This cog manages the bank. It won't be used often by
users but this is what makes any interaction with the
money possible.
You will be able to switch between a global and a server-
wide bank and choose the bank/currency name.
.. _bank-commands:
--------
Commands
--------
.. _bank-command-bankset:
^^^^^^^
bankset
^^^^^^^
.. note:: |guildowner-lock|
**Syntax**
.. code-block:: none
[p]bankset
**Description**
Base command for configuring bank settings.
.. _bank-command-bankset-toggleglobal:
""""""""""""""""""""
bankset toggleglobal
""""""""""""""""""""
.. note:: |owner-lock|
**Syntax**
.. code-block:: none
[p]bankset toggleglobal [confirm=False]
**Description**
Makes the bank global instead of server-wide. If it
is already global, the command will switch it back
to the server-wide bank.
.. warning:: Using this command will reset **all** accounts.
**Arguments**
* ``[confirm=False]``: Put ``yes`` to confirm.
.. _bank-command-bankset-creditsname:
"""""""""""""""""""
bankset creditsname
"""""""""""""""""""
.. note:: |owner-lock| However, if the bank is server-wide, the
server owner or an administrator can use this command.
**Syntax**
.. code-block:: none
[p]bankset creditsname <name>
**Description**
Change the credits name of the bank. It is ``credits`` by default.
For example, if you switch it to ``dollars``, the payday
command will show this:
.. TODO reference the payday command
.. code-block:: none
Here, take some dollars. Enjoy! (+120 dollars!)
You currently have 220 dollars.
**Arguments**
* ``<name>``: The new credits name.
.. _bank-command-bankset-bankname:
""""""""""""""""
bankset bankname
""""""""""""""""
.. note:: |owner-lock| However, if the bank is server-wide, the
server owner or an administrator can use this command.
**Syntax**
.. code-block:: none
[p]bankset bankname <name>
**Description**
Set bank's name.
**Arguments**
* ``<name>``: The new bank's name.
.. _bank-command-bankset-maxbal:
""""""""""""""
bankset maxbal
""""""""""""""
.. note:: |owner-lock| However, if the bank is server-wide, the
server owner or an administrator can use this command.
**Syntax**
.. code-block:: none
[p]bankset maxbal <amount>
**Description**
Defines the maximum amount of money a user can have with the bot.
If a user reaches this limit, they will be unable to gain more money.
**Arguments**
* ``<amount>``: The maximum amount of money for users.
.. _bank-command-bankset-showsettings:
""""""""""""""""""""
bankset showsettings
""""""""""""""""""""
.. note:: |owner-lock| However, if the bank is server-wide, the
server owner or an administrator can use this command.
**Syntax**
.. code-block:: none
[p]bankset showsettings
**Description**
Shows the current settings of your bank.
This will display the following information:
* Name of the bank
* Scope of the bank (global or per server)
* Currency name
* Default balance
* Maximum allowed balance

View File

@@ -171,17 +171,17 @@ removepath
.. code-block:: none
[p]removepath <path_number>
[p]removepath <path_numbers...>
**Description**
Removes a path from the list of available paths. Its cogs won't be accessible
anymore.
Removes one or more paths from the list of available paths. Its cogs won't be
accessible anymore.
**Arguments**
* ``<path_number>``: The number of the path to remove. You can get it with
the :ref:`paths <cogmanagerui>` command.
* ``<path_numbers>``: The number of the path(s) to remove. You can get it with
the :ref:`paths <cogmanagerui-command-paths>` command.
.. _cogmanagerui-command-reorderpath:

File diff suppressed because it is too large Load Diff

View File

@@ -68,7 +68,7 @@ customcom cooldown
Set, edit, or view the cooldown for a custom command.
You may set cooldowns per member, channel, or guild. Multiple
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.
@@ -267,7 +267,7 @@ customcom search
Searches through custom commands, according to the query.
Uses fuzzywuzzy searching to find close matches.
Uses fuzzy searching to find close matches.
**Arguments:**

View File

@@ -68,133 +68,6 @@ Example:
- ``<user>`` The user to check the balance of. If omitted, defaults to your own balance.
.. _economy-command-bank-prune:
""""""""""
bank prune
""""""""""
.. note:: |admin-lock|
**Syntax**
.. code-block:: none
[p]bank prune
**Description**
Base command for pruning bank accounts.
.. _economy-command-bank-prune-global:
"""""""""""""""""
bank prune global
"""""""""""""""""
.. note:: |owner-lock|
**Syntax**
.. code-block:: none
[p]bank prune global [confirmation=False]
**Description**
Prune bank accounts for users who no longer share a server with the bot.
Cannot be used without a global bank. See ``[p]bank prune server``.
Examples:
- ``[p]bank prune global`` - Did not confirm. Shows the help message.
- ``[p]bank prune global yes``
**Arguments**
- ``<confirmation>`` This will default to false unless specified.
.. _economy-command-bank-prune-server:
"""""""""""""""""
bank prune server
"""""""""""""""""
.. note:: |guildowner-lock|
**Syntax**
.. code-block:: none
[p]bank prune server [confirmation=False]
.. tip:: Aliases: ``bank prune guild``, ``bank prune local``
**Description**
Prune bank accounts for users no longer in the server.
Cannot be used with a global bank. See ``[p]bank prune global``.
Examples:
- ``[p]bank prune server`` - Did not confirm. Shows the help message.
- ``[p]bank prune server yes``
**Arguments**
- ``<confirmation>`` This will default to false unless specified.
.. _economy-command-bank-prune-user:
"""""""""""""""
bank prune user
"""""""""""""""
**Syntax**
.. code-block:: none
[p]bank prune user <user> [confirmation=False]
**Description**
Delete the bank account of a specified user.
Examples:
- ``[p]bank prune user @TwentySix`` - Did not confirm. Shows the help message.
- ``[p]bank prune user @TwentySix yes``
**Arguments**
- ``<user>`` The user to delete the bank of. Takes mentions, names, and user ids.
- ``<confirmation>`` This will default to false unless specified.
.. _economy-command-bank-reset:
""""""""""
bank reset
""""""""""
.. note:: |guildowner-lock|
**Syntax**
.. code-block:: none
[p]bank reset [confirmation=False]
**Description**
Delete all bank accounts.
Examples:
- ``[p]bank reset`` - Did not confirm. Shows the help message.
- ``[p]bank reset yes``
**Arguments**
- ``<confirmation>`` This will default to false unless specified.
.. _economy-command-bank-set:
""""""""
@@ -317,29 +190,6 @@ Examples:
- | ``<duration>`` The new duration to wait in between uses of payday. Default is 5 minutes.
| Accepts: seconds, minutes, hours, days, weeks (if no unit is specified, the duration is assumed to be given in seconds)
.. _economy-command-economyset-registeramount:
"""""""""""""""""""""""""
economyset registeramount
"""""""""""""""""""""""""
**Syntax**
.. code-block:: none
[p]economyset registeramount <creds>
**Description**
Set the initial balance for new bank accounts.
Example:
- ``[p]economyset registeramount 5000``
**Arguments**
- ``<creds>`` The new initial balance amount. Default is 0.
.. _economy-command-economyset-rolepaydayamount:
"""""""""""""""""""""""""""

View File

@@ -115,11 +115,12 @@ Add words to the filter.
Use double quotes to add sentences.
Examples:
- ``[p]filter channel add word1 word2 word3``
- ``[p]filter channel add "This is a sentence"``
- ``[p]filter channel add #channel word1 word2 word3``
- ``[p]filter channel add #channel "This is a sentence"``
**Arguments:**
- ``<channel>`` The text, voice, stage, or forum channel to add filtered words to.
- ``[words...]`` The words or sentences to filter.
.. _filter-command-filter-channel-clear:
@@ -164,7 +165,7 @@ filter channel remove
.. code-block:: none
[p]filter channel remove [words...]
[p]filter channel remove <channel> [words...]
**Description**
@@ -173,11 +174,12 @@ Remove words from the filter.
Use double quotes to remove sentences.
Examples:
- ``[p]filter channel remove word1 word2 word3``
- ``[p]filter channel remove "This is a sentence"``
- ``[p]filter channel remove #channel word1 word2 word3``
- ``[p]filter channel remove #channel "This is a sentence"``
**Arguments:**
- ``<channel>`` The text, voice, stage, or forum channel to add filtered words to.
- ``[words...]`` The words or sentences to no longer filter.
.. _filter-command-filter-clear:

View File

@@ -215,11 +215,11 @@ modset deletenames
**Description**
Delete all stored usernames and nicknames.
Delete all stored usernames, global display names, and server nicknames.
**Arguments**
- ``<confirmation>``: Whether to delete all stored usernames and nicknames. |bool-input|
- ``<confirmation>``: Whether to delete all stored usernames, global display names, and server nicknames. |bool-input|
.. _mod-command-modset-deleterepeats:
@@ -469,7 +469,7 @@ modset tracknicknames
**Description**
Toggle whether nickname changes should be tracked.
Toggle whether server nickname changes should be tracked.
This setting will be overridden if trackallnames is disabled.
@@ -527,7 +527,7 @@ names
**Description**
Show previous names and nicknames of a member.
Show previous usernames, global display names, and server nicknames of a member.
**Arguments**
@@ -549,14 +549,14 @@ rename
**Description**
Change a member's nickname.
Change a member's server nickname.
Leaving the nickname empty will remove it.
Leaving the nickname argument empty will remove it.
**Arguments**
* ``<member>``: |member-input|
* ``[nickname]``: The new nickname for the member.
* ``[nickname]``: The new server nickname for the member.
.. _mod-command-slowmode:
@@ -574,14 +574,14 @@ slowmode
**Description**
Changes channel's slowmode setting.
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 channel's slowmode settings.
* ``[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.
@@ -684,9 +684,9 @@ userinfo
Show information about a user.
This includes fields for status, discord join date, server
join date, voice state and previous names/nicknames.
join date, voice state and previous usernames/global display names/nicknames.
If the user has no roles, previous names or previous nicknames,
If the user has no roles, previous usernames, global display names, or server nicknames,
these fields will be omitted.
**Arguments**

View File

@@ -19,7 +19,7 @@ find detailed docs about usage and commands.
Usage
-----
Manage log channels for moderation actions.
Browse and manage modlog cases.
.. _modlog-commands:
@@ -88,85 +88,6 @@ List cases for the specified member.
* ``<member>``: The member to get cases for. |member-input|
.. _modlog-command-modlogset:
^^^^^^^^^
modlogset
^^^^^^^^^
.. note:: |guildowner-lock|
**Syntax**
.. code-block:: none
[p]modlogset
**Description**
Manage modlog settings.
.. _modlog-command-modlogset-cases:
"""""""""""""""
modlogset cases
"""""""""""""""
**Syntax**
.. code-block:: none
[p]modlogset cases [action]
**Description**
Enable or disable case creation for a mod action, like disabling warnings, enabling bans, etc.
**Examples:**
- ``[p]modlogset cases kick`` - Enables/disables modlog messages for kicks.
- ``[p]modlogset cases ban`` - Enables/disables modlog messages for bans.
**Arguments:**
- ``[action]`` - The type of mod action to be enabled/disabled for case creation.
.. _modlog-command-modlogset-modlog:
""""""""""""""""
modlogset modlog
""""""""""""""""
**Syntax**
.. code-block:: none
[p]modlogset modlog [channel]
.. tip:: Alias: ``modlogset channel``
**Description**
Set a channel as the modlog.
**Arguments**
* ``[channel]``: The channel to set as the modlog. If omitted, the modlog will be disabled.
.. _modlog-command-modlogset-resetcases:
""""""""""""""""""""
modlogset resetcases
""""""""""""""""""""
**Syntax**
.. code-block:: none
[p]modlogset resetcases
**Description**
Reset all modlog cases in this server.
.. _modlog-command-reason:
^^^^^^

View File

@@ -91,7 +91,7 @@ mutechannel
**Description**
Mute a user in the current text channel.
Mute a user in the current text channel (or in the parent of the current thread).
Examples:
@@ -355,7 +355,7 @@ unmutechannel
**Description**
Unmute a user in this channel.
Unmute a user in this channel (or in the parent of this thread).
**Arguments**

View File

@@ -29,7 +29,7 @@ Global rules (set by the owner) are checked first, then rules set for servers. I
1. Rules about a user.
2. Rules about the voice channel a user is in.
3. Rules about the text channel a command was issued 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).

View File

@@ -73,7 +73,7 @@ report interact
Open a message tunnel.
This tunnel will forward things you say in this channel
This tunnel will forward things you say in this channel or thread
to the ticket opener's direct messages.
Tunnels do not persist across bot restarts.

View File

@@ -338,6 +338,22 @@ To set the Twitch API tokens, follow these steps:
.. attention:: These tokens are sensitive and should only be
used in a private channel or in DM with the bot.
.. _streams-command-streamset-usebuttons:
^^^^^^^^^^^^^^^^^^^^
streamset usebuttons
^^^^^^^^^^^^^^^^^^^^
**Syntax**
.. code-block:: none
[p]streamset usebuttons
**Description**
Toggle whether to use buttons for stream alerts.
.. _streams-command-picarto:
^^^^^^^

View File

@@ -31,8 +31,8 @@ In terms of scope, global rules will be checked first, then server rules.
For each of those, the first rule pertaining to one of the following models will be used:
1. User
2. Voice channel
3. Text channel
2. Voice/stage channel a user is connected to
3. The channel command was issued in (parent channel in case of invocations in threads)
4. Channel category
5. Roles, highest to lowest
6. Server (can only be in global rules)

View File

@@ -19,6 +19,7 @@
#
import os
import sys
import time
sys.path.insert(0, os.path.abspath(".."))
sys.path.insert(0, os.path.abspath("_ext"))
@@ -61,7 +62,7 @@ master_doc = "index"
# General information about the project.
project = "Red - Discord Bot"
copyright = "2018-2021, Cog Creators"
copyright = f"2018-{time.strftime('%Y')}, Cog Creators"
author = "Cog Creators"
# The version info for the project you're documenting, acts as replacement for
@@ -69,7 +70,7 @@ author = "Cog Creators"
# built documents.
#
from redbot.core import __version__
from discord import __version__ as dpy_version
from discord import __version__ as dpy_version, version_info as dpy_version_info
# The short X.Y version.
version = __version__
@@ -81,7 +82,7 @@ release = __version__
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
language = "en"
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
@@ -227,10 +228,17 @@ linkcheck_retries = 3
# -- Options for extensions -----------------------------------------------
if dpy_version_info.releaselevel == "final":
# final release - versioned docs should be available
dpy_docs_url = f"https://discordpy.readthedocs.io/en/v{dpy_version}/"
else:
# alpha release - `latest` version of docs should be used
dpy_docs_url = "https://discordpy.readthedocs.io/en/latest/"
# Intersphinx
intersphinx_mapping = {
"python": ("https://docs.python.org/3", None),
"dpy": (f"https://discordpy.readthedocs.io/en/v{dpy_version}/", None),
"dpy": (dpy_docs_url, None),
"motor": ("https://motor.readthedocs.io/en/stable/", None),
"babel": ("http://babel.pocoo.org/en/stable/", None),
"dateutil": ("https://dateutil.readthedocs.io/en/stable/", None),
@@ -240,9 +248,9 @@ intersphinx_mapping = {
# This allows to create links to d.py docs with
# :dpy_docs:`link text <site_name.html>`
extlinks = {
"dpy_docs": (f"https://discordpy.readthedocs.io/en/v{dpy_version}/%s", None),
"issue": ("https://github.com/Cog-Creators/Red-DiscordBot/issues/%s", "#"),
"ghuser": ("https://github.com/%s", "@"),
"dpy_docs": (f"{dpy_docs_url}%s", None),
"issue": ("https://github.com/Cog-Creators/Red-DiscordBot/issues/%s", "#%s"),
"ghuser": ("https://github.com/%s", "@%s"),
}
# Doctest
@@ -253,3 +261,21 @@ doctest_test_doctest_blocks = ""
# Autodoc options
autodoc_default_options = {"show-inheritance": True}
autodoc_typehints = "none"
from docutils import nodes
from sphinx.transforms import SphinxTransform
# d.py's |coro| substitution leaks into our docs because we don't replace some of the docstrings
class IgnoreCoroSubstitution(SphinxTransform):
default_priority = 210
def apply(self, **kwargs) -> None:
for ref in self.document.traverse(nodes.substitution_reference):
if ref["refname"] == "coro":
ref.replace_self(nodes.Text(""))
def setup(app):
app.add_transform(IgnoreCoroSubstitution)

View File

@@ -69,9 +69,13 @@ Additional References
.. py:currentmodule:: redbot.core.bot
.. automethod:: Red.get_shared_api_tokens
:noindex:
.. automethod:: Red.set_shared_api_tokens
:noindex:
.. automethod:: Red.remove_shared_api_tokens
:noindex:
.. automethod:: Red.remove_shared_api_services
:noindex:

View File

@@ -21,9 +21,7 @@ Basic Usage
class MyCog(commands.Cog):
@commands.command()
async def balance(self, ctx, user: discord.Member = None):
if user is None:
user = ctx.author
async def balance(self, ctx, user: discord.Member = commands.Author):
bal = await bank.get_balance(user)
currency = await bank.get_currency_name(ctx.guild)
await ctx.send(

View File

@@ -6,18 +6,12 @@ Bot
.. automodule:: redbot.core.bot
RedBase
^^^^^^^
.. autoclass:: RedBase
:members:
:exclude-members: get_context
.. automethod:: register_rpc_handler
.. automethod:: unregister_rpc_handler
Red
^^^
.. autoclass:: Red
:members:
:exclude-members: get_context, get_embed_color
.. automethod:: register_rpc_handler
.. automethod:: unregister_rpc_handler

View File

@@ -8,4 +8,4 @@ The following are all decorators for commands, which add restrictions to where a
run.
.. automodule:: redbot.core.commands
:members: permissions_check, bot_has_permissions, bot_in_a_guild, has_permissions, has_guild_permissions, is_owner, guildowner, guildowner_or_permissions, admin, admin_or_permissions, mod, mod_or_permissions
:members: permissions_check, bot_has_permissions, bot_in_a_guild, bot_can_manage_channel, bot_can_react, has_permissions, can_manage_channel, has_guild_permissions, is_owner, guildowner, guildowner_or_can_manage_channel, guildowner_or_permissions, admin, admin_or_can_manage_channel, admin_or_permissions, mod, mod_or_can_manage_channel, mod_or_permissions

View File

@@ -1,8 +0,0 @@
.. cog manager docs
===========
Cog Manager
===========
.. automodule:: redbot.core.cog_manager
:members:

View File

@@ -11,8 +11,12 @@ extend functionalities used throughout the bot, as outlined below.
.. autofunction:: redbot.core.commands.command
.. autofunction:: redbot.core.commands.hybrid_command
.. autofunction:: redbot.core.commands.group
.. autofunction:: redbot.core.commands.hybrid_group
.. autoclass:: redbot.core.commands.Cog
.. automethod:: format_help_for_context
@@ -21,13 +25,21 @@ extend functionalities used throughout the bot, as outlined below.
.. automethod:: red_delete_data_for_user
.. autoclass:: redbot.core.commands.GroupCog
.. autoclass:: redbot.core.commands.Command
:members:
:inherited-members: format_help_for_context
.. autoclass:: redbot.core.commands.HybridCommand
:members:
.. autoclass:: redbot.core.commands.Group
:members:
.. autoclass:: redbot.core.commands.HybridGroup
:members:
.. autoclass:: redbot.core.commands.Context
:members:

View File

@@ -98,13 +98,13 @@ in various ways:
.. code-block:: python
@commands.command()
@checks.admin_or_permissions(manage_guild=True)
@commands.admin_or_permissions(manage_guild=True)
async def setbaz(self, ctx, new_value):
await self.config.guild(ctx.guild).baz.set(new_value)
await ctx.send("Value of baz has been changed!")
@commands.command()
@checks.is_owner()
@commands.is_owner()
async def setfoobar(self, ctx, new_value):
await self.config.foobar.set(new_value)
@@ -161,7 +161,7 @@ Here is an example of the :code:`async with` syntax:
* :py:meth:`Config.member` which takes :py:class:`discord.Member`.
* :py:meth:`Config.user` which takes :py:class:`discord.User`.
* :py:meth:`Config.role` which takes :py:class:`discord.Role`.
* :py:meth:`Config.channel` which takes :py:class:`discord.TextChannel`.
* :py:meth:`Config.channel` which takes :py:class:`discord.abc.GuildChannel` or :py:class:`discord.Thread`.
If you need to wipe data from the config, you want to look at :py:meth:`Group.clear`, or :py:meth:`Config.clear_all`
and similar methods, such as :py:meth:`Config.clear_all_guilds`.
@@ -259,7 +259,7 @@ Now let's see an example that uses multiple identifiers:
.. code-block:: python
from redbot.core import Config, commands, checks
from redbot.core import Config, commands
class ChannelAccess(commands.Cog):
@@ -273,7 +273,7 @@ Now let's see an example that uses multiple identifiers:
self.config.register_custom("ChannelAccess", **default_access)
@commands.command()
@checks.is_owner()
@commands.is_owner()
async def grantaccess(self, ctx, channel: discord.TextChannel, member: discord.Member):
await self.config.custom("ChannelAccess", channel.id, member.id).allowed.set(True)
await ctx.send("Member has been granted access to that channel")
@@ -467,7 +467,7 @@ much the same way they would in V2. The following examples will demonstrate how
async def setup(bot):
cog = ExampleCog()
await cog.load_data()
bot.add_cog(cog)
await bot.add_cog(cog)
************************************
Best practices and performance notes
@@ -540,30 +540,14 @@ Value
:members:
:special-members: __call__
IdentifierData
^^^^^^^^^^^^^^
****************
Driver Reference
****************
.. autofunction:: redbot.core.drivers.get_driver
.. autoclass:: redbot.core.drivers.BackendType
.. autoclass:: IdentifierData
:members:
.. autoclass:: redbot.core.drivers.ConfigCategory
:members:
ConfigCategory
^^^^^^^^^^^^^^
Base Driver
^^^^^^^^^^^
.. autoclass:: redbot.core.drivers.BaseDriver
:members:
JSON Driver
^^^^^^^^^^^
.. autoclass:: redbot.core.drivers.JsonDriver
:members:
Postgres Driver
^^^^^^^^^^^^^^^
.. autoclass:: redbot.core.drivers.PostgresDriver
.. autoclass:: ConfigCategory
:members:

View File

@@ -21,7 +21,7 @@ Basic Usage
class MyCog(commands.Cog):
@commands.command()
@checks.admin_or_permissions(ban_members=True)
@commands.admin_or_permissions(ban_members=True)
async def ban(self, ctx, user: discord.Member, reason: str = None):
await ctx.guild.ban(user)
case = await modlog.create_case(
@@ -35,8 +35,7 @@ Basic Usage
Registering Case types
**********************
To register case types, use an asynchronous ``initialize()`` method and call
it from your setup function:
To register case types, use a special ``cog_load()`` method which is called when you add a cog:
.. code-block:: python
@@ -46,7 +45,7 @@ it from your setup function:
class MyCog(commands.Cog):
async def initialize(self):
async def cog_load(self):
await self.register_casetypes()
@staticmethod
@@ -87,8 +86,7 @@ it from your setup function:
async def setup(bot):
cog = MyCog()
await cog.initialize()
bot.add_cog(cog)
await bot.add_cog(cog)
.. important::
Image should be the emoji you want to represent your case type with.

View File

@@ -20,9 +20,9 @@ Examples
.. code-block:: Python
def setup(bot):
async def setup(bot):
c = Cog()
bot.add_cog(c)
await bot.add_cog(c)
bot.register_rpc_handler(c.rpc_method)
*******************************
@@ -64,4 +64,4 @@ All cog-based methods expect their parameter list to take one argument, a JSON o
API Reference
*************
Please see the :class:`redbot.core.bot.RedBase` class for details on the RPC handler register and unregister methods.
Please see the :class:`redbot.core.bot.Red` class for details on the RPC handler register and unregister methods.

21
docs/framework_tree.rst Normal file
View File

@@ -0,0 +1,21 @@
.. tree module docs
====
Tree
====
Red uses a subclass of discord.py's ``CommandTree`` object in order to allow Cog Creators to add application commands to their cogs without worrying about the command count limit and to support caching ``AppCommand`` objects. When an app command is added to the bot's tree, it will not show up in ``tree.get_commands`` or other similar methods unless the command is "enabled" with ``[p]slash enable`` (similar to "load"ing a cog) and ``tree.red_check_enabled`` has been run since the command was added to the tree.
.. note::
If you are adding app commands to the tree during load time, the loading process will call ``tree.red_check_enabled`` for your cog and its app commands. If you are adding app commands to the bot **outside of load time**, a call to ``tree.red_check_enabled`` after adding the commands is required to ensure the commands will appear properly.
If application commands from your cog show up in ``[p]slash list`` as enabled from an ``(unknown)`` cog and disabled from your cog at the same time, you did not follow the instructions above. You must manually call ``tree.red_check_enabled`` **after** adding the commands to the tree.
.. automodule:: redbot.core.tree
RedTree
^^^^^^^
.. autoclass:: RedTree
:members:

View File

@@ -8,7 +8,7 @@ General Utility
===============
.. automodule:: redbot.core.utils
:members: deduplicate_iterables, bounded_gather, bounded_gather_iter, get_end_user_data_statement, get_end_user_data_statement_or_raise
:members: deduplicate_iterables, bounded_gather, bounded_gather_iter, get_end_user_data_statement, get_end_user_data_statement_or_raise, can_user_send_messages_in, can_user_manage_channel, can_user_react_in
.. autoclass:: AsyncIter
:members:
@@ -27,6 +27,10 @@ Chat Formatting
.. automodule:: redbot.core.utils.chat_formatting
:members:
:exclude-members: pagify
.. autofunction:: pagify(text, delims=('\n',), *, priority=False, escape_mass_mentions=True, shorten_by=8, page_length=2000)
:for:
Embed Helpers
=============
@@ -35,8 +39,8 @@ Embed Helpers
:members:
:exclude-members: randomize_color
Reaction Menus
==============
Menus
=====
.. automodule:: redbot.core.utils.menus
:members:
@@ -67,9 +71,81 @@ Tunnel
.. automodule:: redbot.core.utils.tunnel
:members: Tunnel
:exclude-members: files_from_attatch
Common Filters
==============
.. automodule:: redbot.core.utils.common_filters
:members:
Utility UI
==========
.. automodule:: redbot.core.utils.views
:members:
:exclude-members: ConfirmView
.. autoclass:: ConfirmView
:members:
:exclude-members: confirm_button, dismiss_button
.. autoattribute:: confirm_button
:no-value:
A `discord.ui.Button` to confirm the message.
The button's callback will set `result` to ``True``, defer the response,
and call `on_timeout()` to clean up the view.
.. rubric:: Example
Changing the style and label of this `discord.ui.Button`::
view = ConfirmView(ctx.author)
view.confirm_button.style = discord.ButtonStyle.red
view.confirm_button.label = "Delete"
view.dismiss_button.label = "Cancel"
view.message = await ctx.send(
"Are you sure you want to remove #very-important-channel?", view=view
)
await view.wait()
if view.result:
await ctx.send("Channel #very-important-channel deleted.")
else:
await ctx.send("Canceled.")
:type: discord.ui.Button
.. autoattribute:: dismiss_button
:no-value:
A `discord.ui.Button` to dismiss the message.
The button's callback will set `result` to ``False``, defer the response,
and call `on_timeout()` to clean up the view.
.. rubric:: Example
Changing the style and label of this `discord.ui.Button`::
view = ConfirmView(ctx.author)
view.confirm_button.style = discord.ButtonStyle.red
view.confirm_button.label = "Delete"
view.dismiss_button.label = "Cancel"
view.message = await ctx.send(
"Are you sure you want to remove #very-important-channel?", view=view
)
await view.wait()
if view.result:
await ctx.send("Channel #very-important-channel deleted.")
else:
await ctx.send("Canceled.")
:type: discord.ui.Button
AntiSpam
========
.. automodule:: redbot.core.utils.antispam
:members:

View File

@@ -134,7 +134,7 @@ Red is built with cogs, a fancy term for plugins. They are
modules that add functionality to Red. They contain
commands to use.
Red comes with 19 cogs containing the basic features, such
Red comes with 18 cogs containing the basic features, such
as moderation, utility, music, streams...
You can see your loaded and unloaded cogs with the ``[p]cogs``
@@ -225,7 +225,7 @@ Administrator
~~~~~~~~~~~~~
The administrator is defined by its roles. You can set multiple admin roles
with the ``[p]set addadminrole`` and ``[p]set removeadminrole`` commands.
with the ``[p]set roles addadminrole`` and ``[p]set roles removeadminrole`` commands.
For example, in the mod cog, an admin can use the ``[p]modset`` command
which defines the cog settings.
@@ -235,7 +235,7 @@ Moderator
~~~~~~~~~
A moderator is a step above the average users. You can set multiple moderator
roles with the ``[p]set addmodrole`` and ``[p]set removemodrole`` commands.
roles with the ``[p]set roles addmodrole`` and ``[p]set roles removemodrole`` commands.
For example, in the filter cog, a mod will be able to use the various commands
under ``[p]filter`` (such as adding and removing filtered words), but they will

View File

@@ -102,8 +102,8 @@ Open :code:`__init__.py`. In that file, place the following:
from .mycog import MyCog
def setup(bot):
bot.add_cog(MyCog(bot))
async def setup(bot):
await bot.add_cog(MyCog(bot))
Make sure that both files are saved.

View File

@@ -73,7 +73,7 @@ Any Cog Creator that does not follow these requirements will have their repo rem
- Cogs that are more than what is able to be run in a simple eval.
- Cogs that are more than just a simple API access request.
- Cogs that properly use Red utilities, including Config, checks, and any other utility functions.
- Cogs that properly use Red utilities, for example Config, or any other utility functions.
- Cogs that use event listeners (bot.wait_for or cog-wide listeners) or custom tasks that are efficient and handle exceptions appropriately.
- Cogs that handle errors properly.
- Cogs that handle permissions properly.
@@ -84,7 +84,7 @@ Any Cog Creator that does not follow these requirements will have their repo rem
- The default locale must be English.
- The main cog class and every command must have a doc-string.
- No cog allows for escalation of permissions. (e.g., sending a mass ping through the bot without having permission to do so)
- Respect the role hierarchy. Dont let a lower role have a way to grant a higher role.
- Respect the role hierarchy. Don't let a lower role have a way to grant a higher role.
- If your cog install comes with any pre-packaged data, use `bundled_data_path()` to access it.
- If your cog install creates any non-config data, use `cog_data_path()` to store it.
- Unless the cog is intentionally designed to listen to certain input from bots, cogs should ignore input from bots.
@@ -94,8 +94,6 @@ Any Cog Creator that does not follow these requirements will have their repo rem
- If that's not possible, don't break anything in core or any other cog with your code.
- If you have to use private methods, lock the cog to specific Red versions you can guarantee it works on without breaking anything using the ``min_bot_version`` and ``max_bot_version`` keys in that cog's ``info.json`` file.
- Cog Creators must keep their cogs up-to-date with core Red or be delisted until cogs meet Red API changes. Repositories must be kept up to date with the latest version of Red within 3 months of its release.
.. _recommendations-for-cog-creators:
--------------------------------
@@ -138,14 +136,15 @@ While not required for approved Cog Creators, they are still recommended in orde
- ``ctx.embed_color``
- ``bot.is_automod_immune``
- Use checks to limit command use when the bot needs special permissions.
- Use decorators to limit command use, restrict usage, or define whether the bot needs special permissions.
You can find all of the permission and cooldown related decorators under the ``redbot.core.commands`` namespace.
- Check against user input before doing things. Common things to check:
- Resulting output is safe.
- Values provided make sense. (eg. no negative numbers for payday)
- Don't unsafely use user input for things like database input.
- Check events against `bot.cog_disabled_in_guild() <RedBase.cog_disabled_in_guild()>`\
- Check events against `bot.cog_disabled_in_guild() <Red.cog_disabled_in_guild()>`\
- Not all events need to be checked, only those that interact with a guild.
- Some discretion may apply, for example,
@@ -195,7 +194,12 @@ Other Details
- The reviewer of your application has the final word.
- Hidden cogs will not be explicitly reviewed, however they are not allowed to contain malicious or ToS breaking code.
- QA reserves the right to revoke these roles and all privileges if you are found to be in gross negligence, malicious intent, or reckless abandonment of your repository.
- If a Cog Creator's repository is not maintained and kept up to date, that repo will be removed from the approved repo listings until such issues are addressed.
- Cogs must be functionally working to the quality of an approved cog on the latest minor version of Red to be listed on the Red Index. Cogs that are not updated within 1 month of initial breakage will be delisted from the index until they are updated. Examples of potential breakage include, but are not limited to:
- A dependency without version constraints receiving a breaking update
- An API changing the schema of its endpoints
- Red itself releasing a new minor version
- Only 1 person is allowed to be the Cog Creator for a particular repo. Multiple people are allowed to maintain the repo, however the "main" owner (and the Cog Creator) is responsible for any code on the repo.
- The Cog Creator status for a repo can be transferred to another user if the Cog Creator requests it.
- An approved Cog Creator can ask QA to add additional repos they have created to the approved pool.

View File

@@ -7,7 +7,7 @@
Migrating cogs from Red V2
==========================
First, be sure to read :dpy_docs:`discord.py's migration guide <migrating.html>`
First, be sure to read :dpy_docs:`discord.py's migration guide <migrating_to_v1.html>`
as that covers all of the changes to discord.py that will affect the migration process
----------------

View File

@@ -0,0 +1,334 @@
.. Slash Commands and Interactions
.. role:: python(code)
:language: python
===============================
Slash Commands and Interactions
===============================
This guide is going to cover on how to write a simple slash command into a Red cog.
This guide will assume that you have a working basic cog.
If you do not have a basic cog, please refer to the :ref:`getting started <getting-started>` guide.
It is also adviced to make yourself familiar with `Application Commands <https://discord.com/developers/docs/interactions/application-commands>`__ from Discord's documentation.
---------------
Getting Started
---------------
To start off, we will have to import some additional modules to our cog file.
We will be using the ``redbot.core.app_commands`` module to create our slash commands.
Once we have imported the module, we can start creating our slash commands in our cog class.
For this example we will use a basic hello world command.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
async def hello(self, interaction: discord.Interaction):
await interaction.response.send_message("Hello World!", ephemeral=True)
Go ahead and load your cog. Once it is loaded, we will have to enable and sync our slash commands.
We can do this by using the :ref:`[p]slash<core-command-slash>` command to manage our slash commands.
Once you have registered your slash commands, you can test them out by typing ``/hello`` in your server.
----------------------------
Slash Commands and Arguments
----------------------------
There is a lot of flexibility when it comes to slash commands.
Below we will go over some of the different stuff you can do with slash commands.
Decorators
----------
Just like with text commands, we can use decorators to modify the behaviour of our slash commands.
For example, we can use the `app_commands.guild_only() <discord.app_commands.guild_only>` decorator to make our slash command only work in guilds.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.guild_only()
async def hello(self, interaction: discord.Interaction):
await interaction.response.send_message("Hello World!", ephemeral=True)
One of the more useful decorators is the `app_commands.choices() <discord.app_commands.choices>` decorator.
This decorator allows us to specify a list of choices for a specific argument.
This is useful for arguments that have a limited number of options.
For example, we can use this to create a command that allows us to choose between two different colors.
.. code-block:: python
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.describe(color="The color you want to choose")
@app_commands.choices(color=[
app_commands.Choice(name="Red", value="red"),
app_commands.Choice(name="Blue", value="blue"),
])
async def color(self, interaction: discord.Interaction, color: app_commands.Choice[str]):
await interaction.response.send_message(f"Your color is {color.value}", ephemeral=True)
The user will be shown the ``name`` of the choice, and the argument will be passed a
`app_commands.Choice <discord.app_commands.Choice>` object with the ``name`` and ``value`` associated with that choice.
This allows user-facing names to be prettier than what is actually processed by the command.
Alternatively, ``Literal`` can be used if the argument does not need a different
user-facing label. When done this way, the resulting parameter will be one of
the literal values listed.
.. code-block:: python
from redbot.core import commands, app_commands
from typing import Literal
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.describe(color="The color you want to choose")
async def color(self, interaction: discord.Interaction, color: Literal["Red", "Blue"]):
await interaction.response.send_message(f"Your color is {color}", ephemeral=True)
Finally, an `enum.Enum` subclass can be used to specify choices. When done this way, the
resulting parameter will be an instance of that enum, rather than `app_commands.Choice <discord.app_commands.Choice>`.
.. code-block:: python
from enum import Enum
from redbot.core import commands, app_commands
class Color(Enum):
Red = "red"
Blue = "blue"
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.describe(color="The color you want to choose")
async def color(self, interaction: discord.Interaction, color: Color):
await interaction.response.send_message(f"Your color is {color.value}", ephemeral=True)
Check out :dpy_docs:`the full reference of decorators at Discord.py's documentation <interactions/api.html#decorators>`.
Groups & Subcommands
--------------------
Slash commands can also be grouped together into groups and subcommands.
These can be used to create a more complex command structure.
.. note::
Unlike text command groups, top level slash command groups **cannot** be invoked.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
zoo = app_commands.Group(name="zoo", description="Zoo related commands")
@zoo.command(name="add", description="Add an animal to the zoo")
@app_commands.describe(animal="The animal you want to add")
async def zoo_add(self, interaction: discord.Interaction, animal: str):
await interaction.response.send_message(f"Added {animal} to the zoo", ephemeral=True)
@zoo.command(name="remove", description="Remove an animal from the zoo")
@app_commands.describe(animal="The animal you want to remove")
async def zoo_remove(self, interaction: discord.Interaction, animal: str):
await interaction.response.send_message(f"Removed {animal} from the zoo", ephemeral=True)
Arguments
---------
As shown in some of the above examples, we can amplify our slash commands with arguments.
However with slash commands Discord allows us to do a few more things.
Such as specifically select a channel that we'd like to use in our commands,
we can do the same with roles and members.
Let's take a look at how we can do that.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.describe(channel="The channel you want to mention")
async def mentionchannel(self, interaction: discord.Interaction, channel: discord.abc.GuildChannel):
await interaction.response.send_message(f"That channel is {channel.mention}", ephemeral=True)
@app_commands.command()
@app_commands.describe(role="The role you want to mention")
async def mentionrole(self, interaction: discord.Interaction, role: discord.Role):
await interaction.response.send_message(f"That role is {role.mention}", ephemeral=True)
@app_commands.command()
@app_commands.describe(member="The member you want to mention")
async def mentionmember(self, interaction: discord.Interaction, member: discord.Member):
await interaction.response.send_message(f"That member is {member.mention}", ephemeral=True)
If you try out the mentionchannel command, you will see that it currently accepts any type of channel,
however let's say we want to limit this to voice channels only.
We can do so by adjusting our type hint to :class:`discord.VoiceChannel` instead of :class:`discord.abc.GuildChannel`.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.describe(channel="The channel you want to mention")
async def mentionchannel(self, interaction: discord.Interaction, channel: discord.VoiceChannel):
await interaction.response.send_message(f"That channel is {channel.mention}", ephemeral=True)
With integer and float arguments, we can also specify a minimum and maximum value.
This can also be done to strings to set a minimum and maximum length.
These limits will be reflected within Discord when the user is filling out the command.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command()
@app_commands.describe(number="The number you want to say, max 10")
async def saynumber(self, interaction: discord.Interaction, number: app_commands.Range[int, None, 10]):
await interaction.response.send_message(f"Your number is {number}", ephemeral=True)
See the `Discord.py documentation <https://discordpy.readthedocs.io/en/stable/interactions/api.html#range>`__ for more information on this.
---------------
Hybrid Commands
---------------
Hybrid commands are a way to bridge the gap between text commands and slash commands.
These types of commands allow you to write a text and slash command simultaneously using the same function.
This is useful for commands that you want to be able to use in both text and slash commands.
.. note::
As with slash command groups, top level hybrid command groups **cannot** be invoked as a slash command. They can however be invoked as a text command.
.. code-block:: python
from redbot.core import commands
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.hybrid_command(name="cat")
async def cat(self, ctx: commands.Context):
await ctx.send("Meow")
@commands.hybrid_group(name="dog")
async def dog(self, ctx: commands.Context):
await ctx.send("Woof")
# As discussed above, top level hybrid command groups cannot be invoked as a slash command.
# Thus, this will not work as a slash command.
@dog.command(name="bark")
async def bark(self, ctx: commands.Context):
await ctx.send("Bark", ephemeral=True)
After syncing your cog via the :ref:`[p]slash<core-command-slash>` command, you'll be able to use the commands as both a slash and text command.
---------------------
Context Menu Commands
---------------------
Context menu commands are a way to provide a interaction via the context menu.
These are seen under ``Apps`` in the Discord client when you right click on a message or user.
Context menu commands are a great way to provide a quick way to interact with your bot.
These commands accept one arguement, the contextual ``user`` or ``message`` that was right clicked.
Setting up context commands is a bit more involved then setting up slash commands.
First lets setup our context commands in our cog.
.. code-block:: python
import discord
from redbot.core import commands, app_commands
# Important: we're building the commands outside of our cog class.
@app_commands.context_menu(name="Get message ID")
async def get_message_id(interaction: discord.Interaction, message: discord.Message):
await interaction.response.send_message(f"Message ID: {message.id}", ephemeral=True)
@app_commands.context_menu(name="Get user ID")
async def get_user_id(interaction: discord.Interaction, user: discord.User):
await interaction.response.send_message(f"User ID: {user.id}", ephemeral=True)
Once we've prepared our main cog file, we have to add a small bit of code to our ``__init__.py`` file.
.. code-block:: python
from .my_cog import get_message_id, get_user_id
async def setup(bot):
bot.tree.add_command(get_message_id)
bot.tree.add_command(get_user_id)
async def teardown(bot):
# We're removing the commands here to ensure they get unloaded properly when the cog is unloaded.
bot.tree.remove_command("Get message ID", type=discord.AppCommandType.message)
bot.tree.remove_command("Get user ID", type=discord.AppCommandType.user)
Now we're ready to sync our commands to Discord.
We can do this by using the :ref:`[p]slash<core-command-slash>` command.
Take note of the specific arguments you have to use to sync a context command.
---------------------------------
Closing Words and Further Reading
---------------------------------
If you're reading this, it means that you've made it to the end of this guide.
Congratulations! You are now prepared with the basics of slash commands for Red.
However there is a lot we didn't touch on in this guide.
Below this paragraph you'll find a list of resources that you can use to learn more about slash commands.
As always, if you have any questions, feel free to ask in the `Red support server <https://discord.gg/red>`__.
For more information on `Application Commands <https://discord.com/developers/docs/interactions/application-commands>`__ as a whole, please refer to the official Discord documentation.
Discord.py also offers documentation regarding everything discussed on this page.
You can find the documentation `here <https://discordpy.readthedocs.io/en/stable/interactions/api.html>`__.
And lastly, AbstractUmbra has a great write up of `examples <https://gist.github.com/AbstractUmbra/a9c188797ae194e592efe05fa129c57f>`__.

View File

@@ -0,0 +1,810 @@
.. _incompatible-changes-3.5:
========================================
Backward incompatible changes in Red 3.5
========================================
.. include:: _includes/preamble.rst
.. contents::
:depth: 4
:local:
For Users
*********
Removals
~~~~~~~~
redbot-launcher
^^^^^^^^^^^^^^^
.. deprecated:: 3.2.0
The vast majority of functionality provided by ``redbot-launcher`` can already be
achieved through other means.
In Red 3.2.0, ``redbot-launcher`` has been stripped most of its functionality
as it can already be done through other (better supported) means:
- Updating Red (a proper way to update Red is now documented in `../update_red`)
- Creating instances (as documented in install guides, it should be done through ``redbot-setup``)
- Removing instances (available under ``redbot-setup delete``)
- Removing all instances (no direct alternative, can be done through ``redbot-setup delete``)
- Debug information (available under ``redbot --debuginfo`` and ``[p]debuginfo`` bot command)
Currently, ``redbot-launcher`` only provides auto-restart functionality
which we now document how to do properly on each of the supported systems.
If you wish to continue using auto-restart functionality, we recommend following the instructions for setting up a service dedicated to your operating system:
- `../autostart_windows`
- `../autostart_mac`
- `../autostart_systemd`
Behavior changes
~~~~~~~~~~~~~~~~
x86-64 CPUs are now only supported if they support x86-64-v2 instruction set
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On x86-64 systems, we now require that your CPU supports x86-64-v2 instruction set.
This roughly translates to us dropping support for Intel CPUs that have been released before 2009
and AMD CPUs that have been releasesd before 2012.
This has been mostly dictated by one of our dependencies but some Linux distributions
are already dropping support for it in their latest versions as well.
Thread-related changes
^^^^^^^^^^^^^^^^^^^^^^
While many of these aren't breaking, we thought it is important to make it clear
how Red approaches its features in regard to threads:
- Red's command permission system doesn't have dedicated rules for threads and instead uses
that thread's parent channel rules
- Channel embed settings (``[p]embedset``) cannot be set for threads and usage of embeds is based
on that thread's parent channel embed settings
- This also means that a forum channel can have its own embed settings
- Using channel mute/unmute commands (e.g. ``[p]mutechannel`` from Mutes cog) in a thread
will mute that user in the thread's parent channel
- Filter cog doesn't have a dedicated word list for threads and uses server's and parent channel's word lists
- This also means that a word list can now also be added for a forum channel
- CustomCom's ``{channel}`` substitution parameter will now be a thread when the command is used in a thread
- CustomCom's channel cooldowns are applied per thread
- When used in a thread, ``[p]slowmode`` command from Mod cog will apply the slowmode to that thread
- The logic for the ``[p]ignore``-related checks has changed for threads:
- ``[p]ignore channel`` accepts ignoring command in a specific thread
- When the command is sent in a thread, it first checks server-wide ignore settings and then runs if:
- the user has Manage Channel permission in the parent channel, or
- the parent channel is not ignored *and* the user has Manage Threads permission in the parent channel, or
- the thread channel and its parent aren't ignored
- This also means that a forum channel can now also be ignored
- The Mutes cog now denies Send Messages in Threads, Create Public Threads,
and Create Private Threads permissions
Commands for changing Bank and Modlog settings are now core commands
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These commands allow users to change settings of core APIs that are always available
(similarly to ``[p]autoimmune``, ``[p]allowlist``, or ``[p]blocklist``)
so it makes sense to allow using them without having to load anything.
The following commands have been moved to Core:
- ``[p]modlogset``
- ``[p]bankset``
- ``[p]economyset registeramount`` (now named ``[p]bankset registeramount``)
- ``[p]bank reset`` (now named ``[p]bankset reset``)
- ``[p]bank prune`` (now named ``[p]bankset prune``)
This has also resulted in the removal of the ``bank`` cog
as it no longer contained any commands.
If you have any custom settings for this cog or these commands,
you may need to readd them with the new command names.
Commands in the ``[p]set`` group have been reorganized
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The list of commands in the ``[p]set`` group has gotten quite long over the years
so we decided to reorganize it.
The following changes have been made:
- Commands related to metadata about the bot have been moved to the ``[p]set bot`` subgroup:
- ``[p]set avatar`` is now ``[p]set bot avatar``
- ``[p]set custominfo`` is now ``[p]set bot custominfo``
- ``[p]set description`` is now ``[p]set bot description``
- ``[p]set nickname`` is now ``[p]set bot nickname``
- ``[p]set username`` is now ``[p]set bot username``
- Commands related to server's admin and mod roles have been moved to the ``[p]set roles`` subgroup:
- ``[p]set addadminrole`` is now ``[p]set roles addadminrole``
- ``[p]set removeadminrole`` is now ``[p]set roles removeadminrole``
- ``[p]set addmodrole`` is now ``[p]set roles addmodrole``
- ``[p]set removemodrole`` is now ``[p]set roles removemodrole``
- Commands related to bot user's activity and status have been moved to the ``[p]set status`` subgroup:
- ``[p]set status`` has been split into ``[p]set status online/idle/dnd/invisible`` subcommands
- ``[p]set competing`` is now ``[p]set status competing``
- ``[p]set listening`` is now ``[p]set status listening``
- ``[p]set playing`` is now ``[p]set status playing``
- ``[p]set streaming`` is now ``[p]set status streaming``
- ``[p]set watching`` is now ``[p]set status watching``
- ``[p]set globallocale`` has been renamed to ``[p]set locale global``
- ``[p]set locale`` is now also available under ``[p]set locale server``
- ``[p]set globalregionalformat`` has been renamed to ``[p]set regionalformat global``
- ``[p]set regionalformat`` is now also available under ``[p]set regionalformat server``
If you have any custom settings for these commands,
you may need to readd them with the new command names.
Red requires to have at least one owner
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
There was never a reason to allow users to run the bot without having an owner set
and it had been a point of confusion for new users that are trying to set up Red
using a team application which, by default, doesn't have any owners set.
If your instance does not have any owner set, Red will print an error message on startup
and exit before connecting to Discord. This error message contains all
the needed information on how to set a bot owner and the security implications of it.
If, for some reason, you intentionally are running Red without any owner set,
please make a feature request with your use case on
`our issue tracker <https://github.com/Cog-Creators/Red-DiscordBot/issues/new/choose>`__.
For Developers
**************
Removals
~~~~~~~~
``Config.driver`` and ``redbot.core.drivers`` package
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These are Red's internal implementation details and as such they have been privatized.
``redbot.core.data_manager.load_bundled_data()`` function
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 3.0.0rc3
This function has been deprecated basically forever and we have somehow never removed it.
Use the `redbot.core.data_manager.bundled_data_path()` function directly instead.
``is_mod_or_superior()``, ``is_admin_or_superior()``, and ``check_permissions()`` functions in ``redbot.core.checks``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 3.0.0rc1
These functions have been deprecated basically forever and we have somehow never removed them.
Use the `redbot.core.utils.mod.is_mod_or_superior()`, `redbot.core.utils.mod.is_admin_or_superior()`,
and `redbot.core.utils.mod.check_permissions()` functions instead.
``bordered()`` function
^^^^^^^^^^^^^^^^^^^^^^^
This function was primarily used in Red's command-line code and had very limited use
for 3rd-party cogs. Since we no longer use this function, it has been removed.
``commands.DM_PERMS`` constant
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This was mostly used by the internal implementation and it isn't anymore now. Since this constant
was a maintenance burden and hasn't really seen any usage in 3rd-party code, we decided to just
remove it.
``redbot.core.utils.caching`` and ``redbot.core.utils.safety`` modules
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These modules contain utilities that were only really useful in Red's own code.
We no longer use them for anything and have not seen any 3rd-party usage
and as such we have removed these modules.
``guild_id`` parameter to ``Red.allowed_by_whitelist_blacklist()``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 3.4.8
``guild_id`` parameter to `Red.allowed_by_whitelist_blacklist()` has been removed as
it is not possible to properly handle the local allowlist/blocklist logic with just
the guild ID. Part of the local allowlist/blocklist handling is to check
whether the provided user is a guild owner.
Use the ``guild`` parameter instead.
Example:
.. code:: python
if await bot.allowed_by_whitelist(who_id=user_id, guild_id=guild.id, role_ids=role_ids):
...
Becomes:
.. code:: python
if await bot.allowed_by_whitelist(who_id=user_id, guild=guild, role_ids=role_ids):
...
``redbot.core.commands.converter.GuildConverter``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 3.4.8
This is now included in the upstream discord.py library.
Use `discord.Guild`/``redbot.core.commands.GuildConverter`` instead.
Example:
.. code:: python
from redbot.core import commands
from redbot.core.commands.converter import GuildConverter
class MyCog(commands.Cog):
@commands.command()
async def command(self, ctx, server: GuildConverter):
await ctx.send(f"You chose {server.name}!")
Becomes:
.. code:: python
import discord
from redbot.core import commands
class MyCog(commands.Cog):
@commands.command()
async def command(self, ctx, server: discord.Guild):
await ctx.send(f"You chose {server.name}!")
``redbot.core.utils.mod.is_allowed_by_hierarchy()``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 3.4.1
This was an internal function that was never meant to be part of the public API.
It was also not really possible to use it in a supported way as it required
internal objects to be passed as parameters.
If you have a use case for this function, you should be able to achieve the same result
with this code:
.. code:: python
async def is_allowed_by_hierarchy(guild, moderator, member):
is_special = moderator == guild.owner or await self.bot.is_owner(moderator)
return moderator.top_role > member.top_role or is_special
Behavior changes
~~~~~~~~~~~~~~~~
Update to version guarantees and privatization of many APIs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With this release, we're limiting what changes we will consider breaking.
`The new Developer Guarantees <developer-guarantees>` describe this in detail
but the gist of it is that we will now only consider names included in ``__all__``
of ``redbot`` and ``redbot.core`` modules and ``__all__`` of public submodules
of ``redbot.core`` to be part of the public API that shouldn't be broken without notice.
With this change, we introduced or updated ``__all__`` in all of those modules
and added ``_`` prefix to private modules to specify what is actually part of the public API.
This has resulted in the following being removed/privatized:
- ``create_temp_config()``, ``load_basic_configuration()``, and ``core_data_path()`` in the ``redbot.core.data_manager`` module
- ``set_locale()`` and ``reload_locales()`` in the ``redbot.core.i18n`` module
- ``MIN_PYTHON_VERSION`` in the ``redbot`` module
- ``redbot.core.cog_manager``, ``redbot.core.settings_caches``, ``redbot.core.global_checks``, ``redbot.core.events``, ``redbot.core.cli``, and ``redbot.core.rpc`` modules
``redbot.core.data_manager.storage_details()`` returns a deep copy of underlying dict now
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changing storage details during Red's runtime is not supported and as such,
this function now returns a deep copy of the underlying dictionary to prevent changes.
Changed the version order of final dev releases and dev pre-releases
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To be consistent with :pep:`440`, we've changed the order between final dev releases (e.g.
``3.5.0.dev1``) and dev pre-releases (e.g. ``3.5.0a1.dev1``, ``3.5.0b1.dev1``, ``3.5.0rc1.dev1``).
Here's an example of a list of versions sorted using the new order (oldest version first):
- 3.5.0.dev1
- 3.5.0.dev2
- 3.5.0a1.dev1
- 3.5.0a1
- 3.5.0a2.dev1
- 3.5.0b1.dev1
- 3.5.0
- 3.5.0.post1.dev1
- 3.5.0.post1
- 3.5.1
``Red.get_owner_notification_destinations()`` may now return instances of ``discord.Voice/StageChannel``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With the introduction of Text in Voice feature, we added the ability to add a voice/stage channel
as an owner notifications destination. This means that `redbot.core.modlog.get_modlog_channel()`
may now return instances of `discord.VoiceChannel` and `discord.StageChannel`.
``modlog.get_modlog_channel()`` may now return instances of ``discord.Voice/StageChannel``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With the introduction of Text in Voice feature, we added the ability to set a modlog
channel to a voice/stage channel. This means that `redbot.core.modlog.get_modlog_channel()`
may now return instances of `discord.VoiceChannel` and `discord.StageChannel`.
``menus.DEFAULT_CONTROLS`` and ``ReactionPredicate.*_EMOJIS`` use immutable types now
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The type of `redbot.core.utils.menus.DEFAULT_CONTROLS` has been changed from `dict`
to a `collections.abc.Mapping` while the type of `ReactionPredicate.ALPHABET_EMOJIS`
and `ReactionPredicate.NUMBER_EMOJIS` has been changed from `list` to a `tuple`.
This should prevent the developers from accidentally changing the provided constants
instead of making a copy and changing that copy.
This should be a transparent change in most cases but here is an example usage that is affected:
.. code:: python
import copy
from redbot.core.utils import menus
# somewhere in your code...
controls = copy.copy(menus.DEFAULT_CONTROLS)
controls["\N{SMILING FACE WITH OPEN MOUTH}"] = custom_function
await menu(ctx, ["page 1", "page 2"], controls)
To make this code work on Red 3.5 and higher, you can replace it with any of the following:
.. code:: python
from redbot.core.utils import menus
# example 1
controls = {
**menus.DEFAULT_CONTROLS,
"\N{SMILING FACE WITH OPEN MOUTH}": custom_function,
}
await menu(ctx, ["page 1", "page 2"], controls)
# example 2
controls = menus.DEFAULT_CONTROLS.copy()
controls["\N{SMILING FACE WITH OPEN MOUTH}"] = custom_function
await menu(ctx, ["page 1", "page 2"], controls)
# example 3
controls = dict(menus.DEFAULT_CONTROLS)
controls["\N{SMILING FACE WITH OPEN MOUTH}"] = custom_function
await menu(ctx, ["page 1", "page 2"], controls)
Similarly, if you copied lists before:
.. code:: python
emojis = ReactionPredicate.NUMBER_EMOJIS.copy()
emojis.insert(0, "\N{DOG}")
emojis.append("\N{CAT}")
You could use sequence unpacking instead:
.. code:: python
emojis = ["\N{DOG}", *ReactionPredicate.NUMBER_EMOJIS, "\N{CAT}"]
Permissions defined in ``@commands.*_permissions()`` decorators are always merged now
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This is mostly a bugfix but it means that the permissions in stacked decorators are now
always merged instead of being *sometimes* overridden and *sometimes* merged.
For example, this code has only checked for ``embed_links`` permission on 3.4
but now checks for both ``add_reactions`` and ``embed_links`` permissions:
.. code:: python
from redbot.core import commands
class MyCog(commands.Cog):
@commands.command()
@commands.bot_has_permissions(embed_links=True)
@commands.bot_has_permissions(add_reactions=True)
async def example(self, ctx):
msg = await ctx.send(embed=discord.Embed(description="Hello!"))
await msg.add_reaction("\N{SMILING FACE WITH OPEN MOUTH}")
Note that stacking `@commands.has_permissions() <redbot.core.commands.has_permissions()>`
with ``@commands.*_or_permissions()`` decorators still behaves differently depending on
the decorator order.
Some of the primary dependencies have been removed or replaced
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
While this may not technically fall under `our version guarantees <../version_guarantees>`,
we recognize that this may affect some people.
As such, below we list the noteworthy dependency replacements and removals (package names
are PyPI distribution names):
- ``appdirs`` package has been replaced with ``platformdirs``
- ``chardet`` package has been replaced with ``charset-normalizer``
- ``fuzzywuzzy`` package has been replaced with ``rapidfuzz``
- Red no longers depends on ``aiosqlite``, ``PyNaCl``, and ``python-Levenshtein-wheels``
discord.py version has been updated to 2.2.3
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To allow Red to continue operating *and* use the newer features (threads, text in voice/stage channels,
buttons, application commands, and AutoMod, to name a few), we've updated discord.py from version
1.7.3 to 2.2.3. Since this is a major upgrade, it will require you to update your code accordingly.
discord.py's documentation has :dpy_docs:`a migration guide <migrating.html>` that you can follow in order to
update your cogs.
Red itself has already been updated to support all of these changes that happened over the years.
In order to do so, we've also had to make a few breaking changes of our own. Those changes are
normal sections in the current document so be sure to follow it in full and you should be able to
perform all the necessary changes.
To help support some of the newer features, we've also added a few things:
- Utilities that allow to **properly** check whether a member can do something in threads (or channels)
for cases where it isn't as simple as checking permissions:
- Command check decorators: `bot_can_manage_channel()`, `bot_can_react()`
- Permission check decorators: `can_manage_channel()`, `guildowner_or_can_manage_channel()`,
`admin_or_can_manage_channel()`, `mod_or_can_manage_channel()`
- Functions: `can_user_send_messages_in()`, `can_user_manage_channel()`, `can_user_react_in()`
- New module (`redbot.core.utils.views`) with useful `discord.ui.View` subclasses
- `SetApiModal`, `SetApiView`, `SimpleMenu`
``Case.channel`` can now be a ``discord.Thread``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In order to properly support threads, `Case.channel` can now also be an instance of `discord.Thread`.
New `Case.parent_channel` attribute will be set to the thread's parent text or forum channel,
if the case's channel is a thread.
``commands.BadArgument`` is no longer wrapped in ``commands.ConversionFailure`` containing parameter and its value
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
We used to wrap `commands.BadArgument <discord.ext.commands.BadArgument>` exceptions
in a ``commands.ConversionFailure`` containing, in addition to the actual exception,
the `inspect.Parameter` instance and the passed value for the argument
that failed the conversion.
With discord.py 2.x, these are now exposed through the
`commands.Context.current_parameter <discord.ext.commands.Context.current_parameter>`
and `commands.Context.current_argument <discord.ext.commands.Context.current_argument>`
making this wrapping no longer necessary.
Some of the method arguments in the bot class and ``commands`` package have been made positional-only
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following arguments have been positional-only to be consistent with the upstream discord.py package:
- ``name`` in `Red.get_command()`
- ``name`` in `Red.get_cog()`
- ``coro`` in `Red.before_invoke()`
- ``user`` in `Red.is_owner()`
- ``message`` in ``Red.get_context()``
- ``message`` in `Red.process_commands()`
- ``cogname`` in `Red.remove_cog()`
- ``cog`` in `Red.add_cog()`
- ``command`` in `Red.add_command()`
- ``command`` in `Red.remove_command()`
- ``ctx`` in `redbot.core.commands.Command.can_run()`
- ``ctx`` in ``redbot.core.commands.CogMixin.can_run()``
- ``ctx`` in ``redbot.core.commands.CogMixin.can_see()``
- ``error`` in `redbot.core.commands.Command.error()`
``bot.add_cog()`` will now raise ``discord.ClientException`` instead of ``RuntimeError`` when cog is already loaded
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To make Red's bot class more consistent with the discord.py implementation that it overrides,
the `discord.ClientException` is now being raised instead of `RuntimeError` when a cog
with the same name is already loaded.
Many functions and methods do not support ``discord.PartialMessageable`` objects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This isn't technically breaking since they never did *but* since those objects may appear now,
we think it is important to mention that due to the limited information that `discord.PartialMessageable`
objects provide, they cannot be passed to the following methods directly:
- `Red.ignored_channel_or_guild()`
- `Red.embed_requested()`
- `redbot.core.modlog.create_case()`
- `redbot.core.modlog.Case.edit()`
Additionally, the `Red.message_eligible_as_command()` will return ``False``
if a `discord.PartialMessageable` object for a channel that isn't a DM is passed.
If you *have to* use these, you should try fetching the full messageable object first
or looking at the documentation to see whether there are any alternative solutions.
Cog package (extension) and cog loading / unloading is now asynchronous
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This follows the changes that discord.py 2.x has introduced - we now **require** for
the ``setup()`` and ``teardown()`` functions to be asynchronous and have made
the `Red.add_cog()` and `Red.remove_cog()` methods asynchronous as well.
``Red.embed_requested()``'s parameters and their default values have changed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
We have made a bunch of changes to the signature of `Red.embed_requested()`. This method now
accepts only a single **positional** argument called ``channel``, making the ``command``
keyword-only. The ``user`` argument has been removed as the ``channel`` argument now supports
the `discord.abc.User` objects directly, dropping the support for `discord.DMChannel`
in the process.
These changes together allowed us to support checking whether an embed should be sent in a DM
using only the `discord.abc.User` object - without the `discord.DMChannel` which is often
not present in the cache. Furthermore, it means that a `discord.abc.User` object no longer needs
to be passed unnecessarily when the method is used with a guild channel.
We've also changed the default value of ``check_permissions`` to ``True``
as it makes the typical usage of this method more ergonomic.
Example:
.. code:: python
import discord
from redbot.core import commands
class MyCog(commands.Cog):
@commands.guild_only()
@commands.command()
async def sayhello(self, ctx, recipient: discord.Member):
content = "Hello world!"
embed = discord.Embed(title="Message for you!", description=content)
try:
# try sending the message in DMs
if await ctx.bot.embed_requested(
await recipient.create_dm(), recipient, ctx.command, check_permissions=True
):
await recipient.send(embed=embed)
else:
await recipient.send(content)
except discord.Forbidden:
# DMs are closed, send a message in a moderator or current channel
channel = ctx.guild.public_updates_channel or ctx
if await ctx.bot.embed_requested(
channel, ctx.author, ctx.command, check_permissions=True
):
await channel.send(embed=embed)
else:
await channel.send(content)
After:
.. code:: python
import discord
from redbot.core import commands
class MyCog(commands.Cog):
@commands.guild_only()
@commands.command()
async def sayhello(self, ctx, recipient: discord.Member):
content = "Hello world!"
embed = discord.Embed(title="Message for you!", description=content)
try:
# try sending the message in DMs
if await ctx.bot.embed_requested(recipient, command=ctx.command):
await recipient.send(embed=embed)
else:
await recipient.send(content)
except discord.Forbidden:
# DMs are closed, send a message in a moderator or current channel
channel = ctx.guild.public_updates_channel or ctx
if await ctx.bot.embed_requested(channel, command=ctx.command):
await channel.send(embed=embed)
else:
await channel.send(content)
``modlog.create_case()`` now raises instead of silently returning on error
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To help avoid passing invalid arguments, `modlog.create_case()` now raises:
- `ValueError` when the ``action_type`` argument is not a valid action type
- `RuntimeError` when the ``user`` argument is passed with the bot's user object/ID
Proper usage of these methods is unlikely to be affected
and this should mostly just help detect bugs earlier.
.. _config-register-1:
``Config``'s register methods now only accept JSON-castable types
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. seealso:: `config-register-2`
This change has fixed the inconsistencies between what can be registered as a default value
and what can be set through `Value.set()`. It mostly resulted in confusion when it was not
possible to use the registered type in `Value.set()`.
If you need to use custom types, you'll have to manually construct them *after* getting the
"raw" value from `Config`.
.. _config-register-2:
``Config`` now always returns base JSON types, never subclasses
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. seealso:: `config-register-1`
It used to be possible to register an instance of a subclass of `dict` such as
`collections.Counter` and have the `redbot.core.config.Group` cast the returned value to that type
before returning it. With this change, `redbot.core.config.Group` will now always return an instance of
`dict` containing only base JSON types, without subclasses.
``Config.*_from_id/*_from_ids()`` methods now raise when ``int`` is not passed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To help avoid setting values under non-integer keys, we now raise an error
when the passed argument is not an ``int``.
We're not expecting any **proper** usage of these methods to be affected
and this should only help detect bugs earlier.
``Case.message`` can now be ``discord.PartialMessage``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This change allowed to us to make enormous performance improvements (subsecond durations
compared to many minutes) to `modlog.get_all_cases()` and commands that use it
such as the commonly used ``[p]casesfor`` command.
With this change, we no longer fetch the whole `discord.Message` object for case's message
and instead only construct a `discord.PartialMessage` object for it. This object is rarely if ever needed so it is unlikely to affect a lot of code. Additionally, this change doesn't apply to `modlog.create_case()` which will still return a `Case` object with `message <Case.message>` attribute set to an instance of `discord.Message` or ``None``.
If you have a reason to use a full message object, you can use :meth:`discord.PartialMessage.fetch()`
to fetch it.
Example:
.. code:: python
from redbot.core import commands
class MyCog(commands.Cog):
@commands.guild_only()
@commands.command()
async def command(self, ctx, case_number: int):
case = await modlog.get_case(case_number, ctx.guild, ctx.bot)
if case.message is None:
await ctx.send("No message is available for this case.")
return
await ctx.send(
"People reacted to this modlog case with: "
+ ", ".join(case.message.reactions)
)
After:
.. code:: python
import discord
from redbot.core import commands
class MyCog(commands.Cog):
@commands.guild_only()
@commands.command()
async def command(self, ctx, case_number: int):
case = await modlog.get_case(case_number, ctx.guild, ctx.bot)
if case.message is None:
await ctx.send("No message is available for this case.")
return
try:
msg = await case.message.fetch()
except discord.NotFound:
await ctx.send("No message is available for this case.")
else:
await ctx.send(
"People reacted to this modlog case with: "
+ ", ".join(msg.reactions)
)
``redbot.core.bot.RedBase`` has been merged into ``redbot.core.bot.Red``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Historically, ``RedBase`` existed to allow using Red for self/user bots back when
it was not against Discord's Terms of Service. Since this is no longer a concern,
everything from ``RedBase`` have been moved directly to `Red` and ``RedBase`` class
has been removed.
If you were using ``RedBase`` for runtime type checking or type annotations,
you should now use `Red` instead. Since both of these classes resided in the same
module, it should be a matter of simple find&replace.
``Context.maybe_send_embed()`` requires content with length of 1-2000 characters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
`Context.maybe_send_embed()` now requires the message's length to be
between 1 and 2000 characters.
Since the length limits for regular message content and embed's description are
different, it is easy to miss an issue with inappropriate handling of length limits
during development. This change should aid with early detection of such issue by
consistently rejecting messages with length that can't be used with
both embed and non-embed messages.
This change only affects code that is already not guaranteed to work.
You should make sure that your code properly handles message length limits.
``menu()`` listens to both reaction add and remove
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Listening only to reaction add results in bad user experience.
If the bot had Manage Messages permission, it removed the user's reaction
so that they don't have to click twice but this comes with a noticeable delay.
This issue is even more noticeable under load, when the bot ended up hitting
Discord-imposed rate limits.
If your calls to `menu()` are using the default controls (``redbot.core.utils.menus.DEFAULT_CONTROLS``),
you don't have to do anything.
Otherwise, you should ensure that your custom functions used for the menu controls
do not depend on this behavior in some way. In particular, you should make sure that
your functions do not automatically remove the author's reaction.
Here's an example code that needs to be updated:
.. code:: python
import contextlib
import discord
from redbot.core.utils.menus import close_menu, menu
CUSTOM_CONTROLS = {
"\N{CROSS MARK}": close_menu,
"\N{WAVING HAND SIGN}": custom_control,
}
async def custom_control(ctx, pages, controls, message, page, timeout, emoji):
perms = message.channel.permissions_for(ctx.me)
if perms.manage_messages: # Can manage messages, so remove react
with contextlib.suppress(discord.NotFound):
await message.remove_reaction(emoji, ctx.author)
await ctx.send("Hello world!")
return await menu(ctx, pages, controls, message=message, page=page, timeout=timeout)
async def show_menu(ctx):
await menu(ctx, ["Click :wave: to say hi!"], CUSTOM_CONTROLS)
To make this code work on Red 3.5 and higher, you need to update ``custom_control()`` function:
.. code:: python
async def custom_control(ctx, pages, controls, message, page, timeout, emoji):
await ctx.send("Hello world!")
return await menu(ctx, pages, controls, message=message, page=page, timeout=timeout)

View File

@@ -0,0 +1,3 @@
This page lists all functionalities that are currently deprecated, features that have been removed in past minor releases, and any other backward incompatible changes that are planned or have been removed in past minor releases. The objective is to give users a clear rationale why a certain change has been made, and what alternatives (if any) should be used instead.
These changes are sorted (in their respective sections) in a reverse chronological order.

View File

@@ -0,0 +1,31 @@
.. _deprecated-functionality:
===================================================
Future changes (currently deprecated functionality)
===================================================
.. include:: _includes/preamble.rst
.. contents::
:depth: 4
:local:
For Developers
**************
Removals
~~~~~~~~
Downloader's shared libraries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 3.2.0
Shared libraries have been deprecated in favor of pip-installable libraries.
Shared libraries do not provide any functionality that can't already be achieved
with pip requirements *and* as such don't provide much value in return for
the added complexity.
Known issues, especially those related to hot-reload, were not handled automatically
for shared libraries, same as they are not handled for the libraries installed
through pip.

View File

@@ -0,0 +1,12 @@
.. Backward incompatible changes list
Backward incompatible changes
=============================
.. include:: _includes/preamble.rst
.. toctree::
:maxdepth: 4
future
3.5

View File

@@ -36,7 +36,7 @@ Welcome to Red - Discord Bot's documentation!
intents
cog_guides/admin
cog_guides/alias
cog_guides/bank
cog_guides/audio
cog_guides/cleanup
cog_guides/cog_manager_ui
cog_guides/core
@@ -63,13 +63,13 @@ Welcome to Red - Discord Bot's documentation!
guide_migration
guide_cog_creation
guide_slash_and_interactions
guide_publish_cogs
guide_cog_creators
framework_apikeys
framework_bank
framework_bot
framework_checks
framework_cogmanager
framework_commands
framework_config
framework_datamanager
@@ -77,6 +77,7 @@ Welcome to Red - Discord Bot's documentation!
framework_i18n
framework_modlog
framework_rpc
framework_tree
framework_utils
version_guarantees
@@ -85,6 +86,7 @@ Welcome to Red - Discord Bot's documentation!
:caption: Others
changelog
incompatible_changes/index
host-list

View File

@@ -21,18 +21,3 @@ to keep it in a location which is easy to type out the path to. From now, we'll
``redenv`` and it will be located in your home directory.
Create your virtual environment with the following command:
.. prompt:: bash
python3.9 -m venv ~/redenv
And activate it with the following command:
.. prompt:: bash
source ~/redenv/bin/activate
.. important::
You must activate the virtual environment with the above command every time you open a new
shell to run, install or update Red.

View File

@@ -0,0 +1,10 @@
And activate it with the following command:
.. prompt:: bash
source ~/redenv/bin/activate
.. important::
You must activate the virtual environment with the above command every time you open a new
shell to run, install or update Red.

View File

@@ -0,0 +1,7 @@
.. include:: _includes/_create-env-with-venv-intro.rst
.. prompt:: bash
python3.10 -m venv ~/redenv
.. include:: _includes/_create-env-with-venv-outro.rst

View File

@@ -0,0 +1,7 @@
.. include:: _includes/_create-env-with-venv-intro.rst
.. prompt:: bash
python3.11 -m venv ~/redenv
.. include:: _includes/_create-env-with-venv-outro.rst

View File

@@ -0,0 +1,7 @@
.. include:: _includes/_create-env-with-venv-intro.rst
.. prompt:: bash
python3.9 -m venv ~/redenv
.. include:: _includes/_create-env-with-venv-outro.rst

View File

@@ -9,7 +9,7 @@ To install without additional config backend support:
.. prompt:: bash
:prompts: (redenv) $
python -m pip install -U pip setuptools wheel
python -m pip install -U pip wheel
python -m pip install -U Red-DiscordBot
Or, to install with PostgreSQL support:
@@ -17,7 +17,7 @@ Or, to install with PostgreSQL support:
.. prompt:: bash
:prompts: (redenv) $
python -m pip install -U pip setuptools wheel
python -m pip install -U pip wheel
python -m pip install -U "Red-DiscordBot[postgres]"

View File

@@ -1,26 +1,30 @@
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
Red Hat Enterprise Linux (RHEL) 8.4-8.x and its derivatives have all required packages available in official repositories.
Red Hat Enterprise Linux (RHEL) 8.6-8.x and its derivatives have all required packages available in official repositories.
Install them with dnf:
.. TODO: Use Python 3.11 once RHEL 8.6 goes EOL in 2024.
.. prompt:: bash
sudo dnf -y update
sudo dnf -y group install development
sudo dnf -y install python39 python39-pip python39-devel java-11-openjdk-headless nano git
sudo dnf -y install python39 python39-devel java-17-openjdk-headless nano git
Set ``java`` executable to point to Java 11:
Set ``java`` executable to point to Java 17:
.. prompt:: bash
sudo alternatives --set java "java-11-openjdk.$(uname -i)"
sudo alternatives --set java "java-17-openjdk.$(uname -i)"
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.9.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -1,3 +1,5 @@
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
@@ -7,12 +9,14 @@ Installing the pre-requirements
Red Hat Enterprise Linux (RHEL) 9 and its derivatives have all required packages available in official repositories.
Install them with dnf:
.. TODO: Use Python 3.11 once RHEL 9.0 goes EOL in 2024.
.. prompt:: bash
sudo dnf -y install python39 git java-11-openjdk-headless @development nano
sudo dnf -y install python39 python3-devel git java-17-openjdk-headless @development nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.9.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -2,7 +2,7 @@
Installing Python with pyenv
----------------------------
On distributions where Python 3.8 needs to be compiled from source, we recommend the use of pyenv.
On distributions where Python 3.10 needs to be compiled from source, we recommend the use of pyenv.
This simplifies the compilation process and has the added bonus of simplifying setting up Red in a
virtual environment.
@@ -10,7 +10,7 @@ virtual environment.
.. prompt:: bash
CONFIGURE_OPTS=--enable-optimizations pyenv install 3.8.16 -v
CONFIGURE_OPTS=--enable-optimizations pyenv install 3.10.13 -v
This may take a long time to complete, depending on your hardware. For some machines (such as
Raspberry Pis and micro-tier VPSes), it may take over an hour; in this case, you may wish to remove
@@ -22,6 +22,6 @@ After that is finished, run:
.. prompt:: bash
pyenv global 3.8.16
pyenv global 3.10.13
Pyenv is now installed and your system should be configured to run Python 3.8.
Pyenv is now installed and your system should be configured to run Python 3.10.

View File

@@ -10,7 +10,7 @@ virtual environment.
.. prompt:: bash
CONFIGURE_OPTS=--enable-optimizations pyenv install 3.9.16 -v
CONFIGURE_OPTS=--enable-optimizations pyenv install 3.9.18 -v
This may take a long time to complete, depending on your hardware. For some machines (such as
Raspberry Pis and micro-tier VPSes), it may take over an hour; in this case, you may wish to remove
@@ -22,6 +22,6 @@ After that is finished, run:
.. prompt:: bash
pyenv global 3.9.16
pyenv global 3.9.18
Pyenv is now installed and your system should be configured to run Python 3.9.

View File

@@ -0,0 +1,2 @@
| We support hosting Red on computers running an **aarch64** or **armv7l** version of this system.
| You can read more about systems and processor architectures we support in our `end-user-guarantees`.

View File

@@ -0,0 +1,2 @@
| We support hosting Red on computers running an **armv7l** version of this system.
| You can read more about systems and processor architectures we support in our `end-user-guarantees`.

View File

@@ -0,0 +1,2 @@
| We support hosting Red on computers running an **x86-64**, **aarch64**, or **armv7l** version of this system.
| You can read more about systems and processor architectures we support in our `end-user-guarantees`.

View File

@@ -0,0 +1,2 @@
| We support hosting Red on computers running an **x86-64** or **aarch64** version of this system.
| You can read more about systems and processor architectures we support in our `end-user-guarantees`.

View File

@@ -0,0 +1,2 @@
| We support hosting Red on computers running an **x86-64** version of this system.
| You can read more about systems and processor architectures we support in our `end-user-guarantees`.

View File

@@ -1,7 +1,7 @@
.. _install-alma-linux-8:
====================================
Installing Red on Alma Linux 8.4-8.x
Installing Red on Alma Linux 8.6-8.x
====================================
.. include:: _includes/install-guide-rhel8-derivatives.rst

View File

@@ -4,6 +4,8 @@
Installing Red on Arch Linux
============================
.. include:: _includes/supported-arch-x64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
@@ -14,7 +16,7 @@ Install the pre-requirements with pacman:
.. prompt:: bash
sudo pacman -Syu git jre11-openjdk-headless base-devel nano
sudo pacman -Syu git jre17-openjdk-headless base-devel nano
On Arch Linux, Python 3.9 can be installed from the Arch User Repository (AUR) from the ``python39`` package.
@@ -30,6 +32,6 @@ The manual build process is the Arch-supported install method for AUR packages.
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.9.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -4,6 +4,8 @@
Installing Red on CentOS 7
==========================
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
@@ -35,7 +37,9 @@ In order to install Git 2.11 or greater, we recommend adding the IUS repository:
.. Include common instructions:
.. include:: _includes/install-python-pyenv.rst
.. Python 3.10 requires OpenSSL 1.1.1 which CentOS 7 doesn't provide in base repository.
.. include:: _includes/install-python39-pyenv.rst
.. include:: _includes/create-env-with-pyenv-virtualenv.rst

View File

@@ -1,28 +0,0 @@
.. _install-debian-10:
==================================
Installing Red on Debian 10 Buster
==================================
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
We recommend installing pyenv as a method of installing non-native versions of Python on
Debian Buster. This guide will tell you how. First, run the following commands:
.. prompt:: bash
sudo apt update
sudo apt -y install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libgdbm-dev uuid-dev python3-openssl git openjdk-11-jre-headless nano
CXX=/usr/bin/g++
.. Include common instructions:
.. include:: _includes/install-python-pyenv.rst
.. include:: _includes/create-env-with-pyenv-virtualenv.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -4,6 +4,8 @@
Installing Red on Debian 11 Bullseye
====================================
.. include:: _includes/supported-arch-x64+aarch64+armv7l.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
@@ -16,10 +18,10 @@ with apt:
.. prompt:: bash
sudo apt update
sudo apt -y install python3 python3-dev python3-venv python3-pip git openjdk-11-jre-headless build-essential nano
sudo apt -y install python3 python3-dev python3-venv git openjdk-17-jre-headless build-essential nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.9.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -0,0 +1,27 @@
.. _install-debian-12:
====================================
Installing Red on Debian 12 Bookworm
====================================
.. include:: _includes/supported-arch-x64+aarch64+armv7l.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
Debian 12 "Bookworm" has all required packages available in official repositories. Install them
with apt:
.. prompt:: bash
sudo apt update
sudo apt -y install python3 python3-dev python3-venv git openjdk-17-jre-headless build-essential nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv3.11.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -4,21 +4,23 @@
Installing Red on Fedora Linux
==============================
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
Fedora Linux 35 and above has all required packages available in official repositories. Install
Fedora Linux 37 and above has all required packages available in official repositories. Install
them with dnf:
.. prompt:: bash
sudo dnf -y install python39 git java-11-openjdk-headless @development-tools nano
sudo dnf -y install python3.11 python3.11-devel git java-17-openjdk-headless @development-tools nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.11.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -19,8 +19,8 @@ we recommend **Ubuntu 22.04 LTS**.
centos-7
centos-stream-8
centos-stream-9
debian-10
debian-11
debian-12
fedora
opensuse-leap-15
opensuse-tumbleweed
@@ -32,7 +32,6 @@ we recommend **Ubuntu 22.04 LTS**.
rhel-9
rocky-linux-8
rocky-linux-9
ubuntu-1804
ubuntu-2004
ubuntu-2204
ubuntu-non-lts

View File

@@ -4,6 +4,8 @@
Installing Red on macOS
=======================
.. include:: _includes/supported-arch-x64+aarch64.rst
-------------------------------
Installing the pre-requirements
-------------------------------
@@ -24,21 +26,21 @@ one-by-one:
.. prompt:: bash
brew install python@3.9
brew install python@3.11
brew install git
brew tap homebrew/cask-versions
brew install --cask temurin11
brew install --cask temurin17
By default, Python installed through Homebrew is not added to the load path.
To fix this, you should run these commands:
.. prompt:: bash
echo 'export PATH="$(brew --prefix)/opt/python@3.9/bin:$PATH"' >> "$([ -n "$ZSH_VERSION" ] && echo ~/.zprofile || ([ -f ~/.bash_profile ] && echo ~/.bash_profile || echo ~/.profile))"
export PATH="$(brew --prefix)/opt/python@3.9/bin:$PATH"
echo 'export PATH="$(brew --prefix)/opt/python@3.11/bin:$PATH"' >> "$([ -n "$ZSH_VERSION" ] && echo ~/.zprofile || ([ -f ~/.bash_profile ] && echo ~/.bash_profile || echo ~/.profile))"
export PATH="$(brew --prefix)/opt/python@3.11/bin:$PATH"
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.11.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -1,25 +1,27 @@
.. _install-opensuse-leap-15:
=====================================
Installing Red on openSUSE Leap 15.3+
Installing Red on openSUSE Leap 15.4+
=====================================
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
openSUSE Leap 15.3+ has all required dependencies available in official repositories. Install them
openSUSE Leap 15.4+ has all required dependencies available in official repositories. Install them
with zypper:
.. prompt:: bash
sudo zypper -n install python39-base python39-pip git-core java-11-openjdk-headless nano
sudo zypper -n install python310 python310-devel git-core java-17-openjdk-headless nano
sudo zypper -n install -t pattern devel_basis
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.10.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -4,6 +4,8 @@
Installing Red on openSUSE Tumbleweed
=====================================
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
@@ -15,11 +17,11 @@ with zypper:
.. prompt:: bash
sudo zypper -n install python39-base python39-pip git-core java-11-openjdk-headless nano
sudo zypper -n install python311 python311-devel git-core java-17-openjdk-headless nano
sudo zypper -n install -t pattern devel_basis
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.11.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -1,7 +1,7 @@
.. _install-oracle-linux-8:
======================================
Installing Red on Oracle Linux 8.4-8.x
Installing Red on Oracle Linux 8.6-8.x
======================================
.. include:: _includes/install-guide-rhel8-derivatives.rst

View File

@@ -4,6 +4,8 @@
Installing Red on Raspberry Pi OS (Legacy) 10 Buster
====================================================
.. include:: _includes/supported-arch-armv7l.rst
.. note::
While we do provide support and install instructions for running Red
@@ -33,15 +35,20 @@ Installing the pre-requirements
We recommend installing pyenv as a method of installing non-native versions of Python on
Raspberry Pi OS. This guide will tell you how. First, run the following commands:
.. cmake is necessary to be able to successfully build rapidfuzz.
.. prompt:: bash
sudo apt update
sudo apt -y install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libgdbm-dev uuid-dev python3-openssl git openjdk-11-jre-headless nano
sudo apt -y install cmake make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libgdbm-dev uuid-dev python3-openssl git openjdk-17-jre-headless nano
CXX=/usr/bin/g++
.. Include common instructions:
.. include:: _includes/install-python38-pyenv.rst
.. We should only build and install even versions of Python on Raspberry Pi OS as odd
.. versions are part of piwheels and can cause installs of pip packages that won't work.
.. include:: _includes/install-python310-pyenv.rst
.. include:: _includes/create-env-with-pyenv-virtualenv.rst

View File

@@ -4,6 +4,8 @@
Installing Red on Raspberry Pi OS 11 Bullseye
=============================================
.. include:: _includes/supported-arch-aarch64+armv7l.rst
.. note::
This guide can only be used with Raspberry Pi OS 11 Bullseye,
@@ -31,10 +33,10 @@ with apt:
.. prompt:: bash
sudo apt update
sudo apt -y install python3 python3-dev python3-venv python3-pip git openjdk-11-jre-headless build-essential nano
sudo apt -y install python3 python3-dev python3-venv git openjdk-17-jre-headless build-essential nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.9.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -1,7 +1,7 @@
.. _install-rhel-8:
=========================================================
Installing Red on Red Hat Enterprise Linux (RHEL) 8.4-8.x
Installing Red on Red Hat Enterprise Linux (RHEL) 8.6-8.x
=========================================================
.. include:: _includes/install-guide-rhel8-derivatives.rst

View File

@@ -1,7 +1,7 @@
.. _install-rocky-linux-8:
===============================
Installing Red on Rocky Linux 8
===============================
=====================================
Installing Red on Rocky Linux 8.6-8.x
=====================================
.. include:: _includes/install-guide-rhel8-derivatives.rst

View File

@@ -1,37 +0,0 @@
.. _install-ubuntu-1804:
==================================
Installing Red on Ubuntu 18.04 LTS
==================================
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
We recommend adding the ``git-core`` ppa to install Git 2.11 or greater:
.. prompt:: bash
sudo apt update
sudo apt -y install software-properties-common
sudo add-apt-repository -y ppa:git-core/ppa
We recommend adding the ``deadsnakes`` ppa to install Python 3.9:
.. prompt:: bash
sudo add-apt-repository -y ppa:deadsnakes/ppa
Now install the pre-requirements with apt:
.. prompt:: bash
sudo apt -y install python3.9 python3.9-dev python3.9-venv python3-pip git openjdk-11-jre-headless build-essential nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -4,28 +4,24 @@
Installing Red on Ubuntu 20.04 LTS
==================================
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
We recommend adding the ``git-core`` ppa to install Git 2.11 or greater:
Ubuntu 20.04 LTS has all required packages available in official repositories. Install them
with apt:
.. prompt:: bash
sudo apt update
sudo apt -y install software-properties-common
sudo add-apt-repository -y ppa:git-core/ppa
Now install the pre-requirements with apt:
.. prompt:: bash
sudo apt -y install python3.9 python3.9-dev python3.9-venv python3-pip git openjdk-11-jre-headless build-essential nano
sudo apt -y install python3.9 python3.9-dev python3.9-venv git openjdk-17-jre-headless build-essential nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.9.rst
.. include:: _includes/install-and-setup-red-unix.rst

View File

@@ -4,28 +4,24 @@
Installing Red on Ubuntu 22.04 LTS
==================================
.. include:: _includes/supported-arch-x64+aarch64.rst
.. include:: _includes/linux-preamble.rst
-------------------------------
Installing the pre-requirements
-------------------------------
We recommend adding the ``deadsnakes`` ppa to install Python 3.9:
Ubuntu 22.04 LTS has all required packages available in official repositories. Install them
with apt:
.. prompt:: bash
sudo apt update
sudo apt -y install software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
Now install the pre-requirements with apt:
.. prompt:: bash
sudo apt -y install python3.9 python3.9-dev python3.9-venv python3-pip git openjdk-11-jre-headless build-essential nano
sudo apt -y install python3.10 python3.10-dev python3.10-venv git openjdk-17-jre-headless build-essential nano
.. Include common instructions:
.. include:: _includes/create-env-with-venv.rst
.. include:: _includes/create-env-with-venv3.10.rst
.. include:: _includes/install-and-setup-red-unix.rst

Some files were not shown because too many files have changed in this diff Show More