Auto mute on harmful link
This commit is contained in:
parent
9c0bf5f7a5
commit
99c521fa76
1 changed files with 43 additions and 6 deletions
|
@ -4,16 +4,18 @@ from datetime import datetime, timedelta, timezone
|
||||||
|
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from jarvis_core.db import q
|
from jarvis_core.db import q
|
||||||
from jarvis_core.db.models import Autopurge, Autoreact, Roleping, Setting, Warning
|
from jarvis_core.db.models import Autopurge, Autoreact, Mute, Roleping, Setting, Warning
|
||||||
from jarvis_core.filters import invites, url
|
from jarvis_core.filters import invites, url
|
||||||
from naff import listen
|
from naff import listen
|
||||||
from naff.api.events.discord import MessageCreate, MessageDelete, MessageUpdate
|
from naff.api.events.discord import MessageCreate, MessageDelete, MessageUpdate
|
||||||
from naff.client.utils.misc_utils import find_all
|
from naff.client.utils.misc_utils import find_all
|
||||||
from naff.models.discord.channel import DMChannel
|
from naff.models.discord.channel import DMChannel, GuildText
|
||||||
from naff.models.discord.embed import EmbedField
|
from naff.models.discord.embed import EmbedField
|
||||||
from naff.models.discord.enums import Permissions
|
from naff.models.discord.enums import Permissions
|
||||||
from naff.models.discord.message import Message
|
from naff.models.discord.message import Message
|
||||||
|
from naff.models.discord.user import Member
|
||||||
|
|
||||||
|
from jarvis.branding import get_command_color
|
||||||
from jarvis.tracking import malicious_tracker, warnings_tracker
|
from jarvis.tracking import malicious_tracker, warnings_tracker
|
||||||
from jarvis.utils import build_embed
|
from jarvis.utils import build_embed
|
||||||
from jarvis.utils.embeds import warning_embed
|
from jarvis.utils.embeds import warning_embed
|
||||||
|
@ -274,6 +276,37 @@ class MessageEventMixin:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
async def timeout_user(self, user: Member, channel: GuildText) -> None:
|
||||||
|
"""Timeout a user."""
|
||||||
|
expires_at = datetime.now(tz=timezone.utc) + timedelta(minutes=30)
|
||||||
|
try:
|
||||||
|
await user.timeout(communication_disabled_until=expires_at, reason="Phishing link")
|
||||||
|
await Mute(
|
||||||
|
user=user.id,
|
||||||
|
reason="Auto mute for harmful link",
|
||||||
|
admin=self.user.id,
|
||||||
|
guild=user.guild.id,
|
||||||
|
duration=30,
|
||||||
|
active=True,
|
||||||
|
).commit()
|
||||||
|
ts = int(expires_at.timestamp())
|
||||||
|
embed = build_embed(
|
||||||
|
title="User Muted",
|
||||||
|
description=f"{user.mention} has been muted",
|
||||||
|
fields=[
|
||||||
|
EmbedField(name="Reason", value="Auto mute for harmful link"),
|
||||||
|
EmbedField(name="Until", value=f"<t:{ts}:F> <t:{ts}:R>"),
|
||||||
|
],
|
||||||
|
color=get_command_color("mute"),
|
||||||
|
)
|
||||||
|
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
|
||||||
|
embed.set_thumbnail(url=user.display_avatar.url)
|
||||||
|
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
|
||||||
|
await channel.send(embeds=embed)
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
self.logger.warn("Failed to timeout user for phishing")
|
||||||
|
|
||||||
@listen()
|
@listen()
|
||||||
async def on_message(self, event: MessageCreate) -> None:
|
async def on_message(self, event: MessageCreate) -> None:
|
||||||
"""Handle on_message event. Calls other event handlers."""
|
"""Handle on_message event. Calls other event handlers."""
|
||||||
|
@ -284,8 +317,10 @@ class MessageEventMixin:
|
||||||
await self.roleping(message)
|
await self.roleping(message)
|
||||||
await self.autopurge(message)
|
await self.autopurge(message)
|
||||||
await self.checks(message)
|
await self.checks(message)
|
||||||
if not await self.phishing(message):
|
if not (phish := await self.phishing(message)):
|
||||||
await self.malicious_url(message)
|
malicious = await self.malicious_url(message)
|
||||||
|
if phish or malicious:
|
||||||
|
await self.timeout_user(message.author, message.channel)
|
||||||
|
|
||||||
@listen()
|
@listen()
|
||||||
async def on_message_edit(self, event: MessageUpdate) -> None:
|
async def on_message_edit(self, event: MessageUpdate) -> None:
|
||||||
|
@ -337,8 +372,10 @@ class MessageEventMixin:
|
||||||
await self.checks(after)
|
await self.checks(after)
|
||||||
await self.roleping(after)
|
await self.roleping(after)
|
||||||
await self.checks(after)
|
await self.checks(after)
|
||||||
if not await self.phishing(after):
|
if not (phish := await self.phishing(after)):
|
||||||
await self.malicious_url(after)
|
malicious = await self.malicious_url(after)
|
||||||
|
if phish or malicious:
|
||||||
|
await self.timeout_user(after.author, after.channel)
|
||||||
|
|
||||||
@listen()
|
@listen()
|
||||||
async def on_message_delete(self, event: MessageDelete) -> None:
|
async def on_message_delete(self, event: MessageDelete) -> None:
|
||||||
|
|
Loading…
Add table
Reference in a new issue