Ssh-chat၊ အပိုင်း ၂

မင်္ဂလာပါ 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) +  '!'
})

Ssh-chat၊ အပိုင်း ၂

Markdown ထောက်ခံမှု

Markdown က အရမ်းအဆင်ပြေတာမို့ ထည့်သုံးကြည့်ရအောင် terminal အမှတ်အသားပြုထားသည်။

// 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)

Ssh-chat၊ အပိုင်း ၂

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-chat၊ အပိုင်း ၂

ဘော့တ်များဖြင့် သင်လုပ်နိုင်သည်-

  • မော်နီတာတင်ပါ။
  • အသုံးချ
  • အလုပ်ဘုတ်

မုန်ညင်းနှင့်ဆား

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

မှတ်ချက် Add