module.uses('api.open-meteo.com');
module.command('meteo', async (ctx) => {
await ctx.defer();
const res = await ctx.fetch('https://api.open-meteo.com/v1/forecast?latitude=48.85&longitude=2.35¤t=temperature_2m');
if (!res.ok) return ctx.editReply('Service indisponible (' + res.status + ').');
await ctx.editReply('Il fait ' + res.json.current.temperature_2m + ' °C à Paris.');
});Options
| Option | Détail |
|---|---|
method | GET (par défaut), POST, PUT, PATCH, DELETE, HEAD |
headers | En-têtes (30 max). Certains sont réservés (host, content-length…). |
json | Un objet envoyé en JSON (ajoute le bon en-tête) |
body | Un texte brut |
await ctx.fetch('https://hooks.exemple.com/evenement', {
method: 'POST',
headers: { Authorization: 'Bearer ' + ctx.config.cle },
json: { membre: ctx.member.name, action: 'arrivée' },
});La réponse
| Champ | Contenu |
|---|---|
ok | true si le statut est entre 200 et 299 |
status | Le statut HTTP |
url | L’adresse finale (après redirections) |
headers | Les en-têtes de la réponse |
body | Le texte (si la réponse est textuelle) |
json | L’objet, si la réponse est en JSON |
base64 | Le contenu binaire (image…) en base64 |
contentType | Le type de contenu |
size | La taille en octets |
Une image téléchargée peut être renvoyée telle quelle sur Discord : files: [{ name: 'carte.png', base64: res.base64 }].
Règles
https seulement, sites déclarés, 10 secondes et 2 Mo par réponse, 20 appels par exécution et 60 par minute. Tout est détaillé dans Les sites internet.