~nico-izo-ya/+junk/aaron2

« back to all changes in this revision

Viewing changes to bot.h

  • Committer: Vsevolod Velichko
  • Date: 2015-08-03 16:38:52 UTC
  • Revision ID: ankou@static.99.35.9.176.clients.your-server.de-20150803163852-ams5w58t2cdfo4l5
remove windows line-endings from bot.*

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/****************************************************************************
2
 
 * bot.h
3
 
 *  Copyright © 2011, Vsevolod Velichko.
4
 
 *  Licence: GPLv3 or later
5
 
 *
6
 
 ****************************************************************************
7
 
 *                                                                          *
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.                                    *
12
 
 *                                                                          *
13
 
 ****************************************************************************/
14
 
 
15
 
#ifndef BOT_S4748RP2
16
 
#define BOT_S4748RP2
17
 
 
18
 
#include <QObject>
19
 
#include <QHash>
20
 
#include <QElapsedTimer>
21
 
#include <QQueue>
22
 
#include <QSqlDatabase>
23
 
#include <QSqlQuery>
24
 
#include <jreen/client.h>
25
 
#include <jreen/abstractroster.h>
26
 
#include <jreen/mucroom.h>
27
 
#include "options.h"
28
 
#include "delayedmessage.h"
29
 
 
30
 
class Handlers;
31
 
 
32
 
class Bot : public QObject
33
 
{
34
 
        Q_OBJECT
35
 
        private:
36
 
                typedef void (Bot::*Handler)(Jreen::Message&);
37
 
 
38
 
                Jreen::Client *client;
39
 
                Jreen::AbstractRoster *roster;
40
 
                Jreen::MUCRoom *room;
41
 
                Handlers *handlers;
42
 
 
43
 
                struct PingRequest
44
 
                {
45
 
                        PingRequest(const QString &j) : nick(j) { timer.start(); }
46
 
                        QString nick;
47
 
                        QElapsedTimer timer;
48
 
                };
49
 
                struct RosterItem
50
 
                {
51
 
                        Jreen::MUCRoom::Affiliation aff;
52
 
                        Jreen::MUCRoom::Role role;
53
 
                        Jreen::Presence::Type status;
54
 
                        QString message;
55
 
                };
56
 
 
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;
65
 
 
66
 
                QSqlDatabase db;
67
 
 
68
 
 
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);
71
 
        public:
72
 
                enum OwnerStatus
73
 
                {
74
 
                        NonOwner,
75
 
                        Owner,
76
 
                        SuperOwner
77
 
                };
78
 
 
79
 
                Bot();
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;
86
 
        public slots:
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);
93
 
                void onConnected();
94
 
                void onDisconnected(Jreen::Client::DisconnectReason reason);
95
 
                void joinGroupchat();
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);
103
 
                void onInfoResult();
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);
115
 
        signals:
116
 
                void ready();
117
 
};
118
 
 
119
 
#endif /* end of include guard: BOT_S4748RP2 */
 
1
/****************************************************************************
 
2
 * bot.h
 
3
 *  Copyright © 2011, Vsevolod Velichko.
 
4
 *  Licence: GPLv3 or later
 
5
 *
 
6
 ****************************************************************************
 
7
 *                                                                          *
 
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.                                    *
 
12
 *                                                                          *
 
13
 ****************************************************************************/
 
14
 
 
15
#ifndef BOT_S4748RP2
 
16
#define BOT_S4748RP2
 
17
 
 
18
#include <QObject>
 
19
#include <QHash>
 
20
#include <QElapsedTimer>
 
21
#include <QQueue>
 
22
#include <QSqlDatabase>
 
23
#include <QSqlQuery>
 
24
#include <jreen/client.h>
 
25
#include <jreen/abstractroster.h>
 
26
#include <jreen/mucroom.h>
 
27
#include "options.h"
 
28
#include "delayedmessage.h"
 
29
 
 
30
class Handlers;
 
31
 
 
32
class Bot : public QObject
 
33
{
 
34
        Q_OBJECT
 
35
        private:
 
36
                typedef void (Bot::*Handler)(Jreen::Message&);
 
37
 
 
38
                Jreen::Client *client;
 
39
                Jreen::AbstractRoster *roster;
 
40
                Jreen::MUCRoom *room;
 
41
                Handlers *handlers;
 
42
 
 
43
                struct PingRequest
 
44
                {
 
45
                        PingRequest(const QString &j) : nick(j) { timer.start(); }
 
46
                        QString nick;
 
47
                        QElapsedTimer timer;
 
48
                };
 
49
                struct RosterItem
 
50
                {
 
51
                        Jreen::MUCRoom::Affiliation aff;
 
52
                        Jreen::MUCRoom::Role role;
 
53
                        Jreen::Presence::Type status;
 
54
                        QString message;
 
55
                };
 
56
 
 
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;
 
65
 
 
66
                QSqlDatabase db;
 
67
 
 
68
 
 
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);
 
71
        public:
 
72
                enum OwnerStatus
 
73
                {
 
74
                        NonOwner,
 
75
                        Owner,
 
76
                        SuperOwner
 
77
                };
 
78
 
 
79
                Bot();
 
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;
 
86
        public slots:
 
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);
 
93
                void onConnected();
 
94
                void onDisconnected(Jreen::Client::DisconnectReason reason);
 
95
                void joinGroupchat();
 
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);
 
103
                void onInfoResult();
 
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);
 
115
        signals:
 
116
                void ready();
 
117
};
 
118
 
 
119
#endif /* end of include guard: BOT_S4748RP2 */