mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-07 11:48:55 -05:00
[V3] Use our own checks instead of discord.py's (#1861)
* [V3] Use our own checks instead of discord.py's * Remove bot.has_permissions checks too
This commit is contained in:
parent
83a0459b6a
commit
c0d01f32a6
@ -313,7 +313,7 @@ class Admin:
|
|||||||
await self._removerole(ctx, ctx.author, selfrole)
|
await self._removerole(ctx, ctx.author, selfrole)
|
||||||
|
|
||||||
@selfrole.command(name="add")
|
@selfrole.command(name="add")
|
||||||
@commands.has_permissions(manage_roles=True)
|
@checks.admin_or_permissions(manage_roles=True)
|
||||||
async def selfrole_add(self, ctx: commands.Context, *, role: discord.Role):
|
async def selfrole_add(self, ctx: commands.Context, *, role: discord.Role):
|
||||||
"""
|
"""
|
||||||
Add a role to the list of available selfroles.
|
Add a role to the list of available selfroles.
|
||||||
@ -327,7 +327,7 @@ class Admin:
|
|||||||
await ctx.send("The selfroles list has been successfully modified.")
|
await ctx.send("The selfroles list has been successfully modified.")
|
||||||
|
|
||||||
@selfrole.command(name="delete")
|
@selfrole.command(name="delete")
|
||||||
@commands.has_permissions(manage_roles=True)
|
@checks.admin_or_permissions(manage_roles=True)
|
||||||
async def selfrole_delete(self, ctx: commands.Context, *, role: SelfRole):
|
async def selfrole_delete(self, ctx: commands.Context, *, role: SelfRole):
|
||||||
"""
|
"""
|
||||||
Removes a role from the list of available selfroles.
|
Removes a role from the list of available selfroles.
|
||||||
|
|||||||
@ -100,7 +100,6 @@ class Cleanup:
|
|||||||
|
|
||||||
@cleanup.command()
|
@cleanup.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.bot_has_permissions(manage_messages=True)
|
|
||||||
async def text(
|
async def text(
|
||||||
self, ctx: commands.Context, text: str, number: int, delete_pinned: bool = False
|
self, ctx: commands.Context, text: str, number: int, delete_pinned: bool = False
|
||||||
):
|
):
|
||||||
@ -112,6 +111,10 @@ class Cleanup:
|
|||||||
Remember to use double quotes."""
|
Remember to use double quotes."""
|
||||||
|
|
||||||
channel = ctx.channel
|
channel = ctx.channel
|
||||||
|
if not channel.permissions_for(ctx.guild.me).manage_messages:
|
||||||
|
await ctx.send("I need the Manage Messages permission to do this.")
|
||||||
|
return
|
||||||
|
|
||||||
author = ctx.author
|
author = ctx.author
|
||||||
is_bot = self.bot.user.bot
|
is_bot = self.bot.user.bot
|
||||||
|
|
||||||
@ -150,7 +153,6 @@ class Cleanup:
|
|||||||
|
|
||||||
@cleanup.command()
|
@cleanup.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.bot_has_permissions(manage_messages=True)
|
|
||||||
async def user(
|
async def user(
|
||||||
self, ctx: commands.Context, user: str, number: int, delete_pinned: bool = False
|
self, ctx: commands.Context, user: str, number: int, delete_pinned: bool = False
|
||||||
):
|
):
|
||||||
@ -159,6 +161,10 @@ class Cleanup:
|
|||||||
Examples:
|
Examples:
|
||||||
cleanup user @\u200bTwentysix 2
|
cleanup user @\u200bTwentysix 2
|
||||||
cleanup user Red 6"""
|
cleanup user Red 6"""
|
||||||
|
channel = ctx.channel
|
||||||
|
if not channel.permissions_for(ctx.guild.me).manage_messages:
|
||||||
|
await ctx.send("I need the Manage Messages permission to do this.")
|
||||||
|
return
|
||||||
|
|
||||||
member = None
|
member = None
|
||||||
try:
|
try:
|
||||||
@ -171,7 +177,6 @@ class Cleanup:
|
|||||||
else:
|
else:
|
||||||
_id = member.id
|
_id = member.id
|
||||||
|
|
||||||
channel = ctx.channel
|
|
||||||
author = ctx.author
|
author = ctx.author
|
||||||
is_bot = self.bot.user.bot
|
is_bot = self.bot.user.bot
|
||||||
|
|
||||||
@ -212,7 +217,6 @@ class Cleanup:
|
|||||||
|
|
||||||
@cleanup.command()
|
@cleanup.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.bot_has_permissions(manage_messages=True)
|
|
||||||
async def after(self, ctx: commands.Context, message_id: int, delete_pinned: bool = False):
|
async def after(self, ctx: commands.Context, message_id: int, delete_pinned: bool = False):
|
||||||
"""Deletes all messages after specified message.
|
"""Deletes all messages after specified message.
|
||||||
|
|
||||||
@ -224,6 +228,9 @@ class Cleanup:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
channel = ctx.channel
|
channel = ctx.channel
|
||||||
|
if not channel.permissions_for(ctx.guild.me).manage_messages:
|
||||||
|
await ctx.send("I need the Manage Messages permission to do this.")
|
||||||
|
return
|
||||||
author = ctx.author
|
author = ctx.author
|
||||||
is_bot = self.bot.user.bot
|
is_bot = self.bot.user.bot
|
||||||
|
|
||||||
@ -250,7 +257,6 @@ class Cleanup:
|
|||||||
|
|
||||||
@cleanup.command()
|
@cleanup.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.bot_has_permissions(manage_messages=True)
|
|
||||||
async def messages(self, ctx: commands.Context, number: int, delete_pinned: bool = False):
|
async def messages(self, ctx: commands.Context, number: int, delete_pinned: bool = False):
|
||||||
"""Deletes last X messages.
|
"""Deletes last X messages.
|
||||||
|
|
||||||
@ -258,6 +264,9 @@ class Cleanup:
|
|||||||
cleanup messages 26"""
|
cleanup messages 26"""
|
||||||
|
|
||||||
channel = ctx.channel
|
channel = ctx.channel
|
||||||
|
if not channel.permissions_for(ctx.guild.me).manage_messages:
|
||||||
|
await ctx.send("I need the Manage Messages permission to do this.")
|
||||||
|
return
|
||||||
author = ctx.author
|
author = ctx.author
|
||||||
|
|
||||||
is_bot = self.bot.user.bot
|
is_bot = self.bot.user.bot
|
||||||
@ -284,11 +293,13 @@ class Cleanup:
|
|||||||
|
|
||||||
@cleanup.command(name="bot")
|
@cleanup.command(name="bot")
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.bot_has_permissions(manage_messages=True)
|
|
||||||
async def cleanup_bot(self, ctx: commands.Context, number: int, delete_pinned: bool = False):
|
async def cleanup_bot(self, ctx: commands.Context, number: int, delete_pinned: bool = False):
|
||||||
"""Cleans up command messages and messages from the bot."""
|
"""Cleans up command messages and messages from the bot."""
|
||||||
|
|
||||||
channel = ctx.message.channel
|
channel = ctx.channel
|
||||||
|
if not channel.permissions_for(ctx.guild.me).manage_messages:
|
||||||
|
await ctx.send("I need the Manage Messages permission to do this.")
|
||||||
|
return
|
||||||
author = ctx.message.author
|
author = ctx.message.author
|
||||||
is_bot = self.bot.user.bot
|
is_bot = self.bot.user.bot
|
||||||
|
|
||||||
|
|||||||
@ -628,7 +628,6 @@ class Mod:
|
|||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@checks.admin_or_permissions(ban_members=True)
|
@checks.admin_or_permissions(ban_members=True)
|
||||||
@commands.bot_has_permissions(ban_members=True)
|
|
||||||
async def unban(self, ctx: commands.Context, user_id: int, *, reason: str = None):
|
async def unban(self, ctx: commands.Context, user_id: int, *, reason: str = None):
|
||||||
"""Unbans the target user.
|
"""Unbans the target user.
|
||||||
|
|
||||||
@ -636,6 +635,10 @@ class Mod:
|
|||||||
1. Copy it from the mod log case (if one was created), or
|
1. Copy it from the mod log case (if one was created), or
|
||||||
2. enable developer mode, go to Bans in this server's settings, right-
|
2. enable developer mode, go to Bans in this server's settings, right-
|
||||||
click the user and select 'Copy ID'."""
|
click the user and select 'Copy ID'."""
|
||||||
|
channel = ctx.channel
|
||||||
|
if not channel.permissions_for(ctx.guild.me).ban_members:
|
||||||
|
await ctx.send("I need the Ban Members permission to do this.")
|
||||||
|
return
|
||||||
guild = ctx.guild
|
guild = ctx.guild
|
||||||
author = ctx.author
|
author = ctx.author
|
||||||
user = await self.bot.get_user_info(user_id)
|
user = await self.bot.get_user_info(user_id)
|
||||||
@ -1186,7 +1189,7 @@ class Mod:
|
|||||||
await ctx.send(_("Channel already in ignore list."))
|
await ctx.send(_("Channel already in ignore list."))
|
||||||
|
|
||||||
@ignore.command(name="server", aliases=["guild"])
|
@ignore.command(name="server", aliases=["guild"])
|
||||||
@commands.has_permissions(manage_guild=True)
|
@checks.admin_or_permissions(manage_guild=True)
|
||||||
async def ignore_guild(self, ctx: commands.Context):
|
async def ignore_guild(self, ctx: commands.Context):
|
||||||
"""Ignores current server"""
|
"""Ignores current server"""
|
||||||
guild = ctx.guild
|
guild = ctx.guild
|
||||||
@ -1219,7 +1222,7 @@ class Mod:
|
|||||||
await ctx.send(_("That channel is not in the ignore list."))
|
await ctx.send(_("That channel is not in the ignore list."))
|
||||||
|
|
||||||
@unignore.command(name="server", aliases=["guild"])
|
@unignore.command(name="server", aliases=["guild"])
|
||||||
@commands.has_permissions(manage_guild=True)
|
@checks.admin_or_permissions(manage_guild=True)
|
||||||
async def unignore_guild(self, ctx: commands.Context):
|
async def unignore_guild(self, ctx: commands.Context):
|
||||||
"""Removes current guild from ignore list"""
|
"""Removes current guild from ignore list"""
|
||||||
guild = ctx.message.guild
|
guild = ctx.message.guild
|
||||||
|
|||||||
@ -17,6 +17,7 @@ _models = ["owner", "guildowner", "admin", "mod", "all"]
|
|||||||
_ = Translator("Permissions", __file__)
|
_ = Translator("Permissions", __file__)
|
||||||
|
|
||||||
REACTS = {"\N{WHITE HEAVY CHECK MARK}": True, "\N{NEGATIVE SQUARED CROSS MARK}": False}
|
REACTS = {"\N{WHITE HEAVY CHECK MARK}": True, "\N{NEGATIVE SQUARED CROSS MARK}": False}
|
||||||
|
Y_OR_N = {"y": True, "yes": True, "n": False, "no": False}
|
||||||
|
|
||||||
|
|
||||||
@cog_i18n(_)
|
@cog_i18n(_)
|
||||||
@ -532,31 +533,14 @@ class Permissions:
|
|||||||
models.update(data)
|
models.update(data)
|
||||||
await ctx.send(_("Default set."))
|
await ctx.send(_("Default set."))
|
||||||
|
|
||||||
@commands.bot_has_permissions(add_reactions=True)
|
|
||||||
@checks.is_owner()
|
@checks.is_owner()
|
||||||
@permissions.command(name="clearglobalsettings")
|
@permissions.command(name="clearglobalsettings")
|
||||||
async def clear_globals(self, ctx: commands.Context):
|
async def clear_globals(self, ctx: commands.Context):
|
||||||
"""
|
"""
|
||||||
Clears all global rules.
|
Clears all global rules.
|
||||||
"""
|
"""
|
||||||
|
await self._confirm_then_clear_rules(ctx, is_guild=False)
|
||||||
|
|
||||||
m = await ctx.send("Are you sure?")
|
|
||||||
for r in REACTS.keys():
|
|
||||||
await m.add_reaction(r)
|
|
||||||
try:
|
|
||||||
reaction, user = await self.bot.wait_for(
|
|
||||||
"reaction_add", check=lambda r, u: u == ctx.author and str(r) in REACTS, timeout=30
|
|
||||||
)
|
|
||||||
except asyncio.TimeoutError:
|
|
||||||
return await ctx.send(_("Ok, try responding with an emoji next time."))
|
|
||||||
|
|
||||||
if REACTS.get(str(reaction)):
|
|
||||||
await self.config.owner_models.clear()
|
|
||||||
await ctx.send(_("Global settings cleared."))
|
|
||||||
else:
|
|
||||||
await ctx.send(_("Okay."))
|
|
||||||
|
|
||||||
@commands.bot_has_permissions(add_reactions=True)
|
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@checks.guildowner_or_permissions(administrator=True)
|
@checks.guildowner_or_permissions(administrator=True)
|
||||||
@permissions.command(name="clearguildsettings")
|
@permissions.command(name="clearguildsettings")
|
||||||
@ -564,20 +548,43 @@ class Permissions:
|
|||||||
"""
|
"""
|
||||||
Clears all guild rules.
|
Clears all guild rules.
|
||||||
"""
|
"""
|
||||||
|
await self._confirm_then_clear_rules(ctx, is_guild=True)
|
||||||
|
|
||||||
m = await ctx.send("Are you sure?")
|
async def _confirm_then_clear_rules(self, ctx: commands.Context, is_guild: bool):
|
||||||
|
if ctx.guild.me.permissions_in(ctx.channel).add_reactions:
|
||||||
|
m = await ctx.send(_("Are you sure?"))
|
||||||
for r in REACTS.keys():
|
for r in REACTS.keys():
|
||||||
await m.add_reaction(r)
|
await m.add_reaction(r)
|
||||||
try:
|
try:
|
||||||
reaction, user = await self.bot.wait_for(
|
reaction, user = await self.bot.wait_for(
|
||||||
"reaction_add", check=lambda r, u: u == ctx.author and str(r) in REACTS, timeout=30
|
"reaction_add",
|
||||||
|
check=lambda r, u: u == ctx.author and str(r) in REACTS,
|
||||||
|
timeout=30,
|
||||||
)
|
)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
return await ctx.send(_("Ok, try responding with an emoji next time."))
|
return await ctx.send(_("Ok, try responding with an emoji next time."))
|
||||||
|
|
||||||
if REACTS.get(str(reaction)):
|
agreed = REACTS.get(str(reaction))
|
||||||
|
else:
|
||||||
|
await ctx.send(_("Are you sure? (y/n)"))
|
||||||
|
try:
|
||||||
|
message = await self.bot.wait_for(
|
||||||
|
"message",
|
||||||
|
check=lambda m: m.author == ctx.author and m.content in Y_OR_N,
|
||||||
|
timeout=30,
|
||||||
|
)
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
return await ctx.send(_("Ok, try responding with yes or no next time."))
|
||||||
|
|
||||||
|
agreed = Y_OR_N.get(message.content.lower())
|
||||||
|
|
||||||
|
if agreed:
|
||||||
|
if is_guild:
|
||||||
await self.config.guild(ctx.guild).owner_models.clear()
|
await self.config.guild(ctx.guild).owner_models.clear()
|
||||||
await ctx.send(_("Guild settings cleared."))
|
await ctx.send(_("Guild settings cleared."))
|
||||||
|
else:
|
||||||
|
await self.config.owner_models.clear()
|
||||||
|
await ctx.send(_("Global settings cleared."))
|
||||||
else:
|
else:
|
||||||
await ctx.send(_("Okay."))
|
await ctx.send(_("Okay."))
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user