Skip to content
This repository was archived by the owner on Aug 16, 2024. It is now read-only.

Commit 19f45a8

Browse files
authored
Merge pull request #139 from cyanray/dev/cyanray
适配 mah v2.5.0 其他客户端同步消息;
2 parents c8f668d + 3f5bf70 commit 19f45a8

File tree

7 files changed

+284
-52
lines changed

7 files changed

+284
-52
lines changed

examples/RepeatMessage.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
// 按需引用头文件
55
// 你也可以使用 #include <mirai.h> 引用所有头文件(可能导致编译缓慢)
66
#include <mirai/MiraiBot.hpp>
7+
#include <mirai/events/OtherClientMessage.hpp>
8+
#include <mirai/events/FriendSyncMessage.hpp>
79
using namespace std;
810
using namespace Cyan;
911

@@ -55,7 +57,17 @@ int main(int argc, char* argv[])
5557
[&](Message m)
5658
{
5759
cout << int64_t(m.Sender) << " 发来一条消息." << m.MessageChain.ToString() << endl;
58-
m.Reply(m.MessageChain);
60+
// m.Reply(m.MessageChain);
61+
});
62+
63+
bot.On<OtherClientMessage>([&](OtherClientMessage m)
64+
{
65+
cout << m.MessageChain.ToString() << endl;
66+
});
67+
68+
bot.On<FriendSyncMessage>([&](FriendSyncMessage m)
69+
{
70+
cout << m.MessageChain.ToString() << endl;
5971
});
6072

6173
bot.On<LostConnection>([&](LostConnection e)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#pragma once
2+
#ifndef mirai_cpp_events_FriendSyncMessage_hpp_H_
3+
#define mirai_cpp_events_FriendSyncMessage_hpp_H_
4+
5+
#include "mirai/third-party/nlohmann/json.hpp"
6+
#include "mirai/defs/QQType.hpp"
7+
#include "mirai/defs/MessageChain.hpp"
8+
#include "mirai/defs/Friend.hpp"
9+
#include "EventBase.hpp"
10+
11+
namespace Cyan
12+
{
13+
/**
14+
* \brief Bot在其他客户端发送给好友的消息
15+
*/
16+
class FriendSyncMessage : public EventBase
17+
{
18+
public:
19+
Cyan::MessageChain MessageChain;
20+
Friend_t Subject;
21+
22+
static MiraiEvent GetMiraiEvent()
23+
{
24+
return MiraiEvent::FriendSyncMessage;
25+
}
26+
27+
MessageId_t MessageId() const
28+
{
29+
return (this->MessageChain).MessageId();
30+
}
31+
32+
int64_t Timestamp() const
33+
{
34+
return (this->MessageChain).Timestamp();
35+
}
36+
37+
virtual bool Set(const json& j) override
38+
{
39+
this->MessageChain.Set(j["messageChain"]);
40+
Subject.Set(j["subject"]);
41+
return true;
42+
}
43+
virtual json ToJson() const override
44+
{
45+
json j = json::object();
46+
j["messageChain"] = this->MessageChain.ToJson();
47+
j["subject"] = this->Subject.ToJson();
48+
return j;
49+
}
50+
};
51+
}
52+
53+
#endif
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#pragma once
2+
#ifndef mirai_cpp_events_GroupSyncMessage_hpp_H_
3+
#define mirai_cpp_events_GroupSyncMessage_hpp_H_
4+
5+
#include "mirai/third-party/nlohmann/json.hpp"
6+
#include "mirai/defs/QQType.hpp"
7+
#include "mirai/defs/MessageChain.hpp"
8+
#include "mirai/defs/Group.hpp"
9+
#include "EventBase.hpp"
10+
11+
namespace Cyan
12+
{
13+
/**
14+
* \brief Bot在其他客户端发送给群组的消息
15+
*/
16+
class GroupSyncMessage : public EventBase
17+
{
18+
public:
19+
Cyan::MessageChain MessageChain;
20+
Group_t Subject;
21+
22+
static MiraiEvent GetMiraiEvent()
23+
{
24+
return MiraiEvent::GroupSyncMessage;
25+
}
26+
27+
MessageId_t MessageId() const
28+
{
29+
return (this->MessageChain).MessageId();
30+
}
31+
32+
int64_t Timestamp() const
33+
{
34+
return (this->MessageChain).Timestamp();
35+
}
36+
37+
virtual bool Set(const json& j) override
38+
{
39+
this->MessageChain.Set(j["messageChain"]);
40+
Subject.Set(j["subject"]);
41+
return true;
42+
}
43+
virtual json ToJson() const override
44+
{
45+
json j = json::object();
46+
j["messageChain"] = this->MessageChain.ToJson();
47+
j["subject"] = this->Subject.ToJson();
48+
return j;
49+
}
50+
};
51+
}
52+
53+
#endif

include/mirai/events/MiraiEvent.hpp

Lines changed: 55 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -6,64 +6,68 @@
66
namespace Cyan
77
{
88

9-
// Mirai 事件类型
10-
enum class MiraiEvent
11-
{
12-
Default, // 未知
13-
BotOnlineEvent, // Bot 登录成功
14-
BotOfflineEventActive, // Bot 主动离线
15-
BotOfflineEventForce, // Bot 被挤下线
16-
BotOfflineEventDropped, // Bot 被挤下线
17-
BotReloginEvent, // Bot 主动重新登录
18-
FriendMessage, // 好友消息
19-
GroupMessage, // 群组消息
20-
TempMessage, // 临时消息
21-
GroupRecallEvent, // 群消息撤回
22-
FriendRecallEvent, // 好友消息撤回
23-
BotMuteEvent, // Bot被禁言
24-
BotUnmuteEvent, // Bot被取消禁言
25-
BotJoinGroupEvent, // Bot加入了一个新群
26-
GroupNameChangeEvent, // 某个群名称改变
27-
GroupMuteAllEvent, // 群全员禁言
28-
MemberJoinEvent, // 新人入群事件
29-
MemberLeaveEventKick, // 成员被踢出群(该成员不是Bot)
30-
MemberLeaveEventQuit, // 成员主动离开群组
31-
MemberMuteEvent, // 群成员被禁言(该成员不是Bot)
32-
MemberUnmuteEvent, // 群成员被取消禁言(该成员不是Bot)
33-
NewFriendRequestEvent, // 添加好友申请
34-
MemberJoinRequestEvent, // 用户入群申请
35-
BotLeaveEventActive, // Bot 主动离开群
36-
BotLeaveEventKick, // Bot 被剔出群
37-
Message, // 通用消息事件
38-
BotInvitedJoinGroupRequestEvent, // Bot被邀请入群申请
39-
MemberCardChangeEvent, // 群成员群名片被修改事件
40-
CommandExecutedEvent, // 指令事件
41-
NudgeEvent, // 戳一戳(头像)事件
42-
StrangerMessage, // 陌生人消息
43-
OtherClientMessage, // 其他客户端消息
44-
FriendInputStatusChangedEvent, // 好友输入状态改变事件
45-
FriendNickChangedEvent, // 好友昵称改变事件
46-
GroupEntranceAnnouncementChangeEvent, // 某群入群公告改变
47-
GroupAllowAnonymousChatEvent, // 群匿名聊天权限改变
48-
GroupAllowConfessTalkEvent, // 群坦白说权限改变
49-
GroupAllowMemberInviteEvent, // 群员邀请好友加群权限改变
50-
MemberSpecialTitleChangeEvent, // 群头衔改动事件
51-
BotGroupPermissionChangeEvent, // bot 群权限改变事件
52-
MemberPermissionChangeEvent, // 群成员权限改变事件
53-
MemberHonorChangeEvent // 群成员称号改变事件
54-
};
9+
// Mirai 事件类型
10+
enum class MiraiEvent
11+
{
12+
Default, // 未知
13+
BotOnlineEvent, // Bot 登录成功
14+
BotOfflineEventActive, // Bot 主动离线
15+
BotOfflineEventForce, // Bot 被挤下线
16+
BotOfflineEventDropped, // Bot 被挤下线
17+
BotReloginEvent, // Bot 主动重新登录
18+
FriendMessage, // 好友消息
19+
GroupMessage, // 群组消息
20+
TempMessage, // 临时消息
21+
GroupRecallEvent, // 群消息撤回
22+
FriendRecallEvent, // 好友消息撤回
23+
BotMuteEvent, // Bot被禁言
24+
BotUnmuteEvent, // Bot被取消禁言
25+
BotJoinGroupEvent, // Bot加入了一个新群
26+
GroupNameChangeEvent, // 某个群名称改变
27+
GroupMuteAllEvent, // 群全员禁言
28+
MemberJoinEvent, // 新人入群事件
29+
MemberLeaveEventKick, // 成员被踢出群(该成员不是Bot)
30+
MemberLeaveEventQuit, // 成员主动离开群组
31+
MemberMuteEvent, // 群成员被禁言(该成员不是Bot)
32+
MemberUnmuteEvent, // 群成员被取消禁言(该成员不是Bot)
33+
NewFriendRequestEvent, // 添加好友申请
34+
MemberJoinRequestEvent, // 用户入群申请
35+
BotLeaveEventActive, // Bot 主动离开群
36+
BotLeaveEventKick, // Bot 被剔出群
37+
Message, // 通用消息事件
38+
BotInvitedJoinGroupRequestEvent, // Bot被邀请入群申请
39+
MemberCardChangeEvent, // 群成员群名片被修改事件
40+
CommandExecutedEvent, // 指令事件
41+
NudgeEvent, // 戳一戳(头像)事件
42+
StrangerMessage, // 陌生人消息
43+
OtherClientMessage, // 其他客户端消息
44+
FriendInputStatusChangedEvent, // 好友输入状态改变事件
45+
FriendNickChangedEvent, // 好友昵称改变事件
46+
GroupEntranceAnnouncementChangeEvent, // 某群入群公告改变
47+
GroupAllowAnonymousChatEvent, // 群匿名聊天权限改变
48+
GroupAllowConfessTalkEvent, // 群坦白说权限改变
49+
GroupAllowMemberInviteEvent, // 群员邀请好友加群权限改变
50+
MemberSpecialTitleChangeEvent, // 群头衔改动事件
51+
BotGroupPermissionChangeEvent, // bot 群权限改变事件
52+
MemberPermissionChangeEvent, // 群成员权限改变事件
53+
MemberHonorChangeEvent, // 群成员称号改变事件
54+
FriendSyncMessage, // Bot在其他客户端发送给好友的消息
55+
GroupSyncMessage, // Bot在其他客户端发送给群组的消息
56+
TempSyncMessage, // Bot在其他客户端发送给群成员的临时消息
57+
StrangerSyncMessage // Bot在其他客户端发送给陌生人的消息
58+
};
5559

56-
MiraiEvent MiraiEventStr(const std::string& miraiEvent);
60+
MiraiEvent MiraiEventStr(const std::string& miraiEvent);
5761

58-
std::string MiraiEventStr(MiraiEvent miraiEvent);
62+
std::string MiraiEventStr(MiraiEvent miraiEvent);
5963

6064
}
6165

6266
// https://stackoverflow.com/questions/18837857/cant-use-enum-class-as-unordered-map-key
6367
namespace std {
64-
template <> struct hash<Cyan::MiraiEvent> {
65-
size_t operator() (const Cyan::MiraiEvent& t) const { return size_t(t); }
66-
};
68+
template <> struct hash<Cyan::MiraiEvent> {
69+
size_t operator() (const Cyan::MiraiEvent& t) const { return size_t(t); }
70+
};
6771
}
6872

6973
#endif // !mirai_cpp_events_events_name_hpp_H_
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#pragma once
2+
#ifndef mirai_cpp_events_StrangerSyncMessage_hpp_H_
3+
#define mirai_cpp_events_StrangerSyncMessage_hpp_H_
4+
5+
#include "mirai/third-party/nlohmann/json.hpp"
6+
#include "mirai/defs/QQType.hpp"
7+
#include "mirai/defs/MessageChain.hpp"
8+
#include "mirai/defs/Friend.hpp"
9+
#include "EventBase.hpp"
10+
11+
namespace Cyan
12+
{
13+
/**
14+
* \brief Bot在其他客户端发送给好友的消息
15+
*/
16+
class StrangerSyncMessage : public EventBase
17+
{
18+
public:
19+
Cyan::MessageChain MessageChain;
20+
Friend_t Subject;
21+
22+
static MiraiEvent GetMiraiEvent()
23+
{
24+
return MiraiEvent::StrangerSyncMessage;
25+
}
26+
27+
MessageId_t MessageId() const
28+
{
29+
return (this->MessageChain).MessageId();
30+
}
31+
32+
int64_t Timestamp() const
33+
{
34+
return (this->MessageChain).Timestamp();
35+
}
36+
37+
virtual bool Set(const json& j) override
38+
{
39+
this->MessageChain.Set(j["messageChain"]);
40+
Subject.Set(j["subject"]);
41+
return true;
42+
}
43+
virtual json ToJson() const override
44+
{
45+
json j = json::object();
46+
j["messageChain"] = this->MessageChain.ToJson();
47+
j["subject"] = this->Subject.ToJson();
48+
return j;
49+
}
50+
};
51+
}
52+
53+
#endif
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#pragma once
2+
#ifndef mirai_cpp_events_TempSyncMessage_hpp_H_
3+
#define mirai_cpp_events_TempSyncMessage_hpp_H_
4+
5+
#include "mirai/third-party/nlohmann/json.hpp"
6+
#include "mirai/defs/QQType.hpp"
7+
#include "mirai/defs/MessageChain.hpp"
8+
#include "mirai/defs/GroupMember.hpp"
9+
#include "EventBase.hpp"
10+
11+
namespace Cyan
12+
{
13+
/**
14+
* \brief Bot在其他客户端发送给群组的消息
15+
*/
16+
class TempSyncMessage : public EventBase
17+
{
18+
public:
19+
Cyan::MessageChain MessageChain;
20+
GroupMember Subject;
21+
22+
static MiraiEvent GetMiraiEvent()
23+
{
24+
return MiraiEvent::TempSyncMessage;
25+
}
26+
27+
MessageId_t MessageId() const
28+
{
29+
return (this->MessageChain).MessageId();
30+
}
31+
32+
int64_t Timestamp() const
33+
{
34+
return (this->MessageChain).Timestamp();
35+
}
36+
37+
virtual bool Set(const json& j) override
38+
{
39+
this->MessageChain.Set(j["messageChain"]);
40+
Subject.Set(j["subject"]);
41+
return true;
42+
}
43+
virtual json ToJson() const override
44+
{
45+
json j = json::object();
46+
j["messageChain"] = this->MessageChain.ToJson();
47+
j["subject"] = this->Subject.ToJson();
48+
return j;
49+
}
50+
};
51+
}
52+
53+
#endif

include/mirai/events/events.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
#include "TempMessage.hpp"
1010
#include "StrangerMessage.hpp"
1111
#include "OtherClientMessage.hpp"
12+
#include "FriendSyncMessage.hpp"
13+
#include "GroupSyncMessage.hpp"
14+
#include "TempSyncMessage.hpp"
15+
#include "StrangerSyncMessage.hpp"
1216
// 机器人相关事件
1317
#include "BotOnlineEvent.hpp"
1418
#include "BotOfflineEventActive.hpp"

0 commit comments

Comments
 (0)