|
目前, Eva 参照 Amarok 的脚本支持模块, 实现了脚本管理的功能。
在 Eva 中, 目前通过 DCOP 调用来进行脚本到Eva的通讯, Eva则通过脚本运行进程的stdin来通知脚本一些事件。
Eva DCOP 函数简介:
2008/01/27更新: scriptDir(bool) 调用加入参数
2007/06/23更新: sendToBuddy 改正为 sendToContact 以保持API名称一致, 还有,请留意,Eva 的提示消息也有些许变动
实现中, DCOP 有四个大的类别,他们分别是 Contacts, Actions, View, Tools
Contacts 类别(dcop eva-XXXX Contacts ...),注:XXXX为Eva的进程号pid, 以下一样处理
- int numFriends()
- 返回好友数量
- QStringList friends()
- 返回全部好友的id列表,不包括在陌生人和黑名单中的人
- bool hasFriend(unsigned int id)
- 是否存在这个好友
- QString nickOf(unsigned int id)
- 返回好友昵称
- QString faceOf(unsigned int id, bool isOff)
- 返回好友(id) 的头像图片的完整路径(绝对路径)), isOff 为真则返回离线图片路径,否则是在线图片
- int genderOf(unsigned int id)
- 返回好友性别, 0:男, 1:女
- int levelOf(unsigned int id)
- 返回好友(id)的等级
- QString signatureOf(unsigned int)
- 返回好友(id)的个性签名
- int numGroups()
- 返回分组数量
- QString groupName(int index)
- 返回第index号分组的名称, 0固定为“我的好友”
- int group(unsigned int id)
- 返回好友的分组index
- int numQuns()
- 返回群的数量
- QStringList Quns()
- 返回所有群的外部id列表
- QString QunName(unsigned int ext)
- 返回外部群号为ext的群名称
- QString QunNotice(unsigned int ext)
- 返回外部群号为ext的群公告
- QString QunDescription(unsigned int ext)
- 返回外部群号为ext的群描述
- int numQunMembers(unsigned int ext)
- 返回外部群号为ext的群成员数
- QStringList QunMembers(unsigned int ext)
- 返回外部群号为ext的群成员id列表
- QString QunMemberNick(unsigned int ext, unsigned int id)
- 返回群ext成员id的昵称
- QString QunMemberFace(unsigned int ext, unsigned int id, bool isOff)
- 返回群ext成员id头像的完全路径(绝对路径), isOff 为真则返回离线图片路径,否则是在线图片
- unsigned int myQQ()
- 返回当前登录Eva的的QQ号码
- int onlineStatus(unsigned int id)
- 返回好友在线情况。 10:在线, 20:离线, 30:离开, 40:隐身
复制代码 Actions 类别 (dcop eva-XXXX Actions ...)
- void changeToOnline();
- 更改登录Eva的状态为在线
- void changeToOffline()
- 更改登录Eva的状态为离线
- void changeToLeave();
- 更改登录Eva的状态为离开
- void changeToInvisible()
- 更改登录Eva的状态为隐身
- void changeNick( QString nick )
- 更改自己昵称
- void changeSignature( QString contents)
- 更改个性签名
- void sendToContact(unsigned int id, QString msg);
- 给好友id发一条消息msg(可以使用/xin 之类的转义字符)
- void sendToQun(unsigned int ext, QString msg)
- 给群ext发一条消息
- void textReady(unsigned int id, QString text, bool isQun);
- 将text的内容放到聊天窗口的输入框中。如果聊天窗口未打开,则忽略之
- isQun 决定 id 是否为群外部id,或者好友QQ号
- void imageReady(unsigned int id, QString path, bool isQun);
- 将path指定的图片文件放到聊天窗口的输入框中。如果聊天窗口未打开,则忽略之
- isQun 决定 id 是否为群外部id,或者好友QQ号
- void openAddFriendDialog(unsigned int id)
- 打开添加好友窗口,开始添加好友id
复制代码 View 类别 (dcop eva-XXXX View ...)
- int addTab(QString scriptName, QString name, QString image, QString contents);
- scriptName 为调用本方法的脚本的名称, 打开一个新的tab, name用来标示这个tab,
- 并显示在提示窗口中。 image为tab图标的绝对路径 contents 为tab将显示的内容(html格式),
- 返回一个标识ID, 用作以下方法的 ID 参数
- 注意:当脚本终止时, 其添加的标签页会被Eva自动删除
- bool removeTab( int id);
- 删除id指定的tab
- bool removeTabs( QString scriptName);
- 删除名称为 scriptName 的脚本所添加的所有标签页
- bool updateTab(int id, QString contents);
- 更新ID 为 id 的tab内容(html格式)。如果tab不存在,则返回假
- void addButton(QString scriptName, QString buttonName, QString image, QString tip);
- 在个人聊天,或者群聊的窗口上加一个按钮, scriptName为脚本名字, buttonName 为按钮名字,
- image 为图标完全路径(绝对路径), tip 为鼠标放到按钮上的提示
- 注意:当脚本终止时, 其添加的按钮会被Eva自动删除
- void removeButton(QString scriptName, QString buttonName);
- 删除聊天窗口上的按钮, scriptName为脚本名字, buttonName 为按钮名字
- void removeButtons(QString scriptName);
- 删除名称为scriptName的脚本在聊天窗口上添加的所有按钮, scriptName为脚本名字
- bool isTabExisted( int id );
- 返回真,如果ID为id的tab存在,否则返回假
- void bringToFront( int id);
- 将id指定的tab显示到所有tab的最前面。 如果tab不存在,则什么都不做
- void openChatWindow(unsigned int id, bool isQun);
- 开打聊天窗口, isQun为真时, id 为群外部号码,否则为好友QQ号
- void updateStatusBar( QString message);
- 更新主窗口的状态栏内容。 注意:可以使用QLabel支持的格式字符串,比如“<qt><font color=red>你好</font></qt>”
复制代码 Tools 类别 (dcop eva-XXXX Tools ...)
- bool stopScript(const QString &name);
- 停止运行名为name的脚本
- bool runScript(const QString &name, bool silent = false);
- 运行名字为name的脚本, silent 为真时, 如果运行脚本出错, 会弹出提示框
- QString scriptDir(bool isSystem);
- 脚本运行目录, 一般情况下为Eva安装目录下的 scripts 目录, isSystem 为true时,返回eva安装
- 目录下的脚本目录, isSystem 为false时,返回当前用户的安装目录
- int numScripts();
- 目前Eva安装了多少脚本
- int numRunningScripts();
- 目前Eva中运行了多少脚本
复制代码 Eva 消息格式简介:
Eva的消息将通过stdin通知脚本, 目前有以下几种
1. 脚本配置按钮按下2.好友状态改变(包括自己), 注意:脚本的规格说明文件里type的类型必须要有 status 才可以收到这个消息3.聊天消息,注意:脚本的规格说明文件里type的类型必须要有 message 才可以收到这个消息
消息内容从第二行起,每行以#开始,后面是一行消息内容。多行消息,每行起始都以#为首。
消息最后一行之后,有一个单独行,只有1个字符@在行首
- Message {Qun|Contact} [0-9]+ 1970-06-23 11:22:33
- #消息内容
- #消息内容
- @
复制代码 4. 脚本添加的按钮被按下
- ButtonClicked {Qun|Contact} [0-9]+ buttonname
复制代码 已经废除
5.停止脚本。注意:当用户按下脚本管理器的停止按钮, 脚本管理器并不会停止脚本,而是发给脚本一个停止消息, 这样脚本可以
做一些比如删除添加的标签页或者按钮之类的操作,然后脚本自己退出。 Eva 在退出时,会强制关闭脚本
最后: 当Eva的脚本管理器运行一个脚本时, 会把Eva 的DCOP调用名称做为第一个,也是唯一的参数传给脚本, 这样脚本可以直接使用这个
参数来调用Eva的DCOP接口。
因为,编码工作刚刚结束, 需要测试一段时间。 希望大家可以提供一些脚本, 谢谢大家。
脚本测试版本下载(注意:这是个测试版本, 存在很多不稳定因素, 建议普通用户使用sourceforge cvs 中的版本或者 0403 版本)
http://www.myswear.net/myswear/eva/beta/eva-20080127.tar.bz2
[ 本帖最后由 yunfan 于 2008-12-11 08:55 编辑 ] |
|