Handle UIB interactions for ignoring channels. (#6503)

Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
Co-authored-by: Jakub Kuczys <me@jacken.men>
This commit is contained in:
Kowlin
2026-03-04 21:38:30 +01:00
committed by GitHub
parent 45c55418a4
commit afe4e636b7
5 changed files with 37 additions and 6 deletions

View File

@@ -1829,7 +1829,10 @@ Commands to add servers or channels to the ignore list.
The ignore list will prevent the bot from responding to commands in the configured locations.
.. Note:: Owners and Admins override the ignore list.
.. Note::
- Category ignores are ignored by user-installed commands
- Owners and Admins override the ignore list.
.. _core-command-ignore-channel:
@@ -1850,7 +1853,10 @@ Ignore commands in the channel, thread, or category.
Defaults to the current thread or channel.
.. Note:: Owners, Admins, and those with Manage Channel permissions override ignored channels.
.. Note::
- Category ignores are ignored by user-installed commands
- Owners and Admins override the ignore list.
**Examples:**

View File

@@ -5,4 +5,7 @@ from . import commands
def init_global_checks(bot):
@bot.check_once
async def check_message_is_eligible_as_command(ctx: commands.Context) -> bool:
if ctx.interaction is not None:
# equivalent checks are performed by `RedTree.interaction_check`
return True
return await ctx.bot.message_eligible_as_command(ctx.message)

View File

@@ -161,6 +161,8 @@ class IgnoreManager:
discord.StageChannel,
discord.ForumChannel,
discord.Thread,
discord.Object, # This is solely here for the purpose of User Installed Bots,
# See Red#6501 & ignored_channel_or_guild in redbot/core/bot.py for more details.
],
check_category: bool = True,
) -> bool:
@@ -168,7 +170,9 @@ class IgnoreManager:
cid: int = channel.id
cat_id: Optional[int] = (
channel.category.id if check_category and channel.category else None
channel.category.id
if check_category and hasattr(channel, "category") and channel.category is not None
else None
)
if cid in self._cached_channels:
chan_ret = self._cached_channels[cid]

View File

@@ -819,6 +819,9 @@ class Red(
Whether or not the message is eligible to be treated as a command.
"""
# NOTE: any changes to implementation here may need to be made
# in the `RedTree.interaction_check` as well
channel = message.channel
guild = message.guild
@@ -911,7 +914,18 @@ class Red(
return True
if isinstance(ctx.channel, discord.Thread):
channel = ctx.channel.parent
if isinstance(ctx, discord.Interaction) and ctx.is_user_integration():
ctx: discord.Interaction
# This is a user installed interaction, and thus... We're doomed!
# We must mock an object because we don't have the channel cached,
# and we are unable to fetch a full channel from the interaction
# #BlameDiscord, See Red#6501 for more details.
# LIMITATIONS: Due the fact that we don't know the categories either as they aren't...
# communicated in the interaction, we can't check for category ignores.
channel = discord.Object(id=ctx.channel.parent_id)
else:
channel = ctx.channel.parent
thread = ctx.channel
else:
channel = ctx.channel

View File

@@ -5789,7 +5789,9 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
The ignore list will prevent the bot from responding to commands in the configured locations.
Note: Owners and Admins override the ignore list.
Notes:
- Category ignores are ignored by user-installed commands
- Owners, Admins, and those with Manage Channel permissions override ignored channels.
"""
@ignore.command(name="list")
@@ -5821,7 +5823,9 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
Defaults to the current thread or channel.
Note: Owners, Admins, and those with Manage Channel permissions override ignored channels.
Notes:
- Category ignores are ignored by user-installed commands
- Owners, Admins, and those with Manage Channel permissions override ignored channels.
**Examples:**
- `[p]ignore channel #general` - Ignores commands in the #general channel.