我正在尝试制作一个IRC Bot,它将登录现有帐户(在QuakeNet上),因此Q bot可以授予他操作员等级。我可以使用正确的缺口成功登录到服务器,但我不知道如何让我的机器人实际登录到帐户。这是我使用的代码:
send(cSock, "PASS SuperPasswordOfAnAdmin\r\n", strlen("PASS SuperPasswordOfAnAdmin\r\n"), NULL);
send(cSock, "USER custom 0 0 SuperUsernameOfAnAdmin\r\n", strlen("USER custom 0 0 SuperUsernameOfAnAdmin\r\n"), NULL);
send(cSock, "NICK SuperNickOfAnAdmin\r\n", strlen("NICK SuperNickOfAnAdmin\r\n"), NULL);
它似乎无法正常工作。有人知道我该怎么办? 提前感谢您的回复。
答案 0 :(得分:1)
通常,IRC服务器都有一项名为NICKSERV
的服务,可让您识别自己的帐户:
您指定以下命令:
/nickserv identify [nickname] password
因此,在您的C++
计划中,您必须发送:
send(cSock, "NICKSERV IDENTIFY SuperNickofAnAdmin SuperPasswordOfAnAdmin");
对于 QBOT
,您可以这样做:
/msg Q@CServe.quakenet.org AUTH username password
因此,在您发送的C++
计划中:
send(cSock, "MSG Q@CServe.quakenet.org AUTH SuperNickofAnAdmin SuperPasswordOfAnAdmin");
要在IRC上授予用户操作员状态,您必须发送命令:
MODE #Channel +o username
+ o是运营商状态,将在用户别名之前显示“@”。
答案 1 :(得分:1)
我建议使用像XChat这样的客户端,并手动执行您尝试让机器人自动化并观看原始日志窗口的步骤。这将显示客户端正在执行的命令,以及服务器发送的任何您需要等待或响应的内容。
请注意,当您查看commands in the QuakeNet documentation时,这些是客户端命令,而不是发送到服务器的实际IRC命令。例如,/msg user message here
实际上是通过网络发送的PRIVMSG user :message here
。
我怀疑为了正确满足IRC服务器,你必须做的比你的初始代码所做的更多,比如处理PING / PONG并等待001数字。在伪代码中:
// connect
conn := Connect("tcp", "your.irc.server:6667")
// login
Fprintf(conn, "PASS %s\r\n", server_password)
Fprintf(conn, "USER %s . . :%s\r\n", username, realname)
Fprintf(conn, "NICK %s\r\n", nick)
forever {
line := ReadLine(conn)
command, args := ParseIRCLine(line)
// welcome message, we're in!
if command == "001" {
break
}
// PING, send PONG
if command == "PING" {
Fprintf(conn, "PONG :%s\r\n", Join(args, " "))
}
}
Fprintf("PRIVMSG Q@CServe.quakenet.org :AUTH %s %s\r\n", username, password)
// wait for response from Q
// join channels, etc
// handle more pings, channel messages, etc
答案 2 :(得分:0)
您可以使用telnet客户端直接与服务器通话。这将要求您使用所有幕后命令,这可能有助于您熟悉正在运行的机器人所需的I / O.
来源是此问题的最高评分:How do i program a simple IRC bot in python?