QQ事件接口: IRobotPlugin方法详细说明--已丢弃

2016-07-27  本文已影响0人  玄鸡快跑

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);

注:

所有群成员都可以收到这个消息

上一篇下一篇

猜你喜欢

热点阅读