ssh-chat حصہ 2

ہیلو، حبر۔ یہ ssh-chat سیریز کا دوسرا مضمون ہے۔

ہم کیا کریں گے:

  • آئیے آپ کے اپنے ڈیزائن کے افعال تخلیق کرنے کی صلاحیت شامل کریں۔
  • آئیے مارک ڈاؤن سپورٹ شامل کریں۔
  • آئیے بوٹ سپورٹ شامل کریں۔
  • پاس ورڈ کی حفاظت میں اضافہ کریں (ہیش اور نمک)
    معذرت، لیکن فائلیں نہیں بھیجی جائیں گی۔

حسب ضرورت ڈیزائن کی خصوصیات

فی الحال، مندرجہ ذیل ڈیزائن افعال کی حمایت کی جاتی ہے:

  • @color
  • @bold
  • @underline
  • @hex
  • @box
    لیکن یہ آپ کے اپنے افعال تخلیق کرنے کی صلاحیت کو شامل کرنے کے قابل ہے:
    تمام افعال اس میں محفوظ ہیں۔ объекте под названием 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) +  '!'
})

ssh-chat حصہ 2

مارک ڈاون سپورٹ

مارک ڈاؤن بہت آسان ہے، تو آئیے اسے استعمال کرتے ہوئے شامل کریں۔ ٹرمینل نشان زد

// 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 حصہ 2

بوٹس

یہ کیسے کام کرے گا

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 حصہ 2

آپ بوٹس کے ساتھ کیا کر سکتے ہیں:

  • مانیٹر لوڈ کریں۔
  • تعینات
  • ٹاسک بورڈ

ہیش اور نمک

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

ہم user.json میں اپ ڈیٹ کرتے ہیں اور lobby.js میں موازنہ کرنے کے بجائے ہم checkPassword استعمال کرتے ہیں۔

کل

نتیجے کے طور پر، ہمارے پاس ڈیزائن کی صلاحیتوں اور بوٹس کے ساتھ ssh کے ذریعے بات چیت ہوتی ہے۔
آخری ذخیرہ

ماخذ: www.habr.com

نیا تبصرہ شامل کریں