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

标签 c++ bots irc

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

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

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

最佳答案

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

请注意,当您查看 commands in the QuakeNet documentation 时,这些是 client 命令,而不是发送到服务器的实际 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

关于c++ - 在用 C++ 编写的 IRC BOT 中设置密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18465922/

相关文章:

c++ - PCA 输出特征向量和特征值

c++ - OOP 未在此范围内声明

javascript - 如何使用 Javascript 保护机器人/爬虫的表单

Char[] 丢失数据

c++ - Libxml2 xmlSchemaParse 失败

bots - 如何将机器人添加到 Telegram 群组?

bots - Telegram Bot 预填充文本供用户编辑

irc - 使用 ExIrc (Elixir) 连接到多个 IRC 服务器?

node.js - 如何模拟 irc 服务器断开连接来测试我的 nodejs irc 机器人?

c++ - 如何在 C 中找到可执行文件的位置?