1010#include < functional>
1111#include < nlohmann/json.hpp>
1212#include " typedef.hpp"
13+ #include " FriendMessage.h"
1314#include " GroupMessage.h"
1415#include " message_chain.hpp"
15- #include < iostream>
1616using std::string;
1717using std::runtime_error;
1818using std::vector;
@@ -22,16 +22,13 @@ using nlohmann::json;
2222
2323namespace Cyan
2424{
25-
25+ typedef std::function< void (FriendMessage)> FriendMessageProcesser;
2626 typedef std::function<void (GroupMessage)> GroupMessageProcesser;
2727
2828 class MiraiBot
2929 {
3030 public:
31- MiraiBot ()
32- {
33- groupMessageProcesser_ = [](GroupMessage) {};
34- }
31+ MiraiBot () = default ;
3532 ~MiraiBot () = default ;
3633 bool Auth (const string& authKey, QQ_t qq)
3734 {
@@ -400,15 +397,18 @@ namespace Cyan
400397
401398 }
402399
403- void OnFriendMessageReceived ();
400+ void OnFriendMessageReceived (FriendMessageProcesser friendMessageProcesser)
401+ {
402+ friendMessageProcesser_ = friendMessageProcesser;
403+ }
404404 void OnGroupMessageReceived (GroupMessageProcesser groupMessageProcesser)
405405 {
406406 groupMessageProcesser_ = groupMessageProcesser;
407407 }
408408
409409 void EventLoop ()
410410 {
411- unsigned count_per_loop = 10 ;
411+ unsigned count_per_loop = 20 ;
412412 unsigned time_interval = 100 ;
413413 while (true )
414414 {
@@ -476,9 +476,6 @@ namespace Cyan
476476 return false ;
477477 }
478478
479-
480-
481-
482479 unsigned int FetchMessagesAndEvents (unsigned int count = 10 )
483480 {
484481 stringstream api_url;
@@ -501,13 +498,20 @@ namespace Cyan
501498 for (const auto & ele : reJson)
502499 {
503500 MiraiEvent type = MiraiEventStr (ele[" type" ].get <string>());
504- if (type == MiraiEvent::GroupMessage)
501+ if (groupMessageProcesser_ && type == MiraiEvent::GroupMessage)
505502 {
506503 GroupMessage gm;
507504 gm.Set (ele);
508505 std::async (std::launch::async, [&]() { groupMessageProcesser_ (gm); });
509506 continue ;
510507 }
508+ if (friendMessageProcesser_ && type == MiraiEvent::FriendMessage)
509+ {
510+ FriendMessage fm;
511+ fm.Set (ele);
512+ std::async (std::launch::async, [&]() { friendMessageProcesser_ (fm); });
513+ continue ;
514+ }
511515
512516 received_count++;
513517 }
@@ -521,6 +525,7 @@ namespace Cyan
521525 string sessionKey_;
522526 string api_url_prefix_ = " http://127.0.0.1:8080" ;
523527 GroupMessageProcesser groupMessageProcesser_;
528+ FriendMessageProcesser friendMessageProcesser_;
524529
525530 };
526531} // namespace Cyan
0 commit comments