Ruby中的IRC-Bot:PRIVMSG只发送字符串的最后一个字

时间:2011-01-04 08:21:05

标签: ruby irc

我正在学习红宝石,我从网上拿了一个已经完成的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.

bot提供的输出与用户输出的服务器上的输出相同。

对我来说,问题是IRC服务器,也许有人可以指出我正确的方向?

此致, 的Marius

2 个答案:

答案 0 :(得分:3)

您似乎需要在昵称后添加冒号(':'),即PRIVMSG #channel:Message

答案 1 :(得分:2)

NIckolay O.'s answer是正确的,但只是为了澄清这里发生了什么:

每个IRC协议命令由几个字段组成,由空格分隔。例外情况是字段的第一个字符是冒号: - 在这种情况下,冒号后面的命令的其余部分是单个字段(这允许命令中的最后一个字段包含空格)

所以,当您的机器人发送不正确的消息时这样:

PRIVMSG #test Voting time is 600 seconds.

...邮件包含7个字段(PRIVMSG#testVotingtimeis600和{{ 1}})。但是,seconds.命令应该只包含PRIVMSG后面的两个字段 - 要发送的通道和消息。在这种情况下,服务器显然正在选择 last 字段作为消息(它也不足为奇地选择频道后面的字段)。

正确的信息,如下:

PRIVMSG

...而是包含三个字段(PRIVMSG #test :Voting time is 600 seconds. PRIVMSG#test)。现在这是一个格式正确的Voting time is 600 seconds.命令。