diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-09-09 19:00:56 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-09-09 19:02:23 +0200 |
| commit | 8a6d4b06f2291c363f3dea17837ed20893852453 (patch) | |
| tree | c091375499e35eaa1810586454e0834c06e6c9b2 /src/libcommuni/examples/bot/ircbot.cpp | |
| parent | f554a27046f203e56a07baaf214d90834942e3f5 (diff) | |
| download | manager-8a6d4b06f2291c363f3dea17837ed20893852453.tar.gz manager-8a6d4b06f2291c363f3dea17837ed20893852453.zip | |
Cleanup repo with some directories
Diffstat (limited to 'src/libcommuni/examples/bot/ircbot.cpp')
| -rw-r--r-- | src/libcommuni/examples/bot/ircbot.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
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)); + } +} |
