Update member events, fix error if activitylog channel no longer exists
This commit is contained in:
parent
d79fc0e994
commit
a220b29303
1 changed files with 41 additions and 9 deletions
|
@ -6,14 +6,19 @@ from datetime import datetime, timezone
|
||||||
|
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from dis_snek import Snake, listen
|
from dis_snek import Snake, listen
|
||||||
from dis_snek.api.events.discord import MessageCreate, MessageDelete, MessageUpdate
|
from dis_snek.api.events.discord import (
|
||||||
|
MemberAdd,
|
||||||
|
MemberRemove,
|
||||||
|
MessageCreate,
|
||||||
|
MessageDelete,
|
||||||
|
MessageUpdate,
|
||||||
|
)
|
||||||
from dis_snek.client.errors import CommandCheckFailure, CommandOnCooldown
|
from dis_snek.client.errors import CommandCheckFailure, CommandOnCooldown
|
||||||
from dis_snek.client.utils.misc_utils import find_all
|
from dis_snek.client.utils.misc_utils import find_all
|
||||||
from dis_snek.models.discord.channel import DMChannel
|
from dis_snek.models.discord.channel import DMChannel
|
||||||
from dis_snek.models.discord.embed import EmbedField
|
from dis_snek.models.discord.embed import EmbedField
|
||||||
from dis_snek.models.discord.enums import Permissions
|
from dis_snek.models.discord.enums import Permissions
|
||||||
from dis_snek.models.discord.message import Message
|
from dis_snek.models.discord.message import Message
|
||||||
from dis_snek.models.discord.user import Member
|
|
||||||
from dis_snek.models.snek.context import Context, InteractionContext
|
from dis_snek.models.snek.context import Context, InteractionContext
|
||||||
from dis_snek.models.snek.tasks.task import Task
|
from dis_snek.models.snek.tasks.task import Task
|
||||||
from dis_snek.models.snek.tasks.triggers import IntervalTrigger
|
from dis_snek.models.snek.tasks.triggers import IntervalTrigger
|
||||||
|
@ -162,7 +167,7 @@ class Jarvis(Snake):
|
||||||
async def on_command(self, ctx: InteractionContext) -> None:
|
async def on_command(self, ctx: InteractionContext) -> None:
|
||||||
"""Lepton on_command override."""
|
"""Lepton on_command override."""
|
||||||
if not isinstance(ctx.channel, DMChannel) and ctx.invoked_name not in ["pw"]:
|
if not isinstance(ctx.channel, DMChannel) and ctx.invoked_name not in ["pw"]:
|
||||||
modlog = await Setting.find_one(q(guild=ctx.guild.id, setting="modlog"))
|
modlog = await Setting.find_one(q(guild=ctx.guild.id, setting="activitylog"))
|
||||||
if modlog:
|
if modlog:
|
||||||
channel = await ctx.guild.fetch_channel(modlog.value)
|
channel = await ctx.guild.fetch_channel(modlog.value)
|
||||||
args = []
|
args = []
|
||||||
|
@ -192,13 +197,21 @@ class Jarvis(Snake):
|
||||||
embed.set_footer(
|
embed.set_footer(
|
||||||
text=f"{ctx.author.user.username}#{ctx.author.discriminator} | {ctx.author.id}"
|
text=f"{ctx.author.user.username}#{ctx.author.discriminator} | {ctx.author.id}"
|
||||||
)
|
)
|
||||||
|
if channel:
|
||||||
await channel.send(embed=embed)
|
await channel.send(embed=embed)
|
||||||
|
else:
|
||||||
|
self.logger.warning(
|
||||||
|
f"Activitylog channel no longer exists in {ctx.guild.name}, removing"
|
||||||
|
)
|
||||||
|
await modlog.delete()
|
||||||
|
|
||||||
# Events
|
# Events
|
||||||
|
# Member
|
||||||
@listen()
|
@listen()
|
||||||
async def on_member_join(self, user: Member) -> None:
|
async def on_member_add(self, event: MemberAdd) -> None:
|
||||||
"""Handle on_member_join event."""
|
"""Handle on_member_add event."""
|
||||||
guild = user.guild
|
user = event.member
|
||||||
|
guild = event.guild
|
||||||
unverified = await Setting.find_one(q(guild=guild.id, setting="unverified"))
|
unverified = await Setting.find_one(q(guild=guild.id, setting="unverified"))
|
||||||
if unverified:
|
if unverified:
|
||||||
self.logger.debug(f"Applying unverified role to {user.id} in {guild.id}")
|
self.logger.debug(f"Applying unverified role to {user.id} in {guild.id}")
|
||||||
|
@ -206,6 +219,25 @@ class Jarvis(Snake):
|
||||||
if role not in user.roles:
|
if role not in user.roles:
|
||||||
await user.add_role(role, reason="User just joined and is unverified")
|
await user.add_role(role, reason="User just joined and is unverified")
|
||||||
|
|
||||||
|
@listen()
|
||||||
|
async def on_member_remove(self, event: MemberRemove) -> None:
|
||||||
|
"""Handle on_member_remove event."""
|
||||||
|
user = event.member
|
||||||
|
guild = event.guild
|
||||||
|
log = await Setting.find_one(q(guild=guild.id, setting="activitylog"))
|
||||||
|
if log:
|
||||||
|
self.logger.debug(f"User {user.id} left {guild.id}")
|
||||||
|
channel = await guild.fetch_channel(log.channel)
|
||||||
|
embed = build_embed(
|
||||||
|
title="Member Left",
|
||||||
|
desciption=f"{user.username}#{user.discriminator} left {guild.name}",
|
||||||
|
fields=[],
|
||||||
|
)
|
||||||
|
embed.set_author(name=user.username, icon_url=user.avatar.url)
|
||||||
|
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
|
||||||
|
await channel.send(embed=embed)
|
||||||
|
|
||||||
|
# Message
|
||||||
async def autopurge(self, message: Message) -> None:
|
async def autopurge(self, message: Message) -> None:
|
||||||
"""Handle autopurge events."""
|
"""Handle autopurge events."""
|
||||||
autopurge = await Autopurge.find_one(q(guild=message.guild.id, channel=message.channel.id))
|
autopurge = await Autopurge.find_one(q(guild=message.guild.id, channel=message.channel.id))
|
||||||
|
@ -429,7 +461,7 @@ class Jarvis(Snake):
|
||||||
before = event.before
|
before = event.before
|
||||||
after = event.after
|
after = event.after
|
||||||
if not after.author.bot:
|
if not after.author.bot:
|
||||||
modlog = await Setting.find_one(q(guild=after.guild.id, setting="modlog"))
|
modlog = await Setting.find_one(q(guild=after.guild.id, setting="activitylog"))
|
||||||
if modlog:
|
if modlog:
|
||||||
if not before or before.content == after.content or before.content is None:
|
if not before or before.content == after.content or before.content is None:
|
||||||
return
|
return
|
||||||
|
@ -481,7 +513,7 @@ class Jarvis(Snake):
|
||||||
async def on_message_delete(self, event: MessageDelete) -> None:
|
async def on_message_delete(self, event: MessageDelete) -> None:
|
||||||
"""Process on_message_delete events."""
|
"""Process on_message_delete events."""
|
||||||
message = event.message
|
message = event.message
|
||||||
modlog = await Setting.find_one(q(guild=message.guild.id, setting="modlog"))
|
modlog = await Setting.find_one(q(guild=message.guild.id, setting="activitylog"))
|
||||||
if modlog:
|
if modlog:
|
||||||
try:
|
try:
|
||||||
content = message.content or "N/A"
|
content = message.content or "N/A"
|
||||||
|
|
Loading…
Add table
Reference in a new issue