diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bdb67a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/db/* +.env \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..21c91a4 --- /dev/null +++ b/main.py @@ -0,0 +1,5625 @@ +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", "