#!/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()