我收到错误消息
:irc.evilzone.org通知AUTH:*查找您的主机名...
:irc.evilzone.org注意事项:* 找到您的主机名(缓存)
PING:7091A8FB
:irc.evilzone.org 451加入:你还没有注册
:irc.evilzone.org 451 PRIVMSG:您尚未注册
server = "irc.evilzone.org" # Server
port = 6667 #port connect through IRC standard is :(6667 or 9999)
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( server, port ) )
print irc.recv ( 4096 )
nick = 'Piebot' #bots name
chan = 'test' #channel
version= "1.0" #current version
irc.send ( 'NICK Pizebot\r\n' )
irc.send ( 'USER Pizebot Pibot Pibot :Python IRC\r\n' )
irc.send ( 'JOIN #test\r\n' …Run Code Online (Sandbox Code Playgroud) 我必须为学校的项目开发自己的IRC服务器.学校并不需要太多,我必须向他们展示一个功能强大的irc服务器,它接受多个连接并实际执行基本任务,如打开房间,聊天,禁止..
我年轻的时候开发了自己的IRC机器人但是构建irc服务器要困难得多,因为我没有时间自己做研究或阅读整个IRC服务器协议的RFC.
所以特别的是,你知道任何简短描述irc服务器协议的网站/教程/文章,所以我可以开发一个基本的irc服务器而不需要阅读整个RFC吗?
我知道这可能会让一些人感到沮丧,我实际上并不想研究这个协议,而只是为了我的学校项目而"复制"它.事实并非如此,我确实想研究它,因为我研究了很多协议,我会的.现在我不需要理解它,我只需要为我的项目工作,或者我将没有成绩.
我正在创建一个Swing GUI,我想将一个irc客户端包含在JFrame中.所以我正在寻找一个可以轻松设置并放入JPanel的库.但我在谷歌上似乎找到的只是在浏览器中运行的applet.
在Python中,当尝试使用irc-8.1.1的示例程序irccat2.py时,出现此错误。我找不到在线记录的任何地方。有谁知道这意味着什么,我该如何解决?谢谢。
Traceback (most recent call last):
File "irccat2.py", line 10, in <module>
import irc.client
File "C:\Python27\lib\site-packages\irc-8.1.1-py2.7.egg\irc\client.py", line 3
96
class Connection(object, metaclass=abc.ABCMeta):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用STARTTLS将套接字升级到SSLSocket。在InspIRCd的Wiki上,这是应该如何工作的
>> STARTTLS
<< :test2.chatspike.net 670 nickname :STARTTLS successful, go ahead with TLS handshake
(SSL Handshake)
Run Code Online (Sandbox Code Playgroud)
所以在我的代码中,我已经写过(略有简化)
else if (code.equals("670")) {
SSLSocketFactory sslSocketFactory = ((SSLSocketFactory) SSLSocketFactory.getDefault());
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket(
socket,
socket.getInetAddress().getHostAddress(),
socket.getPort(),
true);
sslSocket.startHandshake();
bufferedReader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream(), getEncoding()));
bufferedWriter = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream(), getEncoding()));
socket = sslSocket;
}
Run Code Online (Sandbox Code Playgroud)
但是,无论是否有startHandshake(),我总是会收到一个recv失败(当我尝试从新的bufferedReader中读取时,我不会得到它
java.io.IOException: Can't connect to server
at org.pircbotx.PircBotX.connect(PircBotX.java:472) [Exception handling]
at org.pircbotx.PircBotX.connect(PircBotX.java:224) [Overridden constructor]
at org.pircbotx.impl.PircBotXExample.main(PircBotXExample.java:185)
Caused by: java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at …Run Code Online (Sandbox Code Playgroud) 我曾常在freenode的#RubyOnRails上闲逛.我之前没有IRC的经验,michael hartl的教程引导我去那里.过去几周,当我尝试加入该频道时,我得到了这个问题
NickServ- This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify <password>.
[12:46] == gateway/web/freenode/ip.122.172.187.129 is now your hidden host (set by syn.)
[12:46] == #rubyonrails Cannot join channel (+r) - you need to be identified with services
所以,有人告诉我如何识别服务..
在通过最新的IRC RFC进行调整之后我感到有些困惑,RFC在5.1节规定响应005用于退回消息,但每当我连接到IRC服务器时,005数字响应用于ISUPPORT ,因为它描述了这里.
我错误地认为RFC2812是最新的?或者,在将005更改为RPL_ISUPPORT时,我是否遗漏了一些附录?
我也发现了这个早期的SO 问题(它来自2011年,但仍然比我能找到的任何文档更新)其中005的回复被称为"地图",这是现在完整的第三件事.
为了增加混乱,我在这里发现了另一个2011年的SO问题,其中有人指出RFC2812不是实现的,而应该遵循RFC 1459,但是在第6节:回复 0-199的回复丢失了,我我无法在文档中的任何位置找到它们.
我希望有人可以为我提供一些关于IRC文档噩梦的信息.
所以下面的网站解释了如何使用套接字制作一个irc机器人,但它只适用于python2,所以我试图让它兼容,但我得到了标题中提到的错误.
这是我的代码:
import socket
# Some basic variables used to configure the bot
server = "irc.freenode.net" # Server
channel = "#volafile"
botnick = "Mybot" # Your bots nick
def ping(): # This is our first function! It will respond to server Pings.
ircsock.send(b"PONG :pingis\n")
def sendmsg(chan , msg): # to the channel.
ircsock.send(b"PRIVMSG "+ chan +b" :"+ msg +b"\n")
def joinchan(chan): # This function is used to join channels.
ircsock.send(b"JOIN "+ chan + b"\n")
def hello(): # This function responds …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写自己的IRC服务器.我正在引用IRC RFC,但这对我来说有点混乱.如果我严格遵守RFC,我不认为任何流行的客户端都可以使用我的服务器,比如mIRC.例如,RFC说,服务器应该以一个成功的模式命令下列数字响应中的一个响应:RPL_BANLIST,RPL_CHANNELMODEIS,RPL_ENDOFBANLIST,RPL_UMODEIS.这将使我相信,在成功的用户模式更改时,我会使用RPL_UMODEIS进行响应,尽管RFC似乎没有明确说明.
但是,当我检查源代码到另一个开源IRC服务器时,我看到它以'MODE'的非数字命令响应.它只是回显它看起来的MODE命令.
你怎么回应MODE命令?是否有更好的格式化RFC,有一个简单的命令和响应图表,或什么?