1+ #pragma once
2+ #ifndef mirai_cpp_events_message_hpp_H_
3+ #define mirai_cpp_events_message_hpp_H_
4+
5+ #include < nlohmann/json.hpp>
6+ #include " defs/qq_types.hpp"
7+ #include " friend_message.hpp"
8+ #include " group_message.hpp"
9+ #include " temp_message.hpp"
10+ #include " event_interface.hpp"
11+ #include " exported.h"
12+
13+ namespace Cyan
14+ {
15+
16+ enum class MessageType
17+ {
18+ FriendMessage, // 好友消息
19+ GroupMessage, // 群组消息
20+ TempMessage // 临时消息
21+ };
22+
23+ // 通用消息事件 (可转换为 FriendMessage GroupMessage TempMessage)
24+ class EXPORTED Message : public EventBase
25+ {
26+ public:
27+ Cyan::MessageChain MessageChain;
28+
29+ static MiraiEvent GetMiraiEvent ()
30+ {
31+ return MiraiEvent::Message;
32+ }
33+
34+ MessageType GetMessageType () const
35+ {
36+ return messageType_;
37+ }
38+
39+ FriendMessage ToFriendMessage () const
40+ {
41+ FriendMessage m;
42+ m.Set (json_);
43+ return m;
44+ }
45+
46+ GroupMessage ToGroupMessage () const
47+ {
48+ GroupMessage m;
49+ m.Set (json_);
50+ return m;
51+ }
52+
53+ TempMessage ToTempMessage () const
54+ {
55+ TempMessage m;
56+ m.Set (json_);
57+ return m;
58+ }
59+
60+ MessageId GetMessageId () const
61+ {
62+ return (this ->MessageChain ).GetMessageId ();
63+ }
64+
65+ int64_t GetTimestamp () const
66+ {
67+ return (this ->MessageChain ).GetTimestamp ();
68+ }
69+
70+ virtual void SetMiraiBot (MiraiBot* bot) override
71+ {
72+ this ->bot_ = bot;
73+ }
74+
75+ MessageId Reply (const Cyan::MessageChain& mc) const ;
76+ MessageId QuoteReply (const Cyan::MessageChain& mc) const ;
77+
78+ virtual bool Set (const json& j) override
79+ {
80+ if (j[" type" ] == " FriendMessage" )
81+ {
82+ messageType_ = MessageType::FriendMessage;
83+ friendMessage_.Set (j);
84+ friendMessage_.SetMiraiBot (bot_);
85+ }
86+ if (j[" type" ] == " GroupMessage" )
87+ {
88+ messageType_ = MessageType::GroupMessage;
89+ groupMessage_.Set (j);
90+ groupMessage_.SetMiraiBot (bot_);
91+ }
92+ if (j[" type" ] == " TempMessage" )
93+ {
94+ messageType_ = MessageType::TempMessage;
95+ tempMessage_.Set (j);
96+ tempMessage_.SetMiraiBot (bot_);
97+ }
98+ this ->MessageChain .Set (j[" messageChain" ]);
99+ json_ = j;
100+ return true ;
101+ }
102+ virtual json ToJson () const override
103+ {
104+ return json_;
105+ }
106+ private:
107+ MiraiBot* bot_;
108+ json json_;
109+ MessageType messageType_;
110+ FriendMessage friendMessage_;
111+ GroupMessage groupMessage_;
112+ TempMessage tempMessage_;
113+ };
114+ }
115+
116+ #endif // !mirai_cpp_events_message_hpp_H_
0 commit comments