feat: discord call api #1

Merged
Clement merged 6 commits from feat--discord-call-api into master 2023-08-18 17:50:35 +00:00
4 changed files with 123 additions and 1 deletions

View File

@ -1,7 +1,11 @@
#ifndef PROGRAM_H #ifndef PROGRAM_H
#define PROGRAM_H #define PROGRAM_H
#include "Arduino.h" #include <Arduino.h>
#include <ESP8266WiFi.h>
#include "DiscordAPI.h"
class Program { class Program {
public: public:
@ -14,6 +18,9 @@ public:
* Program main loop * Program main loop
*/ */
void loop(); void loop();
private:
DiscordAPI* discord;
}; };
#endif #endif

View File

@ -0,0 +1,55 @@
#ifndef DISCORD_API_H
#define DISCORD_API_H
#include <Arduino.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <ESP8266WiFi.h>
class DiscordAPI{
public:
/**
* @brief Construct a new Discord API object
* @param hookUrl url of the discord webhook
*/
DiscordAPI(String hookUrl);
/**
* @brief send a message to the discord webhook
* @param trame trame a envoyer
* @return true la trame est bien envoyée
* @return false la trame n'est pas envoyée
*/
bool sendMessage(String trame);
/**
* @brief envoie un embed discord avec les horaires d'ouverture et de fermeture du lab
*
* @param hStart heure d'ouverture
* @param hEnd heure de fermeture
* @return true la trame est bien envoyée
* @return false la trame n'est pas envoyée
*/
bool sendHeure(String hStart, String hEnd);
private:
/**
* @brief webhook URL
*/
String hookUrl;
/**
* @brief http client
*/
HTTPClient* httpClient;
/**
* @brief wifi client (for https)
*/
BearSSL::WiFiClientSecure* wifiClient;
};
#endif //DISCORD_API_H

View File

@ -0,0 +1,38 @@
#include "../include/DiscordAPI.h"
DiscordAPI::DiscordAPI(String hookUrl){
this->hookUrl = hookUrl;
this->httpClient = new HTTPClient();
this->wifiClient = new BearSSL::WiFiClientSecure;
this->wifiClient->setInsecure();
randomSeed(analogRead(A0));
}
bool DiscordAPI::sendMessage(String trame){
bool sortie = true;
if(WiFi.status() != WL_CONNECTED){
return false;
}
this->httpClient->begin(*this->wifiClient, this->hookUrl);
this->httpClient->addHeader("Content-Type", "application/json");
int resp = this->httpClient->POST(trame);
if(resp != 204){
sortie = false;
Serial.print("sending message error code : ");
Serial.println(resp);
}
this->httpClient->end();
return sortie;
}
bool DiscordAPI::sendHeure(String hStart, String hEnd){
int color = random(16777215);
String trame = "{\"embeds\": [{\"title\": \"Le Lab est ouvert !\",\"description\": \"Le Lab est ouvert de **"+ hStart +"** à **"+ hEnd +"**\",\"color\": \"" + color + "\"}]}";
return this->sendMessage(trame);
}

View File

@ -3,6 +3,28 @@
Program::Program() { Program::Program() {
// Startup // Startup
Serial.begin(MONITOR_SPEED); Serial.begin(MONITOR_SPEED);
WiFi.begin(WSSID, PASS);
Serial.print("Connecting to ");
Serial.print(WSSID); Serial.println(" ...");
int i = 0;
while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
delay(1000);
Serial.print(++i); Serial.print(' ');
}
Serial.println('\n');
Serial.println("Connection established!");
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // Send the IP address of the ESP8266 to the computer
this->discord = new DiscordAPI(DISCORD_HOOK);
delay(1000);
Serial.println(this->discord->sendHeure("10h", "18h"));
} }
void Program::loop() { void Program::loop() {