Files
qTier/chatmessage.hpp
2024-05-27 13:53:31 -05:00

68 lines
1.5 KiB
C++

#ifndef CHATMESSAGE_HPP
#define CHATMESSAGE_HPP
// #include "messagetype.hpp"
#include "ircmessagetype.hpp"
#include <QObject>
#include <QList>
#include <unordered_map>
class ChatMessage
{
Q_GADGET
public:
static ChatMessage* Parse(QString message);
QString rawMessage() const;
const std::unordered_map<QString, QString>* tags() const;
QString sender() const;
const QList<QString>* parameters() const;
QString prefix() const;
IrcMessageType type() const;
// explicit ChatMessage(QObject *parent = nullptr);
protected:
explicit ChatMessage(QString message);
signals:
private:
ChatMessage(QString rawMessage, std::unordered_map<QString, QString> tags,
QString sender, QList<QString> parameters, QString prefix,
IrcMessageType type);
const QString _rawMessage;
const std::unordered_map<QString, QString> _tags;
const QString _sender;
const QList<QString> _parameters;
const QString _prefix;
const IrcMessageType _type;
static std::unordered_map<QString, QString> parseTags(QString tagStr);
};
class PrivmsgView
{
public:
PrivmsgView(const ChatMessage* msg);
QString message() const;
QString user() const;
static constexpr IrcMessageType Expected = IrcMessageType::PRIVMSG;
private:
const ChatMessage* const parent;
};
class PingView
{
public:
PingView(const ChatMessage* msg);
QString toPong() const;
static constexpr IrcMessageType Expected = IrcMessageType::PING;
private:
const ChatMessage* const parent;
};
#endif // CHATMESSAGE_HPP