# 0x01 關鍵子程序
MyPCQQ的模板位于【各種說明文檔(必讀)】文件夾內,一般按照【“插件模板”+時間】命名。
>[warning]我們更新插件模板的時候通常會覆蓋這個文件夾內的相關文件。為了防止不必要的麻煩,強烈建議各位將這個文件復制到一個其他的專門的文件夾打開!
任務ID:3 完成EventFun部分
完整的插件應該至少有這么5個“核心”子程序,下面我們來一個一個介紹。
## 1、info

本程序是供插件初始化使用的。您可以把整個插件初始化的代碼寫在這里。圖片中出示的為默認內容。
這個子程序是在插件開始接收消息之前被調用,只有這個子程序返回了【說明】,插件才會收到消息。
注意:
1、關于圖片中最后一行【返回(說明)】:
您可以注意到這個子程序的返回類型是文本型,所以他需要返回一個文本型的數據。這個文本型數據將會顯示在插件列表內,就像這樣:

2、這個子程序調用不一定是MyPCQQ啟動之后加載插件時。
如果在啟動的時候檢測到這個插件上一次關閉時的狀態是被禁用,info不會立刻被調用,而是等到用戶啟動的時候才會被調用。
## 2、Message
>[warning]2016.11更新:該接口因存在惡性濫用的風險現已停止開放。框架將僅僅做接觸記錄,而不會打開調用。
一句話:本函數(子程序)已經作廢

這個子程序會收到(幾乎,特別敏感的會被過濾)所有的和騰訊服務器的通訊信息。聽說dalao都是在這里寫插件。
注意:
1、返回值定義問題:
返回值-1 已收到信息但拒絕處理
返回0 沒有收到信息或不被處理
返回1 被處理完畢,繼續執行其他插件
返回2 被處理完畢,阻塞信息不再處理其他插件
2、對于小白/初學者:本接口是用不到的。
除非您非常懂得QQ協議的相關內容,否則請不要在這里面書寫任何代碼,否則可能導致包括但不限于屏蔽、凍結、永久封號等問題。
3、關于“特別敏感”:
為了防止一些違反法律的行為,MyPCQQ擁有一定的管制措施。過濾掉的數據包也就是可能涉及風險行為的數據包。這些數據包解析后的內容會被拋棄,不會被任何插件獲知。
## 3、EventFun
[](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快速查找。
#### 好友相關事件
* * * * *
[](https://pic.freejishu.com/image/xWPE)
##### 1000 被單方面添加好友
機器人的設置為“允許任何人添加好友”或者“正確回答加好友問題”的情況下被添加好友會觸發這個。
參數:
| 參數名 | 數據類型 | 描述 |
|---|---|---|
| 參\_機器人QQ | 文本型|機器人QQ |
|參\_觸發對象\_主動|文本型|添加的人的QQ|
##### 1001 被請求添加好友
機器人的設置為“需要驗證信息”或者“需要回答問題并由我確認”的情況下被添加好友會觸發此事件。
參數:
| 參數名 | 數據類型 | 描述 |
|---|---|---|
|參\_機器人QQ|文本型|機器人QQ|
|參\_觸發對象\_主動|文本型|添加的人的QQ|
|參\_消息內容|文本型|附加信息|
|參\_信息回傳文本指針\_Out|整數型|拒絕信息回傳指針|
例1:
同意添加好友并在框架內輸出相關信息:

例2:
拒絕添加好友并告知原因:

##### 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上的體現:

##### 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|
例:播報群名片變動:

效果:

>[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 未定義事件
包含了所有還沒有解析的未知事件。建議普通開發者在書寫代碼時忽略掉這種事件。
>這玩意很容易發生慘案。比如:

數次見到一些初級開發者這樣寫。通過簡單分析就可以知道,這會導致調用api_send發送一個-1消息類型的消息。然而-1對應的是什么呢?
另外-1在執行協議包的時候調用會非常頻繁,部分插件也有可能因此崩潰。
再次提醒開發者,對于事件-1的過濾一定要一定要一定要好好做,仔細檢查代碼,保證代碼嚴謹。
## 4、set

本函數下放置插件相關設置操作,比如加載設置窗口,重載配置等。用戶在點擊設置后會調用本子程序。

## 5、about

本函數下放置插件的版權信息。用戶在點擊關于后會調用本子程序。
## 6、end

當插件被停用、卸載時或者MPQ將要退出時將會調用。
在這里銷毀模塊、窗口,清理各種資源,退出創建的線程。
返回后MPQ將快速關閉,所以請把一切工作在返回之前做完。請勿此時啟動不可控線程。
>[danger] 請不要在這里寫 `結束()`
-----------
>[info]編寫:freejishu
>潤色:a632079 & 斯米拉
>審核:Eghuai
>最后更新:2017.08.07