Posted by: dalin in 技术
从070610之后的版本开始,eva有一个新特性。同志们,这是一个伟大的更新!这是有历史意义的更新!这是一个令人热血沸腾的特性。这个特性就是加入了脚本支持!没错,像Amarok那样的脚本支持的特性。"在 Eva 中, 目前通过 DCOP 调用来进行脚本到Eva的通讯, Eva则通过脚本运行进程的stdin来通知脚本一些事件。"
==========以下介绍来自云帆论坛================
Eva DCOP 函数简介:
2007/06/21更新
实现中, DCOP 有四个大的类别,他们分别是 Contacts, Actions, View, Tools
Contacts 类别(dcop eva-XXXX Contacts …),注:XXXX为Eva的进程号pid, 以下一样处理
CODE:
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 …)
CODE:
void changeToOnline();
更改登录Eva的状态为在线
void changeToOffline()
更改登录Eva的状态为离线
void changeToLeave();
更改登录Eva的状态为离开
void changeToInvisible()
更改登录Eva的状态为隐身
void changeNick( QString nick )
更改自己昵称
void changeSignature( QString contents)
更改个性签名
void sendToBuddy(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 …)
CODE:
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 …)
CODE:
bool stopScript(const QString &name);
停止运行名为name的脚本
bool runScript(const QString &name, bool silent = false);
运行名字为name的脚本, silent 为真时, 如果运行脚本出错, 会弹出提示框
QString scriptDir();
脚本运行目录, 一般情况下为Eva安装目录下的 scripts 目录
int numScripts();
目前Eva安装了多少脚本
int numRunningScripts();
目前Eva中运行了多少脚本
Eva 消息格式简介:
Eva的消息将通过stdin通知脚本, 目前有以下几种
1. 脚本配置按钮按下
CODE:
Configure
2.好友状态改变(包括自己), 注意:脚本的规格说明文件里type的类型必须要有 status 才可以收到这个消息
CODE:
StatusChanged QQ号码
3.聊天消息,注意:脚本的规格说明文件里type的类型必须要有 message 才可以收到这个消息
CODE:
Message {Qun|Contact} {QQ号|群外部} 消息内容
4. 脚本添加的按钮被按下
CODE:
ButtonClicked 按钮名称
已经废除
QUOTE:
5.停止脚本。注意:当用户按下脚本管理器的停止按钮, 脚本管理器并不会停止脚本,而是发给脚本一个停止消息, 这样脚本可以
做一些比如删除添加的标签页或者按钮之类的操作,然后脚本自己退出。 Eva 在退出时,会强制关闭脚本
CODE:
Stop
最后: 当Eva的脚本管理器运行一个脚本时, 会把Eva 的DCOP调用名称做为第一个,也是唯一的参数传给脚本, 这样脚本可以直接使用这个
参数来调用Eva的DCOP接口。
因为,编码工作刚刚结束, 需要测试一段时间。 希望大家可以提供一些脚本, 谢谢大家。
==========以上介绍来自云帆论坛================
当拿到带有脚本管理功能的eva之后,当然是第一时间赶紧测试一下了。其它的就不多说了,基本上跟070610版差不多(主要是指bug)。咱主要是对脚本支持部分进行测试。
脚本支持是通过DCOP实现的。DCOP之前我也不大了解,不过google一下,发现这个东西的应用还是很好学的,这里就不多说了,各位同学自己 去google一下。各个函数怎么调用老云上面写的也很清楚。咱就举一些例子来说明一下吧(直接在shell console中测试,不是以eva脚本的方式)。
假如你的系统中正运行着一个eva,咱们先看看它的pid: ps -A |grep eva
假设这个运行着的eva的pid是1234,那么在这个例子中,你要传递给dcop的第一个参数就是eva-1234。好了,咱们现在试试Contacts类中的numFriends函数:
dcop eva-1234 Contacts numFriends
得到结果就是你的好友数,俺的是315,嘿嘿。很简单,是吧?咱们再来看看老云签名中的那个命令行更改个性签名是怎样实现的:
dcop eva-1234 Contacts changeSignature 这是在命令行下面修改的个性签名
看到没有,就是这么简单。好吧,咱们来点稍微复杂一点的,咱们要实现的是对你好友列表中的某一个倒霉蛋进行信息轰炸(可怜的断背三成了俺轰炸的第一
个倒霉蛋),每隔一秒给他发一条消息,一共一百条(注意:本人不对任何因使用以下代码进行轰炸而引起的以下任何后果负责:1
、被腾讯警告;二、被腾讯没收QQ;三、被轰炸对象辱骂;四、被轰炸对象拉入黑名单;五、被女/男朋友甩;六、被父母赶出家门;七、被公安叔叔请去喝芝华
士;八、其它任何引起你不快的后果……)。下例即是向QQ号码12345发送100条消息的代码:
#!/bin/sh
for numMsg in `seq 1 100`
do
dcop eva-1234 Actions sendToBuddy 12345 这是我发给你的100条消息中的第${numMsg}条,这不关dalin的事,警
察叔叔别抓他。
sleep 1s
done
sleep 1s主要是停1秒钟后再发,不然腾讯可能请你停下来喝杯咖啡。
好吧,篇幅太长了,下一次再介绍吧。反正,赶紧发挥你的创意,来为eva写脚本啦!!!任何系统里有的脚本语言都可以用哦 ,比如shell,python,perl,甚至php都行。
eva是一个kde桌面上的QQ客户端。
特性:
==============================================
- 最近联系人
- 登录验证码
- 进行文本聊天
- 自定义表情(新协议下可能有点问题)
- 截屏发送(新协议下可能有点问题)
- 文件传输的简单实现(新协议下可能有点问题)
- 聊天记录的简单实现
- 下载显示自定义头像
- 查看好友资料
- 更改个人资料
- 个性签名
- 下载好友分组
- 上传好友分组
- 显示等级
- 创建固定群
- 更改群资料
- 更改群成员
- 固定群聊天
- UDP和TCP登录
- HTTP代理登录
- 删除好友
- 查找好友,和添加好友
- 好友验证
- 系统消息记录
- 自动回复
- 快速回复
- 系统设置
- 好友列表字体设置
官方论坛
下载最新版(200700708版)
下载20070403版
——–2007.7.8———–
这可能是正是发布前最后一个测试了。
对脚本安装做了完善, 大家可以通过那个脚本更新脚本来安装了。
群成员更新也做了调整, 这个需要大家测试一下。
加好友进行了修正, 应该没有问题了。
还有个别小修正。
至于其它的大家提到的问题(layout等等),还没有时间做修正。
至于有朋友强烈要求做的QQ一样的要求, 怕暂时还没有时间和精力去弄,
还望大家谅解。
谢谢大家反馈!
——–2007.6.10———
修正(增加)的内容:
存在的问题:
大量用户反映,"瞬卡"问题严重,如果你的机器配置不是很好,不建议升级。但如果你的机器配置可以的话,可以一试。
——–2007.4.3———
修正了好些东西, 也加了些东西。 但这还不是发布版本。连 rc 都不是。 还有些东西要加,不过和协议关系已经不大了。
这个版本的已知问题:
1. 不能和 自腾讯 2006 beta 3(包括这个版本) 之后的 官版QQ 互传文件(图像可以)
2. 更改自己群名片无效
等等
修正了:
1. 群添加
2. 更改个人资料
等等
新增了:
1. QQ 新闻
2. 个人资料之身份验证部分,设置添加问题和答案的功能
——–2007.3.27——–
修正(增加)的内容:
1. 采用 2006 正式版协议登录
2. 支持验证码登录
3. 支持好友的添加,和验证