75 lines
3.7 KiB
Python
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'])
|