211 lines
8 KiB
Python
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))
|