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

4. 事件 设置和获取类型

DavidMeow edited this page Nov 28, 2022 · 2 revisions

本章节主要讨论生成的事件和一些通用事件的处理方案


4.0 端类型

  • 发送的信息例如, 已连接, 已断开, 正在重试,出错..等, 都是由日志直接打印*
  • p.s.要注意, 如果您的Mirai后端部署于不同于端的位置, 您可能和后端断连时Mirai并未下线.

其事件定义在 ./Client/ClientEvent.cs 文件的 /*--Type of Service--*/行后

签名 参数 用途
_OnServeiceConnected string 接收到WS连接成功信息
_OnServeiceError Exception 接收到WS错误信息
_OnServiceDropped string 接收到WS断连信息
_OnClientOnlineEvent OtherClientOnlineEvent 接收到其他客户端上线通知
_OnOtherClientOfflineEvent OtherClientOfflineEvent 接收到其他客户端下线通知
_OnCommandExecutedEvent CommandExecutedEvent 接收到后端传送命令执行
_OnUnknownEvent string 接收到后端传送未知指令

4.1 信息事件类型

  • 信息事件通知类型如 接收到好友私聊,群聊,临时信息,陌生人...等
  • 均由事件推送,您可以订阅相关回调函数实现信息接收后的具体逻辑

其事件定义在 ./Client/ClientEvent.cs 文件的 /*--Type of Message--*/ 行后

签名 参数 用途
OnFriendMessageReceive FriendMessageSender, Message[] 接收到好友私聊信息
OnGroupMessageReceive GroupMessageSender, Message[] 接收到群消息
OnTempMessageReceive TempMessageSender, Message[] 接收到临时信息
OnStrangerMessageReceive StrangerMessageSender, Message[] 接收到陌生人消息
OnOtherMessageReceive OtherClientMessageSender, Message[] 接收到其他类型消息
OnFriendSyncMessageReceive FriendSyncMessageSender, Message[] 接收到好友同步消息
OnGroupSyncMessageReceive GroupSyncMessageSender, Message[] 接收到群同步消息
OnTempSyncMessageReceive TempSyncMessageSender, Message[] 接收到临时同步消息
OnStrangerSyncMessageReceive StrangerSyncMessageSender, Message[] 接收到陌生人同步消息

4.2 仅通知类型

  • 端通知的通知类型如 客户端下线,Bot被邀请加入群聊,客户端网络无法连接(内网程序)...等
  • 均由事件推送,并不会打印日志,除非您在构造时设置 Client.EventDebug = true*

其事件定义在 ./Client/ClientEvent.cs 文件的 /*--Type of Event--*/ 行后

Mirai后台证实类

签名 参数 说明
OnEventBotOnlineEvent BotOnlineEvent Mirai后台证实QQ已上线
OnEventBotOfflineEventActive BotOfflineEventActive Mirai后台证实QQ主动离线
OnEventBotOfflineEventForce BotOfflineEventForce Mirai后台证实QQ被挤下线
OnEventBotOfflineEventDropped BotOfflineEventDropped Mirai后台证实QQ由于网络问题掉线
OnEventBotReloginEvent BotReloginEvent Mirai后台证实QQ重新连接完毕

Bot类

签名 参数 说明
OnEventBotGroupPermissionChangeEvent BotGroupPermissionChangeEvent Bot在群里的权限被改变了
OnEventBotMuteEvent BotMuteEvent Bot被禁言
OnEventBotUnmuteEvent BotUnmuteEvent Bot被解除禁言
OnEventBotJoinGroupEvent BotJoinGroupEvent Bot加入新群
OnEventBotLeaveEventActive BotLeaveEventActive Bot主动退群
OnEventBotLeaveEventKick BotLeaveEventKick Bot被群踢出
OnEventNudgeEvent NudgeEvent Bot被戳一戳
OnEventBotInvitedJoinGroupRequestEvent BotInvitedJoinGroupRequestEvent Bot被邀请入群申请

好友相关类

签名 参数 说明
OnEventNewFriendRequestEvent NewFriendRequestEvent 接收到新好友请求
OnEventFriendInputStatusChangedEvent FriendInputStatusChangedEvent 好友的输入状态改变
OnEventFriendNickChangedEvent FriendNickChangedEvent 好友的昵称改变
OnEventFriendRecallEvent FriendRecallEvent 好友撤回信息

群相关类

签名 参数 说明
OnEventGroupNameChangeEvent GroupNameChangeEvent 群名改变信息
OnEventGroupEntranceAnnouncementChangeEvent GroupEntranceAnnouncementChangeEvent 某个群的入群公告改变
OnEventGroupMuteAllEvent GroupMuteAllEvent 群全员禁言
OnEventGroupAllowAnonymousChatEvent GroupAllowAnonymousChatEvent 某个群更改了群匿名聊天状态
OnEventGroupAllowConfessTalkEvent GroupAllowConfessTalkEvent 某个群更改了坦白说的状态
OnEventGroupAllowMemberInviteEvent GroupAllowMemberInviteEvent 某个群员邀请好友加群

群员相关类

签名 参数 说明
OnEventGroupRecallEvent GroupRecallEvent 某群员撤回信息
OnEventMemberJoinEvent MemberJoinEvent 某群有新人入群了
OnEventMemberLeaveEventKick MemberLeaveEventKick 某群把某人踢出了(不是Bot)
OnEventMemberLeaveEventQuit MemberLeaveEventQuit 某群有成员主动退群了
OnEventCardChangeEvent MemberCardChangeEvent 某群有人的群名片改动了
OnEventSpecialTitleChangeEvent MemberSpecialTitleChangeEvent 某群群主改动了某人头衔
OnEventPermissionChangeEvent MemberPermissionChangeEvent 某群有某个成员权限被改变了(不是Bot)
OnEventMemberMuteEvent MemberMuteEvent 某群的某个群成员被禁言
OnEventMemberUnmuteEvent MemberUnmuteEvent 某群的某个群成员被取消禁言
OnEventMemberHonorChangeEvent MemberHonorChangeEvent 某群的某个成员的群称号改变
OnEventMemberJoinRequestEvent MemberJoinRequestEvent 接收到用户入群申请

4.3 需要决断类型

在仅通知类型内,有些需要我们做出决断,例如是否加群等
下例便展示了 只要符合某条件的(本例中为邀请信息为123456) 则加入,其他拒绝

//下列参数 c 为要发送的端,而且必须是接收这个信息的端
//老写法[通用写法] (需要 using MeowMiraiLib.Msg;)
c.OnEventBotInvitedJoinGroupRequestEvent += (s) =>
{
    if(s.message == "123456") //某个条件
    {
        new Resp_botInvitedJoinGroupRequestEvent(s.eventId, s.fromId, s.groupId, 0, "").Send(c); //0为同意
    }
    else
    {
        new Resp_botInvitedJoinGroupRequestEvent(s.eventId, s.fromId, s.groupId, 1, "").Send(c); //1为同意
    }
};
//扩展写法 (需要 using MeowMiraiLib.Event;)
c.OnEventBotInvitedJoinGroupRequestEvent += (s) =>
{
    if(s.message == "123456") //某个条件
    {
        s.Grant(c); 
    }
    else
    {
        s.Deny(c);
    }
};
//你也可以接受回值查看是否成功
//.....
var (t,j) = s.Grant(c); 
Console.WriteLine(j);
//.....

4.4 获取类型

  • 目前用户定义类型事件已经合并到返回值中处理, 您也可以尝试重写暴露出来的Websocket端(client.ws.DataReceived事件)
  • 具体可以获取好友列表, 群列表等

如下:

var bp = new BotProfile().Send(c); //获取Bot资料
var fp = new FriendProfile(qqnumber).Send(c);//获取好友资料
var mp = new MemberProfile(qqgroup,qqnumber).Send(c);//获取群员资料
var up = new UserProfile(qqnumber).Send(c);//获取用户资料

Console.WriteLine(bp.ToString());
Console.WriteLine(fp.ToString());
Console.WriteLine(mp.ToString());
Console.WriteLine(up.ToString());

4.5 设置类型

  • 目前本类型可以设置群公告 (8.0.0 更新)
//获取群公告&&推送群公告
var k = new Anno_list(qqgroup).Send(c); 
k[1].Delete(c);//删除群公告1 (快速写法)
var k1 = new Anno_publish(qqgroup, "Bot 公告推送").Send(c);
var k2 = new Anno_publish(qqgroup, "Bot 带图公告推送实验",imageUrl: "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png").Send(c);

4.6 扩展

  • 您可以扩展还没有更新但生效的消息 / 事件类型
  1. 所有消息都继承自 Message.cs 的 Message 类,
  2. 所有事件都继承自 Event.cs 的 MiraiEvent 类,
  3. 继承时检查是否符合其他已经继承类的特性(字段/属性)
public class NewMessageType : Message //..XXXMsg
{
    //...字段(属性)

    //...方法
}
public class NewEventType : MiraiEvent //..XXXEvent
{
    //...字段(属性)

    //...方法
}