mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
[Mod] Move deletedelay to core (#3638)
* Move deletedelay to core * line lengths * address review * move settings change * fine...
This commit is contained in:
parent
d957e44e1e
commit
b9f07e8684
@ -13,7 +13,6 @@ from redbot.core.utils._internal_utils import send_to_owners_with_prefix_replace
|
|||||||
from .casetypes import CASETYPES
|
from .casetypes import CASETYPES
|
||||||
from .events import Events
|
from .events import Events
|
||||||
from .kickban import KickBanMixin
|
from .kickban import KickBanMixin
|
||||||
from .movetocore import MoveToCore
|
|
||||||
from .mutes import MuteMixin
|
from .mutes import MuteMixin
|
||||||
from .names import ModInfo
|
from .names import ModInfo
|
||||||
from .slowmode import Slowmode
|
from .slowmode import Slowmode
|
||||||
@ -21,7 +20,7 @@ from .settings import ModSettings
|
|||||||
|
|
||||||
_ = T_ = Translator("Mod", __file__)
|
_ = T_ = Translator("Mod", __file__)
|
||||||
|
|
||||||
__version__ = "1.1.0"
|
__version__ = "1.2.0"
|
||||||
|
|
||||||
|
|
||||||
class CompositeMetaClass(type(commands.Cog), type(ABC)):
|
class CompositeMetaClass(type(commands.Cog), type(ABC)):
|
||||||
@ -38,7 +37,6 @@ class Mod(
|
|||||||
ModSettings,
|
ModSettings,
|
||||||
Events,
|
Events,
|
||||||
KickBanMixin,
|
KickBanMixin,
|
||||||
MoveToCore,
|
|
||||||
MuteMixin,
|
MuteMixin,
|
||||||
ModInfo,
|
ModInfo,
|
||||||
Slowmode,
|
Slowmode,
|
||||||
@ -111,8 +109,16 @@ class Mod(
|
|||||||
"Please use `[p]moveignoredchannels` if "
|
"Please use `[p]moveignoredchannels` if "
|
||||||
"you were previously using these functions."
|
"you were previously using these functions."
|
||||||
)
|
)
|
||||||
self.bot.loop.create_task(send_to_owners_with_prefix_replaced(self.bot, msg))
|
self.bot.loop.create_task(self.bot.send_to_owners_with_prefix_replaced(msg))
|
||||||
await self.settings.version.set(__version__)
|
await self.settings.version.set("1.1.0")
|
||||||
|
if await self.settings.version() < "1.2.0":
|
||||||
|
msg = _(
|
||||||
|
"Delete delay settings have been moved. "
|
||||||
|
"Please use `[p]movedeletedelay` if "
|
||||||
|
"you were previously using these functions."
|
||||||
|
)
|
||||||
|
self.bot.loop.create_task(self.bot.send_to_owners_with_prefix_replaced(msg))
|
||||||
|
await self.settings.version.set("1.2.0")
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.is_owner()
|
@commands.is_owner()
|
||||||
@ -127,3 +133,17 @@ class Mod(
|
|||||||
await self.bot._config.channel_from_id(channel_id).ignored.set(settings["ignored"])
|
await self.bot._config.channel_from_id(channel_id).ignored.set(settings["ignored"])
|
||||||
await self.settings.channel_from_id(channel_id).clear()
|
await self.settings.channel_from_id(channel_id).clear()
|
||||||
await ctx.send(_("Ignored channels and guilds restored."))
|
await ctx.send(_("Ignored channels and guilds restored."))
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
@commands.is_owner()
|
||||||
|
async def movedeletedelay(self, ctx: commands.Context) -> None:
|
||||||
|
"""
|
||||||
|
Move deletedelay settings to core
|
||||||
|
"""
|
||||||
|
all_guilds = await self.settings.all_guilds()
|
||||||
|
for guild_id, settings in all_guilds.items():
|
||||||
|
await self.bot._config.guild_from_id(guild_id).delete_delay.set(
|
||||||
|
settings["delete_delay"]
|
||||||
|
)
|
||||||
|
await self.settings.guild_from_id(guild_id).delete_delay.clear()
|
||||||
|
await ctx.send(_("Delete delay settings restored."))
|
||||||
|
|||||||
@ -1,49 +0,0 @@
|
|||||||
import logging
|
|
||||||
import asyncio
|
|
||||||
import contextlib
|
|
||||||
|
|
||||||
import discord
|
|
||||||
from redbot.core import commands, checks, i18n
|
|
||||||
from redbot.core.utils.chat_formatting import box
|
|
||||||
from .abc import MixinMeta
|
|
||||||
|
|
||||||
log = logging.getLogger("red.mod")
|
|
||||||
_ = i18n.Translator("Mod", __file__)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: Empty this to core red.
|
|
||||||
class MoveToCore(MixinMeta):
|
|
||||||
"""
|
|
||||||
Mixin for things which should really not be in mod, but have not been moved out yet.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@commands.Cog.listener()
|
|
||||||
async def on_command_completion(self, ctx: commands.Context):
|
|
||||||
await self._delete_delay(ctx)
|
|
||||||
|
|
||||||
@commands.Cog.listener()
|
|
||||||
async def on_command_error(self, ctx: commands.Context, error: Exception):
|
|
||||||
# Every message which isn't a command but which
|
|
||||||
# starts with a bot prefix is dispatched as a command error
|
|
||||||
if not isinstance(error, commands.CommandNotFound):
|
|
||||||
await self._delete_delay(ctx)
|
|
||||||
|
|
||||||
async def _delete_delay(self, ctx: commands.Context):
|
|
||||||
"""Currently used for:
|
|
||||||
* delete delay"""
|
|
||||||
guild = ctx.guild
|
|
||||||
if guild is None:
|
|
||||||
return
|
|
||||||
message = ctx.message
|
|
||||||
delay = await self.settings.guild(guild).delete_delay()
|
|
||||||
|
|
||||||
if delay == -1:
|
|
||||||
return
|
|
||||||
|
|
||||||
async def _delete_helper(m):
|
|
||||||
with contextlib.suppress(discord.HTTPException):
|
|
||||||
await m.delete()
|
|
||||||
log.debug("Deleted command msg {}".format(m.id))
|
|
||||||
|
|
||||||
await asyncio.sleep(delay)
|
|
||||||
await _delete_helper(message)
|
|
||||||
@ -157,36 +157,6 @@ class ModSettings(MixinMeta):
|
|||||||
else:
|
else:
|
||||||
await ctx.send(_("Repeated messages will be ignored."))
|
await ctx.send(_("Repeated messages will be ignored."))
|
||||||
|
|
||||||
@modset.command()
|
|
||||||
@commands.guild_only()
|
|
||||||
async def deletedelay(self, ctx: commands.Context, time: int = None):
|
|
||||||
"""Set the delay until the bot removes the command message.
|
|
||||||
|
|
||||||
Must be between -1 and 60.
|
|
||||||
|
|
||||||
Set to -1 to disable this feature.
|
|
||||||
"""
|
|
||||||
guild = ctx.guild
|
|
||||||
if time is not None:
|
|
||||||
time = min(max(time, -1), 60) # Enforces the time limits
|
|
||||||
await self.settings.guild(guild).delete_delay.set(time)
|
|
||||||
if time == -1:
|
|
||||||
await ctx.send(_("Command deleting disabled."))
|
|
||||||
else:
|
|
||||||
await ctx.send(_("Delete delay set to {num} seconds.").format(num=time))
|
|
||||||
else:
|
|
||||||
delay = await self.settings.guild(guild).delete_delay()
|
|
||||||
if delay != -1:
|
|
||||||
await ctx.send(
|
|
||||||
_(
|
|
||||||
"Bot will delete command messages after"
|
|
||||||
" {num} seconds. Set this value to -1 to"
|
|
||||||
" stop deleting messages"
|
|
||||||
).format(num=delay)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
await ctx.send(_("I will not delete command messages."))
|
|
||||||
|
|
||||||
@modset.command()
|
@modset.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
async def reinvite(self, ctx: commands.Context):
|
async def reinvite(self, ctx: commands.Context):
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import platform
|
|||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
|
import contextlib
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
@ -125,6 +126,7 @@ class RedBase(
|
|||||||
fuzzy=False,
|
fuzzy=False,
|
||||||
disabled_commands=[],
|
disabled_commands=[],
|
||||||
autoimmune_ids=[],
|
autoimmune_ids=[],
|
||||||
|
delete_delay=-1,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._config.register_channel(embeds=None, ignored=False)
|
self._config.register_channel(embeds=None, ignored=False)
|
||||||
@ -1207,6 +1209,26 @@ class RedBase(
|
|||||||
"""Wait until our post connection startup is done."""
|
"""Wait until our post connection startup is done."""
|
||||||
await self._red_ready.wait()
|
await self._red_ready.wait()
|
||||||
|
|
||||||
|
async def _delete_delay(self, ctx: commands.Context):
|
||||||
|
"""Currently used for:
|
||||||
|
* delete delay"""
|
||||||
|
guild = ctx.guild
|
||||||
|
if guild is None:
|
||||||
|
return
|
||||||
|
message = ctx.message
|
||||||
|
delay = await self._config.guild(guild).delete_delay()
|
||||||
|
|
||||||
|
if delay == -1:
|
||||||
|
return
|
||||||
|
|
||||||
|
async def _delete_helper(m):
|
||||||
|
with contextlib.suppress(discord.HTTPException):
|
||||||
|
await m.delete()
|
||||||
|
log.debug("Deleted command msg {}".format(m.id))
|
||||||
|
|
||||||
|
await asyncio.sleep(delay)
|
||||||
|
await _delete_helper(message)
|
||||||
|
|
||||||
|
|
||||||
class Red(RedBase, discord.AutoShardedClient):
|
class Red(RedBase, discord.AutoShardedClient):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -912,6 +912,37 @@ class Core(commands.Cog, CoreLogic):
|
|||||||
for page in pagify(settings):
|
for page in pagify(settings):
|
||||||
await ctx.send(box(page))
|
await ctx.send(box(page))
|
||||||
|
|
||||||
|
@checks.guildowner_or_permissions(administrator=True)
|
||||||
|
@_set.command(name="deletedelay")
|
||||||
|
@commands.guild_only()
|
||||||
|
async def deletedelay(self, ctx: commands.Context, time: int = None):
|
||||||
|
"""Set the delay until the bot removes the command message.
|
||||||
|
|
||||||
|
Must be between -1 and 60.
|
||||||
|
|
||||||
|
Set to -1 to disable this feature.
|
||||||
|
"""
|
||||||
|
guild = ctx.guild
|
||||||
|
if time is not None:
|
||||||
|
time = min(max(time, -1), 60) # Enforces the time limits
|
||||||
|
await ctx.bot._config.guild(guild).delete_delay.set(time)
|
||||||
|
if time == -1:
|
||||||
|
await ctx.send(_("Command deleting disabled."))
|
||||||
|
else:
|
||||||
|
await ctx.send(_("Delete delay set to {num} seconds.").format(num=time))
|
||||||
|
else:
|
||||||
|
delay = await ctx.bot._config.guild(guild).delete_delay()
|
||||||
|
if delay != -1:
|
||||||
|
await ctx.send(
|
||||||
|
_(
|
||||||
|
"Bot will delete command messages after"
|
||||||
|
" {num} seconds. Set this value to -1 to"
|
||||||
|
" stop deleting messages"
|
||||||
|
).format(num=delay)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await ctx.send(_("I will not delete command messages."))
|
||||||
|
|
||||||
@checks.is_owner()
|
@checks.is_owner()
|
||||||
@_set.command(name="description")
|
@_set.command(name="description")
|
||||||
async def setdescription(self, ctx: commands.Context, *, description: str = ""):
|
async def setdescription(self, ctx: commands.Context, *, description: str = ""):
|
||||||
|
|||||||
@ -134,6 +134,10 @@ def init_events(bot, cli_flags):
|
|||||||
if outdated_red_message:
|
if outdated_red_message:
|
||||||
await bot.send_to_owners(outdated_red_message)
|
await bot.send_to_owners(outdated_red_message)
|
||||||
|
|
||||||
|
@bot.event
|
||||||
|
async def on_command_completion(ctx: commands.Context):
|
||||||
|
await bot._delete_delay(ctx)
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_command_error(ctx, error, unhandled_by_cog=False):
|
async def on_command_error(ctx, error, unhandled_by_cog=False):
|
||||||
|
|
||||||
@ -144,6 +148,8 @@ def init_events(bot, cli_flags):
|
|||||||
if ctx.cog:
|
if ctx.cog:
|
||||||
if commands.Cog._get_overridden_method(ctx.cog.cog_command_error) is not None:
|
if commands.Cog._get_overridden_method(ctx.cog.cog_command_error) is not None:
|
||||||
return
|
return
|
||||||
|
if not isinstance(error, commands.CommandNotFound):
|
||||||
|
await bot._delete_delay(ctx)
|
||||||
|
|
||||||
if isinstance(error, commands.MissingRequiredArgument):
|
if isinstance(error, commands.MissingRequiredArgument):
|
||||||
await ctx.send_help()
|
await ctx.send_help()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user