Skip to content

Commit c20620b

Browse files
committed
Base stuff
1 parent 4882cfa commit c20620b

File tree

7 files changed

+149
-0
lines changed

7 files changed

+149
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,6 @@ venv.bak/
102102

103103
# mypy
104104
.mypy_cache/
105+
106+
# Custom Files
107+
config.json

bot.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import json
2+
import os
3+
import traceback
4+
5+
import discord
6+
from discord.ext import commands
7+
8+
with open('config.json') as f:
9+
config = json.load(f)
10+
11+
12+
class Bot(commands.AutoShardedBot):
13+
def __init__(self, **options):
14+
super().__init__(**options)
15+
self._load_cogs()
16+
17+
def _load_cogs(self):
18+
for ext in os.listdir('extensions'):
19+
if ext.endswith('.py'):
20+
try:
21+
self.load_extension(f'extensions.{ext[:-3]}')
22+
except (ImportError, SyntaxError, discord.ClientException):
23+
traceback.print_exc()
24+
25+
async def on_message(self, message):
26+
if message.author.bot:
27+
return
28+
29+
await self.process_commands(message)
30+
31+
32+
bot = Bot(command_prefix=config.get('prefixes'))
33+
bot.run(config.get('token'))

extensions/guild.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"""
2+
Provides log coverage of guild-related events.
3+
"""
4+
5+
from discord.ext import commands
6+
from discord.ext.commands import Cog
7+
8+
from utils.decorators import server_configured
9+
10+
11+
class GuildLog(commands.Cog):
12+
def __init__(self, bot):
13+
self.bot = bot
14+
# On ready, create a registry of all invites in a guild.
15+
16+
@Cog.listener()
17+
async def on_ready(self):
18+
print('Connected to discord!!!')
19+
20+
@server_configured
21+
@Cog.listener()
22+
async def on_guild_update(self, before, after):
23+
print('hi mom')
24+
25+
@Cog.listener()
26+
async def on_member_join(self, member):
27+
...
28+
29+
@Cog.listener()
30+
async def on_member_remove(self, member):
31+
...
32+
33+
@Cog.listener()
34+
async def on_member_update(self, before, after):
35+
...
36+
37+
@Cog.listener()
38+
async def on_member_ban(self, guild, member):
39+
...
40+
41+
@Cog.listener()
42+
async def on_member_unban(self, guild, member):
43+
...
44+
45+
46+
def setup(bot):
47+
bot.add_cog(GuildLog(bot))

extensions/messages.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
Provides log coverage of message-related events.
3+
"""
4+
5+
from discord.ext import commands
6+
from discord.ext.commands import Cog
7+
8+
9+
class MessageLog(Cog):
10+
def __init__(self, bot):
11+
self.bot = bot
12+
13+
@Cog.listener()
14+
async def on_message_edit(self, before, after):
15+
...
16+
17+
@Cog.listener()
18+
async def on_message_delete(self, message):
19+
...
20+
21+
22+
def setup(bot):
23+
bot.add_cog(MessageLog(bot))

requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
discord.py
2+
pymongo

utils/db.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from pymongo import MongoClient
2+
3+
client = MongoClient('mongodb://localhost:27017/')
4+
db = client['modlog']
5+
6+
config = db['config']
7+
invites = db['invitetracker']

utils/decorators.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from functools import wraps
2+
3+
from discord import Guild
4+
5+
from utils.db import config
6+
7+
8+
async def no_op(*args, **kwargs):
9+
pass
10+
11+
12+
def server_configured(func):
13+
@wraps(func)
14+
async def wrapper(*args, **kwargs):
15+
e = next((o for o in args if isinstance(o, Guild) or hasattr(o, 'guild')), None)
16+
17+
if not e:
18+
print(f'[SUSPICIOUS] No entities passed to {func.__name__} are, or contain a `Guild`!')
19+
return await no_op()
20+
21+
if hasattr(e, 'guild'):
22+
e = e.guild
23+
24+
guild_id = str(e.id)
25+
g_conf = config.find_one({'_id': guild_id})
26+
27+
if g_conf and g_conf.get('channel') is not None:
28+
log_channel_id = int(g_conf['channel'])
29+
log_channel = next(c for c in e.text_channels if c.id == log_channel_id)
30+
return await func(*args, **kwargs, log_channel=log_channel)
31+
32+
return await no_op() # Guild has no config, or existing log channel.
33+
34+
return wrapper

0 commit comments

Comments
 (0)