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

Commit 2798b96

Browse files
committed
更新:支持群名片更改事件;
1 parent b94ffe2 commit 2798b96

File tree

5 files changed

+113
-2
lines changed

5 files changed

+113
-2
lines changed

examples/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ api_exe(MessageType)
2828
api_exe(FetchEventsViaHTTP)
2929
api_exe(GroupMemberInfo)
3030
api_exe(GroupNameChange)
31-
api_exe(GroupConfig)
31+
api_exe(GroupConfig)
32+
api_exe(MemberCardChange)

examples/MemberCardChange.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <iostream>
2+
#include <ctime>
3+
// 使用静态库必须要在引入 mirai.h 前定义这个宏
4+
#define MIRAICPP_STATICLIB
5+
#include <mirai.h>
6+
7+
int main()
8+
{
9+
using namespace std;
10+
using namespace Cyan;
11+
system("chcp 65001");
12+
MiraiBot bot("127.0.0.1", 539);
13+
while (true)
14+
{
15+
try
16+
{
17+
bot.Auth("INITKEY7A3O1a9v", 1589588851_qq);
18+
break;
19+
}
20+
catch (const std::exception& ex)
21+
{
22+
cout << ex.what() << endl;
23+
}
24+
MiraiBot::SleepSeconds(1);
25+
}
26+
cout << "成功登录 bot。" << endl;
27+
28+
29+
// 由于服务器并不会告知名片变动, 此事件只能由 mirai 在发现变动时才广播. 不要依赖于这个事件.
30+
bot.On<MemberCardChangeEvent>(
31+
[&](MemberCardChangeEvent e)
32+
{
33+
cout << e.Member.MemberName << "(" << e.Member.QQ.ToInt64() << ") 的群名片被修改了" << endl;
34+
cout << e.OriginName << ", " << e.CurrentName << endl;
35+
});
36+
37+
bot.EventLoop();
38+
return 0;
39+
}

include/events/events.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
// 群组相关事件
2020
#include "group_recall_event.hpp"
2121
#include "group_mute_all_event.hpp"
22+
#include "member_card_change_event.hpp"
2223
#include "member_join_request_event.hpp"
2324
#include "member_join_event.hpp"
2425
#include "member_leave_kick.hpp"
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#pragma once
2+
#ifndef mirai_cpp_events_member_card_change_hpp_H_
3+
#define mirai_cpp_events_member_card_change_hpp_H_
4+
5+
#include <nlohmann/json.hpp>
6+
#include "event_interface.hpp"
7+
#include "defs/group.hpp"
8+
#include "defs/group_member.hpp"
9+
10+
namespace Cyan
11+
{
12+
/**
13+
* \brief 群名片修改事件(由于服务器并不会告知名片变动, 此事件只能由 mirai 在发现变动时才广播. 不要依赖于这个事件.)
14+
*/
15+
class MemberCardChangeEvent : public EventBase
16+
{
17+
public:
18+
string OriginName;
19+
string CurrentName;
20+
GroupMember_t Member;
21+
GroupMember_t Operator;
22+
23+
static MiraiEvent GetMiraiEvent()
24+
{
25+
return MiraiEvent::MemberCardChangeEvent;
26+
}
27+
28+
bool OperatorIsBot() const
29+
{
30+
return operator_is_null_;
31+
}
32+
33+
virtual bool Set(const json& j) override
34+
{
35+
this->OriginName = j["origin"].get<string>();
36+
this->CurrentName = j["current"].get<string>();
37+
this->Member.Set(j["member"]);
38+
if (!j["operator"].is_null())
39+
{
40+
this->Operator.Set(j["operator"]);
41+
this->operator_is_null_ = false;
42+
}
43+
return true;
44+
}
45+
virtual json ToJson() const override
46+
{
47+
json j = json::object();
48+
j["type"] = "MemberCardChangeEvent";
49+
j["origin"] = this->OriginName;
50+
j["current"] = this->CurrentName;
51+
j["member"] = this->Member.ToJson();
52+
if (!operator_is_null_)
53+
j["operator"] = this->Operator.ToJson();
54+
else
55+
j["operator"] = nullptr;
56+
return j;
57+
}
58+
59+
private:
60+
bool operator_is_null_ = true;
61+
};
62+
63+
}
64+
65+
#endif // !mirai_cpp_events_member_card_change_hpp_H_

include/events/mirai_event.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ namespace Cyan
3535
BotLeaveEventActive, // Bot 主动离开群
3636
BotLeaveEventKick, // Bot 被剔出群
3737
Message, // 通用消息事件
38-
BotInvitedJoinGroupRequestEvent // Bot被邀请入群申请
38+
BotInvitedJoinGroupRequestEvent, // Bot被邀请入群申请
39+
MemberCardChangeEvent // 群成员群名片被修改事件
3940
};
4041

4142
inline MiraiEvent MiraiEventStr(const std::string& miraiEvent)
@@ -65,6 +66,7 @@ namespace Cyan
6566
if (miraiEvent == "GroupNameChangeEvent") return MiraiEvent::GroupNameChangeEvent;
6667
if (miraiEvent == "GroupMuteAllEvent") return MiraiEvent::GroupMuteAllEvent;
6768
if (miraiEvent == "BotInvitedJoinGroupRequestEvent") return MiraiEvent::BotInvitedJoinGroupRequestEvent;
69+
if (miraiEvent == "MemberCardChangeEvent") return MiraiEvent::MemberCardChangeEvent;
6870
return MiraiEvent::Default;
6971
}
7072

@@ -133,6 +135,9 @@ namespace Cyan
133135
case Cyan::MiraiEvent::BotInvitedJoinGroupRequestEvent:
134136
result = "BotInvitedJoinGroupRequestEvent";
135137
break;
138+
case Cyan::MiraiEvent::MemberCardChangeEvent:
139+
result = "MemberCardChangeEvent";
140+
break;
136141
default:
137142
result = "Default";
138143
break;

0 commit comments

Comments
 (0)