import asyncio from pathlib import Path from discord import Intents from discord.ext import commands from discord.utils import find from jarvis import logo, tasks, utils from jarvis.config import get_config from jarvis.db import DBManager from jarvis.events import guild, member, message from psutil import Process from discord_slash import SlashCommand if asyncio.get_event_loop().is_closed(): asyncio.set_event_loop(asyncio.new_event_loop()) intents = Intents.default() intents.members = True restart_ctx = None jarvis = commands.Bot( command_prefix=utils.get_prefix, intents=intents, help_command=None ) slash = SlashCommand(jarvis, sync_commands=True, sync_on_cog_reload=True) jarvis_self = Process() __version__ = "1.8.1" db = DBManager(get_config().mongo).mongo jarvis_db = db.jarvis @jarvis.event async def on_ready(): global restart_ctx print(" Logged in as {0.user}".format(jarvis)) print(" Connected to {} guild(s)".format(len(jarvis.guilds))) with jarvis_self.oneshot(): print(f" Current PID: {jarvis_self.pid}") Path(f"jarvis.{jarvis_self.pid}.pid").touch() if restart_ctx: channel = None if "guild" in restart_ctx: guild = find(lambda x: x.id == restart_ctx["guild"], jarvis.guilds) if guild: channel = find( lambda x: x.id == restart_ctx["channel"], guild.channels ) elif "user" in restart_ctx: channel = jarvis.get_user(restart_ctx["user"]) if channel: await channel.send("Core systems restarted and back online.") restart_ctx = None def run(ctx=None): global restart_ctx if ctx: restart_ctx = ctx for extension in utils.get_extensions(): jarvis.load_extension(extension) config = get_config() print( " https://discord.com/api/oauth2/authorize?client_id=" + "{}&permissions=8&scope=bot%20applications.commands".format( config.client_id ) ) jarvis.max_messages = config.max_messages tasks.init() # Add event listeners listeners = [ guild.GuildEventHandler(jarvis), member.MemberEventHandler(jarvis), message.MessageEventHandler(jarvis), ] jarvis.run(config.token, bot=True, reconnect=True) for cog in jarvis.cogs: session = getattr(cog, "_session", None) if session: session.close() if restart_ctx: return restart_ctx