@nemolayn
Создатель бота Nemo

У меня есть модуль на Pyrogram как дополнение к aiogram, написал функцию асинхронно, не работает, пишет что клиент не стратовал, что можно сделать?

Пытаюсь сделать вот так:
import asyncio

from pyrogram import Client
from pyrogram.raw.functions.contacts import ResolveUsername

from utils.config import config

app = Client(name="test_name_for_github", 
            api_id=config.app_id.get_secret_value(), 
            api_hash=config.app_hash.get_secret_value(),
            bot_token=config.bot_token.get_secret_value())
    
async def resolve_username(username):
    with app:
        r = await app.invoke(ResolveUsername(username=username))
        if r.users:
            return r.users[0].id
        return None

Ошибка:
66a5d7ffca9a9894798636.png

Как я вызываю данную функцию:
import utils.pyrogram as helppyro

user = helppyro
rt = Router()

@rt.message(ChatTypeFilter(chat_type=["group", "supergroup"]), Command(commands=["test"],  prefix="/!"))
async def test(message: Message, bot: Bot, command: CommandObject):
    await user.resolve_username("name")


Также пытался через пример на самом пирограме:
(При этом подкрутив на свой лад, но не смог туда впихнуть функцию)
import asyncio
from pyrogram import Client

async def main():
    app = Client("my_account")

    async with app:
        await app.send_message("me", "Hi!")


asyncio.run(main())
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
@nemolayn Автор вопроса
Создатель бота Nemo
Возможно это и кустарное решение, но оно помогло.
async def resolve_username(username: str) -> int | None:
    app = Client(name="nemocm_bot", 
                api_id=config.app_id.get_secret_value(), 
                api_hash=config.app_hash.get_secret_value(),
                bot_token=config.bot_token.get_secret_value())
    await app.start()
    r = await app.invoke(ResolveUsername(username=username))
    await app.stop()
    if r.users:
        return r.users[0].id
    return None
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы