Как написать бота с использованием aiogram, чтобы поискать айди пользователя по его юзернейму?

Как можно сделать этот код работающим асинхронно, чтобы он мог взаимодействовать с другими частями программы параллельно?
  • 1 января 2024 г. 7:57
Ответы на вопрос 1
Для реализации поиска айди пользователя по его юзернейму с использованием aiogram, можно воспользоваться методом `get_chat`, который позволяет получить информацию о пользователе по его юзернейму или айди.

Вот пример кода, который выполняет поиск айди пользователя асинхронно:

```python
import asyncio
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token='your_token_here')
dp = Dispatcher(bot)


@dp.message_handler(commands=['search_id'])  # Слушаем команду /search_id
async def search_id(message: types.Message):
    username = message.get_args()  # Получаем юзернейм пользователя из аргументов команды
    try:
        user = await bot.get_chat(username)  # Получаем информацию о пользователе
        user_id = user.id  # Получаем айди пользователя
        await message.reply(f"The ID of user {username} is {user_id}")  # Отправляем сообщение с айди
    except Exception as e:
        await message.reply(f"Error: {e}")  # Отправляем сообщение об ошибке, если пользователя не найдено


async def on_startup(dp):
    await bot.send_message(chat_id='your_chat_id', text='Bot has been started')  # Отправляем сообщение о запуске бота


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.create_task(bot.send_message(chat_id='your_chat_id', text='Bot has been started'))  # Отправляем сообщение о запуске бота
    executor.start_polling(dp, on_startup=on_startup, loop=loop)
```

В данном примере, при получении команды `/search_id <username>`, бот будет искать айди пользователя с указанным юзернеймом и отправлять его в ответном сообщении. Если пользователя не найдено, будет отправлено сообщение с ошибкой.

Этот код уже работает асинхронно, потому что выполнение функций помеченных ключевым словом `async` может быть приостановлено для выполнения других задач, позволяя боту взаимодействовать с другими частями программы параллельно.
Похожие вопросы