用户可自行编写聊天助手的插件以实现自己感兴趣的功能,插件需实现以下3个接口.

1.获取插件关键字接口

何谓插件关键字?例如QQ登录助手自带的天气插件,识别格式为@tq/@天气+城市名,这里的@tq和@天气即为插件的识别关键字,插件支持多个关键字并列,使用"|"分割.具体接口如下:

extern "C" bool __stdcall GetKeyWord(char* sOutKeyWord)

sOutKeyWord为出参,聊天助手加载插件时,需将关键字返回给聊天助手.
例如:QQ登录助手自带的天气插件,实现此接口时,需将sOutKeyWord的值设置为"@tq|@天气"返回给登录助手.

2.获取插件说明接口

当聊天助手加载插件时,插件需告知聊天助手此插件的功能和作用.具体接口如下:

extern "C" bool __stdcall GetHelp(char* sOutHelp)

sOutHelp为出参,此接口将插件的功能描述返回给聊天助手.

3.插件处理数据接口

当聊天助手识别到该插件的关键字时,会将数据传入插件,经过插件处理完成后反馈给聊天助手.具体接口如下:

extern "C" bool __stdcall AnalyseData(const char* sData, char* sOutData, char* sOutErrMsg)

sData为入参,代表此插件待处理源数据.例如:天气插件调用@tq 北京,那么该数据即为"北京".
sOutData为出参,当插件针对源数据处理完成后,如果过程中未发生错误,则将结果通过此出参返回.
sOutErrMsg为出参,当插件针对源数据处理完成后,如果过程中发生错误,则将错误信息通过此出参返回.



插件编写示例:

extern "C" bool __stdcall GetKeyWord(char* sOutKeyWord)
{
	string sKeyWord = "@tq|@天气";

	strcpy(sOutKeyWord, sKeyWord.c_str());

	sOutKeyWord[sKeyWord.length()] = 0;

	return true;
}

extern "C" bool __stdcall GetHelp(char* sOutHelp)
{
	string sHelp = "@tq/@天气 城市名(用于获取指定城市的天气预报)";
	
	strcpy(sOutHelp, sHelp.c_str());
	
	sOutHelp[sHelp.length()] = 0;
	
	return true;
}

extern "C" bool __stdcall AnalyseData(const char* sData, char* sOutData, char* sOutErrMsg)
{
	string sResult = 处理数据后返回值

	假如处理数据过程中发生错误

	string sErrMsg = "your error message!\n";
	strcpy(sOutErrMsg, sErrMsg.c_str());
	sOutErrMsg[sErrMsg.length()] = 0;
	return false;


	假如处理过程中未发生错误

	strcpy(sOutData, sResult.c_str());
	sOutData[sResult.length()] = 0;
	return true;
}

注意:返回的sOutKeyWord与sOutHelp最大为1024字节.
     返回的sOutData与sOutErrMsg最大为102400字节.


插件实现这3个接口后,将此3个接口导出,编译成dll放置在QQ登录助手目录下的Plugin文件夹内即可.

重新打开QQ登录助手,使用任意QQ号登录聊天助手,发送@help查看插件是否成功注册,如果注册成功,功能列表中将会列出其关键字与使用说明.尝试调用,无误即可.

如果在编写插件过程中遇到什么问题,请加群或者加好友讨论,谢谢.




						燕过留痕工作室
						2012年05月15日