哈Ha 这是ssh-chat循环的第2条。
我们将做什么:
- 添加创建自己的设计功能的功能。
- 添加降价支持
- 添加机器人支持
- 提高密码安全性(哈希和盐)
las,将没有发送文件
当前实现的对以下设计功能的支持:
@color
@bold
@underline
@hex
@box
但是值得增加创建自己的功能的能力:
所有功能都存储在 methods
的 methods
因此,创建registerMethod
函数就足够了:
// parserExec.js at end module.exports.registerMethod = function(name, func) { methods[name] = func }
创建服务器后,您还需要返回此方法。
// index.js at require part const { registerMethod } = require('./parserExec') // index.js at end module.exports.registerMethod = registerMethod
现在,在创建服务器时,我们可以注册格式化方法。 一个例子:
const chat = require('.') const { formatNick } = require('./format') chat({}) chat.registerMethod('hello', function(p, name){ return 'Hi, ' + formatNick(name) + '!' })

降价支持
Markdown非常方便,因此请使用标记的终端将其添加
// format.js near require const marked = require('marked'); const TerminalRenderer = require('marked-terminal'); marked.setOptions({ renderer: new TerminalRenderer() }); // format.js line 23 message = marked(message)

机器人
它如何运作
let writeBotBob = chat.registerBot({ name: 'botBob', onConnect(nick, write){ write('@hello{' + nick + '}') }, onDisconnect(nick, write){}, onMessage(nick, message, write) { if(message == 'botBob!') write('I\'m here') }, onCommand(command, write) { write('Doing ' + command) } })
可以使用@bot(botBob){Command}
调用onCommand
文件中描述了与机器人合作的所有内容:
let bots = []; // let onWrite = () => {}; function getWrite(bot) { // return msg => { onWrite(bot.name, msg); }; } module.exports.message = function message(nick, message) { // index.js bots.forEach(bot => { try { bot.onMessage(nick, message, getWrite(bot)); } catch (e) { console.error(e); } }); }; module.exports.connect = function message(nick) { // bots.forEach(bot => { try { bot.onConnect(nick, getWrite(bot)); } catch (e) { console.error(e); } }); }; module.exports.disConnect = function message(nick) { // bots.forEach(bot => { try { bot.onDisconnect(nick, message, getWrite(bot)); } catch (e) { console.error(e); } }); }; module.exports.command = function message(name, message) { // bots.forEach(bot => { if (bot.name == name) { try { bot.onCommand(message, getWrite(bot)); } catch (e) { console.error(e); } } }); }; module.exports.registerBot = function(bot) { bots.push(bot); return getWrite(bot) }; module.exports.onMessage = func => { onWrite = func; };

机器人可以做什么:
哈希和盐
为什么不使用ssh键? 因为ssh密钥在不同的设备上会有所不同
创建一个文件,该文件将负责检查和创建密码
// crypto.js const crypto = require('crypto'); function genRandomString(length) { return crypto .randomBytes(Math.ceil(length / 2)) .toString('hex') .slice(0, length); } function sha512(password, salt){ const hash = crypto.createHmac('sha512', salt); /** Hashing algorithm sha512 */ hash.update(password); const value = hash.digest('hex'); return value }; function checkPass(pass, obj){ return obj.password == sha512(pass, obj.salt) } function encodePass(pass){ const salt = genRandomString(16) return JSON.stringify({ salt, password: sha512(pass, salt) }) } module.exports.encodePass = encodePass module.exports.checkPass = checkPass
也是用于对密码进行加盐和哈希处理的脚本
// To generate password run node ./encryptPassword password const { encodePass } =require('./crypto') console.log(encodePass(process.argv[2]))
我们在users.json中更新,而不是在lobby.js中进行比较,我们使用checkPassword
总结
结果,我们与设计选项和机器人进行了ssh聊天。
最终仓库