Répondre et envoyer

Mode code

Un contenu peut être un simple texte, une carte mise en forme par Opale, ou un message brut au format Discord (embeds, composants, sondage, fichiers).

Où envoyer

FonctionEffetPermission
ctx.reply(contenu, { public })Répond à la commande, au clic ou au formulaire. Visible par la personne seule, sauf { public: true }.—
ctx.send(salon, contenu)Envoie dans un salon. Renvoie le message (id, channelId, url).messages.send
ctx.dm(membre, contenu)Message privé. Renvoie false si ses MP sont fermés.messages.dm
ctx.edit(contenu)Modifie le message du bouton ou du menu utilisé.—
ctx.followUp(contenu, { public })Ajoute un message après la première réponse.—
ctx.defer({ public })« Opale réfléchit… » : à faire avant un travail long.—
ctx.editReply(contenu)Remplace la première réponse (après defer).—
ctx.deleteReply()Supprime la première réponse.—

Le contenu

Texte

JavaScript
await ctx.reply('Bonjour **' + ctx.member.name + '** !');

Carte

Un objet avec title, color, image, thumbnail, infos, list ou footer devient une carte (Components V2).

JavaScript
await ctx.send(ctx.config.salon, {
  title: 'Nouveau tournoi',
  text: 'Inscriptions ouvertes jusqu’à vendredi.',
  color: '#c38eb4',
  image: 'https://exemple.com/affiche.png',
  infos: [
    { label: 'Jeu', value: 'Rocket League' },
    { label: 'Format', value: '2 contre 2' },
  ],
  list: [{ label: 'Règlement', value: '- Pas de triche\n- Fair-play' }],
  footer: 'Organisé par ' + ctx.member.name,
  buttons: [{ id: 'inscrire', label: 'S’inscrire', style: 'success' }],
  links: [{ label: 'Site du tournoi', url: 'https://exemple.com' }],
});
ChampRôle
textLe texte principal
titleLe titre
colorCouleur de la bordure : #RRGGBB
imageGrande image (https)
thumbnailPetite image en haut à droite (https)
infosLignes « libellé · valeur » (15 max)
listBlocs « titre + texte » séparés (10 max)
footerPetit texte en bas
buttonsBoutons d’action (5 max) : voir Composants
linksBoutons de lien (5 au total avec les boutons)
selectUn menu de choix
pingRolesRôles à notifier (5 max)

Message brut Discord

Un objet avec content, embeds, components, poll ou files est envoyé tel quel, au format de l’API Discord. Tu as alors accès à tout : embeds, composants V2, sondages natifs, fichiers.

JavaScript
await ctx.reply({
  embeds: [{
    title: 'Météo',
    description: '☀️ Ciel dégagé',
    color: 0x86a8cf,
    fields: [{ name: 'Température', value: '21 °C', inline: true }],
  }],
}, { public: true });

await ctx.send(ctx.config.salon, {
  poll: {
    question: { text: 'Pizza ou burger ?' },
    answers: [{ poll_media: { text: 'Pizza', emoji: { name: '🍕' } } }, { poll_media: { text: 'Burger', emoji: { name: '🍔' } } }],
    duration: 24,
  },
});

await ctx.reply({ content: 'Voici l’export', files: [{ name: 'membres.csv', text: 'nom;jours\nLina;12' }] });
FichierFormat
textContenu texte
base64Contenu binaire (image…) en base64
Limites10 fichiers, 10 Mo par message

Réponses longues

JavaScript
module.command('rapport', async (ctx) => {
  await ctx.defer();
  const liste = await ctx.collection('ventes').list({ limit: 200 });
  await ctx.editReply(liste.total + ' ventes enregistrées.');
});

Mentions

Sans la permission « messages.everyone », @everyone, @here et les rôles non mentionnables ne notifient personne. Les membres mentionnés sont notifiés normalement (sauf dans une carte).

Répondre et envoyer · Documentation Opale