Logging of the messages, customizable replies, assigning groups

This commit is contained in:
Blue 2025-03-15 22:34:50 +02:00
parent f03f392cee
commit 7f57cd3bf6
Signed by: blue
GPG key ID: 9B203B252A63EE38
21 changed files with 288 additions and 62 deletions

View file

@ -3,20 +3,36 @@
#include "actor.h"
Module::Actor::Actor(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection, const Permissions& permissions):
Module(core, connection, permissions)
Module::Actor::Actor(const std::shared_ptr<Core>& core, const Shared::Permissions& permissions):
Module(core, permissions)
{}
Module::Actor::~Actor() noexcept {}
void Module::Actor::message(const std::shared_ptr<::Actor>& actor, const Module::Module::Tokens& args) {
Shared::Result Module::Actor::message(const std::shared_ptr<::Actor>& actor, const Shared::Strings& args) {
std::string result;
if (args.front() == "list")
result = hasPermission("read", actor) ? list() : "Can not tell you that";
if (args.front() == "list") {
if (!hasPermission("read", actor))
return Shared::forbidden;
result = list();
} else if (args.front() == "set") {
if (!hasPermission("write", actor))
return Shared::forbidden;
if (args.size() < 3)
return Shared::error;
if (!result.empty())
connection->send(actor->jid, result);
result = set(args[1], args[2]);
}
if (!result.empty()) {
core->send(actor->jid, result);
return Shared::success;
}
return Shared::unhandled;
}
std::string Module::Actor::list() {
@ -33,3 +49,9 @@ std::string Module::Actor::list() {
return result;
}
std::string Module::Actor::set(const std::string& jid, const std::string& group) {
core->setGroup(jid, group);
return jid + " is now " + core->router.getGroup(jid);
}

View file

@ -3,19 +3,22 @@
#pragma once
#include "shared/definitions.h"
#include "shared/result.h"
#include "module.h"
namespace Module {
class Actor : public Module {
public:
Actor(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection, const Permissions& permissions);
Actor(const std::shared_ptr<Core>& core, const Shared::Permissions& permissions);
~Actor() noexcept;
virtual void message(const std::shared_ptr<::Actor>& actor, const Tokens& args) override;
virtual Shared::Result message(const std::shared_ptr<::Actor>& actor, const Shared::Strings& args) override;
private:
std::string list();
std::string set(const std::string& jid, const std::string& group);
};
}

View file

@ -7,14 +7,13 @@
#include "gloox/message.h"
Module::Module::Module(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection, const Permissions& permissions):
Module::Module::Module(const std::shared_ptr<Core>& core, const Shared::Permissions& permissions):
core(core),
connection(connection),
permissions(permissions)
{}
bool Module::Module::hasPermission(const std::string& permission, const std::shared_ptr<::Actor>& actor) const {
Permissions::const_iterator itr = permissions.find(permission);
Shared::Permissions::const_iterator itr = permissions.find(permission);
if (itr == permissions.end())
return false;

View file

@ -7,34 +7,29 @@
#include <memory>
#include <vector>
#include "shared/definitions.h"
#include "shared/result.h"
#include "component/core.h"
#include "component/actor.h"
#include "connection/connection.h"
namespace Module {
class Module {
public:
typedef std::vector<std::string> Tokens;
typedef std::vector<std::string> List;
typedef std::map<std::string, List> Permissions;
protected:
Module(const std::shared_ptr<Core>& core, const std::shared_ptr<Connection>& connection, const Permissions& permissions);
Module(const std::shared_ptr<Core>& core, const Shared::Permissions& permissions);
bool hasPermission(const std::string& permission, const std::shared_ptr<::Actor>& actor) const;
public:
virtual ~Module() noexcept;
static Tokens split(const std::string& string, const std::string& delimiter = " ");
static Shared::Strings split(const std::string& string, const std::string& delimiter = " ");
virtual void message(const std::shared_ptr<::Actor>& actor, const Tokens& args) = 0;
virtual Shared::Result message(const std::shared_ptr<::Actor>& actor, const Shared::Strings& args) = 0;
protected:
std::shared_ptr<Core> core;
std::shared_ptr<Connection> connection;
Permissions permissions;
Shared::Permissions permissions;
};