Files
nutbot/main.py
2025-08-10 11:47:03 -04:00

75 lines
3.7 KiB
Python

import asyncio
import discord
import traceback
from discord.ext import commands
from discord.utils import oauth_url
from loguru import logger as logging
from dotenv import dotenv_values
# TODO: Log issues that happen
# TODO: Statistics of uptime
class NutBot(commands.Bot):
def __init__(self):
super().__init__(command_prefix=".", intents=discord.Intents.all())
self.bot = super()
async def setup_hook(self) -> None:
await self.load_extension('NutCog')
async def on_ready(self):
perms = 469830672
invite = oauth_url(super().user.id, permissions=discord.Permissions(perms))
logging.info(f"Invite link: {invite}")
async def on_command_error(self, context, exception):
if isinstance(exception, commands.NoPrivateMessage):
await context.send('{}, This command cannot be used in DMs.'.format(context.author.mention))
elif isinstance(exception, commands.UserInputError):
pass # Silent ignore
await context.send('{}, {}'.format(context.author.mention, self.format_error(context, exception)))
elif isinstance(exception, commands.NotOwner):
await context.send('{}, {}'.format(context.author.mention, exception.args[0]))
elif isinstance(exception, commands.MissingPermissions):
permission_names = [name.replace('guild', 'server').replace('_', ' ').title() for name in
exception.missing_perms]
await context.send('{}, you need {} permissions to run this command!'.format(
context.author.mention, utils.pretty_concat(permission_names)))
elif isinstance(exception, commands.BotMissingPermissions):
permission_names = [name.replace('guild', 'server').replace('_', ' ').title() for name in
exception.missing_perms]
await context.send('{}, I need {} permissions to run this command!'.format(
context.author.mention, utils.pretty_concat(permission_names)))
elif isinstance(exception, commands.CommandOnCooldown):
await context.send(
'{}, That command is on cooldown! Try again in {:.2f}s!'.format(context.author.mention,
exception.retry_after))
elif isinstance(exception, commands.MaxConcurrencyReached):
types = {discord.ext.commands.BucketType.default: "`Global`",
discord.ext.commands.BucketType.guild: "`Guild`",
discord.ext.commands.BucketType.channel: "`Channel`",
discord.ext.commands.BucketType.category: "`Category`",
discord.ext.commands.BucketType.member: "`Member`",
discord.ext.commands.BucketType.user: "`User`"}
await context.send(
'{}, That command has exceeded the max {} concurrency limit of `{}` instance! Please try again later.'.format(
context.author.mention, types[exception.per], exception.number))
elif isinstance(exception, commands.CheckFailure):
await context.send('{}, {}'.format(context.author.mention, exception.args[0]))
else:
await context.send(
'```\n%s\n```' % ''.join(traceback.format_exception_only(type(exception), exception)).strip())
# Print traceback to console
print(''.join(traceback.format_exception(type(exception), exception, exception.__traceback__)).strip())
if isinstance(context.channel, discord.TextChannel):
pass # Silent ignore
else:
pass
bot = NutBot()
bot.run(token=dotenv_values(".env")['BOT_TOKEN'])