';“无识别响应”;及;注意--您需要通过SASL标识才能使用此服务器;尝试使用自己的Haskell机器人连接到IRC时
我在Haskell wiki上使用,运行指南提供的代码时收到这两个错误 怎么了?为什么我不能连接 我正在使用Ubuntu,我试着用ghc编译它,用ghci运行它';“无识别响应”;及;注意--您需要通过SASL标识才能使用此服务器;尝试使用自己的Haskell机器人连接到IRC时,haskell,irc,Haskell,Irc,我在Haskell wiki上使用,运行指南提供的代码时收到这两个错误 怎么了?为什么我不能连接 我正在使用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 <- connect
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
导入网络
导入系统.IO
导入文本.Printf
server=“irc.freenode.org”
端口=6667
chan=“#tutbot测试”
nick=“tutbot”
main=do
h字符串->字符串->IO()
写入h s t=do
hPrintf h“%s%s\r\n”s t
printf“>%s%s\n”s t
侦听::句柄->IO()
听h=永远$do
s无识别响应的通知指的是互联网历史深处的一个可笑的过时协议。在过去,当多用户Unix机器成为规则而不是例外时,有时服务器想要获取连接客户端上发起连接的特定用户的一些信息。为此目的创建了。我猜IRC服务器仍然包含试图查询Ident服务器的代码,但它们可能收到的响应非常少,所以您可能可以忽略此错误
SASL错误更为严重。这表明您连接到的特定IRC服务器已配置为在允许连接之前需要通过SASL协议进行用户标识和身份验证。您可能不希望将SASL支持添加到您的机器人中,从而增加复杂性
然而,我不能重复你的问题。当我运行上面发布的代码时,我连接到主机kornbluth.freenode.net[2001:1bc0:c1::6667/6667]
,请参阅关于无标识响应的通知
,但我的连接被接受,设置我的昵称和加入tutbot测试频道的命令也被接受,我看到了当天的消息。我也看到一些可怜的灵魂(也许是你?)向他或她的机器人寻求帮助,但我无法响应,因为上面的tutbot代码无法发送任何命令
您是否可能使用与上面代码中的不同的服务器
或尼克
来测试它,这就是问题的原因?如果没有,则可能有一个特定的“irc.freenode.org”服务器被配置为需要SASL,而其他服务器工作正常。尝试将服务器名称切换为:
server = "kornbluth.freenode.net"
这似乎对我有用
更新:看起来freenode需要来自Amazon Web Services IP地址的SASL身份验证(如本文所述),这可以解释您遇到的问题。无标识响应通知提到了一个来自互联网历史深处的过时协议。在过去,当多用户Unix机器成为规则而不是例外时,有时服务器想要获取连接客户端上发起连接的特定用户的一些信息。为此目的创建了。我猜IRC服务器仍然包含试图查询Ident服务器的代码,但它们可能收到的响应非常少,所以您可能可以忽略此错误
SASL错误更为严重。这表明您连接到的特定IRC服务器已配置为在允许连接之前需要通过SASL协议进行用户标识和身份验证。您可能不希望将SASL支持添加到您的机器人中,从而增加复杂性
然而,我不能重复你的问题。当我运行上面发布的代码时,我连接到主机kornbluth.freenode.net[2001:1bc0:c1::6667/6667]
,请参阅关于无标识响应的通知
,但我的连接被接受,设置我的昵称和加入tutbot测试频道的命令也被接受,我看到了当天的消息。我也看到一些可怜的灵魂(也许是你?)向他或她的机器人寻求帮助,但我无法响应,因为上面的tutbot代码无法发送任何命令
您是否可能使用与上面代码中的不同的服务器
或尼克
来测试它,这就是问题的原因?如果没有,则可能有一个特定的“irc.freenode.org”服务器被配置为需要SASL,而其他服务器工作正常。尝试将服务器名称切换为:
server = "kornbluth.freenode.net"
这似乎对我有用
更新:看起来freenode需要来自Amazon Web Services IP地址的SASL身份验证(如本文所述),这可以解释您遇到的问题。哈哈,是的,就是我。我尝试使用多个不同的服务器,每次收到相同的消息。这可能是Amazon Web服务独有的东西吗?是的,我添加了一个更新--看起来这就是问题所在。你知道如何用Haskell实现SASL吗?我不介意了解它。有sasl
和gsasl
软件包,但两个看起来都不是很好。这里不需要sasl。IRC使用PLAIN,它只是用户名+“\0”+密码
编码为base64。要实现SASL,您必须在初始用户
命令之前发送CAP LS
,然后在接收到CAP*LS:。。。sasl…
行,然后发送验证base64(用户名+\0+密码)
和最后一个CAP END
。哈哈,是的,是我。我尝试使用多个不同的服务器,每次收到相同的消息。这可能是Amazon Web服务独有的东西吗?是的,我添加了一个更新--看起来这就是问题所在。你知道如何用Haskell实现SASL吗?我不介意了解它。有sasl
和gsasl
软件包,但它们看起来都不是很好。你真的不需要sasl