首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Irssi脚本:重命名无效的DCC文件

Perl Irssi脚本:重命名无效的DCC文件
EN

Stack Overflow用户
提问于 2014-04-05 07:15:48
回答 1查看 153关注 0票数 1

我在Windows上,使用Irssi客户端irssi-win32-0.8.12.exe。

我在接收具有无效名称的文件时遇到问题:

代码语言:javascript
复制
..nameo_\u2605_name.. (err: DCC can't create file)

如何使用脚本从文件名中剥离此无效部分"\u2605“?

This page无济于事

我认为这个part of the Irssi source与此有关。从第195行开始

代码语言:javascript
复制
/* if some plugin wants to change the file name/path here.. */
signal_emit("dcc get receive", 1, dcc);    
EN

回答 1

Stack Overflow用户

发布于 2016-03-15 23:50:29

我当然希望Windows上的Irssi能接受用Perl编写的脚本。如果是这种情况,以下是解决方案:

代码语言:javascript
复制
use strict;
use warnings;

our $VERSION = "1.0";
our %IRSSI = ();

# interception made by registering signal as first + Irssi::signal_continue()
sub event_ctcp_dccsend {
    my ($server, $args, $nick, $addr, $target) = @_;

    # split incomming send request args into filename (either before first space or
    #  quoted), and the rest (IP, port, +optionally filesize)
    my ($filename, $rest) = $args =~ /((?:".*")|\S*)\s+(.*)/;

    # remember file name for informing sake
    my $oldname = $filename;
    # replace backslashes with "BSL" (change to anything you wish)
    if ($filename =~ s/\\/BSL/g) {
        # some info for user
        Irssi::print('DCC SEND request from '.$nick.': renamed bad filename '.$oldname.' to '.$filename);
        $args = $filename." ".$rest;
        # propagate signal; Irssi will proceed the request with altered arguments ($args) 
        Irssi::signal_continue($server, $args, $nick, $addr, $target);  
    }
}

# register signal of incoming ctcp 'DCC SEND', before anything else
Irssi::signal_add_first('ctcp msg dcc send', 'event_ctcp_dccsend');

该脚本截获"DCC SEND“ctcp消息,将文件名中的所有反斜杠替换为"BSL”字符串,然后将更改的消息参数转发到任何其他脚本和Irssi。如果要全部删除"\uXXXX“,请使用s/\\u\w{4}//g代替s/\\/BSL/g

我希望它能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22874554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档