/*
* Copyright (C) 2008-2016 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]
}