2

在 mIRC 中,我希望所有链接看起来像 html 链接(带有下划线的蓝色),以便它们在频道和消息中突出。我确定我必须编写一个远程脚本,但我不确定代码是什么。

4

3 回答 3

2

mIRC“捕手”遵循以下规则:

从帮助文件(/help catcher):

mIRC 查找以“http://”、“ftp://”、“gopher://”、“www.”和“ftp.”开头的 URL。如果地址已经存在,mIRC 还会检查以确保不会将地址添加到列表中。超过 256 个字符的地址将被忽略。

如另一个答案中所述,修改默认行为将导致间距压缩效果,但此脚本不应该有太大问题,因为它只会在显示 URL 时触发。(此外,我使用了 & 前缀,这将使 mIRC 禁用事件,以防另一个脚本执行了较早的默认文本更改并执行了 /haltdef)

;this is actually needed to bypass mIRC's parsing behavior of strtok(str, ":")
alias urlreg return /((?:(?:(?:http|ftp|gopher)\72\/\/)|(?:www|ftp)\.)\S+)/Sig

;the coloring alias, blue (12), underline (31)
alias urlcolor return $+($chr(3), 12, $chr(31), $1-, $chr(31), $chr(3))

;trigger for the regex event only
on ^&$*:text:$($urlreg):*:{
  ;if we are in a channel, turn nick into @nick if applicable
  var %nick = $iif($chan, $nick($chan, $nick).pnick, $nick)

  ;color all the linkes using the predefined alias above
  var %msgs = $regsubex($1-, $urlreg, $urlcolor(\t))

  ;print the message, default timestamp, highlighting options, and nick coloring
  echo -tcrl normal $iif($chan, $v1, $nick) $+(<, %nick, >) %msgs

  ;prevent mIRC's default echo
  haltdef
}

将转向:

<@FooBar> abc www.example.com abc www.example.com abc www.example.com

进入:

<@FooBar> abc ^12www.example.com abc ^12www.example.com abc ^12www.example.com

编辑:

我在原始答案中对 $target 的使用无效,这导致了commander_keen 描述的问题。现在应该解决这个问题。

于 2011-05-20T11:12:44.970 回答
2

更新:这适用于文本中匹配的第一个 URL。我不能完全让它与多个链接一起工作。

请注意,修改通道输出有几个副作用,最值得注意的是多个空格将被压缩为一个(类似于 HTML 中处理空格的方式)。如果您使用任何其他修改通道输出的脚本,这可能会干扰甚至覆盖这些脚本。

我之前没有处理过 mIRC 的 RegEx 函数,所以可能有一种更简洁的方法:

on ^*:TEXT:*:#:{
  set -u %tmp.match /((ht|f)tp[s]?:\S+)/i
  if ($regex(links, $1-, %tmp.match) > 0) {
    set -u %tmp.text $regsubex(links, $1-, %tmp.match, $chr(31) $+ $chr(3) $+ 12 $+ \t $+ $chr(3) $+ $chr(31))
    echo $timestamp $chan < $+ $nick $+ > %tmp.text
    halt
  }
}

注: set -u脚本运行后删除变量,$chr(3)颜色为控制码,12URL蓝色为色号,$chr(31)下划线为控制码。

于 2011-03-17T18:41:06.530 回答
1

我只是想补充一点,它需要使用 //echo 才能将文本输出到正确的通道,否则文本将被发送到状态窗口左右。

此外,我将添加 -bf 和 -m 参数以将消息视为普通用户消息并应用默认的闪烁/哔声设置,否则该消息不会使通道像有新消息一样。

所以这将总结//echo -bfmtrl为 jnpcl 的脚本,甚至尊重时间戳设置(那是-t

Wiz 的解决方案也可能从其中一些变化中受益。

亲切的问候

PS:jnpcl 的脚本滞后于没有 http:// 的 www 链接的 URL 突出显示,并且在查询窗口中突出显示。最后一个问题当然可以很容易地通过添加第二个on ^*:TEXT:*:?:{块来解决//echo -bfmtl $nick < $+ $nick $+ > %tmp.text,但我想知道它是否可以在一个ON:TEXT处理程序中完成。

不幸的是,当检测到查询中的链接并且查询中的文本保持原样时,Wiz 的脚本总是最终发送到状态窗口。似乎$target查询没有按预期工作,它使用自己的昵称,但我不知道解决方案。因此,在 jnpcl 的代码中使用 Wiz 的正则表达式和上述改进最终会在通道和查询 http 和 www 链接等的以下工作代码中结束:

;URL highlighting for channels
    on ^*:TEXT:*:#:{
      set -u %tmp.match /((?:(?:(?:http|ftp|gopher)\72\/\/)|(?:www|ftp)\.)\S+)/Sig
      if ($regex(links, $1-, %tmp.match) > 0) {
        set -u %tmp.text $regsubex(links, $1-, %tmp.match, $chr(31) $+ $chr(3) $+ 12 $+ \t $+ $chr(3) $+ $chr(31))
        //echo -bfmtlr $chan < $+ $nick $+ > %tmp.text
        halt
      }
    }

;URL highlighting for queries
    on ^*:TEXT:*:?:{
      set -u %tmp.match /((?:(?:(?:http|ftp|gopher)\72\/\/)|(?:www|ftp)\.)\S+)/Sig
      if ($regex(links, $1-, %tmp.match) > 0) {
        set -u %tmp.text $regsubex(links, $1-, %tmp.match, $chr(31) $+ $chr(3) $+ 12 $+ \t $+ $chr(3) $+ $chr(31))
        //echo -bfmtlr $nick < $+ $nick $+ > %tmp.text
        halt
      }
    }

我很高兴看到 Wiz 的解决方案也适用于查询。在我看来,这比两个事件块更干净。在那之前,上面的代码应该是两者中最好的。

于 2011-05-22T18:42:05.513 回答