[16] 建立登入 telegram 功能

接着建立登入功能

在流程控制这边追加 login 功能

controller\flowController.js

const viewPrinter = require("../view/viewPrinter");
const telegramItem = require("../interface/telegramItem");
const GetInstanceClass = require("../component/GetInstanceClass");

class FlowController extends GetInstanceClass {
  constructor() {
    super();
  }

  /**
   * @description 起始画面
   *
   * @memberof FlowController
   */
  async start() {
    await viewPrinter.welcome();
    this.mainMenu();
  }

  /**
   * @description 主要选单
   *
   * @memberof FlowController
   */
  async mainMenu() {
    let selectOption = await viewPrinter.mainMenu();
    switch (selectOption) {
      case "登入":
        this.loginTelegram();
        break;
      case "离开":
        this.leaveApp();
        break;
      default:
        break;
    }
  }

  /**
   * @description 登入 telegram
   *
   * @memberof FlowController
   */
  async loginTelegram() {
    await telegramItem.login();

    this.mainMenu();
  }

  /**
   * @description 离开应用程序
   *
   * @memberof FlowController
   */
  async leaveApp() {
    viewPrinter.clearView();
    console.log("按 任意键 离开程序");
    await viewPrinter.pressToContinue();
    process.exit();
  }
}

let flowController = FlowController.getInstance();

module.exports = flowController;

然後telegram建立登入功能

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");

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("");
    this.client.session.save();
    await this.client.sendMessage("me", {
      message: "node sevret is online! " + new Date().toLocaleString(),
    });

    return true;
  }
}

const telegramItem = TelegramItem.getInstance();

telegramItem.init();

module.exports = telegramItem;

day16


<<:  【Day23】[演算法]-插入排序法Insertion Sort

>>:  认识CSS(九):CSS滤镜特效

Day 16 : 案例分享(5.2) CRM与ERP整合 - 商机与客户往来记录(会议与行事历)

案例说明及适用场景 客户往来记录,属於商机管理的一环,一个客户不见得袛有一次商机,而一个商机的完成必...

Day 25:「好慢喔,下载多少了?」- 进度条

终於到了我们的元件篇啦!!! 今天是第一个元件,所以稍微简单一点。 我们要来做下载的进度条~ 前置...

TCP/IP vs OSI,网际网路中的协议模型

接下来的几篇,我们来看看网路中的协议到底规范了哪些东西,为什麽要有这些规则?又有何优缺点? 首先来看...

【Day27】音乐情绪与乐理

简述音乐情绪模型 看完了昨天的介绍之後,我们知道音乐跟情绪是有相关且可以被分类的,而把这其中关系模型...

[Day16] Tableau 轻松学 - 仪表板

前言 我们目前完成了两个工作表的制作,再来就是要学习如何让多个工作表可以一起互动,而仪表板的功能就是...