Telegram Bot API, на который опирается aiogram, не позволяет сделать это. Но для этого можно использовать
Telegram MTProto API. Для работы с MTProto API из Python существуют такие популярные библиотеки, как
Telethon и
Pyrogram.
Чтобы авторизоваться в Телеграме через MTProto API, помимо токена бота понадобится зарегистрировать своё приложение на
https://my.telegram.org/apps и получить API ID и hash. Авторизация с аккаунтом бота в Pyrogram описана
здесь. Пример функции, которая превращает имя пользователя в ID:
from pyrogram import Client
from pyrogram.raw.functions.contacts import ResolveUsername
BOT_TOKEN = "<токен бота>"
pyrogram_client = Client(
"bot",
api_id=6,
api_hash="eb06d4abfb49dc3eeb1aeb98ae0f581e",
bot_token=BOT_TOKEN,
app_version="7.7.2",
device_model="Lenovo Z6 Lite",
system_version="11 R"
)
def resolve_username_to_user_id(username: str) -> int | None:
with pyrogram_client:
r = pyrogram_client.invoke(ResolveUsername(username=username))
if r.users:
return r.users[0].id
return None
print(resolve_username_to_user_id("Tishka17"))
Обратите внимание, что этот код будет работать только с пользователями (не работает с чатами и с каналами). Чтобы сделать то же самое для чата или канала:
def resolve_username_to_channel_id(username: str) -> int | None:
with pyrogram_client:
r = pyrogram_client.invoke(ResolveUsername(username=username))
if r.chats:
return r.chats[0].id
return None