Passed
Pull Request — master (#50)
by Cyb3r
01:18
created

bot.main   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 56
dl 0
loc 96
rs 10
c 0
b 0
f 0
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
B CCC_Bot.on_ready() 0 24 6
A CCC_Bot.__init__() 0 10 1
1
"""CCC Bot
2
---
3
Discord Bot for Competitive Cyber Clubs Server.
4
5
All values are loaded from environment variables. Also can be loaded from a .env file.
6
Required Variables:
7
---
8
DISCORD_TOKEN: The token for the bot.
9
OWNER_NAME: The username of the bot owner
10
OWNER_ID: The Discord ID of the bot owner
11
12
Optional:
13
---
14
LOG_LEVEL {DEFAULT: INFO}:
15
"""
16
import os
17
import sys
18
from datetime import datetime
19
from discord.ext import commands
20
import discord
21
from bot import utils
22
23
24
TOKEN = os.environ["DISCORD_TOKEN"]
25
OWNER_NAME = os.environ["OWNER_NAME"]
26
OWNER_ID = os.environ["OWNER_ID"]
27
28
29
utils.table_create()
30
log = utils.make_logger("bot", os.getenv("LOG_LEVEL", "INFO"))
31
log.info("Starting up")
32
log.debug(
33
    "Using discord.py version: {} and Python version {}".format(
34
        discord.__version__, sys.version[0:5]
35
    )
36
)
37
38
initial_extensions = [
39
    "cogs.admin",
40
    "cogs.errors",
41
    "cogs.events",
42
    "cogs.health",
43
    "cogs.misc",
44
    "cogs.rank",
45
    "cogs.regions",
46
    "cogs.schools",
47
    "cogs.search",
48
    "cogs.tasks",
49
]
50
51
52
class CCC_Bot(commands.Bot):
53
    """Main class for running bot"""
54
    def __init__(self):
55
        super().__init__(
56
            command_prefix=("$", "?"), owner_id=OWNER_ID, intents=discord.Intents.all()
57
        )
58
59
        self.uptime = datetime.utcnow()
60
        self.list_updated, self.school_list = "", None
61
        self.__version__ = "v0.1.3"
62
        self.description = (
63
            "This Discord bot that assists with the Competitive Cyber Club Discord\n"
64
            "If you experience any issues then please use the ?report feature.\n"
65
            f"Version: {self.__version__}"
66
        )
67
68
    async def on_ready(self):
69
        """
70
        On Ready
71
72
        Startup function which shows servers it has connected to
73
        """
74
        await utils.update_list(self, not os.path.exists("school_list.csv"))
75
        log.info("{} is connected to the following guilds: " "{}".format(self.user, self.guilds))
76
        await utils.insert("bot_admins", [OWNER_NAME, int(OWNER_ID)])
77
        admin_roles = await utils.select("keys", "value", "key", "admin_role")
78
        for admin_role in admin_roles:
79
            role = discord.utils.get(self.guilds[0].roles, name=admin_role)
80
            if role is not None:
81
                for admin in role.members:
82
                    await utils.insert("bot_admins", [admin.name, admin.id])
83
        await self.change_presence(
84
            activity=discord.Activity(name="?help", type=discord.ActivityType.playing)
85
        )
86
        for extension in initial_extensions:
87
            try:
88
                self.load_extension(extension)
89
            except commands.ExtensionError as e:
90
                log.error("Failed to load extension {}. {}".format(extension, e))
91
        log.debug("Bot is ready to go")
92
93
94
bot = CCC_Bot()
95
bot.run(TOKEN, reconnect=True)
96