I’m working on telegram bot, using telethon and aiogram. Code below is one of the methods of the Bot class. When it’s used twice, variables acc_phone_number, verification_code and client get new values, but the problem is that in get_acc_phone_number they have same values, as they had after the first usage of AddAccountForWork method.
<code>async def AddAccountForWork(self, callback: types.CallbackQuery):
@self.disp.message(F.text)
async def get_acc_phone_number(message: types.Message):
nonlocal acc_phone_number, verification_code, client, callback
print(acc_phone_number, verification_code, client, 'nn')
acc_phone_number = message.text
if self.db_manager.AccountForWorkExists(acc_phone_number):
await message.delete()
await callback.message.edit_text(messages.account_exists, reply_markup=keyboards.get_back_to_menu_keyboard())
else:
try:
await client.send_code_request(acc_phone_number)
time.sleep(0.3)
await message.delete()
await callback.message.edit_text(messages.ask_for_verification_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
except PhoneNumberInvalidError:
await message.delete()
await callback.message.edit_text(messages.wrong_phone)
@self.disp.callback_query(F.data.startswith('code_number'))
async def get_verification_code(callback: types.CallbackQuery):
nonlocal acc_phone_number, verification_code, client
symbol_num = 0
for symbol in verification_code:
if symbol == '_':
new_verification_code = list(verification_code)
new_verification_code[symbol_num] = callback.data[-1]
verification_code = ''
for i in new_verification_code: verification_code += i
break
symbol_num += 1
await callback.message.edit_text(messages.ask_for_verification_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
time.sleep(0.3)
if verification_code[-1] != '_':
try:
await client.sign_in(acc_phone_number, verification_code)
string_session = StringSession.save(client.session)
user_name = callback.from_user.username
self.db_manager.AddAccountForWork(user_name, string_session, acc_phone_number)
await client.log_out()
await client.disconnect()
client = None
await callback.message.edit_text(messages.finish_adding_account, reply_markup=keyboards.get_back_to_menu_keyboard())
except PhoneCodeInvalidError:
verification_code = '_____'
await callback.message.edit_text(messages.invalid_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
acc_phone_number, verification_code = '', '_____'
tg_api_id, tg_api_hash = os.getenv('TGAPIID'), os.getenv('TGAPIHASH')
client = TelegramClient('session', tg_api_id, tg_api_hash, system_version='4.16.30-vxCUSTOM')
await client.connect()
await callback.message.edit_text(messages.ask_for_phone)
print(acc_phone_number, verification_code, client, 'nn')
</code>
<code>async def AddAccountForWork(self, callback: types.CallbackQuery):
@self.disp.message(F.text)
async def get_acc_phone_number(message: types.Message):
nonlocal acc_phone_number, verification_code, client, callback
print(acc_phone_number, verification_code, client, 'nn')
acc_phone_number = message.text
if self.db_manager.AccountForWorkExists(acc_phone_number):
await message.delete()
await callback.message.edit_text(messages.account_exists, reply_markup=keyboards.get_back_to_menu_keyboard())
else:
try:
await client.send_code_request(acc_phone_number)
time.sleep(0.3)
await message.delete()
await callback.message.edit_text(messages.ask_for_verification_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
except PhoneNumberInvalidError:
await message.delete()
await callback.message.edit_text(messages.wrong_phone)
@self.disp.callback_query(F.data.startswith('code_number'))
async def get_verification_code(callback: types.CallbackQuery):
nonlocal acc_phone_number, verification_code, client
symbol_num = 0
for symbol in verification_code:
if symbol == '_':
new_verification_code = list(verification_code)
new_verification_code[symbol_num] = callback.data[-1]
verification_code = ''
for i in new_verification_code: verification_code += i
break
symbol_num += 1
await callback.message.edit_text(messages.ask_for_verification_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
time.sleep(0.3)
if verification_code[-1] != '_':
try:
await client.sign_in(acc_phone_number, verification_code)
string_session = StringSession.save(client.session)
user_name = callback.from_user.username
self.db_manager.AddAccountForWork(user_name, string_session, acc_phone_number)
await client.log_out()
await client.disconnect()
client = None
await callback.message.edit_text(messages.finish_adding_account, reply_markup=keyboards.get_back_to_menu_keyboard())
except PhoneCodeInvalidError:
verification_code = '_____'
await callback.message.edit_text(messages.invalid_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
acc_phone_number, verification_code = '', '_____'
tg_api_id, tg_api_hash = os.getenv('TGAPIID'), os.getenv('TGAPIHASH')
client = TelegramClient('session', tg_api_id, tg_api_hash, system_version='4.16.30-vxCUSTOM')
await client.connect()
await callback.message.edit_text(messages.ask_for_phone)
print(acc_phone_number, verification_code, client, 'nn')
</code>
async def AddAccountForWork(self, callback: types.CallbackQuery):
@self.disp.message(F.text)
async def get_acc_phone_number(message: types.Message):
nonlocal acc_phone_number, verification_code, client, callback
print(acc_phone_number, verification_code, client, 'nn')
acc_phone_number = message.text
if self.db_manager.AccountForWorkExists(acc_phone_number):
await message.delete()
await callback.message.edit_text(messages.account_exists, reply_markup=keyboards.get_back_to_menu_keyboard())
else:
try:
await client.send_code_request(acc_phone_number)
time.sleep(0.3)
await message.delete()
await callback.message.edit_text(messages.ask_for_verification_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
except PhoneNumberInvalidError:
await message.delete()
await callback.message.edit_text(messages.wrong_phone)
@self.disp.callback_query(F.data.startswith('code_number'))
async def get_verification_code(callback: types.CallbackQuery):
nonlocal acc_phone_number, verification_code, client
symbol_num = 0
for symbol in verification_code:
if symbol == '_':
new_verification_code = list(verification_code)
new_verification_code[symbol_num] = callback.data[-1]
verification_code = ''
for i in new_verification_code: verification_code += i
break
symbol_num += 1
await callback.message.edit_text(messages.ask_for_verification_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
time.sleep(0.3)
if verification_code[-1] != '_':
try:
await client.sign_in(acc_phone_number, verification_code)
string_session = StringSession.save(client.session)
user_name = callback.from_user.username
self.db_manager.AddAccountForWork(user_name, string_session, acc_phone_number)
await client.log_out()
await client.disconnect()
client = None
await callback.message.edit_text(messages.finish_adding_account, reply_markup=keyboards.get_back_to_menu_keyboard())
except PhoneCodeInvalidError:
verification_code = '_____'
await callback.message.edit_text(messages.invalid_code.format(verification_code), reply_markup=keyboards.get_enter_verification_code_keyboard())
acc_phone_number, verification_code = '', '_____'
tg_api_id, tg_api_hash = os.getenv('TGAPIID'), os.getenv('TGAPIHASH')
client = TelegramClient('session', tg_api_id, tg_api_hash, system_version='4.16.30-vxCUSTOM')
await client.connect()
await callback.message.edit_text(messages.ask_for_phone)
print(acc_phone_number, verification_code, client, 'nn')
Can you please explain why?
New contributor
М Максаков is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.