Init magdi
This commit is contained in:
parent
903d0fbb3a
commit
a411c72185
2 changed files with 112 additions and 14 deletions
|
@ -1,13 +1,16 @@
|
|||
cmake_minimum_required(VERSION 3.17)
|
||||
project(matrix_cpp_examplebot)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
|
||||
add_executable(matrix_cpp_examplebot main.cpp)
|
||||
add_subdirectory(external/matrix-cpp-sdk)
|
||||
|
||||
target_link_libraries(matrix_cpp_examplebot matrix-cpp-sdk)
|
||||
target_include_directories(matrix_cpp_examplebot PRIVATE external/matrix-cpp-sdk/src)
|
||||
target_link_libraries(matrix_cpp_examplebot jsoncpp_lib)
|
||||
target_link_libraries(matrix_cpp_examplebot
|
||||
PRIVATE jsoncpp_lib
|
||||
PRIVATE libcurl
|
||||
PRIVATE matrix-cpp-sdk
|
||||
)
|
||||
include_directories(${Jsoncpp_INCLUDE_DIR})
|
||||
include_directories(${MATRIX_CPP_INCLUDE_DIR})
|
||||
include_directories(${MATRIX_CPP_INCLUDE_DIR})
|
||||
|
|
115
main.cpp
115
main.cpp
|
@ -1,15 +1,110 @@
|
|||
#include <iostream>
|
||||
#include <matrix/Client.h>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <ctime>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
#include <curl/curl.h>
|
||||
#include <json/json.h>
|
||||
#include <matrix/Client.h>
|
||||
#include <regex>
|
||||
|
||||
struct BasicEventListener : public Matrix::EventListener{
|
||||
BasicEventListener(Matrix::Client*c): Matrix::EventListener(c) {}
|
||||
static const char* honapok[] = {"januar","februar","marcius","aprilis","majus","junius","julius","augusztus","szeptember","oktober","november","december"};
|
||||
|
||||
static const char* ekezetek[] = {"á","é","í","ó","ö","ő","ú","ü","ű"};
|
||||
static const char* ekezet_mentes[] = {"a","e","i","o","o","o","u","u","u"};
|
||||
static const size_t arr_len = 9;
|
||||
|
||||
static const std::set<std::string> valid_horoszkopok = {"vizonto","halak","kos","bika","ikrek","rak","oroszlan","szuz","merleg","skorpio","nyilas","bak"};
|
||||
static const std::vector<std::string> error_messages = {"Bizonyára megtréfált az univerzum!","Ne haragudj,de az univerzum ilyen csúnya szavakra nem reagál!","Bocsáss meg az univerzum most nem szeretné hogy segítsek!","Bocsáss meg lemerült az univerzum. Most nem tud segíteni.","Amint feltöltődik az univerzum segítek!","Az univerzum nem akar jósolni neked!Gondolom bűnös lélek vagy!","Ilyen csúnya szavakra nem vagyok hajlandó reagálni!", "Nem kaptam tőled pénzt,így az univerzum nem tud segíteni neked!","Az univerzum elutasított téged.7 éven belül balszerencse fog érni.","Az univerzum megsértődött magára.","Az univerzum nem szereti az ilyen fajta gúnyolódást.","Takarodjon innen!!Ne becsmérelje az univerzumot!!"};
|
||||
static const std::vector<std::string> message_prefix = {"Az univerzum azt üzeni, hogy","Szétterítem a kártyáimat! Látom hogy","Kiterítem a kártyáimat! Látom hogy"};
|
||||
|
||||
size_t writefunc(void *ptr, size_t size, size_t nmemb, std::string *s)
|
||||
{
|
||||
s->append(static_cast<char *>(ptr), size*nmemb);
|
||||
return size*nmemb;
|
||||
}
|
||||
|
||||
|
||||
struct Magdi : public Matrix::EventListener {
|
||||
Matrix::Logger logger;
|
||||
//! Get string from the web
|
||||
std::string get(std::string URL){
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
std::string s;
|
||||
curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
if(res != CURLE_OK)
|
||||
fprintf(stderr, "curl_easy_perform() failed: %s\n",
|
||||
curl_easy_strerror(res));
|
||||
curl_easy_cleanup(curl);
|
||||
return s;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
std::string getStringBetween(const std::string& text,const char* start,const char* end){
|
||||
int ini = text.find(start);
|
||||
if(ini == std::string::npos)
|
||||
return "";
|
||||
ini += std::strlen(start);
|
||||
int len = text.find(end,ini) - ini;
|
||||
return text.substr(ini,len);
|
||||
}
|
||||
|
||||
std::string& replaceAllEkezet(std::string& text){
|
||||
for(int i = 0;i < arr_len;++i) {
|
||||
text = std::regex_replace(text,std::regex(ekezetek[i]),ekezet_mentes[i]);
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
bool isValid(std::string horoszkop){
|
||||
return valid_horoszkopok.find(horoszkop) != valid_horoszkopok.end();
|
||||
}
|
||||
|
||||
//! Basic constructor
|
||||
Magdi(Matrix::Client*c): Matrix::EventListener(c) {
|
||||
srand(time(0));
|
||||
setlocale(LC_ALL, "hu_HU.utf8");
|
||||
}
|
||||
//! EventListener override
|
||||
virtual void onEvent(const Matrix::Event& event) {
|
||||
if(event.getType() == "m.room.message" && event.getContent()["body"].asString() == "!ping"){
|
||||
Json::Value msg_content;
|
||||
msg_content["msgtype"] = "m.type";
|
||||
msg_content["body"] = "pong!";
|
||||
client->send(event.getRoomId(),"m.room.message",msg_content);
|
||||
//On message
|
||||
if(event.getType() == "m.room.message"){
|
||||
//Check if prefix matches
|
||||
if(event.getContent()["body"].asString().starts_with("!napi ")){
|
||||
std::string message;
|
||||
std::string horoszkop = event.getContent()["body"].asString();
|
||||
horoszkop.replace(horoszkop.begin(),horoszkop.begin() + 6,"");
|
||||
horoszkop = replaceAllEkezet(horoszkop);
|
||||
if(!isValid(horoszkop)){
|
||||
message = error_messages[rand() % error_messages.size()];
|
||||
}else {
|
||||
time_t t = time(0); // get time now
|
||||
struct tm * now = localtime(&t);
|
||||
|
||||
int zeros = (now->tm_mday > 10) ? 0 : 1;
|
||||
std::string URL = "https://www.astronet.hu/horoszkop/"+ replaceAllEkezet(horoszkop) +"-napi-horoszkop/" + std::to_string(now->tm_year+1900) +"-"+ honapok[now->tm_mon] +"-"+std::string(zeros,'0').append(std::to_string(now->tm_mday))+"/";
|
||||
|
||||
std::string response = get(URL);
|
||||
response = getStringBetween(response,"<div class=\"details-content\">", "</div>");
|
||||
response[0] = tolower(response[0]);
|
||||
message = (response != "") ? message_prefix[rand() % message_prefix.size()]+" "+ response : error_messages[rand() % error_messages.size()];
|
||||
}
|
||||
Json::Value msg_content;
|
||||
msg_content["msgtype"] = "m.type";
|
||||
msg_content["body"] = message ; //getStringBetween(response,"<div class=\"details-content\">", "</div>");
|
||||
client->send(event.getRoomId(),"m.room.message",msg_content);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -18,8 +113,8 @@ int main(){
|
|||
Matrix::Logger logger;
|
||||
Matrix::Homeserver server(getenv("HOMESERVER_NAME"),getenv("HOMESERVER_URL"));
|
||||
Matrix::Client c(&server, getenv("ACCESS_TOKEN"));
|
||||
|
||||
Matrix::EventListener* listener = new BasicEventListener(&c);
|
||||
c.setDisplayName("Magdi Jósnő");
|
||||
Matrix::EventListener* listener = new Magdi(&c);
|
||||
c.addEventListener(listener);
|
||||
c.start_thread();
|
||||
delete listener;
|
||||
|
|
Loading…
Reference in a new issue