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. 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: .. _core-command-ignore-channel:
@@ -1850,7 +1853,10 @@ Ignore commands in the channel, thread, or category.
Defaults to the current thread or channel. 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:** **Examples:**

View File

@@ -5,4 +5,7 @@ from . import commands
def init_global_checks(bot): def init_global_checks(bot):
@bot.check_once @bot.check_once
async def check_message_is_eligible_as_command(ctx: commands.Context) -> bool: 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) return await ctx.bot.message_eligible_as_command(ctx.message)

View File

@@ -161,6 +161,8 @@ class IgnoreManager:
discord.StageChannel, discord.StageChannel,
discord.ForumChannel, discord.ForumChannel,
discord.Thread, 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, check_category: bool = True,
) -> bool: ) -> bool:
@@ -168,7 +170,9 @@ class IgnoreManager:
cid: int = channel.id cid: int = channel.id
cat_id: Optional[int] = ( 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: if cid in self._cached_channels:
chan_ret = self._cached_channels[cid] 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. 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 channel = message.channel
guild = message.guild guild = message.guild
@@ -911,7 +914,18 @@ class Red(
return True return True
if isinstance(ctx.channel, discord.Thread): 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 thread = ctx.channel
else: else:
channel = ctx.channel 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. 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") @ignore.command(name="list")
@@ -5821,7 +5823,9 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
Defaults to the current thread or channel. 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:** **Examples:**
- `[p]ignore channel #general` - Ignores commands in the #general channel. - `[p]ignore channel #general` - Ignores commands in the #general channel.