summaryrefslogtreecommitdiffstats
path: root/src/libcommuni/examples/qmlbot
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcommuni/examples/qmlbot')
-rw-r--r--src/libcommuni/examples/qmlbot/main.cpp22
-rw-r--r--src/libcommuni/examples/qmlbot/qml/main.qml84
-rw-r--r--src/libcommuni/examples/qmlbot/qmlbot.pro22
-rw-r--r--src/libcommuni/examples/qmlbot/qmlbot.qrc5
4 files changed, 133 insertions, 0 deletions
diff --git a/src/libcommuni/examples/qmlbot/main.cpp b/src/libcommuni/examples/qmlbot/main.cpp
new file mode 100644
index 0000000..d74e909
--- /dev/null
+++ b/src/libcommuni/examples/qmlbot/main.cpp
@@ -0,0 +1,22 @@
+/*
+ * 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 <QCoreApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char* argv[])
+{
+ QCoreApplication app(argc, argv);
+
+ // enable debug output
+ qputenv("IRC_DEBUG", "1");
+
+ QQmlApplicationEngine engine(QUrl("qrc:/main.qml"));
+ return app.exec();
+}
diff --git a/src/libcommuni/examples/qmlbot/qml/main.qml b/src/libcommuni/examples/qmlbot/qml/main.qml
new file mode 100644
index 0000000..2dad458
--- /dev/null
+++ b/src/libcommuni/examples/qmlbot/qml/main.qml
@@ -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.
+ */
+
+import QtQml 2.0
+import Communi 3.0
+
+QtObject {
+ id: bot
+
+ property string channel: "#communi"
+
+ property Irc irc: Irc { id: irc }
+ property IrcCommand command: IrcCommand { id: command }
+
+ property IrcBufferModel model: IrcBufferModel {
+ id: model
+
+//! [connection]
+ connection: IrcConnection {
+ id: connection
+
+ host: "irc.freenode.net"
+ userName: "communi"
+ nickName: "QmlBot" + Math.round(Math.random() * 9999)
+ realName: qsTr("Communi %1 QML bot example").arg(irc.version())
+
+ Component.onCompleted: {
+ // queue a command to automatically join a channel when connected
+ sendCommand(command.createJoin(channel))
+ open()
+ }
+//! [connection]
+
+//! [receive]
+ onMessageReceived: {
+ if (message.type === IrcMessage.Private) {
+ // - in private, reply to the message sender
+ // - on channel, reply to the target channel
+ parser.target = message.private ? message.nick : message.target
+
+ var command = parser.parse(message.content)
+ if (command) {
+ // send the command to the IRC server
+ sendCommand(command)
+ if (command.type === IrcCommand.Quit) {
+ // close the connection & quit the app when a !quit command was received
+ close()
+ Qt.quit()
+ }
+ }
+ }
+ }
+//! [receive]
+ }
+ }
+
+//! [parser]
+ property IrcCommandParser parser: IrcCommandParser {
+ id: parser
+
+ // keep the parser aware of the context
+ channels: model.channels
+
+ // - on channel, respond to: "!<command> <params>" and "bot: <command> <params>"
+ // - in query, respond to: "!<command> <params>" and "<command> <params>"
+ triggers: connection.network.isChannel(target) ? ["!", connection.nickName + ":"] : ["!", ""]
+
+ Component.onCompleted: {
+ // teach the bot some commands
+ 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...>");
+ }
+ }
+//! [parser]
+}
diff --git a/src/libcommuni/examples/qmlbot/qmlbot.pro b/src/libcommuni/examples/qmlbot/qmlbot.pro
new file mode 100644
index 0000000..95c2961
--- /dev/null
+++ b/src/libcommuni/examples/qmlbot/qmlbot.pro
@@ -0,0 +1,22 @@
+######################################################################
+# Communi
+######################################################################
+
+TEMPLATE = app
+TARGET = qmlbot
+DEPENDPATH += .
+INCLUDEPATH += .
+CONFIG += console
+CONFIG -= app_bundle
+QT = core network qml
+
+lessThan(QT_MAJOR_VERSION, 5)|lessThan(QT_MINOR_VERSION, 1) {
+ error(The QML2 based example requires Qt 5.1 or newer but Qt $$[QT_VERSION] was detected.)
+}
+
+# Input
+SOURCES += main.cpp
+RESOURCES += qmlbot.qrc
+OTHER_FILES += qml/main.qml
+
+include(../examples.pri)
diff --git a/src/libcommuni/examples/qmlbot/qmlbot.qrc b/src/libcommuni/examples/qmlbot/qmlbot.qrc
new file mode 100644
index 0000000..5f94096
--- /dev/null
+++ b/src/libcommuni/examples/qmlbot/qmlbot.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file alias="main.qml">qml/main.qml</file>
+ </qresource>
+</RCC>