import discord from discord import app_commands from discord.ext import commands from discord.ui import Button, View from dotenv import load_dotenv import os import sys import pytz from datetime import datetime, timedelta import sqlite3 from random import randint, sample, choice import aiohttp import inspect import wikipedia from collections import defaultdict import asyncio from typing import Literal import re load_dotenv() roles_perm = ["perm 5", "perm 4", "perm 3", "perm 2", "perm 1"] sniped_messages = {} link_regex = re.compile(r"http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+") def redemarrer_script(): python = sys.executable os.execl(python, python, *sys.argv) def choose_db(guild_id): con = sqlite3.connect(f"db/{guild_id}.db") cur = con.cursor() return con, cur intents = discord.Intents().all() bot = commands.Bot(command_prefix='?', intents=intents, help_command=None) intents.message_content = True intents.guilds = True intents.members = True client = discord.Client(intents=intents) tree = app_commands.CommandTree(client) @bot.event async def on_ready(): print(f'Bot is ready with : \n username: {bot.user.name} \n id: {bot.user.id}') await bot.change_presence(activity=discord.Streaming(name="/help", url="https://www.twitch.tv/tuturp33")) reload = False for guild in bot.guilds: for role in roles_perm: existing_role = discord.utils.get(guild.roles, name=role) if existing_role is None: await guild.create_role(name=role) con, cur = choose_db(guild.id) cur.execute(''' CREATE TABLE IF NOT EXISTS warns ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, moderator_id INTEGER, reason TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP )''') cur.execute(''' CREATE TABLE IF NOT EXISTS badwords ( id INTEGER PRIMARY KEY AUTOINCREMENT, badword TEXT, utilisation INTEGER, create_by_id INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP )''') cur.execute(''' CREATE TABLE IF NOT EXISTS whitelist ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, moderator_id INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP )''') cur.execute(''' CREATE TABLE IF NOT EXISTS blacklist ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, moderator_id INTEGER, reason TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP )''') cur.execute(''' CREATE TABLE IF NOT EXISTS commands ( id INTEGER PRIMARY KEY AUTOINCREMENT, commande TEXT, perm TEXT, utilisation TEXT, active BOOLEAN )''') cur.execute(''' CREATE TABLE IF NOT EXISTS config ( env TEXT, id TEXT )''') cur.execute(''' CREATE TABLE IF NOT EXISTS ownerbot ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, moderator_id INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP )''') cur.execute(''' CREATE TABLE IF NOT EXISTS users ( user_id INTEGER, messages INTEGER, voice INTEGER, coins INTEGER, bank INTEGER, xp INTEGER, level INTEGER, last_daily DATETIME DEFAULT CURRENT_TIMESTAMP, last_work DATETIME DEFAULT CURRENT_TIMESTAMP, xp_multiplier INTEGER DEFAULT 1, coins_multiplier INTEGER DEFAULT 1 )''') config_values = [ ("LOG_MESSAGE", "None"), ("LOG_JOIN_LEAVE", "None"), ("LOG_MODERATION", "None"), ("LOG_MEMBER_UPDATE", "None"), ("LOG_CHANNEL", "None"), ("LOG_ROLE", "None"), ("LOG_BOOST", "None"), ("ROLE_MUTE_ID", "None"), ("CHANNEL_JOIN", "None"), ("CHANNEL_LEAVE", "None"), ("ROLE_ACTIVITY", "None"), ("ACTIVITY_FOR_ROLE", "None"), ("ROLE_BOOST", "None"), ("LOG_MP_BOT", "None"), ("anti link", "True"), ("anti spam", "True"), ] for env, id in config_values: cur.execute("SELECT 1 FROM config WHERE env = ?", (env,)) if cur.fetchone() is None: cur.execute("INSERT INTO config (env, id) VALUES (?, ?)", (env, id)) global commands_info commands_info = { "sync": ["ownerbot", "", 1, "Synchronise les commandes du bot"], "say": ["perm 5", "", 1, "Fait parler le bot"], "ban": ["perm 4", " ", 1, "Banni un membre"], "kick": ["perm 3", " ", 1, "Kick un membre"], "bantemp": ["perm 4", " ", 1, "Banni temporairement un membre"], "clear": ["perm 2", "", 1, "Supprime des messages"], "mute": ["perm 1", " ", 1, "Mute un membre"], "unmute": ["perm 1", " ", 1, "Unmute un membre"], "addrole": ["perm 3", " ", 1, "Ajoute un rôle à un membre"], "removerole": ["perm 3", " ", 1, "Retire un rôle à un membre"], "poll": ["perm 1", " ...", 1, "Crée un sondage"], "userinfo": ["None", "", 1, "Donne des informations sur un membre"], "ping": ["None", "", 1, "Donne le ping du bot"], "serverinfo": ["None", "", 1, "Donne des informations sur le serveur"], "stats": ["None", "", 1, "Donne des statistiques sur le bot"], "memberlist": ["None", "", 1, "Donne la liste des membres du serveur"], "rolelist": ["None", "", 1, "Donne la liste des rôles du serveur"], "channellist": ["None", "", 1, "Donne la liste des channels du serveur"], "roleinfo": ["None", "", 1, "Donne des informations sur un rôle"], "channelinfo": ["None", "", 1, "Donne des informations sur un channel"], "lock": ["perm 4", "", 1, "Verrouille un channel"], "unlock": ["perm 4", "", 1, "Déverrouille un channel"], "channelcreate": ["perm 5", " ", 1, "Crée un channel"], "channeldelete": ["perm 5", "", 1, "Supprime un channel"], "channelrename": ["perm 5", " ", 1, "Renomme un channel"], "wikisearch": ["None", "", 1, "Recherche sur wikipedia"], "warn": ["perm 1", " ", 1, "Warn un membre"], "warnlist": ["perm 1", "", 1, "Donne la liste des warns d'un membre"], "delwarn": ["perm 2", " ", 1, "Supprime un warn d'un membre"], "resetwarn": ["perm 2", "", 1, "Supprime tous les warns d'un membre"], "addbadword": ["perm 2", "", 1, "Ajoute un mot interdit"], "delbadword": ["perm 2", "", 1, "Supprime un mot interdit"], "badwordlist": ["None", "", 1, "Donne la liste des mots interdits"], "resetbadword": ["perm 2", "", 1, "Supprime tous les mots interdits"], "badwordinfo": ["None", "", 1, "Donne des informations sur un mot interdit"], "tempmute": ["perm 1", " ", 1, "Mute temporairement un membre"], "snipe": ["None", "", 1, "Donne le dernier message supprimé"], "snipeall": ["None", "", 1, "Donne les messages supprimés de tout les channels"], "botstatut": ["ownerbot", "", 1, "Change le statut du bot"], "avatar": ["None", "", 1, "Donne l'avatar d'un membre"], "addemoji": ["perm 3", " ", 1, "Ajoute un emoji"], "wladd": ["ownerbot", "", 1, "Ajoute un membre à la whitelist"], "wldel": ["ownerbot", "", 1, "Supprime un membre de la whitelist"], "wl": ["perm 5", "", 1, "Donne la liste des membres de la whitelist"], "wlreset": ["ownerbot", "", 1, "Supprime tous les membres de la whitelist"], "wlinfo": ["perm 5", "", 1, "Donne des informations sur un membre de la whitelist"], "bladd": ["ownerbot", " ", 1, "Ajoute un membre à la blacklist"], "bldel": ["ownerbot", "", 1, "Supprime un membre de la blacklist"], "bl": ["perm 5", "", 1, "Donne la liste des membres de la blacklist"], "blreset": ["ownerbot", "", 1, "Supprime tous les membres de la blacklist"], "blinfo": ["perm 5", "", 1, "Donne des informations sur un membre de la blacklist"], "calc": ["None", "", 1, "Calcule une opération"], "help": ["None", " ", 1, "Donne la liste des commandes"], "commandeperms": ["perm 5", "", 1, "Donne la liste des commandes avec leurs permissions"], "commandechangeperms": ["ownerbot", " ", 1, "Change les permissions d'une commande"], "mp": ["perm 5", " ", 1, "Envoie un message privé à un membre"], "giveaway": ["perm 5", " ", 1, "Crée un giveaway"], "reroll": ["perm 5", "", 1, "Relance un giveaway"], "changeactive": ["ownerbot", " ", 1, "Change l'activation d'une commande"], "config": ["ownerbot", " ", 1, "Permet de changer la config ud bot"], "configall": ["perm 5", "", 1, "Donne la liste des configs du bot"], "setbotavatar": ["ownerbot", "", 1, "Change l'avatar du bot"], "ownerbot": ["perm 5", "", 1, "Donne la liste des propriétaires du bot"], "ownerbotadd": ["ownerbot", "", 1, "Ajoute un membre à la liste des propriétaires du bot"], "ownerbotremove": ["ownerbot", "", 1, "Supprime un membre de la liste des propriétaires du bot"], "ownerbotreset": ["ownerbot", "", 1, "Supprime tous les membres de la liste des propriétaires du bot"], "reload": ["ownerbot", "", 1, "Redémarre le bot"], "embed": ["perm 5", "