Ответы пользователя по тегу AIOgram
  • ERROR:asyncio:Task exception was never retrieved не могу разобраться?

    Vindicar
    @Vindicar
    RTFM!
    await message.reply(chat_id,f"Привет, {user_full_name}!\n"
    f"Введите ваше имя :",reply_markup = nav.mainMenu)

    На кой ты при ответе на конкретное сообщение указываешь chat_id? Сообщение и так знает, кто его отправил.

    Подробнее

    Как найти строку, в которой проблема?
    В секции Traceback (most recent call last): только одна запись относится непосредственно к твоему коду:
    File "d:\telegram_bot\bot.py", line 79, in start_handler
    await message.reply(chat_id,f"Привет, {user_full_name}!\n"

    Всё выше и ниже ссылается на venv\lib\site-packages\aiogram. Значит, дело именно в этой строке.

    Как понять, в чём проблема?
    При отправке сообщения можно указать два позиционных параметра: текст сообщения и parse_mode, т.е. как отформатировано сообщение (HTML, markdown или еще что). Раз unsupported parse_mode, значит, во второй параметр попало что-то постороннее. А самый простой способ этому случиться - если перед текстом сообщения есть что-то лишнее. У тебя chat_id стало текстом, а собственно текст стал parse_mode.
    Ответ написан
    Комментировать
  • Как хранить общие для всех пользователей переменные в aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Зависит от того, насколько велики эти данные и насколько легко их можно восстановить при перезапуске бота.
    Если невелики, и восстановить легко - почему бы и нет.
    Если велики (сотни мегабайт) или если нужно отдавать старые данные если сам сайт лежит, то лучше сохранить их в более персистентное хранилище (БД или файл).
    Ответ написан
    Комментировать
  • Почему не получаю обратной связи от бота?

    Vindicar
    @Vindicar
    RTFM!
    Может, всё-таки ContentType.AUDIO, а не VOICE?
    Ответ написан
  • Как исправить aiogram.utils.exceptions.BadRequest: Unsupported parse_mode ошибку?

    Vindicar
    @Vindicar
    RTFM!
    await message.reply("Привет!\nАктуальный курс евро:", {float(convert[0].text.replace(',','.'))*1.05})

    Я не знаю что ты хотел написать, но написал ты следующее:
    Ответь на сообщение. В качестве первого параметра text используй строку "Привет!\nАктуальный курс евро:". В качестве второго параметра parse_mode используй множество, состоящее из одного элемента, равного float(convert[0].text.replace(',','.'))*1.05.


    Т.е. у тебя сведения о курсе не вносятся в строку сообщения.
    Ответ написан
  • Как запустить двух ботов одновременно?

    Vindicar
    @Vindicar
    RTFM!
    Простого способа нет.
    Если оба бота написаны на базе asyncio, то скорее всего их метод run_forever() или эквивалент сводится к вызову asyncio.run(корутина_тело_бота()). Тогда можно будет свести запуск бота к тайой конструкции
    async def main():
        await asyncio.gather(
            корутина_тело_бота1(),
            корутина_тело_бота2()
        )
    
    if __name__ == '__main__':
        asyncio.run(main())

    Программа завершится, когда завершатся оба бота.
    Но чтобы добраться до "настоящего" тела бота, нужно как минимум зарыться в документацию, а то и почитать исходники библиотеки, в частности, исходники run_forever() (или его аналога).
    Не получится просто взять и написать
    async def bot1():
        bot1.run_forever()

    Чудес не бывает.

    Есть вариант запустить ботов в разных потоках, и это единственный вариант, если хотя бы один из ботов не асинхронный. Но я бы не советовал. Многопоточные программы имеют целую кучу своих специфических багов, которые могут проявляться не при каждом запуске. Они очень неприятны в отладке.
    А уж мешать многопоточность с асинхронностью... тут нужно очень хорошо понимать, как это всё работает.
    Ответ написан
    Комментировать
  • Как вызывать сторонние функции бота на aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Читай документацию.
    У start_polling() есть параметр on_startup, который принимает корутину (async-функцию). Эта корутина будет выполнена при старте бота.
    Внутри корутины просто через asyncio.create_task() запускаешь другую корутину, которая уже и будет выполнять периодические обновления.
    И да, вместо велосипеда с datetime посмотри в сторону пакета aioschedule.
    Ответ написан
  • Хочу разместить телеграм бота с бд SQLite3 на selectel, но не могу понять где создать бд и как подключить к боту. Может кто-то знает?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3 сам создаст файл БД, если он не существует. Но вот отсутствующие таблицы в БД должен создать бот, при своём запуске.
    Запрос CREATE TABLE IF NOT EXISTS ... в помощь.
    Ответ написан
    6 комментариев
  • Как запускать асинхронную функцию одновременно с поллингом бота телеграмм?

    Vindicar
    @Vindicar
    RTFM!
    start_polling() имеет параметр on_startup, который принимает корутину или список корутин.
    Ответ написан
    Комментировать
  • Как запустить код без ошибок?

    Vindicar
    @Vindicar
    RTFM!
    В коде отсутствует запуск бота. Так что он делает именно то, что от него просят.
    Ответ написан
    Комментировать
  • Почему в БД значение меняется на 0?

    Vindicar
    @Vindicar
    RTFM!
    except:
                    db.set_active(row[0], 0)


    Ну а нечего делать голый except. У тебя при абсолютно любой ошибке отправки пользователь молча помечается как неактивный, даже если это какой-то несвязанный твой косяк. Выясни, какое именно исключение кидается при заблокированном получателе, и лови только его. Остальные исключения журналируй.
    Ответ написан