aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Kieran Siek <[email protected]>2019-10-15 22:38:30 +0800
committerGravatar GitHub <[email protected]>2019-10-15 22:38:30 +0800
commit8d7817414ea16d761c0c5673cbb749031a8dd285 (patch)
tree21599a833e30dd8ee9a8e67537ebca1b562ef7a4
parentCreate the !mention command. (#493) (diff)
parentMerge branch 'master' into off-topic-check (diff)
Merge pull request #511 from python-discord/off-topic-check
Prevent too similar off-topic channel names
-rw-r--r--bot/cogs/antispam.py2
-rw-r--r--bot/cogs/defcon.py5
-rw-r--r--bot/cogs/doc.py3
-rw-r--r--bot/cogs/filtering.py2
-rw-r--r--bot/cogs/moderation/modlog.py30
-rw-r--r--bot/cogs/moderation/superstarify.py4
-rw-r--r--bot/cogs/off_topic_names.py48
-rw-r--r--bot/cogs/snekbox.py12
8 files changed, 61 insertions, 45 deletions
diff --git a/bot/cogs/antispam.py b/bot/cogs/antispam.py
index 1b394048a..1340eb608 100644
--- a/bot/cogs/antispam.py
+++ b/bot/cogs/antispam.py
@@ -59,7 +59,7 @@ class DeletionContext:
async def upload_messages(self, actor_id: int, modlog: ModLog) -> None:
"""Method that takes care of uploading the queue and posting modlog alert."""
- triggered_by_users = ", ".join(f"{m.display_name}#{m.discriminator} (`{m.id}`)" for m in self.members.values())
+ triggered_by_users = ", ".join(f"{m} (`{m.id}`)" for m in self.members.values())
mod_alert_message = (
f"**Triggered by:** {triggered_by_users}\n"
diff --git a/bot/cogs/defcon.py b/bot/cogs/defcon.py
index 70e101baa..38a0915e5 100644
--- a/bot/cogs/defcon.py
+++ b/bot/cogs/defcon.py
@@ -90,8 +90,7 @@ class Defcon(Cog):
await member.kick(reason="DEFCON active, user is too new")
message = (
- f"{member.name}#{member.discriminator} (`{member.id}`) "
- f"was denied entry because their account is too new."
+ f"{member} (`{member.id}`) was denied entry because their account is too new."
)
if not message_sent:
@@ -254,7 +253,7 @@ class Defcon(Cog):
`change` string may be one of the following: ('enabled', 'disabled', 'updated')
"""
- log_msg = f"**Staffer:** {actor.name}#{actor.discriminator} (`{actor.id}`)\n"
+ log_msg = f"**Staffer:** {actor} (`{actor.id}`)\n"
if change.lower() == "enabled":
icon = Icons.defcon_enabled
diff --git a/bot/cogs/doc.py b/bot/cogs/doc.py
index a13464bff..65cabe46f 100644
--- a/bot/cogs/doc.py
+++ b/bot/cogs/doc.py
@@ -336,8 +336,7 @@ class Doc(commands.Cog):
await self.bot.api_client.post('bot/documentation-links', json=body)
log.info(
- f"User @{ctx.author.name}#{ctx.author.discriminator} ({ctx.author.id}) "
- "added a new documentation package:\n"
+ f"User @{ctx.author} ({ctx.author.id}) added a new documentation package:\n"
f"Package name: {package_name}\n"
f"Base url: {base_url}\n"
f"Inventory URL: {inventory_url}"
diff --git a/bot/cogs/filtering.py b/bot/cogs/filtering.py
index 265ae5160..1d1d74e74 100644
--- a/bot/cogs/filtering.py
+++ b/bot/cogs/filtering.py
@@ -186,7 +186,7 @@ class Filtering(Cog):
message = (
f"The {filter_name} {_filter['type']} was triggered "
- f"by **{msg.author.name}#{msg.author.discriminator}** "
+ f"by **{msg.author}** "
f"(`{msg.author.id}`) {channel_str} with [the "
f"following message]({msg.jump_url}):\n\n"
f"{msg.content}"
diff --git a/bot/cogs/moderation/modlog.py b/bot/cogs/moderation/modlog.py
index 118503517..88f2b6c67 100644
--- a/bot/cogs/moderation/modlog.py
+++ b/bot/cogs/moderation/modlog.py
@@ -363,7 +363,7 @@ class ModLog(Cog, name="ModLog"):
await self.send_log_message(
Icons.user_ban, Colours.soft_red,
- "User banned", f"{member.name}#{member.discriminator} (`{member.id}`)",
+ "User banned", f"{member} (`{member.id}`)",
thumbnail=member.avatar_url_as(static_format="png"),
channel_id=Channels.userlog
)
@@ -374,7 +374,7 @@ class ModLog(Cog, name="ModLog"):
if member.guild.id != GuildConstant.id:
return
- message = f"{member.name}#{member.discriminator} (`{member.id}`)"
+ message = f"{member} (`{member.id}`)"
now = datetime.utcnow()
difference = abs(relativedelta(now, member.created_at))
@@ -402,7 +402,7 @@ class ModLog(Cog, name="ModLog"):
await self.send_log_message(
Icons.sign_out, Colours.soft_red,
- "User left", f"{member.name}#{member.discriminator} (`{member.id}`)",
+ "User left", f"{member} (`{member.id}`)",
thumbnail=member.avatar_url_as(static_format="png"),
channel_id=Channels.userlog
)
@@ -419,7 +419,7 @@ class ModLog(Cog, name="ModLog"):
await self.send_log_message(
Icons.user_unban, Colour.blurple(),
- "User unbanned", f"{member.name}#{member.discriminator} (`{member.id}`)",
+ "User unbanned", f"{member} (`{member.id}`)",
thumbnail=member.avatar_url_as(static_format="png"),
channel_id=Channels.modlog
)
@@ -511,7 +511,7 @@ class ModLog(Cog, name="ModLog"):
for item in sorted(changes):
message += f"{Emojis.bullet} {item}\n"
- message = f"**{after.name}#{after.discriminator}** (`{after.id}`)\n{message}"
+ message = f"**{after}** (`{after.id}`)\n{message}"
await self.send_log_message(
Icons.user_update, Colour.blurple(),
@@ -540,14 +540,14 @@ class ModLog(Cog, name="ModLog"):
if channel.category:
response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** {channel.category}/#{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{message.id}`\n"
"\n"
)
else:
response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** #{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{message.id}`\n"
"\n"
@@ -638,7 +638,7 @@ class ModLog(Cog, name="ModLog"):
if channel.category:
before_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** {channel.category}/#{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{before.id}`\n"
"\n"
@@ -646,7 +646,7 @@ class ModLog(Cog, name="ModLog"):
)
after_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** {channel.category}/#{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{before.id}`\n"
"\n"
@@ -654,7 +654,7 @@ class ModLog(Cog, name="ModLog"):
)
else:
before_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** #{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{before.id}`\n"
"\n"
@@ -662,7 +662,7 @@ class ModLog(Cog, name="ModLog"):
)
after_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** #{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{before.id}`\n"
"\n"
@@ -721,7 +721,7 @@ class ModLog(Cog, name="ModLog"):
if channel.category:
before_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** {channel.category}/#{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{message.id}`\n"
"\n"
@@ -729,7 +729,7 @@ class ModLog(Cog, name="ModLog"):
)
after_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** {channel.category}/#{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{message.id}`\n"
"\n"
@@ -737,7 +737,7 @@ class ModLog(Cog, name="ModLog"):
)
else:
before_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** #{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{message.id}`\n"
"\n"
@@ -745,7 +745,7 @@ class ModLog(Cog, name="ModLog"):
)
after_response = (
- f"**Author:** {author.name}#{author.discriminator} (`{author.id}`)\n"
+ f"**Author:** {author} (`{author.id}`)\n"
f"**Channel:** #{channel.name} (`{channel.id}`)\n"
f"**Message ID:** `{message.id}`\n"
"\n"
diff --git a/bot/cogs/moderation/superstarify.py b/bot/cogs/moderation/superstarify.py
index ccc6395d9..82f8621fc 100644
--- a/bot/cogs/moderation/superstarify.py
+++ b/bot/cogs/moderation/superstarify.py
@@ -129,7 +129,7 @@ class Superstarify(Cog):
# Log to the mod_log channel
log.trace("Logging to the #mod-log channel. This could fail because of channel permissions.")
mod_log_message = (
- f"**{member.name}#{member.discriminator}** (`{member.id}`)\n\n"
+ f"**{member}** (`{member.id}`)\n\n"
f"Superstarified member potentially tried to escape the prison.\n"
f"Restored enforced nickname: `{forced_nick}`\n"
f"Superstardom ends: **{end_timestamp_human}**"
@@ -183,7 +183,7 @@ class Superstarify(Cog):
# Log to the mod_log channel
log.trace("Logging to the #mod-log channel. This could fail because of channel permissions.")
mod_log_message = (
- f"**{member.name}#{member.discriminator}** (`{member.id}`)\n\n"
+ f"**{member}** (`{member.id}`)\n\n"
f"Superstarified by **{ctx.author.name}**\n"
f"Old nickname: `{member.display_name}`\n"
f"New nickname: `{forced_nick}`\n"
diff --git a/bot/cogs/off_topic_names.py b/bot/cogs/off_topic_names.py
index 2977e4ebb..1f9fb0b4f 100644
--- a/bot/cogs/off_topic_names.py
+++ b/bot/cogs/off_topic_names.py
@@ -98,15 +98,42 @@ class OffTopicNames(Cog):
@otname_group.command(name='add', aliases=('a',))
@with_role(*MODERATION_ROLES)
async def add_command(self, ctx: Context, *names: OffTopicName) -> None:
- """Adds a new off-topic name to the rotation."""
+ """
+ Adds a new off-topic name to the rotation.
+
+ The name is not added if it is too similar to an existing name.
+ """
# Chain multiple words to a single one
name = "-".join(names)
- await self.bot.api_client.post(f'bot/off-topic-channel-names', params={'name': name})
- log.info(
- f"{ctx.author.name}#{ctx.author.discriminator}"
- f" added the off-topic channel name '{name}"
- )
+ existing_names = await self.bot.api_client.get('bot/off-topic-channel-names')
+ close_match = difflib.get_close_matches(name, existing_names, n=1, cutoff=0.8)
+
+ if close_match:
+ match = close_match[0]
+ log.info(
+ f"{ctx.author} tried to add channel name '{name}' but it was too similar to '{match}'"
+ )
+ await ctx.send(
+ f":x: The channel name `{name}` is too similar to `{match}`, and thus was not added. "
+ "Use `!otn forceadd` to override this check."
+ )
+ else:
+ await self._add_name(ctx, name)
+
+ @otname_group.command(name='forceadd', aliases=('fa',))
+ @with_role(*MODERATION_ROLES)
+ async def force_add_command(self, ctx: Context, *names: OffTopicName) -> None:
+ """Forcefully adds a new off-topic name to the rotation."""
+ # Chain multiple words to a single one
+ name = "-".join(names)
+ await self._add_name(ctx, name)
+
+ async def _add_name(self, ctx: Context, name: str) -> None:
+ """Adds an off-topic channel name to the site storage."""
+ await self.bot.api_client.post('bot/off-topic-channel-names', params={'name': name})
+
+ log.info(f"{ctx.author} added the off-topic channel name '{name}'")
await ctx.send(f":ok_hand: Added `{name}` to the names list.")
@otname_group.command(name='delete', aliases=('remove', 'rm', 'del', 'd'))
@@ -115,12 +142,9 @@ class OffTopicNames(Cog):
"""Removes a off-topic name from the rotation."""
# Chain multiple words to a single one
name = "-".join(names)
-
await self.bot.api_client.delete(f'bot/off-topic-channel-names/{name}')
- log.info(
- f"{ctx.author.name}#{ctx.author.discriminator}"
- f" deleted the off-topic channel name '{name}"
- )
+
+ log.info(f"{ctx.author} deleted the off-topic channel name '{name}'")
await ctx.send(f":ok_hand: Removed `{name}` from the names list.")
@otname_group.command(name='list', aliases=('l',))
@@ -152,7 +176,7 @@ class OffTopicNames(Cog):
close_matches = difflib.get_close_matches(query, result, n=10, cutoff=0.70)
lines = sorted(f"• {name}" for name in in_matches.union(close_matches))
embed = Embed(
- title=f"Query results",
+ title="Query results",
colour=Colour.blue()
)
diff --git a/bot/cogs/snekbox.py b/bot/cogs/snekbox.py
index 81185cf3e..c0390cb1e 100644
--- a/bot/cogs/snekbox.py
+++ b/bot/cogs/snekbox.py
@@ -178,7 +178,7 @@ class Snekbox(Cog):
if ctx.author.id in self.jobs:
await ctx.send(
f"{ctx.author.mention} You've already got a job running - "
- f"please wait for it to finish!"
+ "please wait for it to finish!"
)
return
@@ -186,10 +186,7 @@ class Snekbox(Cog):
await ctx.invoke(self.bot.get_command("help"), "eval")
return
- log.info(
- f"Received code from {ctx.author.name}#{ctx.author.discriminator} "
- f"for evaluation:\n{code}"
- )
+ log.info(f"Received code from {ctx.author} for evaluation:\n{code}")
self.jobs[ctx.author.id] = datetime.datetime.now()
code = self.prepare_input(code)
@@ -213,10 +210,7 @@ class Snekbox(Cog):
wait_for_deletion(response, user_ids=(ctx.author.id,), client=ctx.bot)
)
- log.info(
- f"{ctx.author.name}#{ctx.author.discriminator}'s job had a return code of "
- f"{results['returncode']}"
- )
+ log.info(f"{ctx.author}'s job had a return code of {results['returncode']}")
finally:
del self.jobs[ctx.author.id]