1
/****************************************************************************
3
* Copyright © 2011, Vsevolod Velichko.
4
* Licence: GPLv3 or later
6
****************************************************************************
8
* This library is free software; you can redistribute it and/or modify *
9
* it under the terms of the GNU General Public License as published by *
10
* the Free Software Foundation; either version 3 of the License, or *
11
* (at your option) any later version. *
13
****************************************************************************/
20
#include <QElapsedTimer>
22
#include <QSqlDatabase>
24
#include <jreen/client.h>
25
#include <jreen/abstractroster.h>
26
#include <jreen/mucroom.h>
28
#include "delayedmessage.h"
32
class Bot : public QObject
36
typedef void (Bot::*Handler)(Jreen::Message&);
38
Jreen::Client *client;
39
Jreen::AbstractRoster *roster;
45
PingRequest(const QString &j) : nick(j) { timer.start(); }
51
Jreen::MUCRoom::Affiliation aff;
52
Jreen::MUCRoom::Role role;
53
Jreen::Presence::Type status;
57
QElapsedTimer xepsTimer;
58
QHash<QString, QPair<QString, QString> > xeps;
59
QHash<QString, PingRequest*> pings;
60
QHash<QString, QString> simpleRequests;
61
QHash<QString, DelayedMessages> delayedMessages;
62
QHash<QString, QString> currentNicks; // jid -> nick
63
QHash<QString, QString> nicksHistory; // nick -> jid
64
QHash<QString, RosterItem> users;
69
void userOut(const QString &type, const Jreen::Presence &presence, const QString &msg);
70
void userIn(const Jreen::Presence &presence, const Jreen::MUCRoom::Participant *participant);
80
inline QString conferenceNick() const { return Options::instance()["conferenceNick"].toString(); }
81
inline QString conferenceName() const { return Options::instance()["conferenceName"].toString(); }
82
inline QString fullConferenceName() const { return conferenceName() + "/" + conferenceNick(); }
83
inline bool canKick(const QString &nick) const { return room->canKick(nick); }
84
inline bool canBan(const QString &nick) const { return room->canBan(nick); }
85
QHash<QString, int> pendingMessages() const;
87
OwnerStatus getOwnerStatus(const QString& nick);
88
bool isBot(const QString& nick);
89
void sendPublicMessage(const QString &text);
90
void sendPublicMessage(const QString &to, const QString &text);
91
void sendPrivateMessage(const QString &to, const QString &text);
92
void sendGroupMessage(const QString &to, const QString &text);
94
void onDisconnected(Jreen::Client::DisconnectReason reason);
96
void sendPing(const QString &nick);
97
void sendVersionRequest(const QString &nick);
98
void sendVcardRequest(const QString &nick);
99
void sendInfoRequest(const QString &nick, const Jreen::JID &from);
100
void onPingResult(const Jreen::IQ& response, int);
101
void onVersionResult(const Jreen::IQ& response, int);
102
void onVcardResult(const Jreen::IQ& response, int);
104
void processMessage(const Jreen::Message &message);
105
void processPresence(const Jreen::Presence &presence, const Jreen::MUCRoom::Participant *participant);
106
void processSubject(const QString &subject, const QString &author);
107
bool isPresent(const QString &nick);
108
void ban(const QString &nick);
109
void unban(const QString &jid);
110
void kick(const QString &nick, const QString &reason = "Quisque punietur propter fidem suam.");
111
void setModer(const QString &nick);
112
void addDelayedMessage(const QString &from, const QString &to, const QString &message);
113
void sendDelayedMessages(const QString &nick);
114
void forgetDelayedMessages(const QString &to);
119
#endif /* end of include guard: BOT_S4748RP2 */
1
/****************************************************************************
3
* Copyright © 2011, Vsevolod Velichko.
4
* Licence: GPLv3 or later
6
****************************************************************************
8
* This library is free software; you can redistribute it and/or modify *
9
* it under the terms of the GNU General Public License as published by *
10
* the Free Software Foundation; either version 3 of the License, or *
11
* (at your option) any later version. *
13
****************************************************************************/
20
#include <QElapsedTimer>
22
#include <QSqlDatabase>
24
#include <jreen/client.h>
25
#include <jreen/abstractroster.h>
26
#include <jreen/mucroom.h>
28
#include "delayedmessage.h"
32
class Bot : public QObject
36
typedef void (Bot::*Handler)(Jreen::Message&);
38
Jreen::Client *client;
39
Jreen::AbstractRoster *roster;
45
PingRequest(const QString &j) : nick(j) { timer.start(); }
51
Jreen::MUCRoom::Affiliation aff;
52
Jreen::MUCRoom::Role role;
53
Jreen::Presence::Type status;
57
QElapsedTimer xepsTimer;
58
QHash<QString, QPair<QString, QString> > xeps;
59
QHash<QString, PingRequest*> pings;
60
QHash<QString, QString> simpleRequests;
61
QHash<QString, DelayedMessages> delayedMessages;
62
QHash<QString, QString> currentNicks; // jid -> nick
63
QHash<QString, QString> nicksHistory; // nick -> jid
64
QHash<QString, RosterItem> users;
69
void userOut(const QString &type, const Jreen::Presence &presence, const QString &msg);
70
void userIn(const Jreen::Presence &presence, const Jreen::MUCRoom::Participant *participant);
80
inline QString conferenceNick() const { return Options::instance()["conferenceNick"].toString(); }
81
inline QString conferenceName() const { return Options::instance()["conferenceName"].toString(); }
82
inline QString fullConferenceName() const { return conferenceName() + "/" + conferenceNick(); }
83
inline bool canKick(const QString &nick) const { return room->canKick(nick); }
84
inline bool canBan(const QString &nick) const { return room->canBan(nick); }
85
QHash<QString, int> pendingMessages() const;
87
OwnerStatus getOwnerStatus(const QString& nick);
88
bool isBot(const QString& nick);
89
void sendPublicMessage(const QString &text);
90
void sendPublicMessage(const QString &to, const QString &text);
91
void sendPrivateMessage(const QString &to, const QString &text);
92
void sendGroupMessage(const QString &to, const QString &text);
94
void onDisconnected(Jreen::Client::DisconnectReason reason);
96
void sendPing(const QString &nick);
97
void sendVersionRequest(const QString &nick);
98
void sendVcardRequest(const QString &nick);
99
void sendInfoRequest(const QString &nick, const Jreen::JID &from);
100
void onPingResult(const Jreen::IQ& response, int);
101
void onVersionResult(const Jreen::IQ& response, int);
102
void onVcardResult(const Jreen::IQ& response, int);
104
void processMessage(const Jreen::Message &message);
105
void processPresence(const Jreen::Presence &presence, const Jreen::MUCRoom::Participant *participant);
106
void processSubject(const QString &subject, const QString &author);
107
bool isPresent(const QString &nick);
108
void ban(const QString &nick);
109
void unban(const QString &jid);
110
void kick(const QString &nick, const QString &reason = "Quisque punietur propter fidem suam.");
111
void setModer(const QString &nick);
112
void addDelayedMessage(const QString &from, const QString &to, const QString &message);
113
void sendDelayedMessages(const QString &nick);
114
void forgetDelayedMessages(const QString &to);
119
#endif /* end of include guard: BOT_S4748RP2 */