如何使用 Nodejs IRC 模块加入受密码保护的 IRC 服务器?

Posted

技术标签:

【中文标题】如何使用 Nodejs IRC 模块加入受密码保护的 IRC 服务器?【英文标题】:How To Join Password Protected IRC Server Using Nodejs IRC Module? 【发布时间】:2013-09-08 19:47:06 【问题描述】:

我查看了在此处找到的文档:https://node-irc.readthedocs.org/en/latest/API.html#client

但我找不到输入密码的地方。也没有例子。

另外,有人能告诉我 userName 和 realName 之间的区别吗?因为你的昵称被指定为第二个参数。

这是我所拥有的:

// Create the configuration
var config = 
    options : channels:['#mychan'], port: 6667, secure: true, userName: 'myname', realName: 'myname',
    server: "servername",
    botName: "Ray"
;

var irc = require("irc");

var bot = new irc.Client(config.server, config.botName, config.options);

bot.join('#mychan');

bot.say('#mychan', "Hello World!");

【问题讨论】:

【参考方案1】:

刚刚搞定了,所以我需要回到这里发布这个。这非常简单,但由于我复制粘贴的示例代码而暗示了我一点。

在您的配置中,您需要这三样东西来访问用户名/密码类型的 IRC 频道(这是正确执行此操作的最低要求):

options: sasl:true, username: "myBotName", password: "myBotPasswordHere"

注意,SECURE: TRUE 正在寻找 SSL 证书。如果您只是尝试昵称/密码身份验证,我认为这不是您要寻找的。从您的选项配置中删除该位。

我在您查看的同一个地方找到了我的答案,但是如果您继续阅读 SASL 解释,它会告诉您有关 nick/pass 的信息。

https://node-irc.readthedocs.org/en/latest/API.html?highlight=sasl

这是我的整个文件。我的配置有点不同。我还连接到 Twitch.tv 的 IRC,所以我的通行证是 OAUTH。

我刚刚连接并测试了它。这是来自此处的复制/粘贴测试:http://davidwalsh.name/nodejs-irc 但我为 Twitch.tv 修改了它

我变得懒惰,只是在服务器/昵称之后填充了整个配置。但它奏效了,这就是我们要在这里做的事情,哈哈。我的目的只是一个简单的聊天机器人,可以用于我的流频道。

WarpSpiderBot 是我必须在 Twitch.tv 上注册才能完成这项工作的用户,因为它需要完整的 oauth 登录凭据才能访问他们的 IRC 频道。

// Create the configuration
var config = 
    channels: ["#warpspiderx"],
    server: "irc.twitch.tv",
    username: "warpspiderbot",
    nick: "warpspiderbot",
    password: "oauth:--REDACTED--",
    sasl: true
;

// Get the lib
var irc = require("irc");

// Create the bot name
var bot = new irc.Client(config.server, config.nick, config);

// Listen for joins
bot.addListener("join", function(channel, who) 
    // Welcome them in!
    bot.say(channel, who + "...dude...welcome back!");
);

// Listen for any message, PM said user when he posts
bot.addListener("message", function(from, to, text, message) 
    bot.say(from, "¿Que?");
);

// Listen for any message, say to him/her in the room
bot.addListener("message", function(from, to, text, message) 
    bot.say(config.channels[0], "¿Public que?");
);

【讨论】:

【参考方案2】:

文档提示options 中存在password 键。试试这样设置?

对于用户名和实名,这是 IRC 做出的一个奇怪的区分。用户名是一个单词,实名可以更长。它在 WHOIS 中(在 irssi 中,在本例中)显示为:

nickname [username@host.example.com]
--  ircname  : Real Name

【讨论】:

不走运...有没有办法获得失败的交互式反馈?呃…… irc 模块可能根本不支持密码验证。如果是这种情况,您可能只是运气不佳。【参考方案3】:

此配置对我有用,可以将在 glitch.com 上运行的 node.js 中的机器人连接到我注册昵称的 Freenode:

let client = new irc.Client('irc.freenode.net', 'yourname', 
  sasl: true,
  userName: 'yourname',
  password: 'yourpassword',
  secure: true,
  debug: true
);

userName 字段区分大小写

我发现这一点是因为我最初有 username(全小写)。但是在启用debug 后,日志显示它正在发送正确的昵称,但 USER 命令正在发送“nodebot”作为用户名值。

更改它以匹配文档 [1] 完全解决了问题。

注意:secure 选项与登录能力无关。如果您不关心网络上的通信是明文形式,可以将其删除。不推荐。

【讨论】:

以上是关于如何使用 Nodejs IRC 模块加入受密码保护的 IRC 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IRC URI 方案打开查询窗口?

使用nodejs创建加入用户验证的websocket服务

如何在 python 中编写模块私有/受保护的方法?

freenode IRC 如何在其加入地址中分配用户字符串。即 nick!user@host

当人加入昵称 IRC

如何使用 Bash 编写的 IRC 机器人从 IRC 频道读取消息?