summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-02-27 22:45:32 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-03-06 20:25:01 (GMT)
commit27d21b371f24272466a2d6a5bf2e2b717ee2d9fc (patch)
tree5f53281711d4f467933e4b3315241e4eee58a64c /Swiftob/Commands.h
parentd9c9df3b4ae5432552417fc4db74d62ab34f066d (diff)
downloadswift-27d21b371f24272466a2d6a5bf2e2b717ee2d9fc.zip
swift-27d21b371f24272466a2d6a5bf2e2b717ee2d9fc.tar.bz2
A start on Swiftob, a Swiften-based chatbot.
Diffstat (limited to 'Swiftob/Commands.h')
-rw-r--r--Swiftob/Commands.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/Swiftob/Commands.h b/Swiftob/Commands.h
new file mode 100644
index 0000000..e11078d
--- /dev/null
+++ b/Swiftob/Commands.h
@@ -0,0 +1,71 @@
+/*
+ * 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 {
+ 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);
+ bool hasCommand(const std::string&);
+ bool runCommand(const std::string& command, const std::string& params, 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 resetCommands();
+ void setRehashError(const std::string& error);
+
+ public:
+ boost::signal<void ()> onReset;
+ private:
+ 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);
+ private:
+ std::map<std::string, Command*> commands_;
+ Users* users_;
+ Swift::Client* client_;
+ Storage* storage_;
+ MUCs* mucs_;
+ std::string rehashError_;
+};
+
+