-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
148 lines (128 loc) · 5.35 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import discord
import random
from discord.ext import commands, tasks
from discord import app_commands
import sqlite3
from config import TOKEN, SERVER_ID
intents = discord.Intents.default()
intents.members = True # Nécessaire pour accéder aux membres du serveur
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
print("Bot logged in as {0.user}".format(bot))
try:
synced = await bot.tree.sync()
print("synced")
except:
print("not synced")
@bot.tree.command(name="rando", description= "randomise tous les pseudos")
@app_commands.checks.has_permissions(administrator=True)
async def randomize_nicknames(ctx):
def populate_db(bot: discord.Client, SERVER_ID: int):
conn = sqlite3.connect('discord_nicknames.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM nicknames')
rows = cursor.fetchall()
if len(rows) == 0:
server = bot.get_guild(SERVER_ID)
owner = server.owner
try:
for member in server.members:
if member == owner:
continue
cursor.execute("INSERT INTO nicknames VALUES (?, ?)", (member.id, member.display_name))
conn.commit()
conn.close()
return 1
except:
conn.close()
return -1
else:
conn.close()
return 0
status = populate_db(bot, SERVER_ID)
if status == 1:
print("La base de données a été remplie avec succès.")
elif status == 0:
print("La base de données est déjà remplie")
await ctx.response.send_message("La base de données est déjà remplie")
else:
print("Une erreur s'est produite lors du remplissage de la base de données.")
return
original_nicknames = {}
conn = sqlite3.connect('discord_nicknames.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM nicknames')
rows = cursor.fetchall()
original_nicknames = {row[0]: row[1] for row in rows}
conn.close()
li_errors=[]
server = bot.get_guild(SERVER_ID)
for member in server.members:
if member == server.owner:
continue
else:
try:
new_nickname = ''.join(random.sample(member.display_name, len(member.display_name)))
await member.edit(nick=new_nickname)
except:
li_errors.append(member.display_name)
continue
if len(li_errors) > 0:
await ctx.response.send_message(f"Les pseudos ont été randomisés, mais une erreur s'est produite pour les pseudos suivants: {li_errors}")
else:
await ctx.response.send_message("Les pseudos ont été randomisés avec succès.")
@app_commands.checks.has_permissions(administrator=True)
@bot.tree.command(name="locknicknames", description= "lock tous les pseudos")
async def locknicknames(ctx):
for role in ctx.guild.roles:
try:
new_permissions = discord.Permissions(role.permissions.value)
new_permissions.update(change_nickname=False)
await role.edit(permissions=new_permissions)
except:
print(f"Impossible de modifier les permissions pour le rôle {role.name}")
await ctx.response.send_message("La permission de changer les surnoms a été retirée de tous les rôles.")
@app_commands.checks.has_permissions(administrator=True)
@bot.tree.command(name="unlocknicknames", description= "unlock tous les pseudos")
async def unlocknicknames(ctx):
for role in ctx.guild.roles:
try:
new_permissions = discord.Permissions(role.permissions.value)
new_permissions.update(change_nickname=True)
await role.edit(permissions=new_permissions)
except:
print(f"Impossible de modifier les permissions pour le rôle {role.name}")
await ctx.response.send_message("La permission de changer les surnoms a été accordée à tous les rôles.")
@app_commands.checks.has_permissions(administrator=True)
@bot.tree.command(name="restore", description= "restore tous les pseudos")
async def restore_nicknames(ctx):
original_nicknames = {}
conn = sqlite3.connect('discord_nicknames.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM nicknames')
rows = cursor.fetchall()
original_nicknames = {row[0]: row[1] for row in rows}
conn.close()
li_errors=[]
server = bot.get_guild(SERVER_ID)
for member in server.members:
if member == server.owner:
continue
else:
try:
await member.edit(nick=original_nicknames[member.id])
except:
li_errors.append(member.display_name)
continue
if len(li_errors) > 0:
try:
await ctx.response.send_message(f"Les pseudos ont été restaurés, mais une erreur s'est produite pour les pseudos suivants: {li_errors}")
except:
await ctx.followup.send(f"Les pseudos ont été restaurés, mais une erreur s'est produite pour les pseudos suivants: {li_errors}")
else:
try:
await ctx.response.send_message("Les pseudos ont été restaurés avec succès.")
except:
await ctx.followup.send("Les pseudos ont été restaurés avec succès.")
bot.run(TOKEN)