Skip to content

Commit a3134bd

Browse files
committed
Start working on the selfhosted interface
1 parent 89f37ca commit a3134bd

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

core/interfaces.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import discord
2+
import secrets
3+
from datetime import datetime
24

35

46
class ApiClient:
@@ -120,8 +122,64 @@ def post_log(self, channel_id, payload):
120122

121123

122124
class SelfhostedApiInterface(ModmailApiClient):
125+
123126
@property
124127
def db(self)
125128
return self.bot.db
129+
130+
@property
131+
def logs(self):
132+
return self.db.logs
133+
134+
async def get_user_logs(self, user_id):
135+
logs = []
136+
137+
async for entry in self.logs.find({'recipient.id': str(user_id)}):
138+
logs.append(entry)
139+
140+
return logs
141+
142+
async def get_log(self, channel_id):
143+
return await self.logs.find_one({'channel_id': str(channel_id)})
144+
145+
146+
async def get_log_url(self, recipient, channel, creator):
147+
key = secrets.token_hex(6)
148+
149+
await self.logs.insert_one({
150+
'key': key,
151+
'open': True,
152+
'created_at': str(datetime.utcnow()),
153+
'closed_at': None,
154+
'channel_id': str(channel.id),
155+
'guild_id': str(channel.guild.id),
156+
'recipient': {
157+
'id': str(recipient.id),
158+
'name': recipient.name,
159+
'discriminator': recipient.discriminator,
160+
'avatar_url': recipient.avatar_url,
161+
'mod': False
162+
},
163+
'creator': {
164+
'id': str(creator.id),
165+
'name': creator.name,
166+
'discriminator': creator.discriminator,
167+
'avatar_url': creator.avatar_url,
168+
'mod': isinstance(creator, discord.Member)
169+
},
170+
'closer': None,
171+
'messages': []
172+
})
173+
174+
return f'https://{self.bot.config.log_domain}/logs/{key}'
175+
176+
async def get_config(self):
177+
return await self.db.config.find_one({})
178+
179+
async def update_config(self, data):
180+
valid_keys = self.app.config.valid_keys - {'token', 'modmail_api_token', 'modmail_guild_id', 'guild_id'}
181+
data = {k: v for k, v in data.items() if k in valid_keys}
182+
return await self.db.config.find_one_and_replace({}, data)
183+
126184

127185

0 commit comments

Comments
 (0)