Update owned star count when adding paid reactions.

This commit is contained in:
levlam 2024-08-07 14:40:15 +03:00
parent 43b2ffe27f
commit 1a8999c590
3 changed files with 10 additions and 7 deletions

View File

@ -14,6 +14,7 @@
#include "td/telegram/MessageSender.h"
#include "td/telegram/MessagesManager.h"
#include "td/telegram/ServerMessageId.h"
#include "td/telegram/StarManager.h"
#include "td/telegram/Td.h"
#include "td/telegram/telegram_api.h"
#include "td/telegram/UpdatesManager.h"
@ -797,18 +798,20 @@ bool MessageReactions::do_remove_my_reaction(const ReactionType &reaction_type)
return false;
}
void MessageReactions::add_my_paid_reaction(int32 star_count) {
void MessageReactions::add_my_paid_reaction(Td *td, int32 star_count) {
if (pending_paid_reactions_ > 1000000000 || star_count > 1000000000) {
LOG(ERROR) << "Pending paid reactions overflown";
return;
}
td->star_manager_->add_owned_star_count(-star_count);
pending_paid_reactions_ += star_count;
}
bool MessageReactions::drop_pending_paid_reactions() {
bool MessageReactions::drop_pending_paid_reactions(Td *td) {
if (pending_paid_reactions_ == 0) {
return false;
}
td->star_manager_->add_owned_star_count(pending_paid_reactions_);
pending_paid_reactions_ = 0;
return true;
}

View File

@ -179,9 +179,9 @@ struct MessageReactions {
bool remove_my_reaction(const ReactionType &reaction_type, DialogId my_dialog_id);
void add_my_paid_reaction(int32 star_count);
void add_my_paid_reaction(Td *td, int32 star_count);
bool drop_pending_paid_reactions();
bool drop_pending_paid_reactions(Td *td);
void sort_reactions(const FlatHashMap<ReactionType, size_t, ReactionTypeHash> &active_reaction_pos);

View File

@ -12143,7 +12143,7 @@ void MessagesManager::on_send_paid_reactions_timeout(int64 task_id) {
return;
}
if (!get_message_available_reactions(d, m, true, nullptr).is_allowed_reaction_type(ReactionType::paid())) {
if (m->reactions->drop_pending_paid_reactions()) {
if (m->reactions->drop_pending_paid_reactions(td_)) {
send_update_message_interaction_info(d->dialog_id, m);
on_message_changed(d, m, true, "on_send_paid_reactions_timeout");
}
@ -22806,7 +22806,7 @@ void MessagesManager::add_paid_message_reaction(MessageFullId message_full_id, i
}
LOG(INFO) << "Have message with " << *m->reactions;
m->reactions->add_my_paid_reaction(narrow_cast<int32>(star_count));
m->reactions->add_my_paid_reaction(td_, narrow_cast<int32>(star_count));
m->reactions->sort_reactions(active_reaction_pos_);
LOG(INFO) << "Update message reactions to " << *m->reactions;
@ -22837,7 +22837,7 @@ void MessagesManager::remove_paid_message_reactions(MessageFullId message_full_i
Dialog *d = get_dialog_force(message_full_id.get_dialog_id(), "remove_paid_message_reaction");
CHECK(d != nullptr);
auto *m = get_message_force(d, message_full_id.get_message_id(), "on_send_paid_reactions_timeout");
if (m != nullptr && m->reactions != nullptr && m->reactions->drop_pending_paid_reactions()) {
if (m != nullptr && m->reactions != nullptr && m->reactions->drop_pending_paid_reactions(td_)) {
send_update_message_interaction_info(d->dialog_id, m);
on_message_changed(d, m, true, "on_send_paid_reactions_timeout");
}