-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathbot.py
More file actions
101 lines (80 loc) · 2.97 KB
/
bot.py
File metadata and controls
101 lines (80 loc) · 2.97 KB
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
# -*- coding: utf-8 -*-
import asyncio
import json
import logging
import os
import aiohttp
import discord
from discord.ext import commands
import secrets
from cogs.mongo import mongo
class DevilBot(commands.Bot):
def __init__(
self,
event_loop: asyncio.AbstractEventLoop,
session: aiohttp.ClientSession,
token: str,
logger: logging.Logger
):
super().__init__(
command_prefix=self.get_prefix,
intents=discord.Intents().all(),
case_insensitive=True,
loop=event_loop,
description="Multipurpose Discord bot made in Python by DevilJamJar",
activity=discord.Activity(type=1, name="@DevilBot help")
)
self.session = session
self.token = token
self.logger = logger
self.colour = 0x860111
self.db = mongo(event_loop)
self.prefixes = self.load_prefixes()
self.load_cogs()
self.logger.info('Initialised DevilBot subclass and attributes')
@staticmethod
def load_prefixes() -> dict:
with open('prefixes.json', 'r') as f:
prefixes = json.load(f)
return prefixes
def load_cogs(self) -> None:
for filename in os.listdir('cogs'):
if filename.endswith('.py') and filename not in ('secrets.py', 'starboard.py', 'logging.py', 'mongo.py'):
self.load_extension('cogs.{}'.format(filename[:-3]))
self.logger.info(f'Loaded cogs.{filename[:-3]}')
self.load_extension(name='jishaku')
self.logger.info(f'Loaded jishaku')
def run(self) -> None:
super().run(self.token)
async def get_prefix(self, message: discord.Message) -> str:
guild_prefix = '' if message.author.id in (670564722218762240, 737447606841639044) else self.prefixes.get(str(message.guild.id),
'ow!')
return commands.when_mentioned_or(guild_prefix)(self, message)
async def on_ready(self) -> None:
self.logger.info('Logged in successfully')
self.logger.info(f'Name: {self.user}')
self.logger.info(f'ID: {self.user.id}')
def main():
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession()
logger = logging.getLogger('DevilBot')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='LOG.log', encoding='utf-8', mode='w')
handler.setFormatter(
logging.Formatter("%(asctime)s %(name)s[%(lineno)d] - %(levelname)s: %(message)s", datefmt="%d/%m/%y %H:%M:%S"))
logger.addHandler(handler)
logger.info('Launching DevilBot')
bot = DevilBot(
event_loop=loop,
session=session,
token=secrets.token,
logger=logger
)
@bot.check
async def check_dm(ctx):
if isinstance(ctx.channel, discord.DMChannel):
return False
return True
bot.run()
if __name__ == "__main__":
main()