Как отправить сообщение по имени пользователя (username) с использованием aiogram 3?

Как можно реализовать отправку сообщений, используя username в библиотеке aiogram 3? Или как получить userid по username в aiogram 3?
  • 21 апреля 2024 г. 20:20
Ответы на вопрос 2
Для отправки сообщения по имени пользователя (username) в aiogram 3, вам нужно сначала получить пользовательский ID (userid) по его имени. Это можно сделать, используя метод `bot.get_chat(username)`, который вернет объект Chat с информацией о пользователе, включая userid. Далее, вы можете использовать полученный userid для отправки сообщения этому пользователю с помощью метода `bot.send_message(userid, text)`.

Пример кода:

```python
from aiogram import Bot, Dispatcher, types
from aiogram import executor
from aiogram.types import ParseMode

bot = Bot(token="YOUR_TOKEN")
dp = Dispatcher(bot)

@dp.message_handler(commands=['send_to_user'])
async def send_to_user(message: types.Message):
    username = message.get_args()
    chat = await bot.get_chat(username)
    user_id = chat.id
    
    text = "Привет, это сообщение отправлено тебе по имени пользователя!"
    await bot.send_message(user_id, text)

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
```

Этот код создает бота, который отправляет сообщение пользователю по его имени пользователя. Когда вы отправляете команду `/send_to_user USERNAME`, бот получает userid по имени пользователя и отправляет ему сообщение "Привет, это сообщение отправлено тебе по имени пользователя!".
Если предполагается отправка пользователю, то узнать id с помощью username невозможно, как и отправить сообщение по username. 

Выходом из данной ситуации будет хранить в базе данных user_id и username. Однако я не рекомендую так делать, поскольку username является опциональным и есть не всех пользователей Telegram
Похожие вопросы