Habari, Habr. Hii ni makala ya 2 katika mfululizo wa ssh-chat.
Tutafanya nini:
- Hebu tuongeze uwezo wa kuunda vipengele vyako vya kubuni
- Wacha tuongeze usaidizi wa alama
- Wacha tuongeze usaidizi wa kijibu
- Ongeza usalama wa nenosiri (heshi na chumvi)
Samahani, lakini hakutakuwa na utumaji wa faili.
Vipengele vya muundo maalum
Hivi sasa, vipengele vifuatavyo vya kubuni vinatumika:
@color
@bold
@underline
@hex
@box
Lakini inafaa kuongeza uwezo wa kuunda kazi zako mwenyewe:
Vitendaji vyote vimehifadhiwa ndaniΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ methods
Kwa hiyo itakuwa ya kutosha kuunda kaziregisterMethod
:
// parserExec.js at end
module.exports.registerMethod = function(name, func) {
methods[name] = func
}
Pia unahitaji kurudisha njia hii baada ya kuunda seva
// index.js at require part
const { registerMethod } = require('./parserExec')
// index.js at end
module.exports.registerMethod = registerMethod
Sasa, wakati wa kuunda seva, tunaweza kusajili njia za uumbizaji. Mfano:
const chat = require('.')
const { formatNick } = require('./format')
chat({})
chat.registerMethod('hello', function(p, name){
return 'Hi, ' + formatNick(name) + '!'
})
Usaidizi wa alama chini
Markdown ni rahisi sana, kwa hivyo wacha tuiongeze kwa kutumia
// 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)
Vijibu
Itafanyaje kazi
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)
}
})
onCommand
inaweza kuitwa kutumia @bot(botBob){Command}
Kila kitu cha kufanya kazi na bots kinaelezewa kwenye faili:
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;
};
Unachoweza kufanya na roboti:
- Mfuatiliaji wa mzigo
- Tumia
- Bodi ya kazi
Hash na chumvi
Kwa nini sio funguo za ssh? Kwa sababu funguo za ssh zitakuwa tofauti kwenye vifaa tofauti
Wacha tuunda faili ambayo itakuwa na jukumu la kuangalia na kuunda nywila
// 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
Pia hati ya kuweka chumvi na kuharakisha nenosiri
// To generate password run node ./encryptPassword password
const { encodePass } =require('./crypto')
console.log(encodePass(process.argv[2]))
Tunasasisha katika users.json na badala ya kulinganisha katika lobby.js tunatumia checkPassword
Jumla ya
Kwa hivyo, tuna gumzo kupitia ssh yenye uwezo wa kubuni na roboti.
Chanzo: mapenzi.com