在用C ++编写的IRC BOT中设置密码

时间:2013-08-27 12:49:38

标签: c++ bots irc

我正在尝试制作一个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);

它似乎无法正常工作。有人知道我该怎么办? 提前感谢您的回复。

3 个答案:

答案 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?