Irssi 循环通过频道中的用户
Posted
技术标签:
【中文标题】Irssi 循环通过频道中的用户【英文标题】:Irssi Loop Through Users in Channel 【发布时间】:2015-02-16 17:38:01 【问题描述】:我正在尝试将我见过的其他脚本拼凑起来,以便能够遍历频道上的用户列表。
这是我想出来的
my $channel = @_;
foreach my $nick ($channel->nicks())
$server->command("msg $chatchannel $nick->nick");
但我从中得到的只是
如果没有包或对象引用,则无法调用方法“nicks” /root/.irssi/scripts/test.pl 第 64 行。
指的是
$channel->nicks()
我是不是走错了路?或者这应该有效吗?我见过许多其他使用 $channel->nicks() 的脚本,所以我知道它一定可以工作?
编辑
我还应该提到,这已经在代码中进一步定义
my ($server, $msg, $target, $channel, $chatnet) = @_;
但是当我尝试使用 $channel 变量时,我得到了
无法通过包定位对象方法“nicks” “mattigins@mattigins.tmi.twitch.tv”(也许你忘了加载 “mattigins@mattigins.tmi.twitch.tv”?)在/root/.irssi/scripts/test.pl 第 64 行。
【问题讨论】:
$_
中有什么内容?你从哪里得到它?显然它不是您所期望的 Channel
对象实例。
对不起,是的,它应该是@_,它也做同样的事情
【参考方案1】:
由于my $channel = @_;
的左侧 (LHS) 是一个标量,它会将标量上下文强加于 @_
数组。这意味着数组的长度被分配给$channel
。您想使用 my ($channel) = @_;
进行分配,以便 LHS 在列表上下文中,并且 @_
数组中的第一个元素被分配给您的标量。
参考:
What is the difference between the scalar and list contexts in Perl?
Scalar and List context in Perl
【讨论】:
感谢您的建议。我尝试将 () 放在 $channel 周围,但现在我收到此错误Can't locate object method "nicks" via package "Irssi::Irc::Server" at /root/.irssi/scripts/test.pl line 64.
【参考方案2】:
我想出了办法。
$chan = $server->channel_find('#channel');
foreach my $nick ($chan->nicks())
$nickname = $nick->nick;
【讨论】:
以上是关于Irssi 循环通过频道中的用户的主要内容,如果未能解决你的问题,请参考以下文章