QQ事件
事件通知支持基本的qq事件,包括聊天消息和系统消两了部分, 涵盖了好友消息、群消息、讨论组消息、各种请求等。view in github
如果您的插件需要使用QQ事件的功能,需要实现 IRobotPlugin 接口。具体操作如下:
1、需要在你的项目中的 Manifest.xml 文件中加入 'LiangdunSdk.QQEvent' 的扩展点 。以裂变插件为例,如下:
<Extension Point="LiangdunSdk.QQEvent">
<QQEvent Type="Fission.FissionPlugin" />
</Extension>
其中LiangdunSdk.QQEvent为事件扩展点,Fission为你实现IRobotPlugin接口类的命名空间,FissionPlugin为你实现IRobotPlugin的类。
2、你需要实现IRobotPlugin接口的所有方法。
IRobotPlugin 接口
上面提到,如果要使用事件通知功能,需要实现IRobotPlugin接口,下面对IRobotPlugin进行详细说明。
当有事件到达时,会调用所有扩展了LiangdunSdk.QQEvent点的插件的IRobotPlugin实现类的相应函数,需要注意的是这个调用是轮询的, 即是内部使用了 Akka 这样的并发框架进行处理, 但也无法控制对应函数处理时间过长(阻塞)的问题, 所以在实现你的 IRobotPlugin 接口时,如果耗时过长(如访问服务器)请使用代理或者新的线程来处理!
IRobotPlugin 的全局名称: LiangdunSdk.QQCore.Interfaces.IRobotPlugin
聊天消息
QQFriendMsgArrive 好友消息
函数原型:
void QQFriendMsgArrive(uint uin, uint friendUin, string msg);
当qq有好友消息到达的时候会调用这个函数。参数解析如下:
/// <summary>
/// 当好友消息到达时调用
/// </summary>
/// <param name="uin"> 机器人qq号 </param>
/// <param name="friendUin"> 好友qq号 </param>
/// <param name="msg"> 消息内容 </param>
void QQFriendMsgArrive(uint uin, uint friendUin, string msg);
注: 当前不支持接收图片、表情!
StrangerMsgArrive 陌生人消息
函数原型:
void StrangerMsgArrive(uint uin, uint strangerUin, string msg);
当有陌生人聊天消息到达时会调用这个函数。参数解析如下:
/// <summary>
/// 陌生人消息到达时调用
/// </summary>
/// <param name="uin"> 机器人qq号 </param>
/// <param name="strangerUin"> 陌生人qq号 </param>
/// <param name="msg"> 消息内容 </param>
void StrangerMsgArrive(uint uin, uint strangerUin, string msg);
注:
当前不支持接收图片、表情!
这里的陌生人是指群成员、讨论组成员且非好友关系的qq!
TempSessionMsgArrive 临时群消息
函数原型:
void TempSessionMsgArrive(uint uin, uint clusterCode, uint senderUin, string msg);
/// <summary>
/// 来自群或者讨论组的临时会话消息时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">发送者qq号</param>
/// <param name="msg">消息内容</param>
void TempSessionMsgArrive(uint uin, uint clusterCode, uint senderUin, string msg);
注:
当前不支持接收图片、表情!
当前测试时还没有收到过这种事件
ClusterMsgArrive 普通群消息
函数原型:
void ClusterMsgArrive(uint uin, uint clusterCode, uint senderUin, string msg, Object images, uint senderId);
当有普通群消息到达时调用,参数解析如下:
/// <summary>
/// 群消息到达时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode"> 群号 </param>
/// <param name="senderUin"> 发送者qq号 </param>
/// <param name="msg">消息</param>
/// <param name="images"> 图片列表 </param>
/// <param name="senderId"> 发送者ID, 不是qq号,你可以根据id,利用 QQCoreServiceImpl.Convert2Images(uint uin, Object images, uint senderId) 获取需要的图片对象 </param>
void ClusterMsgArrive(uint uin, uint clusterCode, uint senderUin, string msg, Object images, uint senderId);
注:
对于 images 和 senderId 参数, 你可以利用他们获取图片列表,只需要调用 QQCoreServiceImpl.Convert2Images(uint uin, Object images, uint senderId)。需要注意的是,会请求qq服务器下载图片!
DiscussMsgArrive 讨论组消息
函数原型:
void DiscussMsgArrive(uint uin, uint discussId, uint senderUin, string msg);
当有讨论组消息到达时调用,参数解析如下:
/// <summary>
/// 讨论组消息到达时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="discussId">讨论组号</param>
/// <param name="senderUin">发送者qq号</param>
/// <param name="msg">消息内容</param>
void DiscussMsgArrive(uint uin, uint discussId, uint senderUin, string msg);
注:
当前不支持讨论组图片获取!
系统消息
RobotOffLine QQ下线
函数原型:
void RobotOffLine(uint uin, DateTime time);
当机器人下线的时候回产生这个事件,这个事件你可以忽略,参数解析如下:
/// <summary>
/// 机器人下线时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="time">下线时间</param>
void RobotOffLine(uint uin, DateTime time);
RobotAfterLogin 在执行登录操作后返回后调用
函数原型:
void RobotAfterLogin(uint uin, RobotLoginStatus status);
在执行登录操作后返回后产生这个事件,但并不代表此次登录操作后,被操作的qq已经在线了!
/// <summary>
/// 机器人进行登录后调用
/// </summary>
/// <param name="uin"> 登录的机器人 </param>
/// <param name="status"> qq的状态 </param>
RobotCrowedOffLine qq被挤下线时调用
函数原型:
void RobotCrowedOffLine(uint uin);
登录的qq在别的客户端登录后产生这个事件,此时qq已经被挤下线了。
/// <summary>
/// 机器人被挤下线
/// </summary>
/// <param name="uin"> 被挤下线的qq </param>
void RobotCrowedOffLine(uint uin);
SomeOneRequestAddMe 请求加好友
函数原型:
void SomeOneRequestAddMe(uint uin, uint senderUin, string msg);
当有其他人请求加机器人为好友的时候调用,参数解析:
/// <summary>
/// 某人请求加机器人为好友时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="senderUin">请求者</param>
/// <param name="msg">留言</param>
void SomeOneRequestAddMe(uint uin, uint senderUin, string msg);
SomeOneAgreedAddedMe 他人同意加机器人为好友
函数原型:
void SomeOneAgreedAddedMe(uint uin, uint senderUin);
在机器人发出加友请求后,当他人同意加机器人为好友时调用,参数解析:
/// <summary>
/// 机器人发出邀请后,对方同意了加机器人为好友时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="senderUin">同意者</param>
void SomeOneAgreedAddedMe(uint uin, uint senderUin);
SomeOneRejectAddedMe 他人拒绝加机器人为好友
函数原型:
void SomeOneRejectAddedMe(uint uin, uint senderUin, string msg);
在机器人发出加友请求后,当他人拒绝加机器人为好友时调用,参数解析:
/// <summary>
/// 机器人发出邀请后,对方拒绝了加机器人为好友时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="senderUin">拒绝者</param>
/// <param name="msg">拒绝理由</param>
void SomeOneRejectAddedMe(uint uin, uint senderUin, string msg);
SomeOneRequestJoinCluster 某人请求加入机器人管理的群
函数原型:
void SomeOneRequestJoinCluster(uint uin, uint clusterCode, uint senderUin, byte[] token, string msg);
当某人请求加入机器人管理的群的时候调用,参数解析:
/// <summary>
/// 有人请求加入机器人管理的群时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">请求者</param>
/// <param name="token"> 验证 </param>
/// <param name="msg">留言</param>
void SomeOneRequestJoinCluster(uint uin, uint clusterCode, uint senderUin, byte[] token, string msg);
注:
在产生这个事件后,如果想允许或者拒绝请求时,可以这样:
if (token == null) ret = QQCoreServiceImpl.AllowJoinCluster(uin, clusterCode, senderUin);
else ret = QQCoreServiceImpl.AllowJoinCluster(uin, clusterCode, senderUin, token, true, "");
SomeOneJoinClusterByOtherMem 某人被群成员邀请入群
函数原型:
void SomeOneJoinClusterByOtherMem(uint uin, uint clusterCode, uint senderUin, uint operateUin, byte[] token);
当群成员邀请某人加入群,并且被邀请者同意时调用,参数解析:
/// <summary>
/// 其他成员邀请他人入群, 收到这个事件时,那个人已经同意加入群, 但还没有被管理员同意加入
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">邀请者</param>
/// <param name="operateUin">受邀请的人</param>
void SomeOneJoinClusterByOtherMem(uint uin, uint clusterCode, uint senderUin, uint operateUin, byte[] token);
SomeOneJoinClusterByOtherAdmin 其他管理员邀请某人入群
函数原型:
void SomeOneJoinClusterByOtherAdmin(uint uin, uint clusterCode, uint senderUin, uint operateUin);
当其他管理员邀请某人加入群,被邀请人同意时调用(这个时候被邀请者已经成为群成员了),参数解析:
/// <summary>
/// 其他管理员邀请他人入群, 收到这个事件时,这个人已经入群了
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">邀请他人的人</param>
/// <param name="operateUin">受邀请的人</param>
void SomeOneJoinClusterByOtherAdmin(uint uin, uint clusterCode, uint senderUin, uint operateUin);
SomeOneAgreedJoinClusterByOtherAdmin 其他管理员同意某人入群
函数原型:
void SomeOneAgreedJoinClusterByOtherAdmin(uint uin, uint clusterCode, uint senderUin, uint operateUin);
当其他管理员同意某人入群请求时调用,参数解析:
/// <summary>
/// 其他成员邀请某人加入某群时,其他管理员同意让其加入群
/// 收到这条消息时,此人已经入群了
/// </summary>
/// <param name="uin"> 机器人qq </param>
/// <param name="clusterCode"> 群号 </param>
/// <param name="senderUin"> 同意的管理员 </param>
/// <param name="operateUin"> 请求者 </param>
void SomeOneAgreedJoinClusterByOtherAdmin(uint uin, uint clusterCode, uint senderUin, uint operateUin);
SomeOneInviteMeJoinCluster 某人邀请机器人加某群
函数原型:
void SomeOneInviteMeJoinCluster(uint uin, uint clusterCode, uint senderUin);
当其他人邀请机器人加入某群时调用,参数解析:
/// <summary>
/// 其他好友邀请机器人(我)加入某群
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">邀请机器人的人</param>
void SomeOneInviteMeJoinCluster(uint uin, uint clusterCode, uint senderUin);
AddedMeIntoCluster 机器人被加入到某群
函数原型:
void AddedMeIntoCluster(uint uin, uint clusterCode);
当机器人被加入到某个群时调用,此时机器人已经是群成员了,参加解析:
/// <summary>
/// 通知机器人已被加入到一个群时调用, 此时机器人已经是群的成员了
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
void AddedMeIntoCluster(uint uin, uint clusterCode);
注:
底层协议无法获取到是谁同意了机器人入群的
SomeOneAgreedJoinCluster 被邀请者同意入群
函数原型:
void SomeOneAgreedJoinCluster(uint uin, uint clusterCode, uint senderUin);
当机器人邀请某人入群,被邀请者同意入群时调用此函数。需要注意的是,如果机器人是普通群成员,即使被邀请者同意了入群,但还是需要群管理员同意才能成为群成员。
如果机器人是管理员或者拥有者,收到这个消息时,被邀请者已经是群成员了。
参数解析:
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">同意加入群的人, 被邀请者</param>
void SomeOneAgreedJoinCluster(uint uin, uint clusterCode, uint senderUin);
SomeOneRejectJoinCluster 机器人发出的入群邀请被拒绝
函数原型:
void SomeOneRejectJoinCluster(uint uin, uint clusterCode, uint senderUin, string msg);
当机器人发出加群邀请后, 被邀请者拒绝了邀请后调用,参数解释:
/// <summary>
/// 机器人发出邀请后,对方拒绝加入群
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">拒绝加入群的人, 被邀请者</param>
void SomeOneRejectJoinCluster(uint uin, uint clusterCode, uint senderUin, string msg);
DeleteMeFromCluster 机器人被踢
函数原型:
void DeleteMeFromCluster(uint uin, uint clusterCode, uint senderUin);
当确认被管理员移除出某个群时调用,参数解析:
/// <summary>
/// 机器人被管理员移除出某个群时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">删机器人的管理员</param>
void DeleteMeFromCluster(uint uin, uint clusterCode, uint senderUin);
MemberDeleteByAdmin 群成员被管理员踢了
函数原型:
void MemberDeleteByAdmin(uint uin, uint clusterCode, uint senderUin, uint operateUin);
当某个群成员被踢了时调用,参数解析:
/// <summary>
/// 某人被管理踢了时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">删人的管理员</param>
/// <param name="operateUin">被删的成员</param>
void MemberDeleteByAdmin(uint uin, uint clusterCode, uint senderUin, uint operateUin);
注:
需要注意的是, 能收到群成员被踢的消息事件的只有群管理员和群主。
MemberQuitCluster 成员退群
函数原型:
void MemberQuitCluster(uint uin, uint clusterCode, uint operateUin);
当某个群成员退群时调用,参数解析:
/// <summary>
/// 成员退群时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="operateUin">退群的人</param>
void MemberQuitCluster(uint uin, uint clusterCode, uint operateUin);
DissolveCluster 某群被解散
函数原型:
void DissolveCluster(uint uin, uint clusterCode);
当某个群被解散时调用,参数解析:
/// <summary>
/// 某群被解散时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
void DissolveCluster(uint uin, uint clusterCode);
SomeOneBeAdmin 成员成为管理员
函数原型:
void SomeOneBeAdmin(uint uin, uint clusterCode, uint operateUin);
当某个成员成为管理员时调用,参数解析:
/// <summary>
/// 某成员成为管理员时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="operateUin">成为管理员的成员</param>
void SomeOneBeAdmin(uint uin, uint clusterCode, uint operateUin);
注:
需要注意的是,只有管理员级别以上的成员才可以收到这个消息
RobotBeAdmin 机器人成为管理员
函数原型:
void RobotBeAdmin(uint uin, uint clusterCode);
当机器人成为管理员时调用,参数解析:
/// <summary>
/// 机器人成为管理员时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
void RobotBeAdmin(uint uin, uint clusterCode);
MemberRevokedAdmin 成员被撤销管理员资格
函数原型:
void MemberRevokedAdmin(uint uin, uint clusterCode, uint operateUin);
当某个成员被撤销管理员资格时调用, 参数解析:
/// <summary>
/// 某人被撤销管理员资格调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="operateUin">被撤销管理员资格的成员</param>
void MemberRevokedAdmin(uint uin, uint clusterCode, uint operateUin);
注:
需要注意的是,只有管理员以上级别的成员才能收到这个消息
RobotRevokedAdmin 机器人被撤销管理员资格
函数原型:
void RobotRevokedAdmin(uint uin, uint clusterCode);
当机器人被撤销管理员资格时调用,参数解析:
/// <summary>
/// 机器人的管理员资格被撤销调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
void RobotRevokedAdmin(uint uin, uint clusterCode);
SomeOneBanned 成员被禁言
函数原型:
void SomeOneBanned(uint uin, uint clusterCode, uint senderUin, uint operateUin);
当某个成员被管理员禁言时调用, 参数解析:
/// <summary>
/// 某成员被禁言时调用
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">进行设置操作的管理员</param>
/// <param name="operateUin">被禁言的成员</param>
void SomeOneBanned(uint uin, uint clusterCode, uint senderUin, uint operateUin);
注:
需要注意的是,所有群成员都会收到这个消息
SomeOneDisBanned 成员被解禁
函数原型:
void SomeOneDisBanned(uint uin, uint clusterCode, uint senderUin, uint operateUin);
当某个群成员被解禁时调用,参数解析:
/// <summary>
/// 某成员被解禁时调用
/// 超时自动解禁时不支持
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">管理员</param>
/// <param name="operateUin">被禁言的成员</param>
void SomeOneDisBanned(uint uin, uint clusterCode, uint senderUin, uint operateUin);
注:
所有成员都可以收到这个消息
禁言时间已过,系统自动解禁时收不到这个消息,现在不支持
ClusterBanned 群被禁言
函数原型:
void ClusterBanned(uint uin, uint clusterCode, uint senderUin);
当某个群被禁言时调用, 参数解析:
/// <summary>
/// 群全体禁言
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
/// <param name="senderUin">进行设置操作的管理员</param>
void ClusterBanned(uint uin, uint clusterCode, uint senderUin);
注:
所有群成员都会收到这个消息
ClusterDisbanned 群被解禁
函数原型:
void ClusterDisbanned(uint uin, uint clusterCode, uint senderUin);
当某个群被解禁时调用, 参数解析:
/// <summary>
/// 群解禁
/// </summary>
/// <param name="uin">机器人qq号</param>
/// <param name="clusterCode">群号</param>
void ClusterDisbanned(uint uin, uint clusterCode, uint senderUin);
注:
所有群成员都可以收到这个消息
网友评论