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

bot.main   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 97
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 56
dl 0
loc 97
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
55
    def __init__(self):
56
        super().__init__(
57
            command_prefix=("$", "?"), owner_id=OWNER_ID, intents=discord.Intents.all()
58
        )
59
60
        self.uptime = datetime.utcnow()
61
        self.list_updated, self.school_list = "", None
62
        self.__version__ = "v0.1.3"
63
        self.description = (
64
            "This Discord bot that assists with the Competitive Cyber Club Discord\n"
65
            "If you experience any issues then please use the ?report feature.\n"
66
            f"Version: {self.__version__}"
67
        )
68
69
    async def on_ready(self):
70
        """
71
        On Ready
72
73
        Startup function which shows servers it has connected to
74
        """
75
        await utils.update_list(self, not os.path.exists("school_list.csv"))
76
        log.info("{} is connected to the following guilds: " "{}".format(self.user, self.guilds))
77
        await utils.insert("bot_admins", [OWNER_NAME, int(OWNER_ID)])
78
        admin_roles = await utils.select("keys", "value", "key", "admin_role")
79
        for admin_role in admin_roles:
80
            role = discord.utils.get(self.guilds[0].roles, name=admin_role)
81
            if role is not None:
82
                for admin in role.members:
83
                    await utils.insert("bot_admins", [admin.name, admin.id])
84
        await self.change_presence(
85
            activity=discord.Activity(name="?help", type=discord.ActivityType.playing)
86
        )
87
        for extension in initial_extensions:
88
            try:
89
                self.load_extension(extension)
90
            except commands.ExtensionError as e:
91
                log.error("Failed to load extension {}. {}".format(extension, e))
92
        log.debug("Bot is ready to go")
93
94
95
bot = CCC_Bot()
96
bot.run(TOKEN, reconnect=True)
97