jarvis-bot/jarvis/cogs/modlog.py
2021-07-04 20:01:05 -06:00

211 lines
8 KiB
Python

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:
# channel = user.guild.get_channel(modlog["value"])
# await asyncio.sleep(0.5) # Need to wait for audit log
# 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
#
# 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)
def setup(bot):
bot.add_cog(ModlogCog(bot))