diff --git a/examples/RepeatMessage.cpp b/examples/RepeatMessage.cpp index 07ea689..521cce8 100644 --- a/examples/RepeatMessage.cpp +++ b/examples/RepeatMessage.cpp @@ -4,6 +4,8 @@ // 按需引用头文件 // 你也可以使用 #include 引用所有头文件(可能导致编译缓慢) #include +#include +#include using namespace std; using namespace Cyan; @@ -55,7 +57,17 @@ int main(int argc, char* argv[]) [&](Message m) { cout << int64_t(m.Sender) << " 发来一条消息." << m.MessageChain.ToString() << endl; - m.Reply(m.MessageChain); + // m.Reply(m.MessageChain); + }); + + bot.On([&](OtherClientMessage m) + { + cout << m.MessageChain.ToString() << endl; + }); + + bot.On([&](FriendSyncMessage m) + { + cout << m.MessageChain.ToString() << endl; }); bot.On([&](LostConnection e) diff --git a/include/mirai/events/FriendSyncMessage.hpp b/include/mirai/events/FriendSyncMessage.hpp new file mode 100644 index 0000000..edb201a --- /dev/null +++ b/include/mirai/events/FriendSyncMessage.hpp @@ -0,0 +1,53 @@ +#pragma once +#ifndef mirai_cpp_events_FriendSyncMessage_hpp_H_ +#define mirai_cpp_events_FriendSyncMessage_hpp_H_ + +#include "mirai/third-party/nlohmann/json.hpp" +#include "mirai/defs/QQType.hpp" +#include "mirai/defs/MessageChain.hpp" +#include "mirai/defs/Friend.hpp" +#include "EventBase.hpp" + +namespace Cyan +{ + /** + * \brief Bot在其他客户端发送给好友的消息 + */ + class FriendSyncMessage : public EventBase + { + public: + Cyan::MessageChain MessageChain; + Friend_t Subject; + + static MiraiEvent GetMiraiEvent() + { + return MiraiEvent::FriendSyncMessage; + } + + MessageId_t MessageId() const + { + return (this->MessageChain).MessageId(); + } + + int64_t Timestamp() const + { + return (this->MessageChain).Timestamp(); + } + + virtual bool Set(const json& j) override + { + this->MessageChain.Set(j["messageChain"]); + Subject.Set(j["subject"]); + return true; + } + virtual json ToJson() const override + { + json j = json::object(); + j["messageChain"] = this->MessageChain.ToJson(); + j["subject"] = this->Subject.ToJson(); + return j; + } + }; +} + +#endif \ No newline at end of file diff --git a/include/mirai/events/GroupSyncMessage.hpp b/include/mirai/events/GroupSyncMessage.hpp new file mode 100644 index 0000000..1522b94 --- /dev/null +++ b/include/mirai/events/GroupSyncMessage.hpp @@ -0,0 +1,53 @@ +#pragma once +#ifndef mirai_cpp_events_GroupSyncMessage_hpp_H_ +#define mirai_cpp_events_GroupSyncMessage_hpp_H_ + +#include "mirai/third-party/nlohmann/json.hpp" +#include "mirai/defs/QQType.hpp" +#include "mirai/defs/MessageChain.hpp" +#include "mirai/defs/Group.hpp" +#include "EventBase.hpp" + +namespace Cyan +{ + /** + * \brief Bot在其他客户端发送给群组的消息 + */ + class GroupSyncMessage : public EventBase + { + public: + Cyan::MessageChain MessageChain; + Group_t Subject; + + static MiraiEvent GetMiraiEvent() + { + return MiraiEvent::GroupSyncMessage; + } + + MessageId_t MessageId() const + { + return (this->MessageChain).MessageId(); + } + + int64_t Timestamp() const + { + return (this->MessageChain).Timestamp(); + } + + virtual bool Set(const json& j) override + { + this->MessageChain.Set(j["messageChain"]); + Subject.Set(j["subject"]); + return true; + } + virtual json ToJson() const override + { + json j = json::object(); + j["messageChain"] = this->MessageChain.ToJson(); + j["subject"] = this->Subject.ToJson(); + return j; + } + }; +} + +#endif \ No newline at end of file diff --git a/include/mirai/events/MiraiEvent.hpp b/include/mirai/events/MiraiEvent.hpp index 84e1699..c4af108 100644 --- a/include/mirai/events/MiraiEvent.hpp +++ b/include/mirai/events/MiraiEvent.hpp @@ -6,64 +6,68 @@ namespace Cyan { - // Mirai 事件类型 - enum class MiraiEvent - { - Default, // 未知 - BotOnlineEvent, // Bot 登录成功 - BotOfflineEventActive, // Bot 主动离线 - BotOfflineEventForce, // Bot 被挤下线 - BotOfflineEventDropped, // Bot 被挤下线 - BotReloginEvent, // Bot 主动重新登录 - FriendMessage, // 好友消息 - GroupMessage, // 群组消息 - TempMessage, // 临时消息 - GroupRecallEvent, // 群消息撤回 - FriendRecallEvent, // 好友消息撤回 - BotMuteEvent, // Bot被禁言 - BotUnmuteEvent, // Bot被取消禁言 - BotJoinGroupEvent, // Bot加入了一个新群 - GroupNameChangeEvent, // 某个群名称改变 - GroupMuteAllEvent, // 群全员禁言 - MemberJoinEvent, // 新人入群事件 - MemberLeaveEventKick, // 成员被踢出群(该成员不是Bot) - MemberLeaveEventQuit, // 成员主动离开群组 - MemberMuteEvent, // 群成员被禁言(该成员不是Bot) - MemberUnmuteEvent, // 群成员被取消禁言(该成员不是Bot) - NewFriendRequestEvent, // 添加好友申请 - MemberJoinRequestEvent, // 用户入群申请 - BotLeaveEventActive, // Bot 主动离开群 - BotLeaveEventKick, // Bot 被剔出群 - Message, // 通用消息事件 - BotInvitedJoinGroupRequestEvent, // Bot被邀请入群申请 - MemberCardChangeEvent, // 群成员群名片被修改事件 - CommandExecutedEvent, // 指令事件 - NudgeEvent, // 戳一戳(头像)事件 - StrangerMessage, // 陌生人消息 - OtherClientMessage, // 其他客户端消息 - FriendInputStatusChangedEvent, // 好友输入状态改变事件 - FriendNickChangedEvent, // 好友昵称改变事件 - GroupEntranceAnnouncementChangeEvent, // 某群入群公告改变 - GroupAllowAnonymousChatEvent, // 群匿名聊天权限改变 - GroupAllowConfessTalkEvent, // 群坦白说权限改变 - GroupAllowMemberInviteEvent, // 群员邀请好友加群权限改变 - MemberSpecialTitleChangeEvent, // 群头衔改动事件 - BotGroupPermissionChangeEvent, // bot 群权限改变事件 - MemberPermissionChangeEvent, // 群成员权限改变事件 - MemberHonorChangeEvent // 群成员称号改变事件 - }; + // Mirai 事件类型 + enum class MiraiEvent + { + Default, // 未知 + BotOnlineEvent, // Bot 登录成功 + BotOfflineEventActive, // Bot 主动离线 + BotOfflineEventForce, // Bot 被挤下线 + BotOfflineEventDropped, // Bot 被挤下线 + BotReloginEvent, // Bot 主动重新登录 + FriendMessage, // 好友消息 + GroupMessage, // 群组消息 + TempMessage, // 临时消息 + GroupRecallEvent, // 群消息撤回 + FriendRecallEvent, // 好友消息撤回 + BotMuteEvent, // Bot被禁言 + BotUnmuteEvent, // Bot被取消禁言 + BotJoinGroupEvent, // Bot加入了一个新群 + GroupNameChangeEvent, // 某个群名称改变 + GroupMuteAllEvent, // 群全员禁言 + MemberJoinEvent, // 新人入群事件 + MemberLeaveEventKick, // 成员被踢出群(该成员不是Bot) + MemberLeaveEventQuit, // 成员主动离开群组 + MemberMuteEvent, // 群成员被禁言(该成员不是Bot) + MemberUnmuteEvent, // 群成员被取消禁言(该成员不是Bot) + NewFriendRequestEvent, // 添加好友申请 + MemberJoinRequestEvent, // 用户入群申请 + BotLeaveEventActive, // Bot 主动离开群 + BotLeaveEventKick, // Bot 被剔出群 + Message, // 通用消息事件 + BotInvitedJoinGroupRequestEvent, // Bot被邀请入群申请 + MemberCardChangeEvent, // 群成员群名片被修改事件 + CommandExecutedEvent, // 指令事件 + NudgeEvent, // 戳一戳(头像)事件 + StrangerMessage, // 陌生人消息 + OtherClientMessage, // 其他客户端消息 + FriendInputStatusChangedEvent, // 好友输入状态改变事件 + FriendNickChangedEvent, // 好友昵称改变事件 + GroupEntranceAnnouncementChangeEvent, // 某群入群公告改变 + GroupAllowAnonymousChatEvent, // 群匿名聊天权限改变 + GroupAllowConfessTalkEvent, // 群坦白说权限改变 + GroupAllowMemberInviteEvent, // 群员邀请好友加群权限改变 + MemberSpecialTitleChangeEvent, // 群头衔改动事件 + BotGroupPermissionChangeEvent, // bot 群权限改变事件 + MemberPermissionChangeEvent, // 群成员权限改变事件 + MemberHonorChangeEvent, // 群成员称号改变事件 + FriendSyncMessage, // Bot在其他客户端发送给好友的消息 + GroupSyncMessage, // Bot在其他客户端发送给群组的消息 + TempSyncMessage, // Bot在其他客户端发送给群成员的临时消息 + StrangerSyncMessage // Bot在其他客户端发送给陌生人的消息 + }; - MiraiEvent MiraiEventStr(const std::string& miraiEvent); + MiraiEvent MiraiEventStr(const std::string& miraiEvent); - std::string MiraiEventStr(MiraiEvent miraiEvent); + std::string MiraiEventStr(MiraiEvent miraiEvent); } // https://stackoverflow.com/questions/18837857/cant-use-enum-class-as-unordered-map-key namespace std { - template <> struct hash { - size_t operator() (const Cyan::MiraiEvent& t) const { return size_t(t); } - }; + template <> struct hash { + size_t operator() (const Cyan::MiraiEvent& t) const { return size_t(t); } + }; } #endif // !mirai_cpp_events_events_name_hpp_H_ diff --git a/include/mirai/events/StrangerSyncMessage.hpp b/include/mirai/events/StrangerSyncMessage.hpp new file mode 100644 index 0000000..b32fa00 --- /dev/null +++ b/include/mirai/events/StrangerSyncMessage.hpp @@ -0,0 +1,53 @@ +#pragma once +#ifndef mirai_cpp_events_StrangerSyncMessage_hpp_H_ +#define mirai_cpp_events_StrangerSyncMessage_hpp_H_ + +#include "mirai/third-party/nlohmann/json.hpp" +#include "mirai/defs/QQType.hpp" +#include "mirai/defs/MessageChain.hpp" +#include "mirai/defs/Friend.hpp" +#include "EventBase.hpp" + +namespace Cyan +{ + /** + * \brief Bot在其他客户端发送给好友的消息 + */ + class StrangerSyncMessage : public EventBase + { + public: + Cyan::MessageChain MessageChain; + Friend_t Subject; + + static MiraiEvent GetMiraiEvent() + { + return MiraiEvent::StrangerSyncMessage; + } + + MessageId_t MessageId() const + { + return (this->MessageChain).MessageId(); + } + + int64_t Timestamp() const + { + return (this->MessageChain).Timestamp(); + } + + virtual bool Set(const json& j) override + { + this->MessageChain.Set(j["messageChain"]); + Subject.Set(j["subject"]); + return true; + } + virtual json ToJson() const override + { + json j = json::object(); + j["messageChain"] = this->MessageChain.ToJson(); + j["subject"] = this->Subject.ToJson(); + return j; + } + }; +} + +#endif \ No newline at end of file diff --git a/include/mirai/events/TempSyncMessage.hpp b/include/mirai/events/TempSyncMessage.hpp new file mode 100644 index 0000000..8d06f8a --- /dev/null +++ b/include/mirai/events/TempSyncMessage.hpp @@ -0,0 +1,53 @@ +#pragma once +#ifndef mirai_cpp_events_TempSyncMessage_hpp_H_ +#define mirai_cpp_events_TempSyncMessage_hpp_H_ + +#include "mirai/third-party/nlohmann/json.hpp" +#include "mirai/defs/QQType.hpp" +#include "mirai/defs/MessageChain.hpp" +#include "mirai/defs/GroupMember.hpp" +#include "EventBase.hpp" + +namespace Cyan +{ + /** + * \brief Bot在其他客户端发送给群组的消息 + */ + class TempSyncMessage : public EventBase + { + public: + Cyan::MessageChain MessageChain; + GroupMember Subject; + + static MiraiEvent GetMiraiEvent() + { + return MiraiEvent::TempSyncMessage; + } + + MessageId_t MessageId() const + { + return (this->MessageChain).MessageId(); + } + + int64_t Timestamp() const + { + return (this->MessageChain).Timestamp(); + } + + virtual bool Set(const json& j) override + { + this->MessageChain.Set(j["messageChain"]); + Subject.Set(j["subject"]); + return true; + } + virtual json ToJson() const override + { + json j = json::object(); + j["messageChain"] = this->MessageChain.ToJson(); + j["subject"] = this->Subject.ToJson(); + return j; + } + }; +} + +#endif \ No newline at end of file diff --git a/include/mirai/events/events.hpp b/include/mirai/events/events.hpp index 4016ae5..593de82 100644 --- a/include/mirai/events/events.hpp +++ b/include/mirai/events/events.hpp @@ -9,6 +9,10 @@ #include "TempMessage.hpp" #include "StrangerMessage.hpp" #include "OtherClientMessage.hpp" +#include "FriendSyncMessage.hpp" +#include "GroupSyncMessage.hpp" +#include "TempSyncMessage.hpp" +#include "StrangerSyncMessage.hpp" // 机器人相关事件 #include "BotOnlineEvent.hpp" #include "BotOfflineEventActive.hpp"