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

Commit 7cf42de

Browse files
authored
Merge pull request #15 from cyanray/dev/cyanray
特殊处理某些事件operator可能为null的情况;
2 parents 171851b + b2a8b07 commit 7cf42de

File tree

7 files changed

+95
-48
lines changed

7 files changed

+95
-48
lines changed

examples/Mute.cpp

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,66 +26,78 @@ int main()
2626

2727
bot.On<MemberMuteEvent>([&](MemberMuteEvent e)
2828
{
29+
// 机器人的操作不做处理
30+
if (e.OperatorIsBot())
31+
{
32+
cout << "机器人禁言操作" << endl;
33+
return;
34+
}
2935
auto mc = MessageChain()
3036
.Plain("恭喜老哥 " + e.Member.MemberName + " 喜提禁言套餐!");
3137
bot.SendMessage(e.Member.Group.GID, mc);
3238
});
3339

3440
bot.On<MemberUnmuteEvent>([&](MemberUnmuteEvent e)
3541
{
42+
// 机器人的操作不做处理
43+
if (e.OperatorIsBot())
44+
{
45+
cout << "机器人解除禁言操作" << endl;
46+
return;
47+
}
3648
auto mc = MessageChain()
3749
.Plain("恭喜老哥 " + e.Member.MemberName + " 提前出狱!");
3850
bot.SendMessage(e.Member.Group.GID, mc);
3951
});
4052

41-
bool res = false;
42-
res = bot.MuteAll(1029259687_gid);
43-
if (res)
53+
try
4454
{
55+
bot.MuteAll(1029259687_gid);
4556
cout << "全体禁言成功!" << endl;
4657
}
47-
else
58+
catch (const exception& ex)
4859
{
49-
cout << "全体禁言失败" << endl;
60+
cout << "全体禁言失败: " << ex.what() << endl;
5061
}
5162

63+
5264
MiraiBot::SleepSeconds(5);
5365

54-
res = bot.UnMuteAll(1029259687_gid);
55-
if (res)
66+
try
5667
{
68+
bot.UnMuteAll(1029259687_gid);
5769
cout << "解除全体禁言成功!" << endl;
5870
}
59-
else
71+
catch (const exception& ex)
6072
{
61-
cout << "解除全体禁言失败" << endl;
73+
cout << "解除全体禁言失败: " << ex.what() << endl;
6274
}
6375

64-
res = bot.Mute(1029259687_gid, 211795583_qq, 60);
65-
if (res)
76+
try
6677
{
67-
cout << "禁言群员成功!" << endl;
78+
bot.Mute(1029259687_gid, 211795583_qq, 60);
79+
cout << "禁言群成员成功!" << endl;
6880
}
69-
else
81+
catch (const exception& ex)
7082
{
71-
cout << "禁言群员失败" << endl;
83+
cout << "禁言群成员失败: " << ex.what() << endl;
7284
}
7385

86+
7487
MiraiBot::SleepSeconds(5);
7588

76-
res = bot.UnMute(1029259687_gid, 211795583_qq);
77-
if (res)
89+
try
7890
{
79-
cout << "解除禁言群员成功!" << endl;
91+
bot.UnMute(1029259687_gid, 211795583_qq);
92+
cout << "解除禁言群成员成功!" << endl;
8093
}
81-
else
94+
catch (const exception& ex)
8295
{
83-
cout << "解除禁言群员失败" << endl;
96+
cout << "解除禁言群成员失败: " << ex.what() << endl;
8497
}
8598

8699

87100
bot.EventLoop();
88101

89-
90102
return 0;
91103
}

examples/RecallEvent.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,19 @@ int main()
2626

2727

2828
bot.On<GroupRecallEvent>(
29-
[&](GroupRecallEvent gm)
29+
[&](GroupRecallEvent e)
3030
{
3131
try
3232
{
33-
auto mc = "刚刚有人撤回了: " + bot.GetGroupMessageFromId(gm.MessageId).MessageChain;
34-
bot.SendMessage(gm.Group.GID, mc);
33+
if(e.OperatorIsBot())
34+
{
35+
cout << "不处理原因:bot 撤回了一条消息" << endl;
36+
return;
37+
}
38+
auto mc = "刚刚有人撤回了: " + bot.GetGroupMessageFromId(e.MessageId).MessageChain;
39+
auto mid = bot.SendMessage(e.Group.GID, mc);
40+
MiraiBot::SleepSeconds(5);
41+
bot.Recall(mid);
3542
}
3643
catch (const std::exception& ex)
3744
{
@@ -40,12 +47,12 @@ int main()
4047
});
4148

4249
bot.On<FriendRecallEvent>(
43-
[&](FriendRecallEvent gm)
50+
[&](FriendRecallEvent e)
4451
{
4552
try
4653
{
47-
auto mc = "刚刚有人撤回了: " + bot.GetFriendMessageFromId(gm.MessageId).MessageChain;
48-
bot.SendMessage(gm.AuthorQQ, mc);
54+
auto mc = "刚刚有人撤回了: " + bot.GetFriendMessageFromId(e.MessageId).MessageChain;
55+
bot.SendMessage(e.AuthorQQ, mc);
4956
}
5057
catch (const std::exception& ex)
5158
{

include/events/group_name_change.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
#define mirai_cpp_events_group_name_change_hpp_H_
44

55
#include <nlohmann/json.hpp>
6-
#include "defs/qq_types.hpp"
6+
#include "event_interface.hpp"
77
#include "defs/group.hpp"
88
#include "defs/group_member.hpp"
9-
#include "event_interface.hpp"
109

1110
namespace Cyan
1211
{
@@ -48,7 +47,10 @@ namespace Cyan
4847
j["origin"] = this->OriginName;
4948
j["current"] = this->CurrentName;
5049
j["group"] = this->Group.ToJson();
51-
j["operator"] = this->Operator.ToJson();
50+
if (!operator_is_null_)
51+
j["operator"] = this->Operator.ToJson();
52+
else
53+
j["operator"] = nullptr;
5254
return j;
5355
}
5456

include/events/group_recall_event.hpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
#define mirai_cpp_events_group_recall_event_hpp_H_
44

55
#include <nlohmann/json.hpp>
6-
#include "defs/qq_types.hpp"
7-
#include "defs/serializable.hpp"
8-
#include "defs/group_member.hpp"
96
#include "event_interface.hpp"
7+
#include "defs/group_member.hpp"
8+
#include "defs/qq_types.hpp"
109

1110
namespace Cyan
1211
{
@@ -25,13 +24,22 @@ namespace Cyan
2524
return MiraiEvent::GroupRecallEvent;
2625
}
2726

27+
bool OperatorIsBot() const
28+
{
29+
return operator_is_null_;
30+
}
31+
2832
virtual bool Set(const json& j) override
2933
{
3034
this->Time = j["time"].get<int64_t>();
3135
this->AuthorQQ = (QQ_t)j["authorId"].get<int64_t>();
3236
this->MessageId = j["messageId"].get<int64_t>();
3337
this->Group.Set(j["group"]);
34-
this->Operator.Set(j["operator"]);
38+
if (!j["operator"].is_null())
39+
{
40+
this->Operator.Set(j["operator"]);
41+
this->operator_is_null_ = false;
42+
}
3543
return true;
3644
}
3745
virtual json ToJson() const override
@@ -42,9 +50,14 @@ namespace Cyan
4250
j["authorId"] = (int64_t)this->AuthorQQ;
4351
j["messageId"] = this->MessageId;
4452
j["group"] = this->Group.ToJson();
45-
j["operator"] = this->Operator.ToJson();
53+
if (!operator_is_null_)
54+
j["operator"] = this->Operator.ToJson();
55+
else
56+
j["operator"] = nullptr;
4657
return j;
4758
}
59+
private:
60+
bool operator_is_null_ = true;
4861
};
4962

5063
}

include/events/member_leave_kick.hpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
#define mirai_cpp_events_member_leave_kick_event_hpp_H_
44

55
#include <nlohmann/json.hpp>
6-
#include "defs/qq_types.hpp"
7-
#include "defs/serializable.hpp"
8-
#include "defs/group_member.hpp"
96
#include "event_interface.hpp"
7+
#include "defs/group_member.hpp"
108

119
namespace Cyan
1210
{
@@ -22,21 +20,34 @@ namespace Cyan
2220
return MiraiEvent::MemberLeaveEventKick;
2321
}
2422

23+
bool OperatorIsBot() const
24+
{
25+
return operator_is_null_;
26+
}
27+
2528
virtual bool Set(const json& j) override
2629
{
2730
this->Member.Set(j["member"]);
28-
this->Operator.Set(j["operator"]);
31+
if (!j["operator"].is_null())
32+
{
33+
this->Operator.Set(j["operator"]);
34+
this->operator_is_null_ = false;
35+
}
2936
return true;
3037
}
3138
virtual json ToJson() const override
3239
{
3340
json j = json::object();
3441
j["type"] = "MemberLeaveEventKick";
3542
j["member"] = this->Member.ToJson();
36-
j["operator"] = this->Operator.ToJson();
43+
if (!operator_is_null_)
44+
j["operator"] = this->Operator.ToJson();
45+
else
46+
j["operator"] = nullptr;
3747
return j;
3848
}
39-
49+
private:
50+
bool operator_is_null_ = true;
4051
};
4152

4253
}

include/events/member_mute_event.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
#define mirai_cpp_events_member_mute_event_hpp_H_
44

55
#include <nlohmann/json.hpp>
6-
#include "defs/qq_types.hpp"
7-
#include "defs/serializable.hpp"
8-
#include "defs/group_member.hpp"
96
#include "event_interface.hpp"
7+
#include "defs/group_member.hpp"
108

119
namespace Cyan
1210
{
@@ -45,7 +43,10 @@ namespace Cyan
4543
j["type"] = "MemberMuteEvent";
4644
j["durationSeconds"] = this->DurationSeconds;
4745
j["member"] = this->Member.ToJson();
48-
j["operator"] = this->Operator.ToJson();
46+
if (!operator_is_null_)
47+
j["operator"] = this->Operator.ToJson();
48+
else
49+
j["operator"] = nullptr;
4950
return j;
5051
}
5152

include/events/member_unmute_event.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
#define mirai_cpp_events_member_unmute_event_hpp_H_
44

55
#include <nlohmann/json.hpp>
6-
#include "defs/qq_types.hpp"
7-
#include "defs/serializable.hpp"
8-
#include "defs/group_member.hpp"
96
#include "event_interface.hpp"
7+
#include "defs/group_member.hpp"
108

119
namespace Cyan
1210
{
@@ -42,7 +40,10 @@ namespace Cyan
4240
json j = json::object();
4341
j["type"] = "MemberUnmuteEvent";
4442
j["member"] = this->Member.ToJson();
45-
j["operator"] = this->Operator.ToJson();
43+
if (!operator_is_null_)
44+
j["operator"] = this->Operator.ToJson();
45+
else
46+
j["operator"] = nullptr;
4647
return j;
4748
}
4849

0 commit comments

Comments
 (0)