-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
172 lines (151 loc) · 5.71 KB
/
index.js
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
// On instancie DiscordJS
const Discord = require("discord.js");
const {
BOT_TOKEN,
PREFIX
} = require("./config");
// On importe sequelize
const {
Sequelize
} = require("sequelize");
const client = new Discord.Client({
partials: [
"MESSAGE",
"REACTION"
]
})
// On se connecte à la base mysql
const sequelize = new Sequelize("discord-bot", "root", "", {
host: "localhost",
dialect: "mysql",
logging: false
});
// On importe le modèle Commands
const Commands = require("./Models/Commands")(sequelize, Sequelize.DataTypes);
// On attend que le bot soit prêt
client.on("ready", () => {
// On instancie le modèle Commands
Commands.sync();
// On change le statut
client.user.setPresence({
activity: {
name: 'en pleine démo Live Coding'
},
status: 'dnd'
})
.then(console.log)
.catch(console.error)
})
// On réagit à une commande
client.on("message", (message) => {
if (message.content.startsWith(PREFIX)) {
// On récupère un tableau des arguments sans le préfixe
const input = message.content.slice(PREFIX.length).trim().split(" ");
// On récupère la commande
const command = input.shift();
// On transforme les arguments en chaine de caractères
const commandArgs = input.join(' ');
// On recherche la commande dans la base de données
// SELECT id, command, message, deleteMessage FROM commands WHERE command = :command LIMIT 1
Commands.findOne({
attributes: ["id", "command", "message", "deleteMessage"],
where: {
command: command
}
}).then(response => {
// On traite la réponse
// On envoie le message
message.channel.send(response.message);
// Si deleteMessage est à true, supprimer le message d'appel
if (response.deleteMessage) message.delete();
}).catch(e => console.log);
switch (command) {
// case "!bienvenue":
// message.channel.send("Bonjour et bienvenue à toutes et tous")
// message.delete()
// break
case "addCommand":
// On récupère les arguments
const options = commandArgs.split("///");
const newCommand = Commands.create({
command: options[0],
message: options[1],
deleteMessage: options[2]
}).then(() => {
message.reply("Commande ajoutée");
}).catch(e => {
if(e.name === "SequelizeUniqueConstaintError"){
message.reply("Cette commande existe déjà");
}
message.reply("Une erreur est survenue");
})
break;
case "listCommands":
// On affiche la liste des commandes
Commands.findAll({
attributes: ["id", "command", "message", "deleteMessage"]
}).then(list => {
const liste = list.map(
command => `${command.id} - ${command.command} - ${command.message} - ${command.deleteMessage}`
).join("\n") || "Pas de commandes";
message.channel.send(`Liste des commandes:\n${liste}`, {split: true});
})
break;
case "deleteCommand":
Commands.destroy({
where: {
id: commandArgs
}
}).then(rowCount => {
if(!rowCount) return message.reply("Commande inexistante");
return message.reply("Commande supprimée");
});
}
}
if (message.content.indexOf("bonjour") != -1) {
message.channel.send("Bonjour à toi aussi")
}
if (message.content.indexOf("!attention") === 0) {
let param = message.content.substr(11)
let texte = (param != "") ? param : "Attention"
message.channel.send(`${texte}, ce salon n'est pas dédié à l'aide technique`)
message.delete()
}
// Alerter lorsque plus de 2 mentions
// On récupère les mentions
let mentions = message.mentions.users.array()
if (mentions.length > 2) {
message.channel.send(`<@${message.member.user.id}>, merci de ne pas abuser des mentions`)
}
})
// On écoute l'ajout de réactions
client.on("messageReactionAdd", async (reaction, user) => {
if (reaction.message.id === "idDuMessage" && reaction.emoji.name === "✅") {
// On attribue le rôle "membre" à l'utilisateur qui a réagi
let role = reaction.message.guild.roles.cache.get("idDuRole")
let member = reaction.message.guild.members.cache.get(user.id)
if (role && member) {
member.roles.add(role)
}
}
})
client.on("messageReactionRemove", async (reaction, user) => {
if (reaction.message.id === "idDuMessage" && reaction.emoji.name === "✅") {
// On attribue le rôle "membre" à l'utilisateur qui a réagi
let role = reaction.message.guild.roles.cache.get("idDuRole")
let member = reaction.message.guild.members.cache.get(user.id)
if (role && member) {
member.roles.remove(role)
}
}
})
// On surveille les nouveaux membres
// <@123456789>
client.on("guildMemberAdd", member => {
// Message public
client.channels.resolve("idDuRole").send(`Bienvenue <@${member.user.id}> sur ce serveur de démo`)
// Message privé
member.send(`Bienvenue <@${member.user.id}> sur ce serveur de démo`)
})
// On se connecte
client.login(BOT_TOKEN);