
Interacción simple de bot por DM
Publicado por Javier (1 intervención) el 10/08/2023 12:29:19
Buenas. Estoy intentando crear un bot para Discord con node.js y discord.js v14. Llevo ya unos días atascado con algo que en principio debería resultar sencillo pero que no consigo resolver, mayormente por mi inexperiencia con este lenguaje.
Básicamente, lo que busco es conseguir que cuando un usuario le hable por DM al bot el resultado sea este:
(El texto del usuario es indiferente, no hay que buscar palabras clave)
-Mensaje-1 usuario
-Mensaje-1 bot
--Espera durante 1m respuesta, si no contesta -> Mensaje-4
-Mensaje-2 usuario
-Mensaje-2 bot
--Espera durante 1m respuesta, si no contesta -> Mensaje-4
-Mensaje-3 usuario
-Mensaje-3 bot
--Espera durante 1m respuesta, si no contesta -> Mensaje-4
Lo he intentado de varias formas, pero o bien el bot siempre responde con el Mensaje-1 a todas las interacciones, o responde con la 1+ la 2, la 1 +3 etc, nunca consigo que funcione correctamente.
Pongo un par de códigos que he probado:
A ver si alguien puede echarme un cable.
Un saludo!
Básicamente, lo que busco es conseguir que cuando un usuario le hable por DM al bot el resultado sea este:
(El texto del usuario es indiferente, no hay que buscar palabras clave)
-Mensaje-1 usuario
-Mensaje-1 bot
--Espera durante 1m respuesta, si no contesta -> Mensaje-4
-Mensaje-2 usuario
-Mensaje-2 bot
--Espera durante 1m respuesta, si no contesta -> Mensaje-4
-Mensaje-3 usuario
-Mensaje-3 bot
--Espera durante 1m respuesta, si no contesta -> Mensaje-4
Lo he intentado de varias formas, pero o bien el bot siempre responde con el Mensaje-1 a todas las interacciones, o responde con la 1+ la 2, la 1 +3 etc, nunca consigo que funcione correctamente.
Pongo un par de códigos que he probado:
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
const replies = [
"Respuesta inicial al primer mensaje.",
"Respuesta a cualquier respuesta subsiguiente.",
"Tercera respuesta.",
"Cuarta respuesta."
];
const userStates = new Map(); // Mapa para almacenar el estado de los usuarios
if (!message.guild && !message.author.bot) {
if (!userStates.has(message.author.id)) {
// Respuesta al primer mensaje de un usuario
message.reply(replies[0]);
userStates.set(message.author.id, 1);
} else {
const state = userStates.get(message.author.id);
if (state < replies.length) {
// Esperar la respuesta del usuario
const filter = response => response.author.id === message.author.id;
const collector = message.channel.createMessageCollector({ filter, time: 60000 }); // Espera 60 segundos
collector.on('collect', (response) => {
const nextState = userStates.get(message.author.id);
if (nextState < replies.length) {
message.reply(replies[nextState]);
userStates.set(message.author.id, nextState + 1);
}
collector.stop(); // Detiene el colector después de la respuesta
});
collector.on('end', (collected, reason) => {
if (reason === 'time') {
if (userStates.has(message.author.id)) {
userStates.delete(message.author.id); // Elimina el estado del usuario si se acaba el tiempo
}
}
});
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if (!message.guild && !message.author.bot) {
message.reply("Ahora mismo estoy liado...").then((initialReply) => {
const filter = response => !response.author.bot;
message.channel
.awaitMessages({ filter, max: 1, time: 30000, errors: ["time"] })
.then((collected) => {
if (collected.size > 0) {
initialReply.delete(); // Elimina la respuesta inicial del bot
message.channel.send('Que parte de "Ahora mismo estoy liado..." no entiendes?');
} else {
message.channel.send("Así me gusta");
}
})
.catch(() => {
message.channel.send("Así me gusta");
});
});
}
}
A ver si alguien puede echarme un cable.
Un saludo!
Valora esta pregunta


0