summaryrefslogtreecommitdiffstats
path: root/libcommuni/examples/bot/ircbot.cpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2014-10-06 15:03:54 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2014-10-06 15:03:54 +0200
commit529f38bd8878b6b1bea2b5457031ce936aab8d80 (patch)
tree1193caefcad12f6a36f818048e4547e60add4398 /libcommuni/examples/bot/ircbot.cpp
parent3b58b5536935adff242928ed9f30e1c0262fbd7c (diff)
downloadmanager-529f38bd8878b6b1bea2b5457031ce936aab8d80.tar.gz
manager-529f38bd8878b6b1bea2b5457031ce936aab8d80.zip
addedd communi
Diffstat (limited to 'libcommuni/examples/bot/ircbot.cpp')
-rw-r--r--libcommuni/examples/bot/ircbot.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/libcommuni/examples/bot/ircbot.cpp b/libcommuni/examples/bot/ircbot.cpp
new file mode 100644
index 0000000..1891e62
--- /dev/null
+++ b/libcommuni/examples/bot/ircbot.cpp
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2008-2014 The Communi Project
+ *
+ * This example is free, and not covered by the BSD license. There is no
+ * restriction applied to their modification, redistribution, using and so on.
+ * You can study them, modify them, use them in your own program - either
+ * completely or partially.
+ */
+
+#include "ircbot.h"
+#include <IrcMessage>
+#include <IrcCommand>
+#include <QCoreApplication>
+#include <QTimer>
+
+IrcBot::IrcBot(QObject* parent) : IrcConnection(parent)
+{
+//! [messages]
+ connect(this, SIGNAL(privateMessageReceived(IrcPrivateMessage*)), this, SLOT(processMessage(IrcPrivateMessage*)));
+//! [messages]
+
+//! [commands]
+ parser.addCommand(IrcCommand::CtcpAction, "ACT [target] <message...>");
+ parser.addCommand(IrcCommand::Custom, "HELP (<command...>)");
+ parser.addCommand(IrcCommand::Nick, "NICK <nick>");
+ parser.addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)");
+ parser.addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)");
+ parser.addCommand(IrcCommand::Quit, "QUIT (<message...>)");
+ parser.addCommand(IrcCommand::Message, "SAY [target] <message...>");
+//! [commands]
+
+ bufferModel.setConnection(this);
+//! [channels]
+ connect(&bufferModel, SIGNAL(channelsChanged(QStringList)), &parser, SLOT(setChannels(QStringList)));
+//! [channels]
+}
+
+void IrcBot::join(QString channel)
+{
+ sendCommand(IrcCommand::createJoin(channel));
+}
+
+//![receive]
+void IrcBot::processMessage(IrcPrivateMessage* message)
+{
+ if (message->isPrivate()) {
+ // private message: reply to the message sender
+ // => triggers: "!<cmd> <params>" and "<cmd> <params>"
+ parser.setTarget(message->nick());
+ parser.setTriggers(QStringList() << "!" << "");
+ } else {
+ // channel message: reply to the target channel
+ // => triggers: "!<cmd> <params>" and "bot: <cmd> <params>"
+ parser.setTarget(message->target());
+ parser.setTriggers(QStringList() << "!" << nickName().append(":"));
+ }
+
+ IrcCommand* cmd = parser.parse(message->content());
+ if (cmd) {
+ if (cmd->type() == IrcCommand::Custom && cmd->parameters().value(0) == "HELP") {
+ help(cmd->parameters().mid(1));
+ } else {
+ sendCommand(cmd);
+
+ if (cmd->type() == IrcCommand::Quit) {
+ connect(this, SIGNAL(disconnected()), qApp, SLOT(quit()));
+ QTimer::singleShot(1000, qApp, SLOT(quit()));
+ }
+ }
+ }
+}
+//![receive]
+
+void IrcBot::help(QStringList commands)
+{
+ if (commands.isEmpty())
+ commands = parser.commands();
+
+ QString target = parser.target();
+ foreach (const QString& command, commands) {
+ QString syntax = parser.syntax(command);
+ sendCommand(IrcCommand::createMessage(target, syntax));
+ }
+}