# 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