From 30ef54668ccc631321b1fede0af2625f38f9f5d2 Mon Sep 17 00:00:00 2001 From: cyanray Date: Mon, 28 Feb 2022 12:25:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=80=82=E9=85=8D=20mah=20v2.5.0=20?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=B6=88=E6=81=AF;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/RepeatMessage.cpp | 14 +++++- include/mirai/events/FriendSyncMessage.hpp | 53 ++++++++++++++++++++ include/mirai/events/GroupSyncMessage.hpp | 53 ++++++++++++++++++++ include/mirai/events/MiraiEvent.hpp | 6 ++- include/mirai/events/StrangerSyncMessage.hpp | 53 ++++++++++++++++++++ include/mirai/events/TempSyncMessage.hpp | 53 ++++++++++++++++++++ include/mirai/events/events.hpp | 4 ++ 7 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 include/mirai/events/FriendSyncMessage.hpp create mode 100644 include/mirai/events/GroupSyncMessage.hpp create mode 100644 include/mirai/events/StrangerSyncMessage.hpp create mode 100644 include/mirai/events/TempSyncMessage.hpp 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..0637be4 100644 --- a/include/mirai/events/MiraiEvent.hpp +++ b/include/mirai/events/MiraiEvent.hpp @@ -50,7 +50,11 @@ namespace Cyan MemberSpecialTitleChangeEvent, // 群头衔改动事件 BotGroupPermissionChangeEvent, // bot 群权限改变事件 MemberPermissionChangeEvent, // 群成员权限改变事件 - MemberHonorChangeEvent // 群成员称号改变事件 + MemberHonorChangeEvent, // 群成员称号改变事件 + FriendSyncMessage, // Bot在其他客户端发送给好友的消息 + GroupSyncMessage, // Bot在其他客户端发送给群组的消息 + TempSyncMessage, // Bot在其他客户端发送给群成员的临时消息 + StrangerSyncMessage // Bot在其他客户端发送给陌生人的消息 }; MiraiEvent MiraiEventStr(const std::string& miraiEvent); 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" From 3f5bf70dbe3634c85891d1c728db5245d10600e5 Mon Sep 17 00:00:00 2001 From: cyanray Date: Mon, 28 Feb 2022 12:30:46 +0800 Subject: [PATCH 2/2] code cleanup. --- include/mirai/events/MiraiEvent.hpp | 110 ++++++++++++++-------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/include/mirai/events/MiraiEvent.hpp b/include/mirai/events/MiraiEvent.hpp index 0637be4..c4af108 100644 --- a/include/mirai/events/MiraiEvent.hpp +++ b/include/mirai/events/MiraiEvent.hpp @@ -6,68 +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, // 群成员称号改变事件 - FriendSyncMessage, // Bot在其他客户端发送给好友的消息 - GroupSyncMessage, // Bot在其他客户端发送给群组的消息 - TempSyncMessage, // Bot在其他客户端发送给群成员的临时消息 - StrangerSyncMessage // Bot在其他客户端发送给陌生人的消息 - }; + // 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_