diff --git a/jarvis/__init__.py b/jarvis/__init__.py index 733cdbb..ebc6693 100644 --- a/jarvis/__init__.py +++ b/jarvis/__init__.py @@ -9,7 +9,7 @@ from dis_snek import Context, Intents, Snake, listen from jarvis_core.db import connect # from jarvis import logo # noqa: F401 -from jarvis import tasks, utils +from jarvis import utils from jarvis.config import get_config from jarvis.events import member, message @@ -102,12 +102,6 @@ async def on_ready() -> None: print(" Connected to {} guild(s)".format(len(jarvis.guilds))) # noqa: T001 -@listen() -async def on_startup() -> None: - """Lepton on_startup override.""" - tasks.init() - - def run() -> None: """Run J.A.R.V.I.S.""" connect(**jconfig.mongo["connect"], testing=jconfig.mongo["database"] == "jarvis") diff --git a/jarvis/tasks/__init__.py b/jarvis/tasks/__init__.py deleted file mode 100644 index 9825337..0000000 --- a/jarvis/tasks/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -"""J.A.R.V.I.S. background task handlers.""" -from jarvis.tasks import twitter, unban, unlock, unwarn - - -def init() -> None: - """Start the background task handlers.""" - unban.unban.start() - unlock.unlock.start() - unwarn.unwarn.start() - twitter.tweets.start() diff --git a/jarvis/tasks/reminder.py b/jarvis/tasks/reminder.py deleted file mode 100644 index eba3a95..0000000 --- a/jarvis/tasks/reminder.py +++ /dev/null @@ -1,45 +0,0 @@ -"""J.A.R.V.I.S. reminder background task handler.""" -from datetime import datetime, timedelta - -from dis_snek.models.snek.tasks.task import Task -from dis_snek.models.snek.tasks.triggers import IntervalTrigger -from jarvis_core.db import q -from jarvis_core.db.models import Reminder - -import jarvis -from jarvis.utils import build_embed - - -@Task.create(trigger=IntervalTrigger(seconds=15)) -async def remind() -> None: - """J.A.R.V.I.S. reminder background task.""" - reminders = Reminder.find(q(remind_at__lte=datetime.utcnow() + timedelta(seconds=30))) - async for reminder in reminders: - if reminder.remind_at <= datetime.utcnow(): - user = await jarvis.jarvis.fetch_user(reminder.user) - if not user: - await reminder.delete() - continue - embed = build_embed( - title="You have a reminder", - description=reminder.message, - fields=[], - ) - embed.set_author( - name=user.username + "#" + user.discriminator, icon_url=user.avatar.url - ) - embed.set_thumbnail(url=user.display_avatar.url) - try: - await user.send(embed=embed) - except Exception: - guild = jarvis.jarvis.fetch_guild(reminder.guild) - channel = guild.get_channel(reminder.channel) if guild else None - if channel and not reminder.private: - await channel.send(f"{user.mention}", embed=embed) - else: - await channel.send( - f"{user.mention}, you had a private reminder set for now, " - "but I couldn't send it to you." - ) - finally: - await reminder.delete() diff --git a/jarvis/tasks/twitter.py b/jarvis/tasks/twitter.py deleted file mode 100644 index 20a8403..0000000 --- a/jarvis/tasks/twitter.py +++ /dev/null @@ -1,63 +0,0 @@ -"""J.A.R.V.I.S. twitter background task handler.""" -import logging -from datetime import datetime, timedelta - -import tweepy -from dis_snek.models.snek.tasks.task import Task -from dis_snek.models.snek.tasks.triggers import IntervalTrigger -from jarvis_core.db import q -from jarvis_core.db.models import Twitter - -import jarvis - -logger = logging.getLogger("jarvis") - - -@Task.create(trigger=IntervalTrigger(minutes=1)) -async def tweets() -> None: - """J.A.R.V.I.S. twitter background task.""" - config = jarvis.config.get_config() - __auth = tweepy.AppAuthHandler( - config.twitter["consumer_key"], jarvis.jconfig.twitter["consumer_secret"] - ) - __api = tweepy.API(__auth) - guild_cache = {} - channel_cache = {} - twitters = Twitter.find(q(active=True)) - async for twitter in twitters: - try: - if not twitter.twitter_id or not twitter.last_sync: - user = __api.get_user(screen_name=twitter.handle) - twitter.update( - q(twitter_id=user.id, handle=user.screen_name, last_sync=datetime.now()) - ) - - if twitter.last_sync + timedelta(hours=1) <= datetime.now(): - user = __api.get_user(id=twitter.twitter_id) - twitter.update(q(handle=user.screen_name, last_sync=datetime.now())) - - if tweets := __api.user_timeline(id=twitter.twitter_id): - guild_id = twitter.guild - channel_id = twitter.channel - tweets = sorted(tweets, key=lambda x: x.id) - if guild_id not in guild_cache: - guild_cache[guild_id] = await jarvis.jarvis.fetch_guild(guild_id) - guild = guild_cache[twitter.guild] - if channel_id not in channel_cache: - channel_cache[channel_id] = await guild.fetch_channel(channel_id) - channel = channel_cache[channel_id] - for tweet in tweets: - retweet = "retweeted_status" in tweet.__dict__ - if retweet and not twitter.retweets: - continue - timestamp = int(tweet.created_at.timestamp()) - url = f"https://twitter.com/{twitter.handle}/status/{tweet.id}" - verb = "re" if retweet else "" - await channel.send( - f"`@{twitter.handle}` {verb}tweeted this at : {url}" - ) - newest = max(tweets, key=lambda x: x.id) - twitter.update(q(last_tweet=newest.id)) - await twitter.commit() - except Exception as e: - logger.error(f"Error with tweets: {e}") diff --git a/jarvis/tasks/unban.py b/jarvis/tasks/unban.py deleted file mode 100644 index 55a8409..0000000 --- a/jarvis/tasks/unban.py +++ /dev/null @@ -1,33 +0,0 @@ -"""J.A.R.V.I.S. unban background task handler.""" -from datetime import datetime, timedelta - -from dis_snek.models.snek.tasks.task import Task -from dis_snek.models.snek.tasks.triggers import IntervalTrigger -from jarvis_core.db import q -from jarvis_core.db.models import Ban, Unban - -import jarvis - - -@Task.create(IntervalTrigger(minutes=10)) -async def _unban() -> None: - """J.A.R.V.I.S. unban background task.""" - jarvis_id = jarvis.jconfig.client_id - bans = Ban.find(q(type="temp", active=True)) - async for ban in bans: - if ban.created_at + timedelta(hours=ban.duration) < datetime.now() + timedelta(minutes=10): - guild = await jarvis.jarvis.fetch_guild(ban.guild) - user = await jarvis.jarvis.fetch_user(ban.user) - if user: - await guild.unban(user=user, reason="Ban expired") - ban.update(q(active=False)) - await ban.commit() - u = Unban( - user=user.id, - guild=guild.id, - username=user.name, - discrim=user.discriminator, - admin=jarvis_id, - reason="Ban expired", - ) - await u.commit() diff --git a/jarvis/tasks/unlock.py b/jarvis/tasks/unlock.py deleted file mode 100644 index 22f6f15..0000000 --- a/jarvis/tasks/unlock.py +++ /dev/null @@ -1,37 +0,0 @@ -"""J.A.R.V.I.S. unlock background task handler.""" -from asyncio import to_thread -from datetime import datetime, timedelta - -from dis_snek.models.snek.tasks.task import Task -from dis_snek.models.snek.tasks.triggers import IntervalTrigger - -import jarvis -from jarvis.db.models import Lock - - -async def _unlock() -> None: - """J.A.R.V.I.S. unlock blocking task.""" - locks = Lock.objects(active=True) - # Block execution for now - # TODO: Reevaluate with admin/lock[down] - if False: - for lock in locks: - if lock.created_at + timedelta(minutes=lock.duration) < datetime.utcnow(): - guild = await jarvis.jarvis.fetch_guild(lock.guild) - channel = await guild.fetch_channel(lock.channel) - if channel: - roles = await guild.fetch_roles() - for role in roles: - overrides = channel.overwrites_for(role) - overrides.send_messages = None - await channel.set_permissions( - role, overwrite=overrides, reason="Lock expired" - ) - lock.active = False - lock.save() - - -@Task.create(IntervalTrigger(minutes=1)) -async def unlock() -> None: - """J.A.R.V.I.S. unlock background task.""" - await to_thread(_unlock) diff --git a/jarvis/tasks/unwarn.py b/jarvis/tasks/unwarn.py deleted file mode 100644 index 84a07db..0000000 --- a/jarvis/tasks/unwarn.py +++ /dev/null @@ -1,17 +0,0 @@ -"""J.A.R.V.I.S. unwarn background task handler.""" -from datetime import datetime, timedelta - -from dis_snek.models.snek.tasks.task import Task -from dis_snek.models.snek.tasks.triggers import IntervalTrigger -from jarvis_core.db import q -from jarvis_core.db.models import Warning - - -@Task.create(IntervalTrigger(hours=1)) -async def unwarn() -> None: - """J.A.R.V.I.S. unwarn background task.""" - warns = Warning.find(q(active=True)) - async for warn in warns: - if warn.created_at + timedelta(hours=warn.duration) < datetime.now(): - warn.update(q(active=False)) - await warn.commit()