[p]warn ask to ban when user not in server (#6481)

Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
This commit is contained in:
Ascensionn 2024-12-08 13:42:22 -05:00 committed by GitHub
parent 33e0eac741
commit 48b2fe77c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -15,9 +15,10 @@ from redbot.cogs.warnings.helpers import (
) )
from redbot.core import Config, commands, modlog from redbot.core import Config, commands, modlog
from redbot.core.bot import Red from redbot.core.bot import Red
from redbot.core.commands import UserInputOptional from redbot.core.commands import UserInputOptional, RawUserIdConverter
from redbot.core.i18n import Translator, cog_i18n from redbot.core.i18n import Translator, cog_i18n
from redbot.core.utils import AsyncIter from redbot.core.utils import AsyncIter
from redbot.core.utils.views import ConfirmView
from redbot.core.utils.chat_formatting import warning, pagify from redbot.core.utils.chat_formatting import warning, pagify
from redbot.core.utils.menus import menu from redbot.core.utils.menus import menu
@ -373,7 +374,7 @@ class Warnings(commands.Cog):
async def warn( async def warn(
self, self,
ctx: commands.Context, ctx: commands.Context,
member: discord.Member, user: Union[discord.Member, RawUserIdConverter],
points: UserInputOptional[int] = 1, points: UserInputOptional[int] = 1,
*, *,
reason: str, reason: str,
@ -386,6 +387,49 @@ class Warnings(commands.Cog):
or a custom reason if ``[p]warningset allowcustomreasons`` is set. or a custom reason if ``[p]warningset allowcustomreasons`` is set.
""" """
guild = ctx.guild guild = ctx.guild
member = None
if isinstance(user, discord.Member):
member = user
elif isinstance(user, int):
if not ctx.channel.permissions_for(ctx.guild.me).ban_members:
await ctx.send(_("User `{user}` is not in the server.").format(user=user))
return
user_obj = self.bot.get_user(user) or discord.Object(id=user)
confirm = ConfirmView(ctx.author, timeout=30)
confirm.message = await ctx.send(
_(
"User `{user}` is not in the server. Would you like to ban them instead?"
).format(user=user),
view=confirm,
)
await confirm.wait()
if confirm.result:
try:
await ctx.guild.ban(user_obj, reason=reason)
await modlog.create_case(
self.bot,
guild,
ctx.message.created_at,
"hackban",
user,
ctx.author,
reason,
until=None,
channel=None,
)
except discord.HTTPException as error:
await ctx.send(
_("An error occurred while trying to ban the user. Error: {error}").format(
error=error
)
)
else:
confirm.message = await ctx.send(_("No action taken."))
await ctx.tick()
return
if member == ctx.author: if member == ctx.author:
return await ctx.send(_("You cannot warn yourself.")) return await ctx.send(_("You cannot warn yourself."))
if member.bot: if member.bot: