[Mod] Added [p]modset deletedelay (#445)

Deletes issued command after X seconds
This commit is contained in:
Will 2016-11-28 20:40:40 -05:00 committed by Twentysix
parent 67de9a45fe
commit c34bf36dee

View File

@ -62,11 +62,14 @@ class Mod:
await send_cmd_help(ctx) await send_cmd_help(ctx)
roles = settings.get_server(server).copy() roles = settings.get_server(server).copy()
_settings = {**self.settings[server.id], **roles} _settings = {**self.settings[server.id], **roles}
if "delete_delay" not in _settings:
_settings["delete_delay"] = -1
msg = ("Admin role: {ADMIN_ROLE}\n" msg = ("Admin role: {ADMIN_ROLE}\n"
"Mod role: {MOD_ROLE}\n" "Mod role: {MOD_ROLE}\n"
"Mod-log: {mod-log}\n" "Mod-log: {mod-log}\n"
"Delete repeats: {delete_repeats}\n" "Delete repeats: {delete_repeats}\n"
"Ban mention spam: {ban_mention_spam}\n" "Ban mention spam: {ban_mention_spam}\n"
"Delete delay: {delete_delay}\n"
"".format(**_settings)) "".format(**_settings))
await self.bot.say(box(msg)) await self.bot.say(box(msg))
@ -149,6 +152,36 @@ class Mod:
dataIO.save_json("data/mod/modlog.json", self.cases) dataIO.save_json("data/mod/modlog.json", self.cases)
await self.bot.say("Cases have been reset.") await self.bot.say("Cases have been reset.")
@modset.command(pass_context=True, no_pm=True)
async def deletedelay(self, ctx, time: int=None):
"""Sets the delay until the bot removes the command message.
Must be between -1 and 60.
A delay of -1 means the bot will not remove the message."""
server = ctx.message.server
if time is not None:
time = min(max(time, -1), 60) # Enforces the time limits
self.settings[server.id]["delete_delay"] = time
if time == -1:
await self.bot.say("Command deleting disabled.")
else:
await self.bot.say("Delete delay set to {}"
" seconds.".format(time))
dataIO.save_json("data/mod/settings.json", self.settings)
else:
try:
delay = self.settings[server.id]["delete_delay"]
except KeyError:
await self.bot.say("Delete delay not yet set up on this"
" server.")
else:
if delay != -1:
await self.bot.say("Bot will delete command messages after"
" {} seconds. Set this value to -1 to"
" stop deleting messages".format(delay))
else:
await self.bot.say("I will not delete command messages.")
@commands.command(no_pm=True, pass_context=True) @commands.command(no_pm=True, pass_context=True)
@checks.admin_or_permissions(kick_members=True) @checks.admin_or_permissions(kick_members=True)
async def kick(self, ctx, user: discord.Member): async def kick(self, ctx, user: discord.Member):
@ -1230,6 +1263,32 @@ class Mod:
self._tmp_banned_cache.remove(author) self._tmp_banned_cache.remove(author)
return False return False
async def on_command(self, command, ctx):
"""Currently used for:
* delete delay"""
server = ctx.message.server
message = ctx.message
try:
delay = self.settings[server.id]["delete_delay"]
except KeyError:
# We have no delay set
return
if delay == -1:
return
async def _delete_helper(bot, message):
try:
await bot.delete_message(message)
logger.debug("Deleted command msg {}".format(message.id))
except discord.errors.Forbidden:
# Do not have delete permissions
logger.debug("Wanted to delete mid {} but no"
" permissions".format(message.id))
await asyncio.sleep(delay)
await _delete_helper(self.bot, message)
async def on_message(self, message): async def on_message(self, message):
if message.channel.is_private or self.bot.user == message.author \ if message.channel.is_private or self.bot.user == message.author \
or not isinstance(message.author, discord.Member): or not isinstance(message.author, discord.Member):