summaryrefslogtreecommitdiffstats
path: root/src/libcommuni/examples/bot
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-09-09 19:00:56 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2015-09-09 19:02:23 +0200
commit8a6d4b06f2291c363f3dea17837ed20893852453 (patch)
treec091375499e35eaa1810586454e0834c06e6c9b2 /src/libcommuni/examples/bot
parentf554a27046f203e56a07baaf214d90834942e3f5 (diff)
downloadmanager-8a6d4b06f2291c363f3dea17837ed20893852453.tar.gz
manager-8a6d4b06f2291c363f3dea17837ed20893852453.zip
Cleanup repo with some directories
Diffstat (limited to 'src/libcommuni/examples/bot')
-rw-r--r--src/libcommuni/examples/bot/bot.pro17
-rw-r--r--src/libcommuni/examples/bot/ircbot.cpp84
-rw-r--r--src/libcommuni/examples/bot/ircbot.h37
-rw-r--r--src/libcommuni/examples/bot/main.cpp59
4 files changed, 197 insertions, 0 deletions
diff --git a/src/libcommuni/examples/bot/bot.pro b/src/libcommuni/examples/bot/bot.pro
new file mode 100644
index 0000000..1f4f434
--- /dev/null
+++ b/src/libcommuni/examples/bot/bot.pro
@@ -0,0 +1,17 @@
+######################################################################
+# Communi
+######################################################################
+
+TEMPLATE = app
+TARGET = bot
+DEPENDPATH += .
+INCLUDEPATH += .
+CONFIG += console
+CONFIG -= app_bundle
+QT = core network
+
+# Input
+HEADERS += ircbot.h
+SOURCES += ircbot.cpp main.cpp
+
+include(../examples.pri)
diff --git a/src/libcommuni/examples/bot/ircbot.cpp b/src/libcommuni/examples/bot/ircbot.cpp
new file mode 100644
index 0000000..1891e62
--- /dev/null
+++ b/src/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));
+ }
+}
diff --git a/src/libcommuni/examples/bot/ircbot.h b/src/libcommuni/examples/bot/ircbot.h
new file mode 100644
index 0000000..1a88a01
--- /dev/null
+++ b/src/libcommuni/examples/bot/ircbot.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+#ifndef IRCBOT_H
+#define IRCBOT_H
+
+#include <IrcConnection>
+#include <IrcBufferModel>
+#include <IrcCommandParser>
+
+class IrcBot : public IrcConnection
+{
+ Q_OBJECT
+
+public:
+ IrcBot(QObject* parent = 0);
+
+public slots:
+ void join(QString channel);
+
+private slots:
+ void processMessage(IrcPrivateMessage* message);
+
+private:
+ void help(QStringList commands);
+
+ IrcCommandParser parser;
+ IrcBufferModel bufferModel;
+};
+
+#endif // IRCBOT_H
diff --git a/src/libcommuni/examples/bot/main.cpp b/src/libcommuni/examples/bot/main.cpp
new file mode 100644
index 0000000..526f776
--- /dev/null
+++ b/src/libcommuni/examples/bot/main.cpp
@@ -0,0 +1,59 @@
+/*
+ * 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 <QtCore>
+#include "ircbot.h"
+
+int main(int argc, char* argv[])
+{
+ QCoreApplication app(argc, argv);
+
+ // enable debug output
+ qputenv("IRC_DEBUG", "1");
+ qsrand(QTime::currentTime().msec());
+
+ IrcBot bot;
+ bot.setHost("irc.freenode.net");
+ bot.setUserName("communi");
+ bot.setNickName("Bot" + QString::number(qrand() % 9999));
+ bot.setRealName("Communi " + Irc::version() + " example bot");
+
+ bool joined = false;
+ QStringList args = app.arguments();
+ for (int i = 0; i < args.count(); ++i) {
+ QString arg = args.at(i);
+ if (arg == "-help") {
+ qDebug() << "Usage:" << argv[0] << "(-host <host>) (-port <port>) (-ssl) (-nick <nick>) (-user <user>) (-password <password>) (-channel <channel>)";
+ return 0;
+ } else if (arg == "-port") {
+ bool ok = false;
+ int port = args.value(++i).toInt(&ok);
+ if (ok)
+ bot.setPort(port);
+ } else if (arg == "-ssl") {
+ bot.setSecure(true);
+ } else if (arg == "-host") {
+ bot.setHost(args.value(++i));
+ } else if (arg == "-user") {
+ bot.setUserName(args.value(++i));
+ } else if (arg == "-password") {
+ bot.setPassword(args.value(++i));
+ } else if (arg == "-nick") {
+ bot.setNickName(args.value(++i));
+ } else if (arg == "-channel") {
+ bot.join(args.value(++i));
+ joined = true;
+ }
+ }
+ if (!joined)
+ bot.join("#communi");
+
+ bot.open();
+ return app.exec();
+}