多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 0x01 关键子程序 MyPCQQ的模板位于【各种说明文档(必读)】文件夹内,一般按照【“插件模板”+时间】命名。 >[warning]我们更新插件模板的时候通常会覆盖这个文件夹内的相关文件。为了防止不必要的麻烦,强烈建议各位将这个文件复制到一个其他的专门的文件夹打开! 任务ID:3 完成EventFun部分 完整的插件应该至少有这么5个“核心”子程序,下面我们来一个一个介绍。 ## 1、info ![Co7z.png](https://piccdn.freejishu.com/images/2016/12/17/Co7z.png) 本程序是供插件初始化使用的。您可以把整个插件初始化的代码写在这里。图片中出示的为默认内容。 这个子程序是在插件开始接收消息之前被调用,只有这个子程序返回了【说明】,插件才会收到消息。 注意: 1、关于图片中最后一行【返回(说明)】: 您可以注意到这个子程序的返回类型是文本型,所以他需要返回一个文本型的数据。这个文本型数据将会显示在插件列表内,就像这样: ![COtU.png](https://piccdn.freejishu.com/images/2016/12/17/COtU.png) 2、这个子程序调用不一定是MyPCQQ启动之后加载插件时。 如果在启动的时候检测到这个插件上一次关闭时的状态是被禁用,info不会立刻被调用,而是等到用户启动的时候才会被调用。 ## 2、Message >[warning]2016.11更新:该接口因存在恶性滥用的风险现已停止开放。框架将仅仅做接触记录,而不会打开调用。 一句话:本函数(子程序)已经作废 ![CSII.png](https://piccdn.freejishu.com/images/2016/12/17/CSII.png) 这个子程序会收到(几乎,特别敏感的会被过滤)所有的和腾讯服务器的通讯信息。听说dalao都是在这里写插件。 注意: 1、返回值定义问题: 返回值-1 已收到信息但拒绝处理 返回0 没有收到信息或不被处理 返回1 被处理完毕,继续执行其他插件 返回2 被处理完毕,阻塞信息不再处理其他插件 2、对于小白/初学者:本接口是用不到的。 除非您非常懂得QQ协议的相关内容,否则请不要在这里面书写任何代码,否则可能导致包括但不限于屏蔽、冻结、永久封号等问题。 3、关于“特别敏感”: 为了防止一些违反法律的行为,MyPCQQ拥有一定的管制措施。过滤掉的数据包也就是可能涉及风险行为的数据包。这些数据包解析后的内容会被抛弃,不会被任何插件获知。 ## 3、EventFun [![xrvU.png](https://piccdn.freejishu.com/images/2017/02/02/xrvU.png)](https://pic.freejishu.com/image/xrvU) 这个子程序是MyPCQQ的核心函数,写一个进行QQ交互的插件离不开这个子程序。 ### 参数列表 1、参\_机器人QQ, 文本型, , 多QQ登录情况下用于识别是哪个Q 2、参\_消息类型, 整数型, , 信息唯一标识 #### 定义: ##### 好友相关事件 1000 被单方面添加好友.(允许任何人添加好友、正确回答加好友问题的情况下会触发这个) 1001 被请求添加好友(设置了加好友理由、加好友需要填答案并由我审核) 1002 好友状态改变 10=在线 30=离开 50=忙碌 60=Q我 70=勿扰 201=离线或隐身 1003 被删除好友 1004 签名变更 1005 说说被某人评论//无评论具体内容 1006 好友正在输入 1007 好友首次发起//打开聊天框会话事件(电脑上发起) 1008 被好友抖动/戳一戳 ##### 群相关事件 2001 某人申请加入群 2002 某人被邀请加入群 2003 我被邀请加入群 2005 某人被批准加入了群 2006 某人退出群 2007 某人被管理移除群 2008 某群被解散 2009 某人成为管理员 2010 某人被取消管理员 2011 群名片变动 2012 群名变动//暂未解析 2013 群公告变动 2014 对象被禁言 2015 对象被解除禁言 2016 群管开启全群禁言 2017 群管关闭全群禁言 2018 群管开启匿名聊天 2019 群管关闭匿名聊天 ##### 系统事件-框架相关 10000 框架加载完成 10001 框架即将重启 ##### 系统事件-帐号相关 11000 添加了一个新的帐号 11001 QQ登录完成 11002 QQ被手动离线 11003 QQ被强制离线 11004 QQ长时间无响应或掉线 ##### 系统事件-插件相关 12000 本插件载入 返回20可拒绝加载 其他返回值均视为允许 12001 用户启用本插件 返回20可拒绝启用 其他返回值均视为允许启用 12002 用户禁用本插件 无权拒绝 12003 插件被点击 点击方式参考子类型. 1=左键单击 2=右键单击 3=左键双击 特殊事件 80001 收到来自好友的财付通转账 其它事件 -1 未定义事件 3、参\_消息子类型, 整数型, , 对象申请、被邀请入群事件下该值为1时即对象为不良成员 4、参\_消息来源, 文本型, , 信息的源头 群号,好友QQ,讨论组ID,临时会话对象QQ等 6、参\_触发对象\_主动, 文本型, , 主动触发这条信息的对象 T人时为T人的管理员QQ 7、参\_触发对象\_被动, 文本型, , 被动接受这条信息的对象 T人时为被T对象的QQ 8、参\_消息内容, 文本型, , 视情况而定的信息内容 申请入群时为入群理由,添加好友为附加信息,T人之类的为空 9、参\_原始信息, 文本型, , 经过解密后的封包字节数据或json结构信息 10、参\_信息回传文本指针\_Out, 整数型, , 信息回传指针。 视情况而定的返回附加文本信息 拒绝好友申请时则为拒绝理由 方式:’写到内存("测试",参_信息回传文本指针_Out) #### 会话事件返回值定义 0 继续链表 1 执行完毕且继续链表 2执行完毕 阻断链表 >[danger]特别注意: 在特殊事件(需要同意或拒绝的事件)中 返回值1=默认确定\同意 2=默认取消\拒绝 因此 插件未处理或不需要的信息请返回0以免造成默认允许添加好友或入群 #### 其他事件返回值定义: 30(事件1001中使用)同意但仅添加为单向好友 <br ><br > 上文就是一些定义,下面让我们来看这些事件: >[info]如果您想快速查找某个Api的具体信息,请使用Ctrl+F快速查找。 #### 好友相关事件 * * * * * [![xWPE.png](https://piccdn.freejishu.com/images/2017/02/02/xWPE.png)](https://pic.freejishu.com/image/xWPE) ##### 1000 被单方面添加好友 机器人的设置为“允许任何人添加好友”或者“正确回答加好友问题”的情况下被添加好友会触发这个。 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| | 参\_机器人QQ | 文本型|机器人QQ | |参\_触发对象\_主动|文本型|添加的人的QQ| ##### 1001 被请求添加好友 机器人的设置为“需要验证信息”或者“需要回答问题并由我确认”的情况下被添加好友会触发此事件。 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|添加的人的QQ| |参\_消息内容|文本型|附加信息| |参\_信息回传文本指针\_Out|整数型|拒绝信息回传指针| 例1: 同意添加好友并在框架内输出相关信息: ![5Hxz.png](https://piccdn.freejishu.com/images/2017/03/11/5Hxz.png) 例2: 拒绝添加好友并告知原因: ![5s34.png](https://piccdn.freejishu.com/images/2017/03/11/5s34.png) ##### 1002 好友状态改变 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息内容|文本型|将会回传更改后的状态<br >10=在线<br > 30=离开 <br >50=忙碌 <br >60=Q我 <br >70=勿扰 <br >201=离线或隐身| ##### 1003 被删除好友 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|删除你好友的QQ| >[info]注意此时对方已经删除了你的好友。所以此时不能再向对方发送好友消息。 ##### 1004 签名变更 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|更改签名的人的QQ| |参\_消息内容|文本型|更改后的签名| ##### 1005 说说被某人评论//无评论具体内容 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|评论的人的QQ| ##### 1006 好友正在输入 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|正在输入的人的QQ| >[info]个人觉得这样描述会引起歧义,但是想不到更好的描述方法... 只有对面也是PCQQ并且对方打开你的窗口之后才会出现这个事件。 这个事件在PCQQ上的体现: ![xm6c.png](https://piccdn.freejishu.com/images/2017/02/02/xm6c.png) ##### 1007 好友首次发起//打开聊天框会话事件(电脑上发起) 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|打开了和你对话的聊天窗口的人的QQ| >[info]PS:手机党的胜利 ##### 1008 被好友抖动/戳一戳 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_触发对象\_主动|文本型|抖/戳你的人的QQ| <br ><br ><br > #### 群相关事件 * * * * * ##### 2001 某人申请加入群 >[info]只有机器人是管理的时候才能收到。 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|申请加入的群的群号| |参\_消息内容|文本型|附加信息(如果有)| |参\_触发对象\_主动|文本型|申请加入群的QQ| ##### 2002 某人被邀请加入群 >[info]只有机器人是管理的时候才能收到。 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|申请入群的群号| |参\_消息内容|文本型|附加信息(如果有)| |参\_触发对象\_主动|文本型|邀请人QQ| |参\_触发对象\_被动|文本型|被邀请人QQ| ##### 2003 我被邀请加入群 >[info]这时候还没进入群,所以无法做一些群内相关操作。 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|被邀请加入群的群号| |参\_触发对象\_主动|文本型|邀请人QQ| |参\_信息回传文本指针\_Out|整数型|拒绝信息回传指针| ##### 2005 某人被批准加入了群 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|管理QQ| |参\_触发对象\_被动|文本型|入群QQ| ##### 2006 某人退出群 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|管理QQ| ##### 2007 某人被管理移除群 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|管理QQ| |参\_触发对象\_被动|文本型|被TQQ| ##### 2008 某群被解散 >[info]这个时候的QQ群已经被解散,所以不能再做任何操作。 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|群主QQ| ##### 2009 某人成为管理员 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|成为了管理的QQ| >[info]你们觉得是谁干的呢?(除了群主谁还能干出这种事情) ##### 2010 某人被取消管理员 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|被取消管理的QQ| >你们觉得又是谁干的呢?(除了群主谁还能又干出这种事情) ##### 2011 群名片变动 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_消息内容|文本型|新名片| |参\_触发对象\_主动|文本型|名片变动的QQ| 例:播报群名片变动: ![Ur7U.png](https://piccdn.freejishu.com/images/2017/04/23/Ur7U.png) 效果: ![UWJE.png](https://piccdn.freejishu.com/images/2017/04/23/UWJE.png) >[danger]Q:为什么用 Api\_GetNameCard (参\_机器人QQ, 参\_消息来源, 参\_触发对象\_主动) 还可以取到过去的名片? A: 对于名片,框架是有缓存的。和其他API不同,在收到群名片变更事件后,MyPCQQ会先处理插件,完成后再更新框架内缓存。所以这个时候拉取的就是他的旧名片,因为是缓存。如果提前使用了Api\_Cache\_NameCard将名片加入了高速缓存,在这里看到的便就是新旧名片一样的情况。 ##### 2012 群名变动//暂未解析 ##### 2013 群公告变动 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_消息内容|文本型|新公告(具体内容)| |参\_触发对象\_主动|文本型|发布公告的管理QQ| ##### 2014 对象被禁言 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_消息内容|文本型|禁言时间(单位:秒)| |参\_触发对象\_主动|文本型|管理QQ| |参\_触发对象\_被动|文本型|被禁言QQ| ##### 2015 对象被解除禁言 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_消息内容|文本型|0(表示解除)| |参\_触发对象\_主动|文本型|管理QQ| |参\_触发对象\_被动|文本型|被解除禁言QQ| ##### 2016 群管开启全群禁言 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_消息内容|文本型|-1(表示全群)| |参\_触发对象\_主动|文本型|管理QQ| ##### 2017 群管关闭全群禁言 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_消息内容|文本型|0(表示解除)| |参\_触发对象\_主动|文本型|管理QQ| >[info]关于禁言,不论是事件还是API: 在时间上,都是以秒为单位,0代表解除,而-1代表全群。 但这并不意味着全群禁言可以设置时间((( ##### 2018 群管开启匿名聊天 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|管理QQ| ##### 2019 群管关闭匿名聊天 参数: | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_机器人QQ|文本型|机器人QQ| |参\_消息来源|文本型|发生此事件的群号| |参\_触发对象\_主动|文本型|管理QQ| <br ><br ><br > #### 系统事件-框架相关 * * * * * ##### 10000 框架加载完成 无参数。 ##### 10001 框架即将重启 无参数。 <br ><br > #### 系统事件-帐号相关 * * * * * ##### 11000 添加了一个新的帐号 | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_消息内容|文本型|被操作QQ| |参\_触发对象\_主动|文本型|被操作QQ| |参\_触发对象\_被动|文本型|被操作QQ| ##### 11001 QQ登录完成 | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_消息内容|文本型|被操作QQ| |参\_触发对象\_主动|文本型|被操作QQ| |参\_触发对象\_被动|文本型|被操作QQ| ##### 11002 QQ被手动离线 | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_消息内容|文本型|被操作QQ| |参\_触发对象\_主动|文本型|被操作QQ| |参\_触发对象\_被动|文本型|被操作QQ| ##### 11003 QQ被强制离线 | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_消息内容|文本型|被操作QQ| |参\_触发对象\_主动|文本型|被操作QQ| |参\_触发对象\_被动|文本型|被操作QQ| ##### 11004 QQ长时间无响应或掉线 | 参数名 | 数据类型 | 描述 | |---|---|---| |参\_消息内容|文本型|被操作QQ| |参\_触发对象\_主动|文本型|被操作QQ| |参\_触发对象\_被动|文本型|被操作QQ| <br ><br > #### 系统事件-插件相关 * * * * * ##### 12000 本插件载入 返回20可拒绝加载 其他返回值均视为允许 ##### 12001 用户启用本插件 返回20可拒绝启用 其他返回值均视为允许启用 ##### 12002 用户禁用本插件 无权拒绝 ##### 12003 插件被点击 参\_消息子类型:点击方式。 1=左键单击 2=右键单击 3=左键双击 <br ><br > #### 特殊事件 * * * * * ##### 80001 收到来自好友的财付通转账 基于目前情况,暂时不公开本API相关参数。您可以通过Api_OutPut输出相关信息查看。 ~~请注意,本接口仅供通过白名单认证的用户使用。没有经过验证的用户不会收到此类型消息。 了解更多情况:https://f.mypcqq.cc/thread-5283-1-1.html~~ >[warning] 近期有人恶意利用上面的API搞事请,故该API在短期内不再判断白名单。 (2017.08.07) #### 其它事件 * * * * * ##### -1 未定义事件 包含了所有还没有解析的未知事件。建议普通开发者在书写代码时忽略掉这种事件。 >这玩意很容易发生惨案。比如: ![ey8Fa.png](https://piccdn.freejishu.com/images/2017/07/16/ey8Fa.png) 数次见到一些初级开发者这样写。通过简单分析就可以知道,这会导致调用api_send发送一个-1消息类型的消息。然而-1对应的是什么呢? 另外-1在执行协议包的时候调用会非常频繁,部分插件也有可能因此崩溃。 再次提醒开发者,对于事件-1的过滤一定要一定要一定要好好做,仔细检查代码,保证代码严谨。 ## 4、set ![Um1c.png](https://piccdn.freejishu.com/images/2017/04/27/Um1c.png) 本函数下放置插件相关设置操作,比如加载设置窗口,重载配置等。用户在点击设置后会调用本子程序。 ![X08g.png](https://piccdn.freejishu.com/images/2017/04/27/X08g.png) ## 5、about ![XTfj.png](https://piccdn.freejishu.com/images/2017/04/27/XTfj.png) 本函数下放置插件的版权信息。用户在点击关于后会调用本子程序。 ## 6、end ![XPST.png](https://piccdn.freejishu.com/images/2017/04/27/XPST.png) 当插件被停用、卸载时或者MPQ将要退出时将会调用。 在这里销毁模块、窗口,清理各种资源,退出创建的线程。 返回后MPQ将快速关闭,所以请把一切工作在返回之前做完。请勿此时启动不可控线程。 >[danger] 请不要在这里写 `结束()` ----------- >[info]编写:freejishu >润色:a632079 & 斯米拉 >审核:Eghuai >最后更新:2017.08.07