summaryrefslogtreecommitdiffstats
path: root/src/libcommuni/examples/qmlbot/qml/main.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcommuni/examples/qmlbot/qml/main.qml')
-rw-r--r--src/libcommuni/examples/qmlbot/qml/main.qml84
1 files changed, 84 insertions, 0 deletions
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]
+}