|
1 | 1 | import discord
|
| 2 | +import secrets |
| 3 | +from datetime import datetime |
2 | 4 |
|
3 | 5 |
|
4 | 6 | class ApiClient:
|
@@ -120,8 +122,64 @@ def post_log(self, channel_id, payload):
|
120 | 122 |
|
121 | 123 |
|
122 | 124 | class SelfhostedApiInterface(ModmailApiClient):
|
| 125 | + |
123 | 126 | @property
|
124 | 127 | def db(self)
|
125 | 128 | 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 | + |
126 | 184 |
|
127 | 185 |
|
0 commit comments