first commit

This commit is contained in:
Blue 2024-03-30 22:44:52 -03:00
commit b2692a43f3
Signed by: blue
GPG Key ID: 9B203B252A63EE38
7 changed files with 152 additions and 0 deletions

19
CMakeLists.txt Normal file
View File

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.10)
project(jay
VERSION 0.0.1
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find gloox library
find_package(PkgConfig)
pkg_search_module(GLOOX REQUIRED gloox)
add_executable(jay main.cpp jay.cpp logger.cpp)
target_include_directories(jay PRIVATE ${GLOOX_INCLUDE_DIRS})
target_link_libraries(jay ${GLOOX_LIBRARIES})
install(TARGETS jay RUNTIME DESTINATION bin)

0
README.md Normal file
View File

38
jay.cpp Normal file
View File

@ -0,0 +1,38 @@
// SPDX-FileCopyrightText: 2024 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jay.h"
Jay::Jay(const std::string& jid, const std::string& password) :
client(jid, password),
loggers()
{
client.registerMessageHandler(this);
client.setTls(gloox::TLSPolicy::TLSOptional);
client.setSASLMechanisms(gloox::SaslMechScramSha1);
}
Jay::~Jay() {
loggers.clear();
}
void Jay::run() {
if (client.connect(false)) {
// Run the event loop
gloox::ConnectionError ce = gloox::ConnNoError;
while (ce == gloox::ConnNoError)
ce = client.recv();
std::cout << "Connection terminated with error: " << ce << 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
}
Logger* Jay::addLogger(gloox::LogLevel level) {
loggers.emplace_back(std::make_unique<Logger>(client.logInstance(), level));
return loggers.back().get();
}

31
jay.h Normal file
View File

@ -0,0 +1,31 @@
// SPDX-FileCopyrightText: 2024 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <string>
#include <iostream>
#include <vector>
#include <memory>
#include <gloox/client.h>
#include <gloox/messagehandler.h>
#include <gloox/message.h>
#include "logger.h"
class Jay : public gloox::MessageHandler {
public:
Jay(const std::string& jid, const std::string& password);
~Jay();
void handleMessage(const gloox::Message& message, gloox::MessageSession* session = 0) override;
void run();
Logger* addLogger(gloox::LogLevel level);
private:
gloox::Client client;
std::vector<std::unique_ptr<Logger>> loggers;
};

20
logger.cpp Normal file
View File

@ -0,0 +1,20 @@
// SPDX-FileCopyrightText: 2024 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "logger.h"
#include <iostream>
Logger::Logger(gloox::LogSink& sink, gloox::LogLevel level):
sink(sink)
{
sink.registerLogHandler(level, gloox::LogAreaAll, this);
}
Logger::~Logger() {
sink.removeLogHandler(this);
}
void Logger::handleLog(gloox::LogLevel level, gloox::LogArea area, const std::string& message) {
std::cout << "Log message: " << message << std::endl;
}

19
logger.h Normal file
View File

@ -0,0 +1,19 @@
// SPDX-FileCopyrightText: 2024 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <gloox/loghandler.h>
#include <gloox/logsink.h>
class Logger : public gloox::LogHandler {
public:
Logger(gloox::LogSink& sink, gloox::LogLevel level);
~Logger();
void handleLog(gloox::LogLevel level, gloox::LogArea area, const std::string& message) override;
private:
gloox::LogSink& sink;
gloox::LogLevel level;
};

25
main.cpp Normal file
View File

@ -0,0 +1,25 @@
// SPDX-FileCopyrightText: 2024 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jay.h"
#include "logger.h"
#include <string>
#include <iostream>
int main(int argc, char** argv) {
if (argc != 3) {
std::cerr << "Usage: " << argv[0] << " <jid> <password>\n";
return 1;
}
std::string jid = argv[1];
std::string password = argv[2];
Jay bot(jid, password);
bot.addLogger(gloox::LogLevelDebug);
bot.run();
return 0;
}