Partage
  • Partager sur Facebook
  • Partager sur Twitter

Discord Bot - Renvoyer une image émise précedement

15 août 2019 à 9:14:38

Bonjour :D

Je vous explique, j'aimerai faire en sorte que je puisse envoyer une image sur un channel et que le bot la renvoie sur un autre ou sur le même channel

Pour l'instant, je n'ai que ça pour le texte :

const uneCommande = '-repeat '

  if (message.content.startsWith(uneCommande)) {
      message.delete();
    const str = message.content.substring(uneCommande.length)
    message.channel.sendMessage(str)
  };
/*  ------

Donc ca fonctionne parfaitement, mais pas si j'envoie une image.. Aucune erreur, rien. Ca renvoie juste le texte sans l'image

Je cherche en parralléle mais je galére un peu x)

Merci d'avance :p

  • Partager sur Facebook
  • Partager sur Twitter
19 août 2019 à 12:28:26

Bonjour,

D'après la documentation Discord.js, tu peux récupérer les fichiers attachés avec message.attachments. Pour parcourir tout les fichiers attachés, tu peux donc faire:

// J'ai repris ce bout de code à un sujet StackOverFlow car je n'ai pas mon bot
// sous la main pour ça.

// Tu parcours la liste des fichiers attachés.
if (message.attachments.size > 0) {
    if (message.attachments.every(attachIsImage)){
        // Pour chaque fichier étant une image, tu exécute une portion de code.
    }
}

// Cette fonction va te permettre de vérifier que le fichier et bien une image 
// en regardant l'extension. Dans le code ci-dessous, seuls les fichiers PNG 
// sont pris en compte. Il faut modifier la fonction pour les JPEG et
// éventuellement les WEBP.
function attachIsImage(msgAttach) {
    var url = msgAttach.url;
    return url.indexOf("png", url.length - "png".length) !== -1;
}

Pour envoyer une image, il faut utiliser message.send. Le code devient donc:

const uneCommande = '-repeat ';
 
if (message.content.startsWith(uneCommande)) {

    // Récupération du message et suppression.
    const str = message.content.substring(uneCommande.length)
    let files = [];
    message.delete();

    // Récupération de toutes les images.
    if (message.attachments.size > 0) {
        if (message.attachments.every(attachIsImage)){
            
            files.push(message.attachment.url);
        }
    }

    // Envoi du message.
    message.channel.send(str, {files: files});
}

function attachIsImage(msgAttach) {
    var url = msgAttach.url;
    return url.indexOf("png", url.length - "png".length) !== -1;
}

Tu remarquera que j'ai utilisé message.channel.send plutôt que SendMessage, c'est conseillé de faire ainsi.

-
Edité par ᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼ 19 août 2019 à 12:33:33

  • Partager sur Facebook
  • Partager sur Twitter

᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼





᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼






























































































































































25 août 2019 à 15:07:55

Merci de ta réponse !

Le seul problème est que il ne comprends pas "url"..

(node:19032) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'url' of undefined

Saurais tu pourquoi ?

  • Partager sur Facebook
  • Partager sur Twitter
27 août 2019 à 12:37:07

Je n'ai pas pu tester le code que je t'ai passé et je ne pourrais pas avant un bon moment. Le problème doit probablement venir de la ligne "(message.attachments.every(attachIsImage)", le paramètre doit être manquant.
  • Partager sur Facebook
  • Partager sur Twitter

᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼





᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼᲼