120 lines
3.4 KiB
Python
Executable file
120 lines
3.4 KiB
Python
Executable file
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
|
||
__author__ = ["Romain", "Maël / Outout"]
|
||
__licence__ = "WTFPL Licence 2.0"
|
||
|
||
from discord.ext import commands
|
||
import discord
|
||
from cogs.utils import checks
|
||
|
||
import datetime
|
||
import json
|
||
import copy
|
||
import traceback
|
||
import sys
|
||
import os
|
||
import aiohttp
|
||
|
||
import config
|
||
import cogs.utils.cli_colors as colors
|
||
|
||
l_extensions = [
|
||
|
||
'cogs.admin',
|
||
# 'cogs.afk',
|
||
'cogs.basics',
|
||
'cogs.ci',
|
||
'cogs.cog_manager',
|
||
'cogs.filter_messages',
|
||
'cogs.funs',
|
||
'cogs.passport',
|
||
'cogs.role',
|
||
'cogs.search',
|
||
'cogs.send_logs',
|
||
'cogs.sondage',
|
||
'cogs.utility'
|
||
]
|
||
|
||
help_attrs = dict(hidden=True, in_help=True, name="DONOTUSE")
|
||
|
||
|
||
class TuxBot(commands.Bot):
|
||
def __init__ (self):
|
||
self.config = config
|
||
super().__init__(command_prefix=self.config.prefix[0],
|
||
description=self.config.description,
|
||
pm_help=None,
|
||
help_attrs=help_attrs)
|
||
|
||
self.client_id = self.config.client_id
|
||
self.session = aiohttp.ClientSession(loop=self.loop)
|
||
self._events = []
|
||
|
||
|
||
self.add_command(self.do)
|
||
|
||
for extension in l_extensions:
|
||
try:
|
||
self.load_extension(extension)
|
||
print(f"{colors.text_colors.GREEN}\"{extension}\" chargé !{colors.ENDC}")
|
||
except Exception as e:
|
||
print(f"{colors.text_colors.RED}Impossible de charger l'extension {extension}\n{type(e).__name__}: {e}{colors.ENDC}", file=sys.stderr)
|
||
|
||
async def on_command_error(self, ctx, error):
|
||
if isinstance(error, commands.NoPrivateMessage):
|
||
await ctx.author.send('Cette commande ne peut pas être utilisee en message privee.')
|
||
elif isinstance(error, commands.DisabledCommand):
|
||
await ctx.author.send('Desoler mais cette commande est desactive, elle ne peut donc pas être utilisée.')
|
||
elif isinstance(error, commands.CommandInvokeError):
|
||
print(f'In {ctx.command.qualified_name}:', file=sys.stderr)
|
||
traceback.print_tb(error.original.__traceback__)
|
||
print(f'{error.original.__class__.__name__}: {error.original}', file=sys.stderr)
|
||
|
||
async def on_ready(self):
|
||
if not hasattr(self, 'uptime'):
|
||
self.uptime = datetime.datetime.utcnow()
|
||
|
||
log_channel_id = self.get_channel(int(self.config.log_channel_id))
|
||
|
||
print('\n\n---------------------')
|
||
print('CONNECTÉ :')
|
||
print(f'Nom d\'utilisateur: {self.user} {colors.text_style.DIM}(ID: {self.user.id}){colors.ENDC}')
|
||
print(f'Channel de log: {log_channel_id} {colors.text_style.DIM}(ID: {log_channel_id.id}){colors.ENDC}')
|
||
print(f'Prefix: {self.config.prefix[0]}')
|
||
print('Merci d\'utiliser TuxBot')
|
||
print('---------------------\n\n')
|
||
|
||
await self.change_presence(status=discord.Status.dnd, activity=discord.Game(name=self.config.game))
|
||
|
||
async def on_resumed():
|
||
print('resumed...')
|
||
|
||
async def on_message(self, message):
|
||
if message.author.bot:
|
||
return
|
||
|
||
try:
|
||
await self.process_commands(message)
|
||
except Exception as e:
|
||
print(f'{colors.text_colors.RED}Erreur rencontré : \n {type(e).__name__}: {e}{colors.ENDC} \n \n')
|
||
|
||
def run(self):
|
||
super().run(self.config.token, reconnect=True)
|
||
|
||
@checks.has_permissions(administrator=True)
|
||
@commands.command(pass_context=True, hidden=True)
|
||
async def do(ctx, times: int, *, command):
|
||
"""Repeats a command a specified number of times."""
|
||
msg = copy.copy(ctx.message)
|
||
msg.content = command
|
||
for i in range(times):
|
||
await bot.process_commands(msg)
|
||
|
||
## LOAD ##
|
||
if __name__ == '__main__':
|
||
if os.path.exists('config.py') is not True:
|
||
print(f"{colors.text_colors.RED}Veuillez créer le fichier config.py{colors.ENDC}"); exit()
|
||
|
||
tuxbot = TuxBot()
|
||
tuxbot.run()
|