Move get_can_send_story_result_object inside StoryManager.

This commit is contained in:
levlam 2024-08-16 17:36:17 +03:00
parent 7f0514d492
commit 13187c945a
2 changed files with 41 additions and 38 deletions

View File

@ -64,43 +64,6 @@
namespace td {
static td_api::object_ptr<td_api::CanSendStoryResult> get_can_send_story_result_object(const Status &error,
bool force = false) {
CHECK(error.is_error());
if (error.message() == "PREMIUM_ACCOUNT_REQUIRED") {
return td_api::make_object<td_api::canSendStoryResultPremiumNeeded>();
}
if (error.message() == "BOOSTS_REQUIRED") {
return td_api::make_object<td_api::canSendStoryResultBoostNeeded>();
}
if (error.message() == "STORIES_TOO_MUCH") {
return td_api::make_object<td_api::canSendStoryResultActiveStoryLimitExceeded>();
}
if (begins_with(error.message(), "STORY_SEND_FLOOD_WEEKLY_")) {
auto r_next_date = to_integer_safe<int32>(error.message().substr(Slice("STORY_SEND_FLOOD_WEEKLY_").size()));
if (r_next_date.is_ok() && r_next_date.ok() > 0) {
auto retry_after = r_next_date.ok() - G()->unix_time();
if (retry_after > 0 || force) {
return td_api::make_object<td_api::canSendStoryResultWeeklyLimitExceeded>(max(retry_after, 0));
} else {
return td_api::make_object<td_api::canSendStoryResultOk>();
}
}
}
if (begins_with(error.message(), "STORY_SEND_FLOOD_MONTHLY_")) {
auto r_next_date = to_integer_safe<int32>(error.message().substr(Slice("STORY_SEND_FLOOD_MONTHLY_").size()));
if (r_next_date.is_ok() && r_next_date.ok() > 0) {
auto retry_after = r_next_date.ok() - G()->unix_time();
if (retry_after > 0 || force) {
return td_api::make_object<td_api::canSendStoryResultMonthlyLimitExceeded>(max(retry_after, 0));
} else {
return td_api::make_object<td_api::canSendStoryResultOk>();
}
}
}
return nullptr;
}
class GetAllStoriesQuery final : public Td::ResultHandler {
Promise<telegram_api::object_ptr<telegram_api::stories_AllStories>> promise_;
@ -1091,7 +1054,7 @@ class CanSendStoryQuery final : public Td::ResultHandler {
}
void on_error(Status status) final {
auto result = get_can_send_story_result_object(status);
auto result = StoryManager::get_can_send_story_result_object(status);
if (result != nullptr) {
return promise_.set_value(std::move(result));
}
@ -3581,6 +3544,43 @@ td_api::object_ptr<td_api::chatActiveStories> StoryManager::get_chat_active_stor
story_list_id.get_story_list_object(), order, max_read_story_id.get(), std::move(stories));
}
td_api::object_ptr<td_api::CanSendStoryResult> StoryManager::get_can_send_story_result_object(const Status &error,
bool force) {
CHECK(error.is_error());
if (error.message() == "PREMIUM_ACCOUNT_REQUIRED") {
return td_api::make_object<td_api::canSendStoryResultPremiumNeeded>();
}
if (error.message() == "BOOSTS_REQUIRED") {
return td_api::make_object<td_api::canSendStoryResultBoostNeeded>();
}
if (error.message() == "STORIES_TOO_MUCH") {
return td_api::make_object<td_api::canSendStoryResultActiveStoryLimitExceeded>();
}
if (begins_with(error.message(), "STORY_SEND_FLOOD_WEEKLY_")) {
auto r_next_date = to_integer_safe<int32>(error.message().substr(Slice("STORY_SEND_FLOOD_WEEKLY_").size()));
if (r_next_date.is_ok() && r_next_date.ok() > 0) {
auto retry_after = r_next_date.ok() - G()->unix_time();
if (retry_after > 0 || force) {
return td_api::make_object<td_api::canSendStoryResultWeeklyLimitExceeded>(max(retry_after, 0));
} else {
return td_api::make_object<td_api::canSendStoryResultOk>();
}
}
}
if (begins_with(error.message(), "STORY_SEND_FLOOD_MONTHLY_")) {
auto r_next_date = to_integer_safe<int32>(error.message().substr(Slice("STORY_SEND_FLOOD_MONTHLY_").size()));
if (r_next_date.is_ok() && r_next_date.ok() > 0) {
auto retry_after = r_next_date.ok() - G()->unix_time();
if (retry_after > 0 || force) {
return td_api::make_object<td_api::canSendStoryResultMonthlyLimitExceeded>(max(retry_after, 0));
} else {
return td_api::make_object<td_api::canSendStoryResultOk>();
}
}
}
return nullptr;
}
vector<FileId> StoryManager::get_story_file_ids(const Story *story) const {
if (story == nullptr || story->content_ == nullptr) {
return {};

View File

@ -357,6 +357,9 @@ class StoryManager final : public Actor {
td_api::object_ptr<td_api::stories> get_stories_object(int32 total_count, const vector<StoryFullId> &story_full_ids,
const vector<StoryId> &pinned_story_ids) const;
static td_api::object_ptr<td_api::CanSendStoryResult> get_can_send_story_result_object(const Status &error,
bool force = false);
FileSourceId get_story_file_source_id(StoryFullId story_full_id);
telegram_api::object_ptr<telegram_api::InputMedia> get_input_media(StoryFullId story_full_id) const;