Skip to content

Commit 2a7d126

Browse files
committed
Removed api
1 parent 2c15166 commit 2a7d126

File tree

8 files changed

+54
-311
lines changed

8 files changed

+54
-311
lines changed

bot.py

Lines changed: 13 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import sys
3232

3333
from datetime import datetime
34+
from pkg_resources import parse_version
3435
from types import SimpleNamespace
3536

3637
import discord
@@ -45,7 +46,7 @@
4546
from motor.motor_asyncio import AsyncIOMotorClient
4647

4748
from core.changelog import Changelog
48-
from core.clients import ModmailApiClient, SelfHostedClient, PluginDatabaseClient
49+
from core.clients import SelfHostedClient, PluginDatabaseClient
4950
from core.config import ConfigManager
5051
from core.utils import info, error
5152
from core.models import Bot
@@ -104,14 +105,10 @@ def __init__(self):
104105

105106
self._configure_logging()
106107

107-
if self.self_hosted:
108-
self._db = AsyncIOMotorClient(self.config.mongo_uri).modmail_bot
109-
self._api = SelfHostedClient(self)
110-
else:
111-
self._api = ModmailApiClient(self)
108+
self._db = AsyncIOMotorClient(self.config.mongo_uri).modmail_bot
109+
self._api = SelfHostedClient(self)
112110
self.plugin_db = PluginDatabaseClient(self)
113111

114-
self.data_task = self.loop.create_task(self.data_loop())
115112
self.autoupdate_task = self.loop.create_task(self.autoupdate_loop())
116113
self._load_extensions()
117114
self.owner = None
@@ -144,10 +141,6 @@ def version(self):
144141
def db(self):
145142
return self._db
146143

147-
@property
148-
def self_hosted(self):
149-
return bool(self.config.get('mongo_uri', ''))
150-
151144
@property
152145
def api(self):
153146
return self._api
@@ -210,12 +203,6 @@ def run(self, *args, **kwargs):
210203
except Exception:
211204
logger.critical(error('Fatal exception'), exc_info=True)
212205
finally:
213-
try:
214-
self.data_task.cancel()
215-
self.loop.run_until_complete(self.data_task)
216-
except asyncio.CancelledError:
217-
logger.debug('data_task has been cancelled')
218-
219206
try:
220207
self.autoupdate_task.cancel()
221208
self.loop.run_until_complete(self.autoupdate_task)
@@ -345,15 +332,8 @@ def main_color(self):
345332

346333
async def on_connect(self):
347334
logger.info(LINE)
348-
if not self.self_hosted:
349-
logger.info(info('MODE: Using the Modmail API'))
350-
logger.info(LINE)
351-
await self.validate_api_token()
352-
logger.info(LINE)
353-
else:
354-
logger.info(info('Mode: Self-hosting logs.'))
355-
await self.validate_database_connection()
356-
logger.info(LINE)
335+
await self.validate_database_connection()
336+
logger.info(LINE)
357337
logger.info(info('Connected to gateway.'))
358338

359339
await self.config.refresh()
@@ -784,32 +764,6 @@ def overwrites(ctx):
784764
)
785765
return overwrites
786766

787-
async def validate_api_token(self):
788-
try:
789-
self.config.modmail_api_token
790-
except KeyError:
791-
logger.critical(error(f'MODMAIL_API_TOKEN not found.'))
792-
logger.critical(error('Set a config variable called '
793-
'MODMAIL_API_TOKEN with a token from '
794-
'https://dashboard.modmail.tk.'))
795-
logger.critical(error('If you want to self-host logs, '
796-
'input a MONGO_URI config variable.'))
797-
logger.critical(error('A Modmail API token is not needed '
798-
'if you are self-hosting logs.'))
799-
800-
return await self.logout()
801-
else:
802-
valid = await self.api.validate_token()
803-
if not valid:
804-
logger.critical(error('Invalid MODMAIL_API_TOKEN - get one '
805-
'from https://dashboard.modmail.tk'))
806-
return await self.logout()
807-
808-
user = await self.api.get_user_info()
809-
username = user['user']['username']
810-
logger.info(info('Validated token.'))
811-
logger.info(info('GitHub user: ' + username))
812-
813767
async def validate_database_connection(self):
814768
try:
815769
await self.db.command('buildinfo')
@@ -821,32 +775,6 @@ async def validate_database_connection(self):
821775
else:
822776
logger.info(info('Successfully connected to the database.'))
823777

824-
async def data_loop(self):
825-
await self.wait_until_ready()
826-
self.owner = (await self.application_info()).owner
827-
828-
while not self.is_closed():
829-
data = {
830-
"owner_name": str(self.owner),
831-
"owner_id": self.owner.id,
832-
"bot_id": self.user.id,
833-
"bot_name": str(self.user),
834-
"avatar_url": self.user.avatar_url,
835-
"guild_id": self.guild_id,
836-
"guild_name": self.guild.name,
837-
"member_count": len(self.guild.members),
838-
"uptime": (datetime.utcnow() -
839-
self.start_time).total_seconds(),
840-
"latency": f'{self.ws.latency * 1000:.4f}',
841-
"version": self.version,
842-
# TODO: change to `self_hosted`
843-
"selfhosted": self.self_hosted,
844-
"last_updated": str(datetime.utcnow())
845-
}
846-
847-
await self.api.post_metadata(data)
848-
await asyncio.sleep(3600)
849-
850778
async def autoupdate_loop(self):
851779
await self.wait_until_ready()
852780

@@ -855,16 +783,19 @@ async def autoupdate_loop(self):
855783
logger.info(LINE)
856784
return
857785

858-
if self.self_hosted and not self.config.get('github_access_token'):
786+
if not self.config.get('github_access_token'):
859787
logger.warning(info('GitHub access token not found.'))
860788
logger.warning(info('Autoupdates disabled.'))
861789
logger.info(LINE)
862790
return
863791

792+
logger.info(info('Autoupdate loop started.'))
793+
864794
while not self.is_closed():
865-
metadata = await self.api.get_metadata()
795+
changelog = await Changelog.from_url(self)
796+
latest = changelog.latest_version
866797

867-
if metadata['latest_version'] != self.version:
798+
if parse_version(self.version) < parse_version(latest.version):
868799
data = await self.api.update_repository()
869800

870801
embed = discord.Embed(color=discord.Color.green())
@@ -875,10 +806,8 @@ async def autoupdate_loop(self):
875806
icon_url=user['avatar_url'],
876807
url=user['url'])
877808
embed.set_footer(text=f"Updating Modmail v{self.version} "
878-
f"-> v{metadata['latest_version']}")
809+
f"-> v{latest.version}")
879810

880-
changelog = await Changelog.from_url(self)
881-
latest = changelog.latest_version
882811
embed.description = latest.description
883812
for name, value in latest.fields.items():
884813
embed.add_field(name=name, value=value)

cogs/modmail.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -372,11 +372,7 @@ def format_log_embeds(self, logs, avatar_url):
372372

373373
created_at = parser.parse(entry['created_at'])
374374

375-
log_url = (
376-
f"https://logs.modmail.tk/{key}"
377-
if not self.bot.self_hosted else
378-
self.bot.config.log_url.strip('/') + f'/logs/{key}'
379-
)
375+
log_url = self.bot.config.log_url.strip('/') + f'/logs/{key}'
380376

381377
username = entry['recipient']['name'] + '#'
382378
username += entry['recipient']['discriminator']
@@ -443,14 +439,6 @@ async def logs(self, ctx, *, member: User = None):
443439
@checks.has_permissions(manage_messages=True)
444440
async def closed_by(self, ctx, *, user: User = None):
445441
"""Returns all logs closed by a user."""
446-
if not self.bot.self_hosted:
447-
embed = discord.Embed(
448-
color=discord.Color.red(),
449-
description='This command only works if '
450-
'you are self-hosting your logs.'
451-
)
452-
return await ctx.send(embed=embed)
453-
454442
user = user or ctx.author
455443

456444
query = {
@@ -485,14 +473,6 @@ async def search(self, ctx, limit: Optional[int] = None, *, query):
485473

486474
await ctx.trigger_typing()
487475

488-
if not self.bot.self_hosted:
489-
embed = discord.Embed(
490-
color=discord.Color.red(),
491-
description='This command only works if you '
492-
'are self-hosting your logs.'
493-
)
494-
return await ctx.send(embed=embed)
495-
496476
query = {
497477
'guild_id': str(self.bot.guild_id),
498478
'open': False,

cogs/utility.py

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from difflib import get_close_matches
88
from io import StringIO
99
from json import JSONDecodeError
10+
from pkg_resources import parse_version
1011
from textwrap import indent
1112

1213
import discord
@@ -203,19 +204,8 @@ async def about(self, ctx):
203204
desc += 'an organised manner.'
204205
embed.description = desc
205206

206-
url = 'https://api.modmail.tk/metadata'
207-
async with self.bot.session.get(url) as resp:
208-
try:
209-
meta = await resp.json()
210-
except (JSONDecodeError, ClientResponseError):
211-
meta = None
212-
213207
embed.add_field(name='Uptime', value=self.bot.uptime)
214-
if meta:
215-
embed.add_field(name='Instances', value=meta['instances'])
216-
else:
217-
embed.add_field(name='Latency',
218-
value=f'{self.bot.latency * 1000:.2f} ms')
208+
embed.add_field(name='Latency', value=f'{self.bot.latency * 1000:.2f} ms')
219209

220210
embed.add_field(name='Version',
221211
value=f'[`{self.bot.version}`]'
@@ -225,12 +215,13 @@ async def about(self, ctx):
225215

226216
footer = f'Bot ID: {self.bot.user.id}'
227217

228-
if meta:
229-
if self.bot.version != meta['latest_version']:
230-
footer = ("A newer version is available "
231-
f"v{meta['latest_version']}")
232-
else:
233-
footer = 'You are up to date with the latest version.'
218+
changelog = await Changelog.from_url(self.bot)
219+
latest = changelog.latest_version
220+
221+
if parse_version(self.bot.version) < parse_version(latest.version):
222+
footer = f"A newer version is available v{latest.version}"
223+
else:
224+
footer = 'You are up to date with the latest version.'
234225

235226
embed.add_field(name='GitHub',
236227
value='https://github.com/kyb3r/modmail',
@@ -364,18 +355,19 @@ async def github(self, ctx):
364355
@trigger_typing
365356
async def update(self, ctx):
366357
"""Updates the bot, this only works with heroku users."""
367-
metadata = await self.bot.api.get_metadata()
358+
changelog = await Changelog.from_url(self.bot)
359+
latest = changelog.latest_version
368360

369361
desc = (f'The latest version is [`{self.bot.version}`]'
370362
'(https://github.com/kyb3r/modmail/blob/master/bot.py#L25)')
371363

372-
embed = Embed(
373-
title='Already up to date',
374-
description=desc,
375-
color=self.bot.main_color
376-
)
364+
if parse_version(self.bot.version) >= parse_version(latest.version):
365+
embed = Embed(
366+
title='Already up to date',
367+
description=desc,
368+
color=self.bot.main_color
369+
)
377370

378-
if metadata['latest_version'] == self.bot.version:
379371
data = await self.bot.api.get_user_info()
380372
if not data.get('error'):
381373
user = data['user']
@@ -387,19 +379,17 @@ async def update(self, ctx):
387379

388380
commit_data = data['data']
389381
user = data['user']
390-
embed.title = None
391-
embed.set_author(name=user['username'],
392-
icon_url=user['avatar_url'],
393-
url=user['url'])
394-
embed.set_footer(text=f'Updating Modmail v{self.bot.version} '
395-
f"-> v{metadata['latest_version']}")
396382

397383
if commit_data:
384+
embed = Embed(color=self.bot.main_color)
385+
386+
embed.set_footer(text=f'Updating Modmail v{self.bot.version} '
387+
f'-> v{latest.version}')
388+
398389
embed.set_author(name=user['username'] + ' - Updating bot',
399390
icon_url=user['avatar_url'],
400391
url=user['url'])
401-
changelog = await Changelog.from_url(self.bot)
402-
latest = changelog.latest_version
392+
403393
embed.description = latest.description
404394
for name, value in latest.fields.items():
405395
embed.add_field(name=name, value=value)
@@ -409,8 +399,14 @@ async def update(self, ctx):
409399
embed.add_field(name='Merge Commit',
410400
value=f'[`{short_sha}`]({html_url})')
411401
else:
412-
embed.description = ('Already up to date '
413-
'with master repository.')
402+
embed = Embed(
403+
title='Already up to date with master repository.',
404+
description='No further updates required',
405+
color=self.bot.main_color
406+
)
407+
embed.set_author(name=user['username'],
408+
icon_url=user['avatar_url'],
409+
url=user['url'])
414410

415411
return await ctx.send(embed=embed)
416412

core/changelog.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ class Version:
3636

3737
def __init__(self, bot: Bot, version: str, lines: str):
3838
self.bot = bot
39-
self.version = version
39+
self.version = version.lstrip('vV')
4040
self.lines = [x for x in lines.splitlines() if x]
4141
self.fields = defaultdict(str)
4242
self.description = ''
4343
self.parse()
4444

4545
def __repr__(self) -> str:
46-
return f'Version({self.version}, description="{self.description}")'
46+
return f'Version(v{self.version}, description="{self.description}")'
4747

4848
def parse(self) -> None:
4949
"""
@@ -66,7 +66,7 @@ def embed(self) -> Embed:
6666
"""
6767
embed = Embed(color=Color.green(), description=self.description)
6868
embed.set_author(
69-
name=f'{self.version} - Changelog',
69+
name=f'v{self.version} - Changelog',
7070
icon_url=self.bot.user.avatar_url,
7171
)
7272

@@ -150,8 +150,3 @@ async def from_url(cls, bot: Bot, url: str = '') -> 'Changelog':
150150
url = url or cls.CHANGELOG_URL
151151
resp = await bot.session.get(url)
152152
return cls(bot, await resp.text())
153-
154-
155-
if __name__ == '__main__':
156-
with open('../CHANGELOG.md') as f:
157-
print(Changelog(..., f.read()).latest_version)

0 commit comments

Comments
 (0)