3

我正在尝试制作一个 IRC 机器人,它将登录到现有帐户(在 QuakeNet 上),因此 Q 机器人可以授予他操作员等级。我可以使用正确的昵称成功登录服务器,但我不知道如何让我的机器人真正登录到帐户。这是我使用的代码:

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);

而且它似乎不能正常工作。有人知道我该怎么做吗?提前感谢您的任何回复。

4

3 回答 3

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 是操作员状态,将在用户别名前显示“@”。

于 2013-08-27T12:53:27.820 回答
1

我建议使用XChat之类的客户端并手动执行您试图让机器人自动化并查看原始日志窗口的步骤。这将向您显示客户端正在执行的命令,以及服务器发送的任何您需要等待或响应的命令。

请注意,当您查看QuakeNet 文档中的命令时,这些是客户端命令,而不是发送到服务器的实际 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
于 2013-08-28T05:54:21.340 回答
0

您可以使用 telnet 客户端直接与服务器对话。这将要求您使用所有幕后命令,这可能有助于您熟悉运行机器人所需的 I/O。

Source 是这个问题上评分最高的答案:How do i program a simple IRC bot in python?

于 2013-09-04T18:17:19.197 回答