|
1 | 1 | #pragma once |
2 | 2 |
|
3 | 3 | #include "akashi_addon_global.h" |
| 4 | +#include "discordtypes.h" |
4 | 5 | #include "service.h" |
5 | 6 |
|
6 | | -#include <QByteArray> |
7 | | -#include <QJsonObject> |
8 | | -#include <QMap> |
9 | | -#include <QString> |
10 | | -#include <QVector> |
11 | | -#include <concepts> |
12 | | - |
13 | 7 | class QNetworkAccessManager; |
14 | 8 | class QNetworkReply; |
15 | 9 |
|
16 | | -class DiscordMessageCommon |
17 | | -{ |
18 | | - public: |
19 | | - const QString &requestUrl() const { return m_request_url; } |
20 | | - |
21 | | - protected: |
22 | | - QString m_request_url; |
23 | | -}; |
24 | | - |
25 | | -class AKASHI_ADDON_EXPORT DiscordMessage : public DiscordMessageCommon |
26 | | -{ |
27 | | - public: |
28 | | - DiscordMessage() = default; |
29 | | - ~DiscordMessage() = default; |
30 | | - |
31 | | - DiscordMessage &setRequestUrl(const QString &url); |
32 | | - DiscordMessage &setContent(const QString &content); |
33 | | - DiscordMessage &setUsername(const QString &username); |
34 | | - DiscordMessage &setAvatarUrl(const QString &avatar_url); |
35 | | - DiscordMessage &setTts(bool tts); |
36 | | - |
37 | | - DiscordMessage &beginEmbed(); |
38 | | - DiscordMessage &setEmbedTitle(const QString &title); |
39 | | - DiscordMessage &setEmbedDescription(const QString &description); |
40 | | - DiscordMessage &setEmbedUrl(const QString &url); |
41 | | - DiscordMessage &setEmbedColor(QString color); |
42 | | - DiscordMessage &setEmbedTimestamp(const QString ×tamp); |
43 | | - DiscordMessage &setEmbedFooter(const QString &text, const QString &icon_url = ""); |
44 | | - DiscordMessage &setEmbedImage(const QString &url); |
45 | | - DiscordMessage &setEmbedThumbnail(const QString &url); |
46 | | - DiscordMessage &setEmbedAuthor(const QString &name, const QString &url = "", const QString &icon_url = ""); |
47 | | - DiscordMessage &addEmbedField(const QString &name, const QString &value, bool inline_field = false); |
48 | | - DiscordMessage &endEmbed(); |
49 | | - |
50 | | - QJsonObject toJson() const; |
51 | | - |
52 | | - private: |
53 | | - QMap<QString, QString> m_fields; |
54 | | - QVector<QVariantMap> m_embeds; |
55 | | - QVariantMap m_current_embed; |
56 | | - bool m_building_embed = false; |
57 | | -}; |
58 | | - |
59 | | -struct DiscordMultipart |
60 | | -{ |
61 | | - QByteArray data; |
62 | | - QString name; |
63 | | - QString filename; |
64 | | - QString mime_type; |
65 | | - QString charset; |
66 | | - |
67 | | - template <typename T> |
68 | | - requires std::convertible_to<T, QByteArray> |
69 | | - DiscordMultipart(T data, QString name, QString filename = "", |
70 | | - QString mime_type = "", QString charset = "") : data(std::move(data)), |
71 | | - name(std::move(name)), |
72 | | - filename(std::move(filename)), |
73 | | - mime_type(std::move(mime_type)), |
74 | | - charset(std::move(charset)) |
75 | | - {} |
76 | | -}; |
77 | | - |
78 | | -class AKASHI_ADDON_EXPORT DiscordMultipartMessage : public DiscordMessageCommon |
79 | | -{ |
80 | | - public: |
81 | | - DiscordMultipartMessage() = default; |
82 | | - ~DiscordMultipartMessage() = default; |
83 | | - |
84 | | - template <typename T> |
85 | | - DiscordMultipartMessage &addPart(T data, QString name, QString filename = "", QString mime_type = "", QString charset = "") |
86 | | - { |
87 | | - m_parts.append(DiscordMultipart(std::move(data), std::move(name), std::move(filename), std::move(mime_type), std::move(charset))); |
88 | | - return *this; |
89 | | - } |
90 | | - |
91 | | - DiscordMultipartMessage &setRequestUrl(const QString &url); |
92 | | - DiscordMultipartMessage &setPayloadJson(const QJsonObject &payload); |
93 | | - |
94 | | - int size() const { return m_parts.size(); } |
95 | | - const DiscordMultipart &partAt(int index) const { return m_parts.at(index); } |
96 | | - const QVector<DiscordMultipart> &parts() const { return m_parts; } |
97 | | - const QJsonObject &payloadJson() const { return m_payload_json; } |
98 | | - |
99 | | - private: |
100 | | - QVector<DiscordMultipart> m_parts; |
101 | | - QJsonObject m_payload_json; |
102 | | -}; |
103 | | - |
104 | 10 | Q_DECLARE_EXPORTED_LOGGING_CATEGORY(akashiDiscordHook, AKASHI_ADDON_EXPORT) |
105 | 11 | class AKASHI_ADDON_EXPORT DiscordHook : public Service |
106 | 12 | { |
|
0 commit comments