Make text in /rcauto required
This commit is contained in:
parent
ca954f25e4
commit
eae0a5d4d7
3 changed files with 233 additions and 3 deletions
|
@ -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
225
jarvis/cogs/modlog.py
Normal 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)
|
|
@ -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,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue