From 8a6d4b06f2291c363f3dea17837ed20893852453 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Wed, 9 Sep 2015 19:00:56 +0200 Subject: Cleanup repo with some directories --- src/libcommuni/examples/bot/ircbot.cpp | 84 ++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/libcommuni/examples/bot/ircbot.cpp (limited to 'src/libcommuni/examples/bot/ircbot.cpp') 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 +#include +#include +#include + +IrcBot::IrcBot(QObject* parent) : IrcConnection(parent) +{ +//! [messages] + connect(this, SIGNAL(privateMessageReceived(IrcPrivateMessage*)), this, SLOT(processMessage(IrcPrivateMessage*))); +//! [messages] + +//! [commands] + parser.addCommand(IrcCommand::CtcpAction, "ACT [target] "); + parser.addCommand(IrcCommand::Custom, "HELP ()"); + parser.addCommand(IrcCommand::Nick, "NICK "); + parser.addCommand(IrcCommand::Join, "JOIN <#channel> ()"); + parser.addCommand(IrcCommand::Part, "PART (<#channel>) ()"); + parser.addCommand(IrcCommand::Quit, "QUIT ()"); + parser.addCommand(IrcCommand::Message, "SAY [target] "); +//! [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: "! " and " " + parser.setTarget(message->nick()); + parser.setTriggers(QStringList() << "!" << ""); + } else { + // channel message: reply to the target channel + // => triggers: "! " and "bot: " + 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)); + } +} -- cgit v1.2.3-54-g00ecf