[英]IRC-Bot in Ruby: PRIVMSG sends only last word of string
我正在学习红宝石,并且已经从网络上下载了一个已经完成的IRC-Bot,它仅连接到给定的服务器,而没有更多内容。 然后,我添加了一些功能(在我的情况下,我尝试在吃午餐的地方实施投票)。
现在,到目前为止,这些工具都可以正常工作,但是我不知道ruby脚本是否做错了什么,或者IRC服务器出了什么问题。
在我测试的Bot上,它运行良好,给出了如下输出:
09:14 < Wayne> !EssNA
09:14 < EssNABot> [-=EssNA-Vote=-]
09:14 < EssNABot> Options are:
09:14 < EssNABot> McDonalds. 0
09:14 < EssNABot> Currywurst 0
09:14 < EssNABot> Hendl..... 0
09:14 < EssNABot> Salatbar.. 0
09:14 < EssNABot> Griechr... 0
09:14 < EssNABot> Metzger... 0
09:14 < EssNABot> Merowinger 0
09:14 < EssNABot> Lidl...... 0
09:14 < EssNABot> Voting time is 600 seconds.
机器人本身会这样看:
--> PRIVMSG #test [-=EssNA-Vote=-]
--> PRIVMSG #test Options are:
--> PRIVMSG #test McDonalds. 0
--> PRIVMSG #test Currywurst 0
--> PRIVMSG #test Hendl..... 0
--> PRIVMSG #test Salatbar.. 0
--> PRIVMSG #test Griechr... 0
--> PRIVMSG #test Metzger... 0
--> PRIVMSG #test Merowinger 0
--> PRIVMSG #test Lidl...... 0
--> PRIVMSG #test Voting time is 600 seconds.
但是在irc上,如果完成,应该在其上运行,输出用户将看到如下所示:
09:14 < Wayne> !EssNA
09:14 < EssNABot> [-=EssNA-Vote=-]
09:14 < EssNABot> are:
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> 0
09:14 < EssNABot> seconds.
机器人提供的输出与为用户输出的服务器上的输出相同。
在我看来,问题出在IRC服务器上,也许有人可以向我指出正确的方向?
您的,马吕斯
似乎您需要在昵称后添加冒号(':'),即PRIVMSG #channel:Message
NIckolay O.的回答是正确的,但只是为了澄清这里发生的情况:
每个IRC协议命令由几个字段组成,用空格隔开。 例外情况是,当字段的第一个字符是冒号时:
-在这种情况下,冒号后的命令其余部分是单个字段(这允许命令中的最后一个字段包含空格)。
因此,当您的机器人发送这样的错误消息时:
PRIVMSG #test Voting time is 600 seconds.
...消息包含7个字段( PRIVMSG
, #test
, Voting
, time
, is
, 600
和seconds.
)。 但是, PRIVMSG
命令应仅在PRIVMSG
之后包含两个字段-通道和要发送的消息。 在这种情况下,服务器显然选择了最后一个字段作为消息(选择在通道之后的字段也就不足为奇了)。
正确的消息,如下所示:
PRIVMSG #test :Voting time is 600 seconds.
...而是包含三个字段( PRIVMSG
, #test
和Voting time is 600 seconds.
)。 现在,这是格式正确的PRIVMSG
命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.