1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/*
* Copyright (c) 2011 Kevin Smith
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#pragma once
#include <map>
#include <string>
#include <Swiften/Base/boost_bsignals.h>
#include <Swiften/Elements/Message.h>
#include <Swiftob/Users.h>
#include <Swiftob/MUCs.h>
namespace Swift {
class Client;
}
class Storage;
class Commands {
typedef boost::function<void(Swift::Message::ref)> ListenerCallback;
public:
enum RoleList {Anyone, Owner};
public:
class Command {
public:
Command(RoleList allowedBy, const std::string& description) : allowedBy_(allowedBy), description_(description) {
}
virtual ~Command() {};
boost::signal<void (const std::string&, const std::string&, Swift::Message::ref)> onReceived;
RoleList getAllowedBy() {return allowedBy_;}
std::string getDescription() {return description_;}
private:
RoleList allowedBy_;
std::string description_;
};
public:
Commands(Users* users, Swift::Client* client, Storage* storage, MUCs* mucs);
~Commands();
bool hasCommand(const std::string&);
bool runCommand(const std::string& command, const std::string& params, Swift::Message::ref message);
void runListeners(Swift::Message::ref message);
void replyTo(Swift::Message::ref source, std::string replyBody, bool outOfMUC = false);
void registerCommand(const std::string& name, RoleList roles, const std::string& description, boost::function<void(const std::string& /*command*/, const std::string& /*params*/, Swift::Message::ref)> callback);
void registerListener(ListenerCallback);
void resetCommands();
void setRehashError(const std::string& error);
public:
boost::signal<void ()> onReset;
boost::signal<void ()> onRestartRequested;
private:
void clearCommands();
bool roleIn(const Users::User::Role userRole, RoleList roles);
void handleQuitCommand(const std::string& command, const std::string& params, Swift::Message::ref message);
void handleHelpCommand(const std::string& command, const std::string& params, Swift::Message::ref message);
void handleJoinCommand(const std::string& /*command*/, const std::string& params, Swift::Message::ref message);
void handleJoinCommandSuccess(const Swift::JID& room, Swift::Message::ref message);
void handleJoinCommandFailure(const Swift::JID& room, const std::string& error, Swift::Message::ref message);
void handlePartCommand(const std::string& /*command*/, const std::string& params, Swift::Message::ref message);
void handleRehashCommand(const std::string& command, const std::string& params, Swift::Message::ref message);
void handleRestartCommand(const std::string& command, const std::string& params, Swift::Message::ref message);
void handleChangeNick(const std::string& command, const std::string& params, Swift::Message::ref message);
void handleChangeOwner(const std::string& command, const std::string& params, Swift::Message::ref message);
private:
std::map<std::string, Command*> commands_;
std::vector<ListenerCallback> listeners_;
Users* users_;
Swift::Client* client_;
Storage* storage_;
MUCs* mucs_;
std::string rehashError_;
};
|