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 (this ->ToJson ());
43+ return m;
44+ }
45+
46+ GroupMessage ToGroupMessage () const
47+ {
48+ GroupMessage m;
49+ m.Set (this ->ToJson ());
50+ return m;
51+ }
52+
53+ TempMessage ToTempMessage () const
54+ {
55+ TempMessage m;
56+ m.Set (this ->ToJson ());
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+ }
85+ if (j[" type" ] == " GroupMessage" )
86+ {
87+ messageType_ = MessageType::GroupMessage;
88+ groupMessage_.Set (j);
89+ }
90+ if (j[" type" ] == " TempMessage" )
91+ {
92+ messageType_ = MessageType::TempMessage;
93+ tempMessage_.Set (j);
94+ }
95+ this ->MessageChain .Set (j[" messageChain" ]);
96+ return true ;
97+ }
98+ virtual json ToJson () const override
99+ {
100+ switch (messageType_)
101+ {
102+ case MessageType::FriendMessage: return friendMessage_.ToJson ();
103+ case MessageType::GroupMessage: return groupMessage_.ToJson ();
104+ case MessageType::TempMessage: return tempMessage_.ToJson ();
105+ default : throw std::runtime_error (" 错误的 MessageType ." );
106+ }
107+ }
108+ private:
109+ MiraiBot* bot_;
110+ MessageType messageType_;
111+ FriendMessage friendMessage_;
112+ GroupMessage groupMessage_;
113+ TempMessage tempMessage_;
114+ };
115+ }
116+
117+ #endif // !mirai_cpp_events_message_hpp_H_
0 commit comments