169 похожих чатов

Всем привет, правильно понимаю, что данные, положенные в data в

pre_process_update не доступны например в pre_process_message?

21 ответов

38 просмотров

Интересный вопрос 🤔 А что за кейс такой?

Mikhail Smolnikov
Интересный вопрос 🤔 А что за кейс такой?

Бот отправляет вопрос в группу, участники должны отгадать. Ну типа того)))

Umar
Бот отправляет вопрос в группу, участники должны о...

Нет, я про кейс того, когда нужно что-то добавлять в on_pre_process_update и ловить в ...._message

Arsenii-Kulikov Автор вопроса

Ну я раньше генерил сессию в LifetimeMiddleware сначала проверяя, что ключа "session" в data нет, после создания сессии брал юзера из БД по id, и если его не было, то делал insert. Сейчас обнаружил, что у меня в pre_process_update и pre_process_message создаются разные сессии, и в результате этого вторая попытка создания юзера виснет, из-за того что таблица заморожена предыдущим insert-ом

А зачем создавать сессию ещё и в _message? 🤔

Arsenii-Kulikov Автор вопроса
Mikhail Smolnikov
А зачем создавать сессию ещё и в _message? 🤔

потому что писал я это с идеей, что когда код дойдет до _message, то сессия, созданная в _update уже будет доступна

Arsenii Kulikov
потому что писал я это с идеей, что когда код дойд...

а сможешь сделать MRE, где видно, что ты кладешь дату, и потом не можешь её получить в фильтрах?

Arsenii-Kulikov Автор вопроса
Aleksandr Danilov 🇺🇦
Почему именно лайфтайм?

потому что позволяет без особых костылей ловить пред и пост обработку всех апдейтов

Arsenii-Kulikov Автор вопроса
Arsenii Kulikov
потому что позволяет без особых костылей ловить пр...

ну вообще изначально я у кого-то в темплейте подглядел его

Arsenii Kulikov
https://paste.aiogram.dev/inufoqavig.py

Стой, а ты не думаешь, что как раз таки из-за типа апдейта, что ты хендлишь, он и не получает из _update данные? Попробуй навесить фильтр на update хендлер

Arsenii-Kulikov Автор вопроса
Mikhail Smolnikov
Стой, а ты не думаешь, что как раз таки из-за типа...

ну так я про это и говорю, что данные, добавленные в _message работают только в message-фильтрах или message-хендлерах. мне казалось, что цикл обработки сообщения находится внутри цикла обработки апдейта, и поэтому данные из _update миддлварей тоже там должны быть доступны

Arsenii Kulikov
ну так я про это и говорю, что данные, добавленные...

не, если мне не изменяет память, апдейт как таковой - отдельный тип апдейта (глупо звучит 😁) Т.е. для апдейта свои мидлвари, для сообщения - свои Соответственно и фильтры тоже будут работать в таком же виде

Arsenii-Kulikov Автор вопроса
Mikhail Smolnikov
не, если мне не изменяет память, апдейт как таково...

ну вот меня запутал вот такой порядок видимо

Arsenii Kulikov
screenshot ну вот меня запутал вот такой порядок видимо

@JRootJunior действительно такой порядок обработки апдейта в мидлварях? @klkvr не может получить данные из pre_process_update в pre_process_message и далее в фильтре MRE: https://paste.aiogram.dev/inufoqavig.py

Mikhail Smolnikov
@JRootJunior действительно такой порядок обработки...

такой. а data между апдейтом и сообщением точно не передается в 2.х.

Arsenii Kulikov
а в 3.x?

там сквозная передача данных от точки входа (запуска обработки) до обработчика

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта