Fix startchannel/startgroup deeplinks for bots with Threaded Mode.

Move the isForum() branch below bot-specific handlers (BotApp,
ShareGame, AddToGroup/AddToChannel) so forum view doesn't intercept
bot deeplinks. Move Boost branch above isForum() to simplify
the condition.
This commit is contained in:
rdmcd
2026-03-16 15:17:31 +03:00
committed by John Preston
parent f1117b0071
commit 294516c2be
@@ -675,22 +675,6 @@ void SessionNavigation::showPeerByLinkResolved(
showPeerInfo(peer, params);
} else if (resolveType == ResolveType::HashtagSearch) {
searchMessages(info.text, peer->owner().history(peer));
} else if (peer->isForum() && resolveType != ResolveType::Boost) {
if (!msgId || !useRequestedMessageId) {
applyBotStartToken();
parentController()->showForum(peer->forum(), params, msgId);
} else if (const auto item = peer->owner().message(peer, msgId)) {
showMessageByLinkResolved(item, info);
} else {
const auto callback = crl::guard(this, [=] {
if (const auto item = peer->owner().message(peer, msgId)) {
showMessageByLinkResolved(item, info);
} else {
showPeerHistory(peer, params, msgId);
}
});
peer->session().api().requestMessageData(peer, msgId, callback);
}
} else if (info.storyParam == u"live"_q) {
parentController()->openPeerStories(peer->id, std::nullopt, true);
} else if (const auto storyId = info.storyParam.toInt()) {
@@ -754,6 +738,24 @@ void SessionNavigation::showPeerByLinkResolved(
scope,
info.startToken,
info.startAdminRights);
} else if (resolveType == ResolveType::Boost && peer->isChannel()) {
resolveBoostState(peer->asChannel());
} else if (peer->isForum()) {
if (!msgId || !useRequestedMessageId) {
applyBotStartToken();
parentController()->showForum(peer->forum(), params, msgId);
} else if (const auto item = peer->owner().message(peer, msgId)) {
showMessageByLinkResolved(item, info);
} else {
const auto callback = crl::guard(this, [=] {
if (const auto item = peer->owner().message(peer, msgId)) {
showMessageByLinkResolved(item, info);
} else {
showPeerHistory(peer, params, msgId);
}
});
peer->session().api().requestMessageData(peer, msgId, callback);
}
} else if (resolveType == ResolveType::Mention) {
if (bot || peer->isChannel()) {
crl::on_main(this, [=] {
@@ -762,8 +764,6 @@ void SessionNavigation::showPeerByLinkResolved(
} else {
showPeerInfo(peer, params);
}
} else if (resolveType == ResolveType::Boost && peer->isChannel()) {
resolveBoostState(peer->asChannel());
} else if (resolveType == ResolveType::ChannelDirect
&& !peer->isFullLoaded()) {
_waitingDirectChannel = peer;