Skip to content

fix: кнопки проверки оплаты не должны показываться полсе успешной оплаты#52

Closed
xtclovver wants to merge 1 commit into
fUS1ONd:mainfrom
xtclovver:main
Closed

fix: кнопки проверки оплаты не должны показываться полсе успешной оплаты#52
xtclovver wants to merge 1 commit into
fUS1ONd:mainfrom
xtclovver:main

Conversation

@xtclovver
Copy link
Copy Markdown
Collaborator

No description provided.

@fUS1ONd
Copy link
Copy Markdown
Owner

fUS1ONd commented Mar 23, 2026

@codex норм?

@chatgpt-codex-connector
Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@xtclovver
Copy link
Copy Markdown
Collaborator Author

xtclovver commented Mar 23, 2026

@codex норм?

там 15 строчек глянь руками броски

@fUS1ONd
Copy link
Copy Markdown
Owner

fUS1ONd commented Mar 23, 2026

@codex ты бля сделаешь ревью?

@fUS1ONd
Copy link
Copy Markdown
Owner

fUS1ONd commented Mar 23, 2026

@codex норм?

там 15 строчек глянь руками броски

Дело принципа

@chatgpt-codex-connector
Copy link
Copy Markdown

Ручное ревью

Посмотрел руками логику вокруг payment flow. Если смысл PR в том, чтобы после успешной оплаты больше не показывать 🔄 Проверить оплату, то по текущей реализации это выглядит правильно и безопасно. После успешной ручной проверки handleCheckPayment в ветках confirmed и confirmed_not_activated удаляет состояние пользователя и возвращает обычную пользовательскую клавиатуру через b.userKeyboard(telegramID), а не PaymentWaitKeyboard(). Аналогично state сбрасывается и при not_found, canceled и chargebacked; экран ожидания с кнопкой проверки остаётся только для промежуточного статуса pending или при ошибке проверки. Это как раз соответствует ожидаемому UX: кнопку повторной проверки оставляем только пока платёж ещё не финализирован. internal/bot/payment_handler.goL108-L153

Дополнительно это согласуется с общим state-machine в обработчике текстовых сообщений: кнопка 🔄 Проверить оплату вообще обрабатывается только в состоянии StateWaitPaymentResult, а для всех остальных случаев бот возвращает пользователя в обычное меню. То есть после удаления state из handleCheckPayment повторный показ это кнопки не должен происходить сам по себе. internal/bot/handlers.goL396-L408

Саму клавиатуру ожидания оплата/проверка бот строит отдельно и там действительно есть только две кнопки — 🔄 Проверить оплату и 🚫 Отмена, поэтому если PR переводит пользователя с этой клавиатуры обратно на userKeyboard, это ровно то место, где проблему и надо чинить. internal/bot/keyboards.goL228-L235

С точки зрения тестового покрытия рядом с этой логикой уже есть корректная проверка на сценарий, где ручная проверка не должна преждевременно утверждать успешную активацию, если платёж подтверждён, но подписка ещё не активировалась; это хороший признак, что ветвление around confirmed / confirmed_not_activated уже осмысленно оформлено. Есть и отдельный тест на сброс payment-state при выходе в основное меню, что подтверждает общий подход к очистке состояния. internal/bot/payment_handler_test.goL103-L185 internal/bot/handlers_test.goL629-L645

Вывод

Коротко: да, по логике это норм.
Если PR действительно меняет примерно эти 10–15 строк и делает так, что после успешной оплаты/подтверждения reply markup переключается с PaymentWaitKeyboard() на b.userKeyboard(...), я бы такое аппрувнул.

Ограничение проверки

Есть один нюанс: я не смог открыть именно diff этого PR по SHA 7e4eac0a468701c4ac86d184f99a0738255107f4, потому что этого объекта нет в локальном git-окружении, поэтому оценка выше — это ручная проверка окружающей логики в текущем коде, а не буквальный line-by-line review exact patch.

Команды, которые я использовал

  • cat AGENTS.md && printf '\n---CLAUDE---\n' && cat CLAUDE.md
  • ⚠️ git status --short && printf '\n---DIFF STAT---\n' && git diff --stat b0927e41e9701d6a4e9e7730218c970b854db11e..7e4eac0a468701c4ac86d184f99a0738255107f4 && printf '\n---DIFF---\n' && git diff --unified=80 b0927e41e9701d6a4e9e7730218c970b854db11e..7e4eac0a468701c4ac86d184f99a0738255107f4 — локально отсутствует head SHA PR.
  • rg -n "провер|check.*payment|payment.*check|Проверить оплат|manual.*check|success.*payment|successful payment|Оплата" internal/bot internal/database README.md
  • nl -ba internal/bot/keyboards.go | sed -n '1,240p'
  • nl -ba internal/bot/payment_handler.go | sed -n '1,260p'
  • nl -ba internal/bot/payment.go | sed -n '1,260p'
  • nl -ba internal/bot/handlers.go | sed -n '360,460p'
  • nl -ba internal/bot/payment_handler_test.go | sed -n '1,240p'
  • nl -ba internal/bot/handlers_test.go | sed -n '620,660p'

Если хочешь, я могу в следующем сообщении сформулировать готовый короткий текст ревью-коммента для PR в стиле GitHub: “руками посмотрел, ок / что ещё добить тестом”.

View task →

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e4eac0a46

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/bot/payment.go
Comment on lines +160 to +161
// Сбрасываем состояние оплаты, чтобы убрать клавиатуру "Проверить оплату"
h.bot.userStates.Delete(payment.TelegramID)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid clearing unrelated dialog state on async payment success

userStates is the single shared dialog slot for invite, moderator, admin, and payment flows (internal/bot/handlers.go:243-408). Clearing it unconditionally here means a payment callback or background retry can cancel whatever the user started after leaving the payment screen. A realistic case is a moderator who creates a payment, then opens an invite/price dialog before the gateway callback arrives: this Delete plus the main userKeyboard drops them back to the user menu, so their next reply is no longer routed to the active flow. The previous implementation only sent a notification and did not clobber unrelated state.

Useful? React with 👍 / 👎.

@xtclovver
Copy link
Copy Markdown
Collaborator Author

@claude устрой реп батл с codex

@fUS1ONd
Copy link
Copy Markdown
Owner

fUS1ONd commented Mar 23, 2026

@codex чета не понял, ты тесты то запускал только хлопал? Ещё не понял, если чувак затупил с оплатой, то у него клавиатура с кнопкой проверить статус и отмена останется так? В таком случае сразу при оплате эта клава должна уйти сама? (Тесты запускай емае не позорь меня)

@xtclovver
Copy link
Copy Markdown
Collaborator Author

@claude лееее я ревную

@fUS1ONd
Copy link
Copy Markdown
Owner

fUS1ONd commented Mar 23, 2026

@claude привет! Какой сорт пива лучше?

@chatgpt-codex-connector
Copy link
Copy Markdown

Summary

  • Добавил helper для финализации payment flow, который возвращает обычную пользовательскую клавиатуру только если пользователь всё ещё находится в состоянии оплаты. Это убирает клавиатуру Проверить оплату / Отмена сразу после асинхронного финального статуса и одновременно не затирает чужие диалоги, если пользователь уже ушёл в другой flow. internal/bot/payment.goL159-L183
  • Перевёл асинхронные уведомления по успешной оплате, отмене и chargeback на новый путь отправки, чтобы экран ожидания оплаты закрывался автоматически при финализации платежа. internal/bot/payment.goL180-L186 internal/bot/payment.goL413-L445
  • Добавил тест, который проверяет оба сценария: payment-state очищается и клавиатура заменяется, а unrelated state сохраняется без подмены reply markup. internal/bot/payment_test.goL410-L439

Testing

  • ⚠️ make fmtgo vet ./... зависает на пакете cmd/backfill-used-at, поэтому команда целиком в этой среде не завершилась.
  • go vet ./internal/bot
  • go fmt ./...
  • make tests

Дополнительно: изменения закоммичены коммитом fix: убирать клавиатуру ожидания оплаты (1284f11), и я подготовил PR title/body через make_pr.

View task →

@xtclovver xtclovver closed this Mar 23, 2026
@xtclovver
Copy link
Copy Markdown
Collaborator Author

#53

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants