mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-12-05 08:52:31 -05:00
Compare commits
11 Commits
3.5.19
...
6603cd1a86
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6603cd1a86 | ||
|
|
1daf56f3d8 | ||
|
|
b3f0349ba2 | ||
|
|
bfc3561928 | ||
|
|
8d8918b3c6 | ||
|
|
550cf49bc8 | ||
|
|
313eeffc84 | ||
|
|
88e1f72467 | ||
|
|
3c6146d6ca | ||
|
|
bfab9cc5f8 | ||
|
|
07ee31a88f |
30
CHANGES.rst
30
CHANGES.rst
@@ -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)
|
||||
==========================
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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``
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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("_", "-")
|
||||
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user