'没有同一回应"和"注意 - 您需要通过SASL识别才能使用此服务器"尝试使用Roll Your Own Haskell Bot连接到IRC时

时间:2018-02-15 21:03:51

标签: haskell irc

我在Haskell维基上使用Roll Your Own IRC Bot,并且在运行指南提供的代码时收到了这两个错误。

有什么问题?为什么我无法连接?

我正在使用Ubuntu,我尝试使用ghc进行编译并使用ghci运行它。

import Network
import System.IO
import Text.Printf

server = "irc.freenode.org"
port   = 6667
chan   = "#tutbot-testing"
nick   = "tutbot"

main = do
    h <- connectTo server (PortNumber (fromIntegral port))
    hSetBuffering h NoBuffering
    write h "NICK" nick
    write h "USER" (nick++" 0 * :tutorial bot")
    write h "JOIN" chan
    listen h

write :: Handle -> String -> String -> IO ()
write h s t = do
    hPrintf h "%s %s\r\n" s t
    printf    "> %s %s\n" s t

listen :: Handle -> IO ()
listen h = forever $ do
    s <- hGetLine h
    putStrLn s
  where
    forever a = do a; forever a

1 个答案:

答案 0 :(得分:4)

No Ident Response通知指的是来自互联网历史深处的一种搞笑的复古协议。在过去,当多用户Unix机器是规则而不是例外时,有时服务器希望获得关于已启动连接的连接客户端上的特定用户的一些信息。为此目的创建了Ident protocol。我猜IRC服务器仍然包含尝试查询Ident服务器的代码,但它们可能收到的响应很少,所以你可能会忽略这个错误。

SASL错误更严重。它表明您连接的特定IRC服务器已配置为在允许连接之前需要通过SASL协议进行用户识别和身份验证。您可能不希望增加向机器人添加SASL支持的复杂性!

但是,我无法复制您的问题。当我运行您上面发布的代码时,我会连接到主机kornbluth.freenode.net [2001:1bc0:c1::6667/6667],请参阅有关No Ident response的通知,但我的连接已被接受,以及设置我的昵称和加入{{ 1}}频道,我看到了当天的信息。我也看到来自一些可怜的灵魂的消息(也许你?)向他或她的机器人寻求帮助,但我无法回应,因为上面的tutbot代码无法发送任何命令!

您是否有可能使用与上面代码中的差异#tutbot-testingserver进行测试,这是否会导致问题?如果没有,那么可能有一个特定的“irc.freenode.org”服务器被配置为需要SASL,而其余的工作正常。尝试将服务器名称切换为:

nick

这似乎对我有用。

更新:看起来freenode需要从Amazon Web Services IP地址进行SASL身份验证(如此bug report for an IRC client中所述),这样就可以解释您遇到的问题。