Compare commits

...

11 Commits

Author SHA1 Message Date
Kreusada
6603cd1a86 Check attach_files permission inside send_interactive (#6552)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2025-05-25 17:04:35 -04:00
Kreusada
1daf56f3d8 Add Group.all method explanation to Config framework (#6550)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2025-05-25 14:48:47 -04:00
Kreusada
b3f0349ba2 [Docs] Update publishing cogs guide with [botname] substitution tip (#6539)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2025-05-25 14:39:02 -04:00
A Frozen Lake
bfc3561928 Fix formatting of [p]names. (#6538)
Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
2025-05-25 14:33:28 -04:00
github-actions[bot]
8d8918b3c6 Version bump to 3.5.21.dev1 (#6571)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-03 16:13:01 +00:00
github-actions[bot]
550cf49bc8 Version bump to 3.5.20 (#6570)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-03 18:06:21 +02:00
Jakub Kuczys
313eeffc84 Red 3.5.20 - Changelog (#6569) 2025-05-03 15:42:37 +00:00
Jakub Kuczys
88e1f72467 Bump dependencies (#6568) 2025-05-03 16:35:33 +01:00
aikaterna
3c6146d6ca Bump YT plugin to 1.13.1 (#6566) 2025-05-03 17:30:26 +02:00
aikaterna
bfab9cc5f8 [Audio] Update application.yml generation for new sources (#6567)
Co-authored-by: Jakub Kuczys <me@jacken.men>
2025-05-03 17:26:05 +02:00
github-actions[bot]
07ee31a88f Version bump to 3.5.20.dev1 (#6562)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-27 03:19:35 +02:00
9 changed files with 97 additions and 22 deletions

View File

@@ -1,5 +1,35 @@
.. Red changelogs
Redbot 3.5.20 (2025-05-03)
==========================
| Thanks to all these amazing people that contributed to this release:
| :ghuser:`aikaterna`, :ghuser:`Jackenmen`, :ghuser:`Kreusada`
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):
We've updated our default application.yml file and you should update your instance's ``application.yml`` accordingly.
More specifically, we bumped the version of YT source plugin.
`Download Red 3.5.20's default application.yml file <https://github.com/Cog-Creators/Red-DiscordBot/releases/download/3.5.20/Red-DiscordBot-3.5.20-default-lavalink-application.yml>`__
End-user changelog
------------------
Changes
*******
- **Core - Dependencies** - Red's dependencies have been bumped (:issue:`6568`)
Fixes
*****
- |cool| **Cogs - Audio** - Fixed recent YT playback issues (:issue:`6566`, :issue:`6567`)
----
Redbot 3.5.19 (2025-04-27)
==========================

View File

@@ -155,6 +155,22 @@ Here is an example of the :code:`async with` syntax:
blah.append(new_blah)
await ctx.send("The new blah value has been added!")
There is also a :py:meth:`Group.all` method. This will return all the stored data associated
with a specific config group as a :py:class:`dict`. By negating the need to excessively call config,
this method can be particularly useful when multiple values are to be retrieved from the same group.
Here is an example of :py:meth:`Group.all` usage:
.. code-block:: python
@commands.command()
async def getall(self, ctx):
all_global_data = await self.config.all()
await ctx.send("Foobar is {foobar}, foo baz is {foo_baz}".format(
foobar=str(all_global_data["foobar"]),
foo_baz=str(all_global_data["foo"]["baz"])
))
.. important::
@@ -398,7 +414,7 @@ We're responsible pet owners here, so we've also got to have a way to feed our p
# We could accomplish the same thing a slightly different way
await self.config.user(ctx.author).pets.get_attr(pet_name).hunger.set(new_hunger)
await ctx.send("Your pet is now at {}/100 hunger!".format(new_hunger)
await ctx.send("Your pet is now at {}/100 hunger!".format(new_hunger))
Of course, if we're less than responsible pet owners, there are consequences::
@@ -481,7 +497,7 @@ Config prioritizes being a safe data store without developers needing to
know how end users have configured their bot.
This does come with some performance costs, so keep the following in mind when choosing to
develop using config
develop using config.
* Config use in events should be kept minimal and should only occur
after confirming the event needs to interact with config

View File

@@ -47,7 +47,7 @@ Keys common to both repo and cog info.json (case sensitive)
is installed or a repo is added
.. tip:: You can use the ``[p]`` key in your string to use the prefix
used for installing.
used for installing, and ``[botname]`` to show the bot's username.
- ``short`` (string) - A short description of the cog or repo. For cogs, this info
is displayed when a user executes ``[p]cog list``

View File

@@ -339,7 +339,7 @@ def _early_init():
# This is bumped automatically by release workflow (`.github/workflows/scripts/bump_version.py`)
_VERSION = "3.5.19"
_VERSION = "3.5.21.dev1"
__version__, version_info = VersionInfo._get_version()

View File

@@ -49,13 +49,27 @@ DEFAULT_LAVALINK_YAML = {
"yaml__plugins__youtube__allowDirectPlaylistIds": True,
"yaml__plugins__youtube__clients": [
"MUSIC",
"WEB",
"WEBEMBEDDED",
"MWEB",
"ANDROID_VR",
"ANDROID_MUSIC",
"TVHTML5EMBEDDED",
"TV",
"IOS",
"WEB",
"MWEB",
],
"yaml__plugins__youtube__ANDROID_MUSIC__playback": True,
"yaml__plugins__youtube__ANDROID_MUSIC__playlistLoading": False,
"yaml__plugins__youtube__ANDROID_MUSIC__searching": True,
"yaml__plugins__youtube__ANDROID_MUSIC__videoLoading": False,
"yaml__plugins__youtube__ANDROID_VR__playback": False,
"yaml__plugins__youtube__ANDROID_VR__playlistLoading": True,
"yaml__plugins__youtube__ANDROID_VR__searching": True,
"yaml__plugins__youtube__ANDROID_VR__videoLoading": False,
"yaml__plugins__youtube__IOS__playback": True,
"yaml__plugins__youtube__IOS__playlistLoading": True,
"yaml__plugins__youtube__IOS__searching": True,
"yaml__plugins__youtube__IOS__videoLoading": False,
"yaml__plugins__youtube__MUSIC__playback": False,
"yaml__plugins__youtube__MUSIC__playlistLoading": False,
"yaml__plugins__youtube__MUSIC__searching": True,
@@ -122,7 +136,11 @@ def generate_server_config(config_data: Dict[str, Any]) -> Dict[str, Any]:
# This assumes all keys with `_` should be converted from `part1_part2` to `part1-part2`
# unless it's all uppercase which we assume to be a special enum value
# (e.g. ANDROID_VR will not be converted)
def _convert_function(key: str) -> str:
if key.isupper():
return key
return key.replace("_", "-")

View File

@@ -12,7 +12,7 @@ __all__ = (
JAR_VERSION: Final[LavalinkVersion] = LavalinkVersion(3, 7, 12, red=1)
YT_PLUGIN_VERSION: Final[str] = "1.13.0"
YT_PLUGIN_VERSION: Final[str] = "1.13.1"
# keep this sorted from oldest to latest
SUPPORTED_JAVA_VERSIONS: Final[Tuple[int, ...]] = (11, 17)
LATEST_SUPPORTED_JAVA_VERSION: Final = SUPPORTED_JAVA_VERSIONS[-1]

View File

@@ -309,9 +309,9 @@ class ModInfo(MixinMeta):
usernames, display_names, nicks = await self.get_names(member)
parts = []
for header, names in (
(_("Past 20 usernames:"), usernames),
(_("Past 20 global display names:"), display_names),
(_("Past 20 server nicknames:"), nicks),
(_("Past 20 usernames: "), usernames),
(_("Past 20 global display names: "), display_names),
(_("Past 20 server nicknames: "), nicks),
):
if names:
parts.append(bold(header) + ", ".join(names))

View File

@@ -2477,23 +2477,34 @@ class Red(
msg = await channel.send(box(page, lang=box_lang))
ret.append(msg)
n_remaining = len(messages) - idx
files_perm = (
not channel.guild or channel.permissions_for(channel.guild.me).attach_files
)
options = ("more", "file") if files_perm else ("more",)
if n_remaining > 0:
if n_remaining == 1:
prompt_text = _(
"There is still one message remaining. Type {command_1} to continue"
" or {command_2} to upload all contents as a file."
)
if files_perm:
prompt_text = _(
"There is still one message remaining. Type {command_1} to continue or {command_2} to upload all contents as a file."
)
else:
prompt_text = _(
"There is still one message remaining. Type {command_1} to continue."
)
else:
prompt_text = _(
"There are still {count} messages remaining. Type {command_1} to continue"
" or {command_2} to upload all contents as a file."
)
if files_perm:
prompt_text = _(
"There are still {count} messages remaining. Type {command_1} to continue or {command_2} to upload all contents as a file."
)
else:
prompt_text = _(
"There are still {count} messages remaining. Type {command_1} to continue."
)
query = await channel.send(
prompt_text.format(count=n_remaining, command_1="`more`", command_2="`file`")
)
pred = MessagePredicate.lower_contained_in(
("more", "file"), channel=channel, user=user
)
pred = MessagePredicate.lower_contained_in(options, channel=channel, user=user)
try:
resp = await self.wait_for(
"message",

View File

@@ -2,7 +2,7 @@ alabaster==0.7.13
# via sphinx
certifi==2025.4.26
# via requests
charset-normalizer==3.4.1
charset-normalizer==3.4.2
# via requests
docutils==0.20.1
# via