events.EventsCog.on_member_remove()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 20
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 9
nop 2
dl 0
loc 20
rs 9.95
c 0
b 0
f 0
1
"""Cog that manages events"""
2
import discord
3
from discord.ext import commands
4
from bot import utils
5
6
7
class EventsCog(commands.Cog, name="Events"):
8
    """EventsCog
9
    ---
10
11
    Cog that manages the events
12
13
    Events:
14
    ---
15
        `on_member_join`: Triggered when a new member joins.
16
            The bot will send them a welcome PM.
17
18
        `on_member_remove`: Triggered when a member leaves.
19
            A message will be sent to the logging admin channels.
20
21
    Arguments:
22
    ---
23
        bot {discord.commands.Bot} -- The bot
24
    """
25
26
    def __init__(self, bot):
27
        self.bot = bot
28
29
    @commands.Cog.listener()
30
    async def on_member_join(self, member: discord.Member):
31
        """Member join event
32
33
        Event is triggered when a new member joins. The member receives a welcome PM.
34
        The message content is pulled from the messages table, and it needs a name of "welcome".
35
        Doesn't use utils.make_embed due to not having context.
36
37
        :param member: Member who joined
38
        :type member: discord.Member
39
        :return: None
40
        """
41
        new_role = discord.utils.get(member.guild.roles, name="new")
42
        await member.add_roles(new_role, reason="f{member.name} joined the server")
43
        welcome_message = await utils.select("messages", "message", "name", "welcome")
44
        if welcome_message:
45
            welcome_message = welcome_message[0].replace(r"\n", "\n")
46
            try:
47
                await member.send(
48
                    embed=discord.Embed(
49
                        title="Welcome to the server!",
50
                        description=welcome_message,
51
                        timestamp=member.joined_at,
52
                    )
53
                )
54
            except discord.Forbidden:
55
                pass
56
57
        channels = await utils.select("admin_channels", "id", "log", True)
58
        for channel in channels:
59
            await self.bot.get_channel(channel).send(
60
                embed=discord.Embed(
61
                    title="User Joined",
62
                    color=discord.Color(int("FF0000", 16)),
63
                    description=f"{member.name} joined the server",
64
                )
65
            )
66
67
    @commands.Cog.listener()
68
    async def on_member_remove(self, member: discord.Member) -> None:
69
        """
70
        Member leave
71
72
        Event is triggered when a member leaves the server.
73
        There is a message that they left that is sent to all admin_logging channels.
74
        Doesn't use utils.make_embed due to not having context.
75
76
        :param member: Member who left
77
        :type member: discord.Member
78
        :return: None
79
        """
80
        channels = await utils.select("admin_channels", "id", "log", True)
81
        for channel in channels:
82
            await self.bot.get_channel(channel).send(
83
                embed=discord.Embed(
84
                    title="User left",
85
                    color=discord.Color(int("FF0000", 16)),
86
                    description=f"{member.name} member left",
87
                )
88
            )
89
90
91
async def setup(bot: commands.Bot) -> None:
92
    """Needed for extension loading"""
93
    await bot.add_cog(EventsCog(bot))
94