From 698e706daab834fd47f69627d1357026b731d2b0 Mon Sep 17 00:00:00 2001 From: blue Date: Fri, 21 Feb 2025 23:01:11 +0200 Subject: [PATCH] Trying different stuff --- jay.cpp | 35 +++++++++++++++++++++++++++++------ jay.h | 9 ++++++++- main.cpp | 29 ++++++++++++++++++++++------- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/jay.cpp b/jay.cpp index 4aa59db..78760c2 100644 --- a/jay.cpp +++ b/jay.cpp @@ -5,16 +5,17 @@ Jay::Jay(const std::string& jid, const std::string& password) : client(jid, password), - loggers() + loggers(), + owners() { client.registerMessageHandler(this); + client.registerConnectionListener(this); + client.setTls(gloox::TLSPolicy::TLSOptional); client.setSASLMechanisms(gloox::SaslMechScramSha1); } -Jay::~Jay() { - loggers.clear(); -} +Jay::~Jay() {} void Jay::run() { if (client.connect(false)) { @@ -25,14 +26,36 @@ void Jay::run() { std::cout << "Connection terminated with error: " << ce << std::endl; } + std::cout << "Out of loop" << std::endl; } void Jay::handleMessage(const gloox::Message& message, gloox::MessageSession* session) { - std::cout << "Received message: " << message.body() << std::endl; - // Implement your response logic here + if (owners.count(message.from().bare())) { + std::cout << "Received message from owner: " << message.body() << std::endl; + } else { + std::cout << "Received message: " << message.body() << std::endl; + } } +void Jay::onConnect() { + for (const std::string& owner : owners) + client.send(gloox::Message(gloox::Message::Chat, owner, "I'm online!")); +} + +void Jay::onDisconnect(gloox::ConnectionError e) { + std::cout << "Disconnected: " << e << std::endl; +} + +bool Jay::onTLSConnect(const gloox::CertInfo&) { + return true; +} + + Logger* Jay::addLogger(gloox::LogLevel level) { loggers.emplace_back(std::make_unique(client.logInstance(), level)); return loggers.back().get(); } + +void Jay::addOwner(const std::string& jid) { + owners.insert(jid); +} diff --git a/jay.h b/jay.h index d097ba2..f0fe925 100644 --- a/jay.h +++ b/jay.h @@ -4,28 +4,35 @@ #pragma once #include +#include #include #include #include #include #include +#include #include #include "logger.h" -class Jay : public gloox::MessageHandler { +class Jay : public gloox::MessageHandler, public gloox::ConnectionListener { public: Jay(const std::string& jid, const std::string& password); ~Jay(); void handleMessage(const gloox::Message& message, gloox::MessageSession* session = 0) override; + void onConnect() override; + void onDisconnect(gloox::ConnectionError e) override; + bool onTLSConnect(const gloox::CertInfo&) override; void run(); Logger* addLogger(gloox::LogLevel level); + void addOwner(const std::string& jid); private: gloox::Client client; std::vector> loggers; + std::set owners; }; diff --git a/main.cpp b/main.cpp index b0da7dc..6562218 100644 --- a/main.cpp +++ b/main.cpp @@ -5,20 +5,35 @@ #include "logger.h" #include +#include #include -int main(int argc, char** argv) { - if (argc != 3) { - std::cerr << "Usage: " << argv[0] << " \n"; - return 1; - } +std::string readEnv(const std::string& key, const std::string& defaultValue = "") { + const char* val = std::getenv(key.data()); + if (val) + return std::string(val); - std::string jid = argv[1]; - std::string password = argv[2]; + return defaultValue; +} + +int main(int argc, char** argv) { + std::string jid = readEnv("JID"); + std::string password = readEnv("PASSWORD"); + + if (jid.empty() || password.empty()) { + std::cout << "You need to provide JID and PASSWORD environment variables" << std::endl; + return - 1; + } Jay bot(jid, password); bot.addLogger(gloox::LogLevelDebug); + std::string owners = readEnv("OWNERS"); + std::stringstream ss(owners); + std::string owner; + while (std::getline(ss, owner, ',')) + bot.addOwner(owner); + bot.run(); return 0;