2023-07-09 00:57:11 -07:00
|
|
|
import discord
|
2023-07-10 10:38:28 -07:00
|
|
|
from discord.ext import commands, tasks
|
2023-07-09 00:57:11 -07:00
|
|
|
import shutil
|
|
|
|
|
import time
|
|
|
|
|
import os
|
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
import aiohttp
|
2024-01-25 01:38:15 -08:00
|
|
|
import src.logger as logger
|
2023-07-09 00:57:11 -07:00
|
|
|
|
2024-02-02 22:28:44 -08:00
|
|
|
|
2023-07-09 00:57:11 -07:00
|
|
|
load_dotenv()
|
2024-01-30 03:38:16 -08:00
|
|
|
discord_token = os.getenv('discord_token')
|
2023-07-09 00:57:11 -07:00
|
|
|
|
2024-01-20 23:04:12 -08:00
|
|
|
intents = discord.Intents.all()
|
2023-07-09 00:57:11 -07:00
|
|
|
intents.message_content = True
|
2024-01-20 21:55:19 -08:00
|
|
|
bot = commands.Bot(command_prefix='!', intents=intents)
|
2024-01-30 03:38:16 -08:00
|
|
|
|
2024-02-02 22:11:52 -08:00
|
|
|
|
|
|
|
|
|
2023-07-09 01:57:35 -07:00
|
|
|
async def folder_setup():
|
2024-01-30 03:38:16 -08:00
|
|
|
try:
|
2024-02-02 22:11:52 -08:00
|
|
|
folder_names = ["tmp", "extensions", "data", "logs"]
|
2024-01-30 03:38:16 -08:00
|
|
|
for folder_name in folder_names:
|
|
|
|
|
if not os.path.exists(folder_name):
|
|
|
|
|
os.mkdir(folder_name)
|
|
|
|
|
except Exception as e:
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.exception(f"Error setting up folders: {e}")
|
2024-01-30 03:38:16 -08:00
|
|
|
|
2024-01-25 00:13:16 -08:00
|
|
|
async def delete_all_files(path):
|
2024-01-30 03:38:16 -08:00
|
|
|
try:
|
|
|
|
|
for filename in os.listdir(path):
|
2024-02-02 22:28:44 -08:00
|
|
|
if os.path.isfile(path+filename):
|
2024-01-30 03:38:16 -08:00
|
|
|
os.remove(path+filename)
|
|
|
|
|
except Exception as e:
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.exception(f"Error deleting files: {e}")
|
2023-07-10 17:44:15 -07:00
|
|
|
|
|
|
|
|
@tasks.loop(seconds=1) # Run the task every second
|
2023-07-10 10:38:28 -07:00
|
|
|
async def task_loop():
|
2024-01-30 03:38:16 -08:00
|
|
|
try:
|
|
|
|
|
current_time = time.localtime()
|
|
|
|
|
#Run daily tasks
|
|
|
|
|
if current_time.tm_hour == 0 and current_time.tm_min == 0 and current_time.tm_sec == 0:
|
|
|
|
|
await delete_all_files("tmp/")
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.info("Deleted tmp/ files.")
|
2024-01-30 03:38:16 -08:00
|
|
|
except Exception as e:
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.exception(f"Error in task loop: {e}")
|
2024-01-30 03:38:16 -08:00
|
|
|
|
2023-07-19 15:02:50 -07:00
|
|
|
async def create_session():
|
2023-07-25 17:13:23 -07:00
|
|
|
return aiohttp.ClientSession()
|
2023-07-19 15:02:50 -07:00
|
|
|
|
|
|
|
|
async def close_session(http_session):
|
|
|
|
|
await http_session.close()
|
|
|
|
|
|
|
|
|
|
@bot.event
|
|
|
|
|
async def on_connect():
|
|
|
|
|
bot.http_session = await create_session()
|
|
|
|
|
|
2023-07-21 23:25:55 -07:00
|
|
|
@bot.event
|
|
|
|
|
async def on_resumed():
|
|
|
|
|
bot.http_session = await create_session()
|
|
|
|
|
|
2023-07-19 15:02:50 -07:00
|
|
|
@bot.event
|
|
|
|
|
async def on_disconnect():
|
|
|
|
|
await close_session(bot.http_session)
|
2024-02-02 22:11:52 -08:00
|
|
|
|
2024-02-02 22:28:44 -08:00
|
|
|
def logger_setup(logger):
|
2024-02-02 22:11:52 -08:00
|
|
|
if not os.path.isdir("logs"):
|
|
|
|
|
os.mkdir("logs")
|
|
|
|
|
with open("logs/info.log", "a") as f:
|
|
|
|
|
pass
|
|
|
|
|
logger = logger.logging.getLogger("bot")
|
2024-02-02 22:28:44 -08:00
|
|
|
return logger
|
2024-02-02 22:11:52 -08:00
|
|
|
|
2023-07-19 15:02:50 -07:00
|
|
|
|
2023-07-09 00:57:11 -07:00
|
|
|
@bot.event
|
|
|
|
|
async def on_ready():
|
2024-01-30 03:38:16 -08:00
|
|
|
try:
|
|
|
|
|
await delete_all_files("tmp/")
|
2024-02-02 22:28:44 -08:00
|
|
|
await folder_setup()
|
2024-01-30 03:38:16 -08:00
|
|
|
# Import plugins from extensions folder
|
|
|
|
|
for plugin_file in os.listdir('extensions/'):
|
|
|
|
|
if plugin_file[0] != '_' and plugin_file[-3:] == '.py':
|
|
|
|
|
await bot.load_extension(f'extensions.{plugin_file[:-3]}')
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.info('We have logged in as {0.user}'.format(bot))
|
2024-01-30 03:38:16 -08:00
|
|
|
task_loop.start()
|
|
|
|
|
except Exception as e:
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.warning(f"Error in on_ready: {e}")
|
2024-01-30 03:38:16 -08:00
|
|
|
raise
|
2024-01-09 12:10:21 -08:00
|
|
|
|
2023-07-09 00:57:11 -07:00
|
|
|
@bot.event
|
2024-01-30 03:38:16 -08:00
|
|
|
async def on_message(ctx):
|
|
|
|
|
try:
|
|
|
|
|
await bot.process_commands(ctx)
|
|
|
|
|
except commands.CommandNotFound:
|
|
|
|
|
pass
|
|
|
|
|
except Exception as e:
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger.warning(f"Error processing commands: {e}")
|
2023-07-09 00:57:11 -07:00
|
|
|
|
2024-02-02 22:28:44 -08:00
|
|
|
bot.logger = logger_setup(logger)
|
2024-01-30 03:38:16 -08:00
|
|
|
try:
|
|
|
|
|
bot.run(discord_token, root_logger=True)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.critical(f"Fatal error running bot: {e}")
|