Irssi script howto

2007/03/21

Tags: heart irssi

为 irssi 写一些简单的脚本其实不是很难。我大概讲解一下如何写作。
== 理解 signal ==
写过 vb 程序的都应该知道,vb 都是按照事件来触发执行程序的。例如你给某个窗体的 单击事件 写了代码,那么当这个窗体被单击的时候,就会执行你写的代码。
在 irssi 也是类似,不过他的不是事件,是 signal 。你所要做的就是针对不同的 signal 写不同代码即可。
irssi 的 signal 在这个 文档 里面都写的很全了,此外安装 irssi 的时候也会安装 irssi 的一些文档,里面也有 signal 的相关文档。
== 一个简单脚本 ==
脚本头部要包含一些脚本的信息,例如下面。
use vars qw($VERSION %IRSSI);
use Irssi;

$VERSION = '1.00';
%IRSSI = (
    authors     => 'wd',
    contact     => 'wd#wdicc.com',
    name        => 'My first Script',
    description => 'This script notify ' .
                   'you when recive msg.',
    license     => 'Public Domain',
);

sub recive_msg{
    my ($server, $msg, $nick, $address, $target) = @_;
    #do nothing 

}

Irssi::signal_add_first('message public',  'recive_msg');
最下面那行就是截获 irssi 的 signal 了。“message public”这个 signal 是在 irssi 接收到 public message 的时候产生,上面的脚本截获这个 signal 之后,执行后面的 revice_msg 函数 。查一下上面的 signal 文档可以找到下面的内容。 "message public", SERVER_REC, char *msg, char *nick, char *address, char *target 这表示 irssi 在产生 message public 这个 signal 之后,还会同时传递后面的那些信息。上面那个脚本里面,这些信息都传递给了 recive_msg 函数。这样 recive_msg 函数的第一行就是设置一些变量来接收这些信息。 这就是一个简单的 signal 的处理过程,当然,上面的这个脚本在截获 signal 之后其实什么都没有做。那么怎么让脚本和 irssi 交互呢? == 和 irssi 交互 == 按照上面的例子,可以用 $server->command() 或者 $server->print() 来和 irssi 交互。 $server->command 可以在 irssi 里面执行一个 irssi 命令。例如 $server->command("msg wd hi"); 这样相当于在 irssi 里面输入 "/msg wd hi" 这个命令。其他命令类推一下。 $server->print 可以在 irssi 里面打印一些信息,这些信息别人是看不到的,这些信息类似于 irssi 给你的消息。例如 $server->print("$server","a test msg"); 这些信息会在1号窗口(这个不一定,看连接了几个server)里面显示。 有了 print 就可以在 irssi 里面测试 recive_msg 函数接收的信息都是什么意义了。试试看下面的命令 $server->print("$server","$nick send you a msg : $msg"); == 设置一些选项 == 可以为脚本设置一些选项,这样也可以让脚本适合更多人使用。 Irssi::settings_add_str("wd","test","just for test"); Irssi::settings_add_bool('blah', 'blah_color', 1);; 上面这两行设置了两个变量,一个是字符串 test,初始值为 "just for test",另一个是布尔变量 blah_color ,初始值是1。第一个参数是设置将变量显示在哪个段,用 /set 命令查看的时候会看到。 使用下面的命令可以获取设置。 $a = Irssi::settings_get_str("test"); $b = Irssi::settings_get_bool('blah_color'); 这样按照上面的设置, $a 的值就是 "just for test" , $b 的值就是 1。当然,用户如果用 /set 命令来设置了这些参数,那么取回的信息就不一定是这些了。 == 参考资料 == Scripting Irssi

Comments