generated from Roxedus/Discord.py-BotBase
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathlauncher.py
115 lines (93 loc) · 3.77 KB
/
launcher.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
"""
Hovedmodul for botten
"""
# pylint: disable=W0201
# pylint: disable=missing-function-docstring
# Discord Packages
import discord
from discord.ext import commands
# Bot Utilities
from cogs.utils.logger import Logger
from cogs.utils.settings import Settings
import time
import traceback
from argparse import ArgumentParser, RawTextHelpFormatter
def _get_prefix(bot, message):
if not message.guild:
prefixes = settings.prefix
return commands.when_mentioned_or(*prefixes)(bot, message)
prefixes = settings.prefix
return commands.when_mentioned_or(*prefixes)(bot, message)
class Bot(commands.Bot):
"""
Hovedklasse for botten
"""
def __init__(self):
intents = discord.Intents(
emojis=True,
guild_reactions=True,
guild_typing=True,
guilds=True,
members=True,
messages=True,
message_content=True,
presences=True
)
mentions = discord.AllowedMentions(
everyone=False,
replied_user=False
)
super().__init__(command_prefix=_get_prefix, intents=intents, allowed_mentions=mentions)
self.logger = logger
self.data_dir = data_dir
self.settings = settings.extra
self.cache_overview = {"stars": 0}
async def on_message(self, message):
if message.author.bot:
return
await self.process_commands(message)
async def on_ready(self):
if not hasattr(self, "uptime"):
self.uptime = time.time()
if not hasattr(self, "appinfo"):
self.appinfo = await self.application_info()
self.logger.info("Logged in as: %s in %s servers.", self.user.name, len(self.guilds))
self.logger.info("DiscordPY: %s", discord.__version__)
self.logger.debug("Bot Ready;Prefixes: %s", ", ".join(settings.prefix))
async def setup_hook(self):
extensions = ["cogs.misc", "cogs.poeng", "cogs.bokmerker",
"cogs.errors", "cogs.github", "cogs.broder", "cogs.workplace"]
for extension in extensions:
try:
self.logger.debug("Loading extension %s", extension)
await self.load_extension(extension)
except Exception as _e:
self.logger.exception("Loading of extension %s failed: %s", extension, _e)
async def close(self):
self.logger.info("Logging out")
await super().close()
if __name__ == "__main__":
parser = ArgumentParser(prog="Roxedus' ProgBott",
description="Programmeringsbot for Norsk programmering",
formatter_class=RawTextHelpFormatter)
parser.add_argument("-D", "--debug", action="store_true", help="Sets debug to true")
parser.add_argument("-l", "--level", help="Sets debug level",
choices=["critical", "error", "warning", "info", "debug"], default="warning")
parser.add_argument("-d", "--data-directory",
help="Define an alternate data directory location", default="data", type=str)
parser.add_argument("-f", "--log-to-file", action="store_true", help="Save log to file", default=True)
args = parser.parse_args()
LEVEL = args.level.upper()
data_dir = args.data_directory
if args.debug:
LEVEL = "DEBUG"
settings = Settings(data_dir=data_dir, log_level=LEVEL, log_to_file=args.log_to_file)
logger = Logger(location=settings.data_dir, level=settings.log_level, to_file=settings.log_to_file).logger
logger.debug("Data folder: %s", settings.data_dir)
# pylint: disable=arguments-differ
try:
Bot().run(settings.token)
except Exception as _e:
_tb = _e.__traceback__
logger.error(traceback.extract_tb(_tb))
print(_e)