Giter VIP home page Giter VIP logo

Comments (12)

ktjd123 avatar ktjd123 commented on July 21, 2024

adding a counter will solve the error part

  let counter = false;

  airgram.on(UPDATE.updateAuthorizationState, async ({ update }, next) => {
    const { authorizationState } = update;
    if (authorizationState._ === AUTHORIZATION_STATE.authorizationStateWaitCode && counter === false) {
      counter = true;
      airgram.api.resendAuthenticationCode().then(() => {
      }).catch(err => {
        console.error(err)
      });
    }
    return next();
  });

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

and it's not logging in

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

the full code i use is @airgram

import mongoose from 'mongoose';
import { Airgram, Auth, prompt } from 'airgram';
import { UPDATE, AUTHORIZATION_STATE } from 'airgram-api';

import provider from './lib/provider';
import getInput from './lib/getInput';
import generateName from './lib/generateName';

import { User } from './models';

const LOCAL_DB = 'telegram-reader';
const MONGODB_URI = process.env.MONGODB_URI || `mongodb://localhost/${LOCAL_DB}`;
// MongoDB
// mongoose.set('debug', true);
mongoose.Promise = global.Promise;
mongoose.connect(MONGODB_URI, {
  useNewUrlParser: true,
  useCreateIndex: true,
  autoIndex: true,
  useFindAndModify: false,
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));

const main = async () => {
  while (true) {
    const phoneNumber = String(await getInput('Please Enter phone Number'));
    const airgram = new Airgram({
      provider: provider(),
      apiId: *****,
      apiHash: '** * ***',
      databaseDirectory: `./db/${phoneNumber}`,
    });

    let counter = false;

    airgram.on(UPDATE.updateAuthorizationState, async ({ update }, next) => {
      const { authorizationState } = update;
      if (
        authorizationState._ === AUTHORIZATION_STATE.authorizationStateWaitCode
        && counter === false
      ) {
        counter = true;
        await airgram.api
          .resendAuthenticationCode()
          .then(() => {
            console.log('Please get ready to get call');
          })
          .catch(() => {
            console.error('please try with another number');
          });
      }
      return next();
    });

    const auth = new Auth(airgram);
    await auth.use({
      code: () => prompt('Please enter code'),
      phoneNumber,
      firstName: generateName().firstName,
      lastName: generateName().lastName,
    });

    await airgram.api.getMe().then((res) => {
      console.log('logged in user is ', res.firstName, res.lastName);
    });

    await User.findOneAndUpdate(
      { phoneNumber },
      { phoneNumber, alive: true, lastUsed: new Date() },
      { upsert: true },
    );
  }
};

main();

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

Fixed logging in part with airgram-api fix. but duplicate input part is not fixed yet

from airgram.

 avatar commented on July 21, 2024

If you need to cancel previous prompt, try to wrap prompt function something like that:

let prevPrompt: { resolve: (data: any) => any, reject: (error: Error) => any } | null

auth.use({
  code: () => new Promise((resolve, reject) => {
    if (prevPrompt) {
      prevPrompt.reject(new Error('Expired prompt'))
    }
    prevPrompt = { resolve, reject }

    return prompt('Please enter code')
      .then(resolve, reject)
      .finally(() => prevPrompt = null)
  })
})

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

Nice code but this doesn't fix the problem it won't cancel previous promt

from airgram.

 avatar commented on July 21, 2024

I see. Please check out this code with version 1.1.1:

import { Airgram, Auth, prompt, PromptDeferred } from 'airgram'

const auth = new Auth(airgram)

let prevPrompt: PromptDeferred | null
auth.use({
  code: () => prompt('Please enter code', (deferred: PromptDeferred) => {
    if (prevPrompt) {
      prevPrompt.reject(new Error('Expired prompt'))
    }
    prevPrompt = deferred
  })
})

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

the duplicate input problem is fixed now but not authing problem re-happened @airgram

from airgram.

 avatar commented on July 21, 2024

Actually, I am not sure what you do and why you need to resend authorization code. Maybe your approach is not correct. Can you clarify it?

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

I want to shorten telegram official app's calling(resend code via phone) time. building a new telegram app

from airgram.

 avatar commented on July 21, 2024

When Auth middleware got authorization status authorizationStateWaitPhoneNumber and receive phone number, Airgram invokes setAuthenticationPhoneNumber method. So you should not use resendAuthenticationCode immediately.

Probably, you need to have possibility to set allowFlashCall and isCurrentPhoneNumber parameters for the setAuthenticationPhoneNumber method.

from airgram.

ktjd123 avatar ktjd123 commented on July 21, 2024

Thankyou

from airgram.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.