Как добавить номера, начинающиеся с +8888, если некоторые из них не отображаются корректно?

Привет всем! У меня возникла проблема с ботом: он не добавляет в контакты некоторые зарегистрированные номера, которые начинаются с +8888. В частности, бот добавляет некоторые номера, а другие, связанные с аккаунтом, пропускает и выводит сообщение "Номер не привязан". Можете помочь разобраться в этом? Вот мой код: <pre><code class="python">import asyncio
from telethon import TelegramClient
from telethon.tl.functions.contacts import ImportContactsRequest
from telethon.tl.types import InputPhoneContact
import logging
from datatbase import * 
import random

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s')

logger = logging.getLogger(__name__)

client = TelegramClient(session='session', api_id=api_id, api_hash=api_hash, device_model=device_model, system_version=system_version)

async def check_telegram_number_and_notify(phone_number):
    try:
        contact = InputPhoneContact(
            client_id=random.randint(0, 9999),
            phone=phone_number,
            first_name="user",
            last_name="test"
        )
        result = await client(ImportContactsRequest(contacts=[contact]))
        
        print(result)
        if result.users:  
            user = result.users[0]
            user_id = user.id

            if user.username:  
                username = user.username
            elif user.usernames:  
                username = user.usernames[0].username
            else:
                username = "Не указан"
            print(user.username)
            print(user.usernames)

            update_status = await check_and_update_number(phone_number, user_id)

            if update_status == "new":
                message = (
                    f"✅ Номер {phone_number} привязан к Telegram.\n"
  • 21 ноября 2024 г. 21:13
Ответы на вопрос 1
Ваша проблема связана с тем, что некоторые номера, начинающиеся с +8888, могут не отображаться корректно по нескольким причинам. Вот несколько рекомендаций и подходов к решению вашей проблемы:

1. **Проверка формата номера**: Убедитесь, что номер телефона, который вы передаете, соответствует международному формату. Например, номер должен быть в формате `+88881234567`.

2. **Проблемы с привязкой**: Если Telegram не может найти пользователя/аккаунт по номеру, который вы проверяете, это может быть связано с тем, что номер не зарегистрирован или он временно деактивирован. В некоторых случаях, если номер был зарегистрирован, но неактивен, Telegram не будет правильно работать с такими номерами.

3. **Добавление отложенных номеров**: Иногда стоит добавить небольшую задержку перед каждой попыткой добавления номера, чтобы избежать проблемы с перегрузкой API Telegram. Вы можете использовать `await asyncio.sleep(1)` для установки паузы.

4. **Обработка ошибок**: Вам нужно добавить обработку исключений, чтобы отлавливать ошибки, возникающие при попытке привязать номера. Например, если ошибка связана с тем, что номер не привязан, вы можете обработать это и продолжить.

5. **Логирование более подробной информации**: Добавьте больше информации в логи, чтобы лучше понять, что происходит. Например, вы можете логировать ошибки, возникающие во время выполнения кода.

Вот обновленный пример вашего кода с учетом этих рекомендаций:

```python
import asyncio
from telethon import TelegramClient
from telethon.tl.functions.contacts import ImportContactsRequest
from telethon.tl.types import InputPhoneContact
import logging
import random

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s')

logger = logging.getLogger(__name__)

client = TelegramClient(session='session', api_id=api_id, api_hash=api_hash, device_model=device_model, system_version=system_version)

async def check_telegram_number_and_notify(phone_number):
    try:
        # Убедитесь, что номер в правильном формате
        phone_number = phone_number.strip()
        
        contact = InputPhoneContact(
            client_id=random.randint(0, 9999),
            phone=phone_number,
            first_name="user",
            last_name="test"
        )
        
        result = await client(ImportContactsRequest(contacts=[contact]))
        
        if result.users:  
            user = result.users[0]
            user_id = user.id

            username = user.username if user.username else "Не указан"
            logger.info(f"Пользователь найден: {username} ({phone_number})")

            update_status = await check_and_update_number(phone_number, user_id)

            if update_status == "new":
                message = f"✅ Номер {phone_number} привязан к Telegram."
                logger.info(message)
            else:
                logger.info(f"Номер {phone_number} уже зарегистрирован.")
        else:
            logger.warning(f"Номер {phone_number} не привязан к Telegram.")
    
    except Exception as e:
        logger.error(f"Ошибка при обработке номера {phone_number}: {e}")
    
    await asyncio.sleep(1)  # Задержка между запросами

# Для запуска клиента
async def main():
    await client.start()
    # Здесь можно добавить логику для перебора номеров
    # await check_telegram_number_and_notify("+88881234567")

if __name__ == "__main__":
    asyncio.run(main())
```

### Заключение

Используя вышеуказанные рекомендации, вы сможете лучше обрабатывать номера телефонов, начинающиеся с `+8888`. Надеюсь, это поможет решить вашу проблему!
Похожие вопросы