From c78cbcd12bcfa0b32b44242dfcc185819ecd46f1 Mon Sep 17 00:00:00 2001 From: Travis Date: Fri, 1 Dec 2017 13:34:33 -0600 Subject: [PATCH 1/6] Made self deafens clean content before posting in modlog --- dozer/cogs/moderation.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dozer/cogs/moderation.py b/dozer/cogs/moderation.py index 5a0b822e..a91e219f 100644 --- a/dozer/cogs/moderation.py +++ b/dozer/cogs/moderation.py @@ -2,6 +2,7 @@ from discord.ext.commands import BadArgument, has_permissions, bot_has_permissions, RoleConverter from .. import db from ._utils import * +from ..utils import clean class SafeRoleConverter(RoleConverter): @@ -437,6 +438,7 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): await ctx.send("Deafening {}...".format(ctx.author)) await self.permoverride(ctx.author, read_messages=False) modlogmessage = "{} has deafened themselves because {}".format(ctx.author, reason) + modlogmessage = clean(ctx=ctx, text=modlogmessage) with db.Session() as session: user = session.query(Deafen).filter_by(id=ctx.author.id).one_or_none() if user is not None: From 1d2dad21e8dcbaf31f5943d81d0099add710b51e Mon Sep 17 00:00:00 2001 From: Ian W Date: Fri, 1 Dec 2017 22:15:16 -0800 Subject: [PATCH 2/6] Decorator for moderation commands --- dozer/cogs/moderation.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/moderation.py b/dozer/cogs/moderation.py index 5a0b822e..8af2ad71 100644 --- a/dozer/cogs/moderation.py +++ b/dozer/cogs/moderation.py @@ -1,4 +1,4 @@ -import asyncio, discord, re +import asyncio, discord, functools, re from discord.ext.commands import BadArgument, has_permissions, bot_has_permissions, RoleConverter from .. import db from ._utils import * @@ -15,6 +15,16 @@ async def convert(self, ctx, arg): raise +def moderation_command(log_type): + def decorator(callback): + @functools.wraps(callback) + async def new_callback(self, ctx, user: discord.Member, *args, reason='No reason provided'): + await callback(self, ctx, user, *args, reason=reason) + # TODO log to web + return new_callback + return decorator + + # Todo: timed/self mutes class Moderation(Cog): async def permoverride(self, user, **overwrites): @@ -50,6 +60,7 @@ async def punishmenttimer(self, ctx, timing, target, lookup): @command() @has_permissions(ban_members=True) @bot_has_permissions(ban_members=True) + @moderation_command('ban') async def ban(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Bans the user mentioned." usertoban = user_mentions @@ -68,6 +79,7 @@ async def ban(self, ctx, user_mentions: discord.User, *, reason="No reason provi @command() @has_permissions(ban_members=True) @bot_has_permissions(ban_members=True) + @moderation_command('unban') async def unban(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Unbans the user ID mentioned." usertoban = user_mentions @@ -85,6 +97,7 @@ async def unban(self, ctx, user_mentions: discord.User, *, reason="No reason pro @command() @has_permissions(kick_members=True) @bot_has_permissions(kick_members=True) + @moderation_command('kick') async def kick(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Kicks the user mentioned." usertokick = user_mentions @@ -369,6 +382,7 @@ async def prune(self, ctx, num_to_delete: int): @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) + @moderation_command('mute') async def mute(self, ctx, member_mentions: discord.Member, *, reason="No reason provided"): await self.permoverride(member_mentions, send_messages=False, add_reactions=False) modlogmessage = "{} has been muted by {} because {}".format(member_mentions, ctx.author.display_name, reason) @@ -392,6 +406,7 @@ async def mute(self, ctx, member_mentions: discord.Member, *, reason="No reason @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) + @moderation_command('unmute') async def unmute(self, ctx, member_mentions: discord.Member): await self.permoverride(member_mentions, send_messages=None, add_reactions=None) modlogmessage = "{} has been unmuted by {}".format(member_mentions, ctx.author.display_name) @@ -413,6 +428,7 @@ async def unmute(self, ctx, member_mentions: discord.Member): @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) + @moderation_command('deafen') async def deafen(self, ctx, member_mentions: discord.Member, *, reason="No reason provided"): await self.permoverride(member_mentions, read_messages=False) modlogmessage = "{} has been deafened by {} because {}".format(member_mentions, ctx.author.display_name, reason) @@ -457,6 +473,7 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) + @moderation_command('undeafen') async def undeafen(self, ctx, member_mentions: discord.Member): await self.permoverride(member_mentions, read_messages=None) modlogmessage = "{} has been undeafened by {}".format(member_mentions, ctx.author.display_name) From 9b09cc83c2462be36dc0f3ce25bb9b29b9a88130 Mon Sep 17 00:00:00 2001 From: Travis Weir Date: Sun, 3 Dec 2017 23:28:12 -0600 Subject: [PATCH 3/6] Massive overhaul to eliminate code duplication and also make things go in a better order (testing later) --- dozer/cogs/moderation.py | 133 ++++++++++----------------------------- 1 file changed, 34 insertions(+), 99 deletions(-) diff --git a/dozer/cogs/moderation.py b/dozer/cogs/moderation.py index d82ecb87..b6610c51 100644 --- a/dozer/cogs/moderation.py +++ b/dozer/cogs/moderation.py @@ -16,18 +16,25 @@ async def convert(self, ctx, arg): raise -def moderation_command(log_type): - def decorator(callback): - @functools.wraps(callback) - async def new_callback(self, ctx, user: discord.Member, *args, reason='No reason provided'): - await callback(self, ctx, user, *args, reason=reason) - # TODO log to web - return new_callback - return decorator - - -# Todo: timed/self mutes class Moderation(Cog): + async def modlogger(self, ctx, action, target, reason): + modlogmessage = "{} has {} {} because {}".format(ctx.author, action, target, reason) + modlogmessage = clean(ctx=ctx, text=modlogmessage) + with db.Session() as session: + user = session.query(Guildmute).filter_by(id=target.id).one_or_none() + if user is not None: + await ctx.send("User is already muted!") + else: + user = Guildmute(id=target.id, guild=ctx.guild.id) + session.add(user) + modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() + await ctx.send(modlogmessage) + if modlogchannel is not None: + channel = ctx.guild.get_channel(modlogchannel.modlog_channel) + await channel.send(modlogmessage) + else: + await ctx.send("Please configure modlog channel to enable modlog functionality") + async def permoverride(self, user, **overwrites): for i in user.guild.channels: overwrite = i.overwrites_for(user) @@ -61,57 +68,26 @@ async def punishmenttimer(self, ctx, timing, target, lookup): @command() @has_permissions(ban_members=True) @bot_has_permissions(ban_members=True) - @moderation_command('ban') async def ban(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Bans the user mentioned." - usertoban = user_mentions - howtounban = "When it's time to unban, here's the ID to unban: <@{} >".format(usertoban.id) - modlogmessage = "{} has been banned by {} because {}. {}".format(usertoban, ctx.author.mention, reason, howtounban) - await ctx.guild.ban(usertoban, reason=reason) - await ctx.send(modlogmessage) - with db.Session() as session: - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await ctx.guild.ban(user_mentions, reason=reason) + await self.modlogger(ctx=ctx, action="banned", target=user_mentions, reason=reason) @command() @has_permissions(ban_members=True) @bot_has_permissions(ban_members=True) - @moderation_command('unban') async def unban(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Unbans the user ID mentioned." - usertoban = user_mentions - await ctx.guild.unban(usertoban, reason=reason) - modlogmessage = "{} has been unbanned by {} because {}".format(usertoban, ctx.author.mention, reason) - await ctx.send(modlogmessage) - with db.Session() as session: - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await ctx.guild.unban(user_mentions, reason=reason) + await self.modlogger(ctx, "unbanned", user_mentions, reason) @command() @has_permissions(kick_members=True) @bot_has_permissions(kick_members=True) - @moderation_command('kick') async def kick(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Kicks the user mentioned." - usertokick = user_mentions - await ctx.guild.kick(usertokick, reason=reason) - modlogmessage = "{} has been kicked by {} because {}".format(usertokick, ctx.author.mention, reason) - await ctx.send(modlogmessage) - with db.Session() as session: - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await ctx.guild.kick(user_mentions, reason=reason) + await self.modlogger(ctx, "kicked", user_mentions, reason) @command() @has_permissions(administrator=True) @@ -383,10 +359,7 @@ async def prune(self, ctx, num_to_delete: int): @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) - @moderation_command('mute') async def mute(self, ctx, member_mentions: discord.Member, *, reason="No reason provided"): - await self.permoverride(member_mentions, send_messages=False, add_reactions=False) - modlogmessage = "{} has been muted by {} because {}".format(member_mentions, ctx.author.display_name, reason) with db.Session() as session: user = session.query(Guildmute).filter_by(id=member_mentions.id).one_or_none() if user is not None: @@ -394,45 +367,26 @@ async def mute(self, ctx, member_mentions: discord.Member, *, reason="No reason else: user = Guildmute(id=member_mentions.id, guild=ctx.guild.id) session.add(user) - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - await ctx.send(modlogmessage) - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") - - + await self.permoverride(member_mentions, send_messages=False, add_reactions=False) + await self.modlogger(ctx, "mute", member_mentions, reason) @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) - @moderation_command('unmute') async def unmute(self, ctx, member_mentions: discord.Member): - await self.permoverride(member_mentions, send_messages=None, add_reactions=None) - modlogmessage = "{} has been unmuted by {}".format(member_mentions, ctx.author.display_name) with db.Session() as session: user = session.query(Guildmute).filter_by(id=member_mentions.id, guild=ctx.guild.id).one_or_none() if user is not None: session.delete(user) - await ctx.send(modlogmessage) - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await self.permoverride(member_mentions, send_messages=None, add_reactions=None) + await self.modlogger(ctx, "unmute", member_mentions, None) else: await ctx.send("User is not muted!") - @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) - @moderation_command('deafen') async def deafen(self, ctx, member_mentions: discord.Member, *, reason="No reason provided"): - await self.permoverride(member_mentions, read_messages=False) - modlogmessage = "{} has been deafened by {} because {}".format(member_mentions, ctx.author.display_name, reason) with db.Session() as session: user = session.query(Deafen).filter_by(id=member_mentions.id).one_or_none() if user is not None: @@ -440,21 +394,13 @@ async def deafen(self, ctx, member_mentions: discord.Member, *, reason="No reaso else: user = Deafen(id=member_mentions.id, guild=ctx.guild.id, self_inflicted=False) session.add(user) - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - await ctx.send(modlogmessage) - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await self.permoverride(member_mentions, read_messages=False) + await self.modlogger(ctx, "deafened", member_mentions, reason) @command() @bot_has_permissions(manage_roles=True) async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): await ctx.send("Deafening {}...".format(ctx.author)) - await self.permoverride(ctx.author, read_messages=False) - modlogmessage = "{} has deafened themselves because {}".format(ctx.author, reason) - modlogmessage = clean(ctx=ctx, text=modlogmessage) with db.Session() as session: user = session.query(Deafen).filter_by(id=ctx.author.id).one_or_none() if user is not None: @@ -462,11 +408,8 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): else: user = Deafen(id=ctx.author.id, guild=ctx.guild.id, self_inflicted=True) session.add(user) - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - await ctx.send(modlogmessage) - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) + await self.permoverride(ctx.author, read_messages=False) + await self.modlogger(ctx, "deafened", target="themselves", reason=reason) self.bot.loop.create_task(self.punishmenttimer(ctx, timing, ctx.author, lookup=Deafen)) selfdeafen.example_usage = """ ``[prefix]selfdeafen time (1h5m, both optional) reason``: deafens you if you need to get work done @@ -475,21 +418,13 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) - @moderation_command('undeafen') async def undeafen(self, ctx, member_mentions: discord.Member): - await self.permoverride(member_mentions, read_messages=None) - modlogmessage = "{} has been undeafened by {}".format(member_mentions, ctx.author.display_name) with db.Session() as session: user = session.query(Deafen).filter_by(id=member_mentions.id, guild=ctx.guild.id).one_or_none() if user is not None: + await self.permoverride(target=member_mentions, read_messages=None) session.delete(user) - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - await ctx.send(modlogmessage) - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await self.modlogger(ctx, "undeafen", member_mentions, None) else: await ctx.send("User is not deafened!") From 84b8fc0359a8b70bff8fd032f4d5e6cd0ad3a241 Mon Sep 17 00:00:00 2001 From: Travis Weir Date: Sun, 3 Dec 2017 23:50:19 -0600 Subject: [PATCH 4/6] fixing --- dozer/cogs/moderation.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/dozer/cogs/moderation.py b/dozer/cogs/moderation.py index b6610c51..06d896da 100644 --- a/dozer/cogs/moderation.py +++ b/dozer/cogs/moderation.py @@ -21,19 +21,13 @@ async def modlogger(self, ctx, action, target, reason): modlogmessage = "{} has {} {} because {}".format(ctx.author, action, target, reason) modlogmessage = clean(ctx=ctx, text=modlogmessage) with db.Session() as session: - user = session.query(Guildmute).filter_by(id=target.id).one_or_none() - if user is not None: - await ctx.send("User is already muted!") + modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() + await ctx.send(modlogmessage) + if modlogchannel is not None: + channel = ctx.guild.get_channel(modlogchannel.modlog_channel) + await channel.send(modlogmessage) else: - user = Guildmute(id=target.id, guild=ctx.guild.id) - session.add(user) - modlogchannel = session.query(Guildmodlog).filter_by(id=ctx.guild.id).one_or_none() - await ctx.send(modlogmessage) - if modlogchannel is not None: - channel = ctx.guild.get_channel(modlogchannel.modlog_channel) - await channel.send(modlogmessage) - else: - await ctx.send("Please configure modlog channel to enable modlog functionality") + await ctx.send("Please configure modlog channel to enable modlog functionality") async def permoverride(self, user, **overwrites): for i in user.guild.channels: @@ -408,8 +402,8 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): else: user = Deafen(id=ctx.author.id, guild=ctx.guild.id, self_inflicted=True) session.add(user) - await self.permoverride(ctx.author, read_messages=False) - await self.modlogger(ctx, "deafened", target="themselves", reason=reason) + await self.permoverride(user=ctx.author, read_messages=False) + await self.modlogger(ctx, "deafened", target=ctx.author, reason=reason) self.bot.loop.create_task(self.punishmenttimer(ctx, timing, ctx.author, lookup=Deafen)) selfdeafen.example_usage = """ ``[prefix]selfdeafen time (1h5m, both optional) reason``: deafens you if you need to get work done @@ -422,7 +416,7 @@ async def undeafen(self, ctx, member_mentions: discord.Member): with db.Session() as session: user = session.query(Deafen).filter_by(id=member_mentions.id, guild=ctx.guild.id).one_or_none() if user is not None: - await self.permoverride(target=member_mentions, read_messages=None) + await self.permoverride(user=member_mentions, read_messages=None) session.delete(user) await self.modlogger(ctx, "undeafen", member_mentions, None) else: From e314dca7cdee2d23f4ed7f68406b58343389d9be Mon Sep 17 00:00:00 2001 From: Travis Weir Date: Mon, 4 Dec 2017 00:15:05 -0600 Subject: [PATCH 5/6] Final changes (tested, working) --- dozer/cogs/moderation.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dozer/cogs/moderation.py b/dozer/cogs/moderation.py index 06d896da..74a3bd63 100644 --- a/dozer/cogs/moderation.py +++ b/dozer/cogs/moderation.py @@ -362,18 +362,18 @@ async def mute(self, ctx, member_mentions: discord.Member, *, reason="No reason user = Guildmute(id=member_mentions.id, guild=ctx.guild.id) session.add(user) await self.permoverride(member_mentions, send_messages=False, add_reactions=False) - await self.modlogger(ctx, "mute", member_mentions, reason) + await self.modlogger(ctx, "muted", member_mentions, reason) @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) - async def unmute(self, ctx, member_mentions: discord.Member): + async def unmute(self, ctx, member_mentions: discord.Member, reason="No reason provided"): with db.Session() as session: user = session.query(Guildmute).filter_by(id=member_mentions.id, guild=ctx.guild.id).one_or_none() if user is not None: session.delete(user) await self.permoverride(member_mentions, send_messages=None, add_reactions=None) - await self.modlogger(ctx, "unmute", member_mentions, None) + await self.modlogger(ctx, "unmuted", member_mentions, reason) else: await ctx.send("User is not muted!") @@ -412,13 +412,15 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): @command() @has_permissions(kick_members=True) @bot_has_permissions(manage_roles=True) - async def undeafen(self, ctx, member_mentions: discord.Member): + async def undeafen(self, ctx, member_mentions: discord.Member, reason="No reason provided"): with db.Session() as session: user = session.query(Deafen).filter_by(id=member_mentions.id, guild=ctx.guild.id).one_or_none() if user is not None: await self.permoverride(user=member_mentions, read_messages=None) session.delete(user) - await self.modlogger(ctx, "undeafen", member_mentions, None) + if user.self_inflicted: + reason = "self deafen timer expired" + await self.modlogger(ctx, "undeafened", member_mentions, reason) else: await ctx.send("User is not deafened!") From 972691271e0c4d55b306ed778b69edde186d5348 Mon Sep 17 00:00:00 2001 From: Travis Weir Date: Thu, 7 Dec 2017 16:41:52 -0600 Subject: [PATCH 6/6] Good catch, fixed --- dozer/cogs/moderation.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dozer/cogs/moderation.py b/dozer/cogs/moderation.py index 74a3bd63..7a79a54d 100644 --- a/dozer/cogs/moderation.py +++ b/dozer/cogs/moderation.py @@ -73,7 +73,7 @@ async def ban(self, ctx, user_mentions: discord.User, *, reason="No reason provi async def unban(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Unbans the user ID mentioned." await ctx.guild.unban(user_mentions, reason=reason) - await self.modlogger(ctx, "unbanned", user_mentions, reason) + await self.modlogger(ctx=ctx, action="unbanned", target=user_mentions, reason=reason) @command() @has_permissions(kick_members=True) @@ -81,7 +81,7 @@ async def unban(self, ctx, user_mentions: discord.User, *, reason="No reason pro async def kick(self, ctx, user_mentions: discord.User, *, reason="No reason provided"): "Kicks the user mentioned." await ctx.guild.kick(user_mentions, reason=reason) - await self.modlogger(ctx, "kicked", user_mentions, reason) + await self.modlogger(ctx=ctx, action="kicked", target=user_mentions, reason=reason) @command() @has_permissions(administrator=True) @@ -362,7 +362,7 @@ async def mute(self, ctx, member_mentions: discord.Member, *, reason="No reason user = Guildmute(id=member_mentions.id, guild=ctx.guild.id) session.add(user) await self.permoverride(member_mentions, send_messages=False, add_reactions=False) - await self.modlogger(ctx, "muted", member_mentions, reason) + await self.modlogger(ctx=ctx, action="muted", target=member_mentions, reason=reason) @command() @has_permissions(kick_members=True) @@ -373,7 +373,7 @@ async def unmute(self, ctx, member_mentions: discord.Member, reason="No reason p if user is not None: session.delete(user) await self.permoverride(member_mentions, send_messages=None, add_reactions=None) - await self.modlogger(ctx, "unmuted", member_mentions, reason) + await self.modlogger(ctx=ctx, action="unmuted", target=member_mentions, reason=reason) else: await ctx.send("User is not muted!") @@ -389,7 +389,7 @@ async def deafen(self, ctx, member_mentions: discord.Member, *, reason="No reaso user = Deafen(id=member_mentions.id, guild=ctx.guild.id, self_inflicted=False) session.add(user) await self.permoverride(member_mentions, read_messages=False) - await self.modlogger(ctx, "deafened", member_mentions, reason) + await self.modlogger(ctx=ctx, action="deafened", target=member_mentions, reason=reason) @command() @bot_has_permissions(manage_roles=True) @@ -403,7 +403,7 @@ async def selfdeafen(self, ctx, timing, *, reason="No reason provided"): user = Deafen(id=ctx.author.id, guild=ctx.guild.id, self_inflicted=True) session.add(user) await self.permoverride(user=ctx.author, read_messages=False) - await self.modlogger(ctx, "deafened", target=ctx.author, reason=reason) + await self.modlogger(ctx=ctx, action="deafened", target=ctx.author, reason=reason) self.bot.loop.create_task(self.punishmenttimer(ctx, timing, ctx.author, lookup=Deafen)) selfdeafen.example_usage = """ ``[prefix]selfdeafen time (1h5m, both optional) reason``: deafens you if you need to get work done @@ -420,7 +420,7 @@ async def undeafen(self, ctx, member_mentions: discord.Member, reason="No reason session.delete(user) if user.self_inflicted: reason = "self deafen timer expired" - await self.modlogger(ctx, "undeafened", member_mentions, reason) + await self.modlogger(ctx=ctx, action="undeafened", target=member_mentions, reason=reason) else: await ctx.send("User is not deafened!")