Refactored in a way modules have access to bot infrastructure

This commit is contained in:
Blue 2025-03-09 21:01:41 +02:00
parent c605b3ba93
commit 89c04254b8
Signed by: blue
GPG key ID: 9B203B252A63EE38
25 changed files with 245 additions and 216 deletions

View file

@ -3,13 +3,33 @@
#include "actor.h"
Module::Actor::Actor(const std::shared_ptr<gloox::Client>& client):
Module(client)
Module::Actor::Actor(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection):
Module(core, connection)
{}
Module::Actor::~Actor() noexcept {}
void Module::Actor::message(const std::shared_ptr<::Actor>& actor, const Module::Module::Tokens& args) {
std::string result;
if (args.front() == "list")
sendMessage(actor, "Me\nMyself\nI");
result = list();
if (!result.empty())
connection->send(actor->jid, result);
}
std::string Module::Actor::list() {
std::string result;
for (const std::pair<const std::string, std::string>& pair : core->router.getActors()) {
if (!result.empty())
result.append(1, '\n');
result += pair.first + ": " + pair.second;
}
if (result.empty())
result += "There are no actors currently";
return result;
}

View file

@ -9,10 +9,13 @@ namespace Module {
class Actor : public Module {
public:
Actor(const std::shared_ptr<gloox::Client>& client);
Actor(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection);
~Actor() noexcept;
virtual void message(const std::shared_ptr<::Actor>& actor, const Tokens& args) override;
private:
std::string list();
};
}

View file

@ -5,8 +5,9 @@
#include "gloox/message.h"
Module::Module::Module(const std::shared_ptr<gloox::Client>& client):
client(client)
Module::Module::Module(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection):
core(core),
connection(connection)
{}
Module::Module::~Module() noexcept {}
@ -25,11 +26,3 @@ std::vector<std::string> Module::Module::split(const std::string& string, const
return result;
}
void Module::Module::sendMessage(const std::shared_ptr<Actor>& actor, const std::string& body) {
client->send(gloox::Message(
gloox::Message::Chat,
actor->jid,
body
));
}

View file

@ -7,9 +7,9 @@
#include <memory>
#include <vector>
#include "gloox/client.h"
#include "component/core.h"
#include "component/actor.h"
#include "connection/connection.h"
namespace Module {
@ -18,8 +18,7 @@ public:
typedef std::vector<std::string> Tokens;
protected:
Module(const std::shared_ptr<gloox::Client>& client);
void sendMessage(const std::shared_ptr<Actor>& actor, const std::string& body);
Module(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection);
public:
virtual ~Module() noexcept;
@ -29,7 +28,8 @@ public:
virtual void message(const std::shared_ptr<Actor>& actor, const Tokens& args) = 0;
protected:
std::shared_ptr<gloox::Client> client;
std::shared_ptr<Core> core;
std::shared_ptr<Connection> connection;
};