Skip to content

Commit

Permalink
Bump d.py version to 2.4.0 (#6401)
Browse files Browse the repository at this point in the history
Co-authored-by: Ryan <[email protected]>
  • Loading branch information
Jackenmen and yamikaitou authored Jul 10, 2024
1 parent dd61b66 commit 2b1e603
Show file tree
Hide file tree
Showing 9 changed files with 173 additions and 36 deletions.
53 changes: 52 additions & 1 deletion docs/cog_guides/core.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2867,7 +2867,7 @@ Supports either an attachment or an image URL.
**Examples:**
- ``[p]set bot avatar`` - With an image attachment, this will set the avatar.
- ``[p]set bot avatar`` - Without an attachment, this will show the command help.
- ``[p]set bot avatar https://links.flaree.xyz/k95`` - Sets the avatar to the provided url.
- ``[p]set bot avatar https://avatars.githubusercontent.com/u/23690422`` - Sets the avatar to the provided url.

**Arguments:**
- ``[url]`` - An image url to be used as an avatar. Leave blank when uploading an attachment.
Expand Down Expand Up @@ -2895,6 +2895,57 @@ Removes Red's avatar.
**Example:**
- ``[p]set bot avatar remove``

.. _core-command-set-bot-banner:

""""""""""""""
set bot banner
""""""""""""""

.. note:: |owner-lock|

**Syntax**

.. code-block:: none
[p]set bot banner [url]
**Description**

Sets Red's banner

Supports either an attachment or an image URL.

**Examples:**
- ``[p]set bot banner`` - With an image attachment, this will set the banner.
- ``[p]set bot banner`` - Without an attachment, this will show the command help.
- ``[p]set bot banner https://opengraph.githubassets.com`` - Sets the banner to the provided url.

**Arguments:**
- ``[url]`` - An image url to be used as an banner. Leave blank when uploading an attachment.

.. _core-command-set-bot-banner-remove:

"""""""""""""""""""""
set bot banner remove
"""""""""""""""""""""

.. note:: |owner-lock|

**Syntax**

.. code-block:: none
[p]set bot banner remove
.. tip:: Alias: ``set bot banner clear``

**Description**

Removes Red's banner.

**Example:**
- ``[p]set bot banner remove``

.. _core-command-set-bot-custominfo:

""""""""""""""""""
Expand Down
3 changes: 2 additions & 1 deletion redbot/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,8 @@ async def run_bot(red: Red, cli_flags: Namespace) -> None:
"With that out of the way, depending on who you want to be considered as owner,"
" you can:\n"
"a) pass --team-members-are-owners when launching Red"
" - in this case Red will treat all members of the bot application's team as owners\n"
" - in this case Red will treat members of the bot application's team as owners,"
" if their team role is Owner, Admin, or Developer\n"
f"b) set owner manually with `redbot --edit {cli_flags.instance_name}`\n"
"c) pass owner ID(s) when launching Red with --owner"
" (and --co-owner if you need more than one) flag\n"
Expand Down
12 changes: 8 additions & 4 deletions redbot/cogs/audio/core/events/dpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@
"add_reactions": _("Add Reactions"),
"view_audit_log": _("View Audit Log"),
"priority_speaker": _("Priority Speaker"),
"stream": _("Go Live"),
"stream": _("Video"),
"read_messages": _("Read Text Channels & See Voice Channels"),
"send_messages": _("Send Messages"),
"send_tts_messages": _("Send TTS Messages"),
"send_tts_messages": _("Send Text-to-speech Messages"),
"manage_messages": _("Manage Messages"),
"embed_links": _("Embed Links"),
"attach_files": _("Attach Files"),
Expand All @@ -70,12 +70,16 @@
"create_private_threads": _("Create Private Threads"),
"external_stickers": _("Use External Stickers"),
"send_messages_in_threads": _("Send Messages in Threads"),
"start_embedded_activities": _("Start Activities"),
"moderate_members": _("Moderate Member"),
"use_embedded_activities": _("Use Activities"),
"moderate_members": _("Time out members"),
"view_creator_monetization_analytics": _("View Creator Monetization Analytics"),
"use_soundboard": _("Use Soundboard"),
"create_expressions": _("Create Expressions"),
"create_events": _("Create Events"),
"use_external_sounds": _("Use External Sounds"),
"send_voice_messages": _("Send Voice Messages"),
"send_polls": _("Create Polls"),
"use_external_apps": _("Use External Apps"),
}

DANGEROUS_COMMANDS = {
Expand Down
17 changes: 13 additions & 4 deletions redbot/cogs/filter/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -445,14 +445,14 @@ async def remove_from_filter(

async def filter_hits(
self,
text: str,
server_or_channel: Union[
discord.Guild,
discord.TextChannel,
discord.VoiceChannel,
discord.StageChannel,
discord.Thread,
],
*texts: str,
) -> Set[str]:
if isinstance(server_or_channel, discord.Guild):
guild = server_or_channel
Expand Down Expand Up @@ -483,7 +483,8 @@ async def filter_hits(
self.pattern_cache[(guild.id, channel and channel.id)] = pattern

if pattern:
hits |= set(pattern.findall(text))
for text in texts:
hits |= set(pattern.findall(text))
return hits

async def check_filter(self, message: discord.Message):
Expand All @@ -506,7 +507,15 @@ async def check_filter(self, message: discord.Message):
user_count = 0
member_data["filter_count"] = user_count

hits = await self.filter_hits(message.content, message.channel)
texts = [message.content]
poll = message.poll
if poll is not None:
texts.append(poll.question or "")
for answer in poll.answers:
texts.append(answer.text or "")
for attachment in message.attachments:
texts.append(attachment.description or "")
hits = await self.filter_hits(message.channel, *texts)

if hits:
# modlog doesn't accept PartialMessageable
Expand Down Expand Up @@ -607,7 +616,7 @@ async def maybe_filter_name(self, member: discord.Member):

await set_contextual_locales_from_guild(self.bot, guild)

if await self.filter_hits(member.display_name, member.guild):
if await self.filter_hits(member.guild, member.display_name):
name_to_use = guild_data["filter_default_name"]
reason = _("Filtered nickname") if member.nick else _("Filtered name")
try:
Expand Down
4 changes: 3 additions & 1 deletion redbot/core/_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,11 +267,13 @@ def parse_cli_flags(args):
)
parser.add_argument(
"--team-members-are-owners",
"--team-developers-are-owners",
action="store_true",
dest="use_team_features",
default=False,
help=(
"Treat application team members as owners. "
"Treat application team members as owners, if their team role is Owner, "
"Admin, or Developer. "
"This is off by default. Owners can load and run arbitrary code. "
"Do not enable if you would not trust all of your team members with "
"all of the data on the host machine."
Expand Down
16 changes: 16 additions & 0 deletions redbot/core/app_commands/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
AllChannels as AllChannels,
AppCommand as AppCommand,
AppCommandChannel as AppCommandChannel,
AppCommandContext as AppCommandContext,
AppCommandError as AppCommandError,
AppCommandGroup as AppCommandGroup,
AppCommandPermissions as AppCommandPermissions,
AppCommandThread as AppCommandThread,
AppInstallationType as AppInstallationType,
Argument as Argument,
BotMissingPermissions as BotMissingPermissions,
Command as Command,
Expand Down Expand Up @@ -45,6 +47,8 @@
TranslationContextTypes as TranslationContextTypes,
TranslationError as TranslationError,
Translator as Translator,
allowed_contexts as allowed_contexts,
allowed_installs as allowed_installs,
autocomplete as autocomplete,
check as check,
CheckFailure as CheckFailure,
Expand All @@ -54,10 +58,14 @@
context_menu as context_menu,
default_permissions as default_permissions,
describe as describe,
dm_only as dm_only,
guild_install as guild_install,
guild_only as guild_only,
guilds as guilds,
locale_str as locale_str,
private_channel_only as private_channel_only,
rename as rename,
user_install as user_install,
)

from . import checks as checks
Expand All @@ -66,10 +74,12 @@
"AllChannels",
"AppCommand",
"AppCommandChannel",
"AppCommandContext",
"AppCommandError",
"AppCommandGroup",
"AppCommandPermissions",
"AppCommandThread",
"AppInstallationType",
"Argument",
"BotMissingPermissions",
"Command",
Expand Down Expand Up @@ -101,6 +111,8 @@
"TranslationContextTypes",
"TranslationError",
"Translator",
"allowed_contexts",
"allowed_installs",
"autocomplete",
"check",
"CheckFailure",
Expand All @@ -110,9 +122,13 @@
"context_menu",
"default_permissions",
"describe",
"dm_only",
"guild_install",
"guild_only",
"guilds",
"locale_str",
"private_channel_only",
"rename",
"user_install",
"checks",
)
6 changes: 5 additions & 1 deletion redbot/core/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -1257,7 +1257,11 @@ async def _pre_connect(self) -> None:
def _setup_owners(self) -> None:
if self.application.team:
if self._use_team_features:
self.owner_ids.update(m.id for m in self.application.team.members)
self.owner_ids.update(
m.id
for m in self.application.team.members
if m.role in (discord.TeamMemberRole.admin, discord.TeamMemberRole.developer)
)
elif self._owner_id_overwrite is None:
self.owner_ids.add(self.application.owner.id)

Expand Down
96 changes: 73 additions & 23 deletions redbot/core/core_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -2848,21 +2848,12 @@ async def _set_bot_description(self, ctx: commands.Context, *, description: str
ctx.bot.description = description
await ctx.tick()

@_set_bot.group(name="avatar", invoke_without_command=True)
@commands.is_owner()
async def _set_bot_avatar(self, ctx: commands.Context, url: str = None):
"""Sets [botname]'s avatar
Supports either an attachment or an image URL.
**Examples:**
- `[p]set bot avatar` - With an image attachment, this will set the avatar.
- `[p]set bot avatar` - Without an attachment, this will show the command help.
- `[p]set bot avatar https://links.flaree.xyz/k95` - Sets the avatar to the provided url.
**Arguments:**
- `[url]` - An image url to be used as an avatar. Leave blank when uploading an attachment.
"""
async def _set_bot_image(
self,
image_type: Literal["avatar", "banner"],
ctx: commands.Context,
url: Optional[str] = None,
):
if len(ctx.message.attachments) > 0: # Attachments take priority
data = await ctx.message.attachments[0].read()
elif url is not None:
Expand All @@ -2883,20 +2874,49 @@ async def _set_bot_avatar(self, ctx: commands.Context, url: str = None):

try:
async with ctx.typing():
await ctx.bot.user.edit(avatar=data)
if image_type == "avatar":
await ctx.bot.user.edit(avatar=data)
else:
await ctx.bot.user.edit(banner=data)
except discord.HTTPException:
await ctx.send(
_(
"Failed. Remember that you can edit my avatar "
"up to two times a hour. The URL or attachment "
"must be a valid image in either JPG, PNG, or GIF format."
if image_type == "avatar":
await ctx.send(
_(
"Failed. Remember that you can edit my avatar "
"up to two times a hour. The URL or attachment "
"must be a valid image in either JPG, PNG, GIF, or WEBP format."
)
)
else:
await ctx.send(
_(
"Failed. Remember that you can edit my banner "
"up to two times a hour. The URL or attachment "
"must be a valid image in either JPG, PNG, GIF, or WEBP format."
)
)
)
except ValueError:
await ctx.send(_("JPG / PNG / GIF format only."))
await ctx.send(_("JPG / PNG / GIF / WEBP format only."))
else:
await ctx.send(_("Done."))

@_set_bot.group(name="avatar", invoke_without_command=True)
@commands.is_owner()
async def _set_bot_avatar(self, ctx: commands.Context, url: str = None):
"""Sets [botname]'s avatar
Supports either an attachment or an image URL.
**Examples:**
- `[p]set bot avatar` - With an image attachment, this will set the avatar.
- `[p]set bot avatar` - Without an attachment, this will show the command help.
- `[p]set bot avatar https://avatars.githubusercontent.com/u/23690422` - Sets the avatar to the provided url.
**Arguments:**
- `[url]` - An image url to be used as an avatar. Leave blank when uploading an attachment.
"""
await self._set_bot_image("avatar", ctx, url)

@_set_bot_avatar.command(name="remove", aliases=["clear"])
@commands.is_owner()
async def _set_bot_avatar_remove(self, ctx: commands.Context):
Expand All @@ -2910,6 +2930,36 @@ async def _set_bot_avatar_remove(self, ctx: commands.Context):
await ctx.bot.user.edit(avatar=None)
await ctx.send(_("Avatar removed."))

@_set_bot.group(name="banner", invoke_without_command=True)
@commands.is_owner()
async def _set_bot_banner(self, ctx: commands.Context, url: str = None):
"""Sets [botname]'s banner
Supports either an attachment or an image URL.
**Examples:**
- `[p]set bot banner` - With an image attachment, this will set the banner.
- `[p]set bot banner` - Without an attachment, this will show the command help.
- `[p]set bot banner https://opengraph.githubassets.com` - Sets the banner to the provided url.
**Arguments:**
- `[url]` - An image url to be used as an banner. Leave blank when uploading an attachment.
"""
await self._set_bot_image("banner", ctx, url)

@_set_bot_banner.command(name="remove", aliases=["clear"])
@commands.is_owner()
async def _set_bot_banner_remove(self, ctx: commands.Context):
"""
Removes [botname]'s banner.
**Example:**
- `[p]set bot banner remove`
"""
async with ctx.typing():
await ctx.bot.user.edit(banner=None)
await ctx.send(_("Banner removed."))

@_set_bot.command(name="username", aliases=["name"])
@commands.is_owner()
async def _set_bot_username(self, ctx: commands.Context, *, username: str):
Expand Down
2 changes: 1 addition & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ click==8.1.7
# via -r base.in
contextlib2==21.6.0
# via schema
discord-py==2.3.2
discord-py==2.4.0
# via
# -r base.in
# red-lavalink
Expand Down

0 comments on commit 2b1e603

Please sign in to comment.