IRC-Bot в Ruby: PRIVMSG отправляет только последнее слово строки - PullRequest
2 голосов
/ 04 января 2011

Я изучаю ruby, и я взял уже созданный IRC-бот из Интернета, который просто подключается к данному сервену, и не намного. Затем я добавил некоторые функции (в моем случае я пытаюсь провести голосование за обедом).

Пока все работает нормально, но я не знаю, что скрипт ruby ​​делает что-то не так или что-то не так с IRC-сервером.

На том, что я тестировал бот, он работал хорошо, выдавая вывод, подобный этому:

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-сервере, может, кто-то может указать мне правильное направление?

С уважением, Marius

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Похоже, вам нужно добавить двоеточие (':') после псевдонима, т.е. PRIVMSG #channel: Message

2 голосов
/ 05 января 2011

Ответ Николая О. правильный, но просто чтобы уточнить, что здесь происходит:

Каждая команда протокола IRC состоит из нескольких полей, разделенных пробелом. Исключением является случай, когда первым символом поля является двоеточие : - в этом случае оставшаяся часть команды после двоеточия является одним полем (это позволяет последнему полю в команде содержать пробел).

Итак, когда ваш бот отправлял неправильные сообщения, подобные этому:

PRIVMSG #test Voting time is 600 seconds.

... сообщение содержало 7 полей (PRIVMSG, #test, Voting, time, is, 600 и seconds.). Однако команда PRIVMSG должна содержать только два поля после PRIVMSG - канал и сообщение для отправки. В этом случае сервер, по-видимому, выбирал поле last в качестве сообщения (для него также было бы неудивительно, чтобы вместо этого было выбрано поле, следующее за каналом).

Правильное сообщение, например:

PRIVMSG #test :Voting time is 600 seconds.

... вместо этого содержит три поля (PRIVMSG, #test и Voting time is 600 seconds.). Теперь это правильно отформатированная команда PRIVMSG.

...