建立资料中心後,更改登入功能
再登入後将用户资料记录在案
变更 dataCenter 对应的 action
dataCenter.js
const GetInstanceClass = require("./component/GetInstanceClass");
/**
* @description 资料都存在这边
*
* @class DataCenter
*/
class DataCenter extends GetInstanceClass {
constructor() {
super();
this.state = {
user: {
id: "X",
username: "X",
name: "游客"
}
};
}
/**
* @description 获取对应资料
*
* @param {string} key
* @return {any} state data
* @memberof DataCenter
*/
getData(key) {
switch (key) {
case "user":
return this.state["user"];
default:
break;
}
}
/**
* @description 设定 state 资料
*
* @param {string} key
* @param {any} data state data
* @memberof DataCenter
*/
setData(key, data) {
switch (key) {
case "setUser":
this.state["user"] = data;
break;
default:
break;
}
}
/**
* @description 订阅资料变更後要执行的程序,先预留到时候再写
*
* @param {string} key state data
* @param {function} callBack
* @memberof DataCenter
*/
subscription(key, callBack) {
}
}
let dataCenter = DataCenter.getInstance();
module.exports = dataCenter;
接着更改 telegram 对应的 login 函式
interface\telegramItem.js
const { TelegramClient } = require("telegram");
const { StringSession } = require("telegram/sessions");
const { Logger } = require("telegram/extensions");
const input = require("input");
const GetInstanceClass = require("../component/GetInstanceClass");
const dataCeneter = require("../dataCenter");
Logger.setLevel("none"); // 这边可以隐藏很多关於 telegram 的运作细节
class TelegramItem extends GetInstanceClass {
constructor() {
super();
this.client = null;
}
/**
* @description 初始化 telegram 实体
*
* @memberof TelegramItem
*/
init() {
this.client = new TelegramClient(
new StringSession(""),
Number(process.env.telegramId), // 这边输入你的 id
process.env.telegramHash, // 输入你的 hash
{ connectionRetries: 5 }
);
}
/**
* @description 登入 telegram
*
* @return {*}
* @memberof TelegramClass
*/
async login() {
await this.client.start({
phoneNumber: async () => await input.text("请输入电话?"),
password: async () => await input.text("请输入密码?"),
phoneCode: async () => await input.text("请输入验证码?"),
onError: (err) => console.log("错误讯息 : " + err.errorMessage),
});
// console.log(); // Save this string to avoid logging in again
console.log("");
console.log("\x1b[36m", "成功登入");
console.log();
let user = await this.client.getMe();
dataCeneter.setData("setUser", {
id: user.id,
username: user.username,
name: user.lastName + user.firstName
})
this.client.session.save();
// 登入成功寄给你的 telegram 一个讯息
await this.client.sendMessage("me", {
message: "node sevret is online! " + new Date().toLocaleString(),
});
return true;
}
}
const telegramItem = TelegramItem.getInstance();
telegramItem.init();
module.exports = telegramItem;
然後更改你好前面对应的名称
view\viewPrinter.js
const consoleItem = require("../interface/consoleItem");
const input = require("input");
const GetInstanceClass = require("../component/GetInstanceClass");
const dataCenter = require("../dataCenter");
class ViewPrinter extends GetInstanceClass{
constructor() {
super();
}
/**
* @description 欢迎你
*
* @memberof ViewPrinter
*/
async welcome() {
return new Promise((resolve) => {
let str = [
"=======================================================",
"=======================================================",
"============ ============",
"============ Welcome Node Telegram ============",
"============ ============",
"=======================================================",
"=======================================================",
];
console.log("\x1b[36m");
for (let i = 0; i < str.length; i++) {
setTimeout(() => {
console.log(str[i]);
if (i === str.length - 1) {
console.log("\x1b[0m");
resolve();
}
}, i * 100);
}
});
}
/**
* @description 主要画面选单
*
* @memberof ViewPrinter
*/
async mainMenu() {
let option = ["登入", "离开"];
let selectOption = await input.select(dataCenter.getData("user").name + " 你好:", option);
return selectOption;
}
/**
* @description 按下去任何按键来继续程序
*
* @return {*}
* @memberof InterfaceClass
*/
async pressToContinue() {
return new Promise((resolve) => {
const handler = () => {
process.stdin.setRawMode(false);
process.stdin.pause();
process.stdout.write("\n");
resolve();
};
process.stdin.resume();
process.stdin.setRawMode(true);
process.stdin.once("data", handler);
});
}
/**
* @description 清空画面
*
* @memberof ViewPrinter
*/
async clearView() {
process.stdout.write(
process.platform === "win32" ? "\x1Bc" : "\x1B[2J\x1B[3J\x1B[H"
);
}
}
let viewPrinter = ViewPrinter.getInstance();
module.exports = viewPrinter;
这样就有登入记忆 user 的功能了
<<: Day 22 UICollectionView的练习 (2/2)
结合先前的 产生channel access token 设定heroku 可以开始建立一个服务器接...
from Unsplash 为什麽工程师也要懂产品设计? 前面笔记提过,现代科技秒新分异、资讯爆炸...
当我们在网站定期更新有价值的内容时,我们会累积一些读者对我们的文章内容感兴趣,当我们发布文章时,有些...
本文内容 阅读官方文件 Angular Components Overview 的笔记内容。 Com...
由於自己对ML的所知的大略概念,和Vertex的基本使用方式介绍已经结束,已经能够部署和得到预估值,...