မင်္ဂလာပါ Habr ဤသည်မှာ ssh-chat စီးရီး၏ ဒုတိယမြောက် ဆောင်းပါးဖြစ်သည်။
ကျွန်ုပ်တို့ ဘာလုပ်မည်နည်း
- သင့်ကိုယ်ပိုင် ဒီဇိုင်းလုပ်ဆောင်ချက်များကို ဖန်တီးနိုင်မှုတို့ကို ထည့်သွင်းကြပါစို့
- markdown support ကို ထည့်လိုက်ရအောင်
- bot ပံ့ပိုးမှုထည့်ကြပါစို့
- စကားဝှက်လုံခြုံရေးကို တိုးမြှင့်ပါ (ဟက်ရှ်နှင့် ဆား)
ဝမ်းနည်းပါသည်၊ သို့သော် ဖိုင်များ ပေးပို့မည်မဟုတ်ပါ။
စိတ်ကြိုက်ဒီဇိုင်းပါရှိပါတယ်။
လက်ရှိတွင်၊ အောက်ပါ ဒီဇိုင်းလုပ်ဆောင်ချက်များကို ပံ့ပိုးထားပါသည်။
@color
@bold
@underline
@hex
@box
ဒါပေမယ့် သင့်ကိုယ်ပိုင်လုပ်ဆောင်ချက်တွေကို ဖန်တီးနိုင်တဲ့စွမ်းရည်ကို ထပ်ဖြည့်ရကျိုးနပ်ပါတယ်။
လုပ်ဆောင်ချက်အားလုံးကို သိမ်းဆည်းထားသည်။объекте под названием methods
ဒီတော့ function တစ်ခုဖန်တီးဖို့လုံလောက်ပါလိမ့်မယ်။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 ထောက်ခံမှု
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)
bot
ဘယ်လိုအလုပ်လုပ်မလဲ။
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
သုံးသည်ဟု ခေါ်နိုင်သည်။ @bot(botBob){Command}
ဘော့တ်များဖြင့် လုပ်ဆောင်ရန် အရာအားလုံးကို ဖိုင်တွင် ဖော်ပြထားပါသည်။
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 မှတစ်ဆင့် စကားပြောခန်းတစ်ခုရှိသည်။
source: www.habr.com