Make text in /rcauto required

This commit is contained in:
Zeva Rose 2021-07-04 19:55:34 -06:00
parent ca954f25e4
commit eae0a5d4d7
3 changed files with 233 additions and 3 deletions

View file

@ -112,6 +112,7 @@ class AdminCog(commands.Cog):
active = True active = True
if type == "soft": if type == "soft":
active = False active = False
self.db.jarvis.bans.insert_one( self.db.jarvis.bans.insert_one(
{ {
"user": user.id, "user": user.id,
@ -128,9 +129,10 @@ class AdminCog(commands.Cog):
} }
) )
async def discord_apply_unban(self, ctx, user, reason): async def discord_apply_unban(
self, ctx: SlashContext, user: User, reason: str
):
await ctx.guild.unban(user, reason=reason) await ctx.guild.unban(user, reason=reason)
user: User = user
self.db.jarvis.unbans.insert_one( self.db.jarvis.unbans.insert_one(
{ {
"user": user.id, "user": user.id,

225
jarvis/cogs/modlog.py Normal file
View file

@ -0,0 +1,225 @@
import asyncio
from datetime import datetime, timedelta
import discord
from discord.ext import commands
from discord.utils import find
import jarvis
from jarvis.config import get_config
from jarvis.utils import build_embed
from jarvis.utils.db import DBManager
from jarvis.utils.field import Field
class ModlogCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.db = DBManager(get_config().mongo).mongo
def get_latest_log(self, auditlog, target):
before = datetime.utcnow() - timedelta(seconds=10)
return find(
lambda x: x.target.id == target.id and x.created_at < before,
auditlog,
)
@commands.Cog.listener()
async def on_member_ban(self, guild: discord.Guild, user: discord.User):
modlog = self.db.jarvis.settings.find_one(
{"guild": guild.id, "setting": "modlog"}
)
if modlog:
channel = guild.get_channel(modlog["value"])
await asyncio.sleep(0.5) # Need to wait for audit log
auditlog = await guild.audit_logs(
limit=50,
action=discord.AuditLogAction.ban,
after=datetime.utcnow() - timedelta(seconds=15),
oldest_first=False,
)
log: discord.AuditLogEntry = self.get_latest_log(auditlog, user)
fields = [
Field(
name="Member",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(
name="Moderator",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(name="Reason", value=log.reason, inline=False),
]
embed = build_embed(
title="User Banned",
description=f"A user was banned from {guild.name}",
color="#bf2a3e",
fields=fields,
timestamp=log.created_at,
)
embed.set_author(
name=f"{user.name}#{user.discriminator} | {user.id}",
icon_url=user.avatar_url,
)
await channel.send(embed=embed)
@commands.Cog.listener()
async def on_member_unban(
self, guild: discord.Guild, user: discord.User
):
modlog = self.db.jarvis.settings.find_one(
{"guild": guild.id, "setting": "modlog"}
)
if modlog:
channel = guild.get_channel(modlog["value"])
await asyncio.sleep(0.5) # Need to wait for audit log
auditlog = await guild.audit_logs(
limit=50,
action=discord.AuditLogAction.unban,
after=datetime.utcnow() - timedelta(seconds=15),
oldest_first=False,
)
log: discord.AuditLogEntry = self.get_latest_log(
auditlog, user
)
fields = [
Field(
name="Member",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(
name="Moderator",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(name="Reason", value=log.reason, inline=False),
]
embed = build_embed(
title="User Unbanned",
description=f"A user was unbanned from {guild.name}",
color="#bf2a3e",
fields=fields,
timestamp=log.created_at,
)
embed.set_author(
name=f"{user.name}#{user.discriminator} | {user.id}",
icon_url=user.avatar_url,
)
await channel.send(embed=embed)
@commands.Cog.listener()
async def on_member_remove(self, user: discord.User):
modlog = self.db.jarvis.settings.find_one(
{"guild": user.guild.id, "setting": "modlog"}
)
if modlog:
channel = user.guild.get_channel(modlog["value"])
await asyncio.sleep(0.5) # Need to wait for audit log
auditlog = await user.guild.audit_logs(
limit=50,
action=discord.AuditLogAction.kick,
after=datetime.utcnow() - timedelta(seconds=15),
oldest_first=False,
)
log: discord.AuditLogEntry = self.get_latest_log(
auditlog, user
)
fields = [
Field(
name="Member",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(
name="Moderator",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(name="Reason", value=log.reason, inline=False),
]
embed = build_embed(
title="User Kicked",
description=f"A user was kicked from {guild.name}",
color="#bf2a3e",
fields=fields,
timestamp=log.created_at,
)
embed.set_author(
name=f"{user.name}#{user.discriminator} | {user.id}",
icon_url=user.avatar_url,
)
await channel.send(embed=embed)
@commands.Cog.listener()
async def on_member_update(
self, before: discord.User, after: discord.User
):
modlog = self.db.jarvis.settings.find_one(
{"guild": user.guild.id, "setting": "modlog"}
)
if modlog:
embed = None
mute = self.db.jarvis.settings.find_one(
{"guild": before.guild.id, "setting": "mute"}
)
verified = self.db.jarvis.settings.find_one(
{"guild": before.guild.id, "setting": "verified"}
)
if (
mute
and before.guild.get_role(mute["value"])
in after.roles
):
# TODO: User was muted
pass
elif (
mute
and before.guild.get_role(mute["value"])
in before.roles
):
# TODO: User was unmuted
pass
elif (
verified
and before.guild.get_role(verified["value"])
in before.roles
):
# TODO: User was verified
pass
channel = user.guild.get_channel(modlog["value"])
await asyncio.sleep(0.5) # Need to wait for audit log
auditlog = await user.guild.audit_logs(
limit=50,
action=discord.AuditLogAction.kick,
after=datetime.utcnow() - timedelta(seconds=15),
oldest_first=False,
)
log: discord.AuditLogEntry = self.get_latest_log(
auditlog, user
)
fields = [
Field(
name="Member",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(
name="Moderator",
value=f"{user.mention} ({user.name}#{user.descriminator})",
),
Field(
name="Reason", value=log.reason, inline=False
),
]
embed = build_embed(
title="User Kicked",
description=f"A user was kicked from {guild.name}",
color="#bf2a3e",
fields=fields,
timestamp=log.created_at,
)
embed.set_author(
name=f"{user.name}#{user.discriminator} | {user.id}",
icon_url=user.avatar_url,
)
await channel.send(embed=embed)

View file

@ -60,7 +60,10 @@ class UtilCog(commands.Cog):
guild_ids=[578757004059738142], guild_ids=[578757004059738142],
option=[ option=[
create_option( create_option(
name="text", description="Text to camo-ify", option_type=3 name="text",
description="Text to camo-ify",
option_type=3,
required=True,
) )
], ],
) )