Passed
Push — master ( dcd1eb...4f7f97 )
by Cyb3r
02:51 queued 01:44
created

bot.cogs.events.setup()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 3
rs 10
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 send to the loggign 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="{} joined the server".format(member.name))
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
            await member.send(
47
                embed=discord.Embed(
48
                    title="Welcome to the server!",
49
                    description=welcome_message,
50
                    timestamp=member.joined_at,
51
                )
52
            )
53
54
        channels = await utils.select("admin_channels", "id", "log", True)
55
        for channel in channels:
56
            to_send = self.bot.get_channel(channel)
57
            await to_send.send(
58
                embed=discord.Embed(
59
                    title="User Joined",
60
                    color=discord.Color(int("FF0000", 16)),
61
                    description=f"{member.name} joined the server",
62
                )
63
            )
64
65
    @commands.Cog.listener()
66
    async def on_member_remove(self, member: discord.Member) -> None:
67
        """
68
        Member leave
69
70
        Event is triggered when a members leaves the server.
71
        There is a message that they left that is sent to all admin_logging channels.
72
        Doesn't use utils.make_embed due to not having context.
73
74
        :param member: Member who left
75
        :type member: discord.Member
76
        :return: None
77
        """
78
        channels = await utils.select("admin_channels", "id", "log", True)
79
        for channel in channels:
80
            to_send = self.bot.get_channel(channel)
81
            await to_send.send(
82
                embed=discord.Embed(
83
                    title="User left",
84
                    color=discord.Color(int("FF0000", 16)),
85
                    description=f"{member.name} member left",
86
                )
87
            )
88
89
90
def setup(bot):
91
    """Needed for extension loading"""
92
    bot.add_cog(EventsCog(bot))
93