Hello, Habr. Kani waa maqaalkii 2aad ee taxanaha ssh-chat.
Waxa aanu samayn doono:
- Aynu ku darno awoodda aad ku abuuri karto hawlahaaga naqshadaynta
- Aynu ku darno taageerada calaamadaynta
- Aynu ku darno taageerada bot
- Kordhi ammaanka erayga sirta ah (xash iyo milix)
Waan ka xunahay, laakiin ma jiri doonto diritaan faylal ah.
Tilmaamaha naqshadeynta gaarka ah
Hadda, hawlaha naqshadaynta ee soo socda ayaa la taageeray:
@color
@bold
@underline
@hex
@box
Laakiin waxaa habboon in lagu daro awoodda aad ku abuuri karto hawlahaaga:
Dhammaan hawlaha waxa lagu kaydiyaaΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ methods
Markaa waxay ku filnaan doontaa in la abuuro shaqoregisterMethod
:
// parserExec.js at end
module.exports.registerMethod = function(name, func) {
methods[name] = func
}
Waxaad sidoo kale u baahan tahay inaad soo celiso habkan ka dib markaad abuurto server-ka
// index.js at require part
const { registerMethod } = require('./parserExec')
// index.js at end
module.exports.registerMethod = registerMethod
Hadda, marka la abuurayo server, waxaan diiwaan gelin karnaa hababka qaabeynta. Tusaale:
const chat = require('.')
const { formatNick } = require('./format')
chat({})
chat.registerMethod('hello', function(p, name){
return 'Hi, ' + formatNick(name) + '!'
})
Taageerada Markdown
Markdown waa mid aad u habboon, markaa aan ku darno annagoo isticmaalaya
// 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)
Bots
Sidee u shaqayn doontaa
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
waxaa lagu magacaabi karaa iyadoo la isticmaalayo @bot(botBob){Command}
Wax kasta oo loogu talagalay la shaqeynta bots ayaa lagu sifeeyay faylka:
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;
};
Waxa aad ku samayn karto bots:
- Korjoogteynta culeyska
- diraysa
- Guddiga shaqada
Xashiish iyo milix
Maxaa diidaya furayaasha ssh? Sababtoo ah furayaasha ssh waxay ku kala duwanaan doonaan aaladaha kala duwan
Aan abuurno fayl mas'uul ka noqon doona hubinta iyo abuurista ereyada sirta ah
// 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
Sidoo kale qoraal loogu talagalay cusbaynta iyo hashing the password
// To generate password run node ./encryptPassword password
const { encodePass } =require('./crypto')
console.log(encodePass(process.argv[2]))
Waxaan ku cusboonaysiinnaa isticmaalaha.json oo halkii aan ku barbar dhigi lahayn lobby.js waxaan isticmaalnaa CheckPassword
Natiijada
Natiijo ahaan, waxaan ku leennahay sheekeysiga ssh oo leh awood naqshadeyn iyo bots.
Source: www.habr.com