QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6281|回复: 3

Eva 脚本调用简述

[复制链接]
发表于 2007-6-24 16:54:12 | 显示全部楼层 |阅读模式
目前, 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, 以下一样处理

  1.     int numFriends()
  2.                     返回好友数量
  3.     QStringList friends()
  4.                     返回全部好友的id列表,不包括在陌生人和黑名单中的人
  5.     bool hasFriend(unsigned int id)
  6.                     是否存在这个好友
  7.     QString nickOf(unsigned int id)
  8.                     返回好友昵称
  9.     QString faceOf(unsigned int id, bool isOff)
  10.                     返回好友(id) 的头像图片的完整路径(绝对路径)), isOff 为真则返回离线图片路径,否则是在线图片
  11.     int genderOf(unsigned int id)
  12.                     返回好友性别, 0:男, 1:女
  13.     int levelOf(unsigned int id)
  14.                     返回好友(id)的等级
  15.     QString signatureOf(unsigned int)
  16.                     返回好友(id)的个性签名
  17.     int numGroups()
  18.                     返回分组数量
  19.     QString groupName(int index)
  20.                     返回第index号分组的名称, 0固定为“我的好友”
  21.     int group(unsigned int id)
  22.                     返回好友的分组index
  23.     int numQuns()
  24.                     返回群的数量
  25.     QStringList Quns()
  26.                     返回所有群的外部id列表
  27.     QString QunName(unsigned int ext)
  28.                     返回外部群号为ext的群名称
  29.     QString QunNotice(unsigned int ext)
  30.                     返回外部群号为ext的群公告
  31.     QString QunDescription(unsigned int ext)
  32.                     返回外部群号为ext的群描述
  33.     int numQunMembers(unsigned int ext)
  34.                     返回外部群号为ext的群成员数
  35.     QStringList QunMembers(unsigned int ext)
  36.                     返回外部群号为ext的群成员id列表
  37.     QString QunMemberNick(unsigned int ext, unsigned int id)
  38.                     返回群ext成员id的昵称
  39.     QString QunMemberFace(unsigned int ext, unsigned int id, bool isOff)
  40.                     返回群ext成员id头像的完全路径(绝对路径), isOff 为真则返回离线图片路径,否则是在线图片
  41.     unsigned int myQQ()
  42.                     返回当前登录Eva的的QQ号码
  43.     int onlineStatus(unsigned int id)
  44.                     返回好友在线情况。 10:在线, 20:离线, 30:离开, 40:隐身
复制代码
Actions 类别 (dcop eva-XXXX Actions ...)

  1.     void changeToOnline();
  2.                     更改登录Eva的状态为在线
  3.     void changeToOffline()
  4.                     更改登录Eva的状态为离线
  5.     void changeToLeave();
  6.                     更改登录Eva的状态为离开
  7.     void changeToInvisible()
  8.                     更改登录Eva的状态为隐身

  9.     void changeNick( QString nick )
  10.                     更改自己昵称
  11.     void changeSignature( QString contents)
  12.                     更改个性签名

  13.     void sendToContact(unsigned int id, QString msg);
  14.                     给好友id发一条消息msg(可以使用/xin 之类的转义字符)
  15.     void sendToQun(unsigned int ext, QString msg)
  16.                     给群ext发一条消息

  17.     void textReady(unsigned int id, QString text, bool isQun);
  18.                     将text的内容放到聊天窗口的输入框中。如果聊天窗口未打开,则忽略之
  19.                     isQun 决定 id 是否为群外部id,或者好友QQ号
  20.     void imageReady(unsigned int id, QString path, bool isQun);
  21.                     将path指定的图片文件放到聊天窗口的输入框中。如果聊天窗口未打开,则忽略之
  22.                     isQun 决定 id 是否为群外部id,或者好友QQ号
  23.     void openAddFriendDialog(unsigned int id)
  24.                     打开添加好友窗口,开始添加好友id
复制代码
View 类别 (dcop eva-XXXX View ...)

  1.     int addTab(QString scriptName, QString name, QString image, QString contents);
  2.                     scriptName 为调用本方法的脚本的名称, 打开一个新的tab, name用来标示这个tab,
  3.                     并显示在提示窗口中。 image为tab图标的绝对路径 contents 为tab将显示的内容(html格式),
  4.                     返回一个标识ID, 用作以下方法的 ID 参数
  5.                     注意:当脚本终止时, 其添加的标签页会被Eva自动删除
  6.     bool removeTab( int id);
  7.                     删除id指定的tab
  8.     bool removeTabs( QString scriptName);
  9.                     删除名称为 scriptName 的脚本所添加的所有标签页
  10.     bool updateTab(int id, QString contents);
  11.                     更新ID 为 id 的tab内容(html格式)。如果tab不存在,则返回假
  12.     void addButton(QString scriptName, QString buttonName, QString image, QString tip);
  13.                     在个人聊天,或者群聊的窗口上加一个按钮, scriptName为脚本名字, buttonName 为按钮名字,
  14.                     image 为图标完全路径(绝对路径), tip 为鼠标放到按钮上的提示
  15.                     注意:当脚本终止时, 其添加的按钮会被Eva自动删除
  16.     void removeButton(QString scriptName, QString buttonName);
  17.                     删除聊天窗口上的按钮, scriptName为脚本名字, buttonName 为按钮名字
  18.     void removeButtons(QString scriptName);
  19.                     删除名称为scriptName的脚本在聊天窗口上添加的所有按钮, scriptName为脚本名字
  20.     bool isTabExisted( int id );
  21.                     返回真,如果ID为id的tab存在,否则返回假
  22.     void bringToFront( int id);
  23.                     将id指定的tab显示到所有tab的最前面。 如果tab不存在,则什么都不做
  24.     void openChatWindow(unsigned int id, bool isQun);
  25.                     开打聊天窗口, isQun为真时, id 为群外部号码,否则为好友QQ号
  26.     void updateStatusBar( QString message);
  27.                     更新主窗口的状态栏内容。 注意:可以使用QLabel支持的格式字符串,比如“<qt><font color=red>你好</font></qt>”
复制代码
Tools 类别 (dcop eva-XXXX Tools ...)

  1.     bool stopScript(const QString &name);
  2.                    停止运行名为name的脚本
  3.     bool runScript(const QString &name, bool silent = false);
  4.                    运行名字为name的脚本, silent 为真时, 如果运行脚本出错, 会弹出提示框
  5.     QString scriptDir(bool isSystem);
  6.                    脚本运行目录, 一般情况下为Eva安装目录下的 scripts 目录, isSystem 为true时,返回eva安装
  7.                    目录下的脚本目录, isSystem 为false时,返回当前用户的安装目录
  8.     int numScripts();
  9.                    目前Eva安装了多少脚本
  10.     int numRunningScripts();
  11.                    目前Eva中运行了多少脚本
复制代码
Eva 消息格式简介:
Eva的消息将通过stdin通知脚本, 目前有以下几种
1. 脚本配置按钮按下

  1.      Configure
复制代码
2.好友状态改变(包括自己), 注意:脚本的规格说明文件里type的类型必须要有 status 才可以收到这个消息

  1.      StatusChanged QQ号码
复制代码
3.聊天消息,注意:脚本的规格说明文件里type的类型必须要有 message 才可以收到这个消息
  消息内容从第二行起,每行以#开始,后面是一行消息内容。多行消息,每行起始都以#为首。
  消息最后一行之后,有一个单独行,只有1个字符@在行首

  1.      Message {Qun|Contact} [0-9]+ 1970-06-23 11:22:33
  2.      #消息内容
  3.      #消息内容
  4.      @
复制代码
4. 脚本添加的按钮被按下

  1.      ButtonClicked {Qun|Contact} [0-9]+ buttonname
复制代码
已经废除
5.停止脚本。注意:当用户按下脚本管理器的停止按钮, 脚本管理器并不会停止脚本,而是发给脚本一个停止消息, 这样脚本可以
做一些比如删除添加的标签页或者按钮之类的操作,然后脚本自己退出。 Eva 在退出时,会强制关闭脚本

  1.      Stop
复制代码



最后: 当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 编辑 ]
发表于 2007-6-29 09:58:31 | 显示全部楼层
看了后真的感觉云帆真的太强了
回复

使用道具 举报

发表于 2007-7-2 00:23:44 | 显示全部楼层
脚本测试版本下载(注意:这是个测试版本, 存在很多不稳定因素, 建议普通用户使用sourceforge cvs 中的版本或者 0403 版本)
http://www.myswear.net/myswear/eva/beta/eva-20070623.tar.bz2

怪不得崩溃……
找0403去->->->

[ 本帖最后由 自由狼-台风 于 2007-7-2 00:31 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2007-7-4 15:20:21 | 显示全部楼层
楼上, 你下面一个帖子里, 提到崩溃, 你configure 的时候
试试用 `kde-config --prefix` , 可能是这个导致你的Eva崩溃
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 20:11 , Processed in 0.060846 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表