Add td_api::checkQuickReplyShortcutName.
This commit is contained in:
parent
e61c4d03e5
commit
74c5ba7087
|
@ -7780,6 +7780,9 @@ editInlineMessageReplyMarkup inline_message_id:string reply_markup:ReplyMarkup =
|
||||||
editMessageSchedulingState chat_id:int53 message_id:int53 scheduling_state:MessageSchedulingState = Ok;
|
editMessageSchedulingState chat_id:int53 message_id:int53 scheduling_state:MessageSchedulingState = Ok;
|
||||||
|
|
||||||
|
|
||||||
|
//@description Checks validness of a name for a quick reply shortcut. Can be called synchronously @name The name of the shortcut; 1-32 characters
|
||||||
|
checkQuickReplyShortcutName name:string = Ok;
|
||||||
|
|
||||||
//@description Loads quick reply shortcuts created by the current user. The loaded topics will be sent through updateQuickReplyShortcuts
|
//@description Loads quick reply shortcuts created by the current user. The loaded topics will be sent through updateQuickReplyShortcuts
|
||||||
loadQuickReplyShortcuts = Ok;
|
loadQuickReplyShortcuts = Ok;
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include "td/utils/buffer.h"
|
#include "td/utils/buffer.h"
|
||||||
#include "td/utils/format.h"
|
#include "td/utils/format.h"
|
||||||
#include "td/utils/logging.h"
|
#include "td/utils/logging.h"
|
||||||
|
#include "td/utils/unicode.h"
|
||||||
|
#include "td/utils/utf8.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
|
@ -375,6 +377,43 @@ void QuickReplyManager::tear_down() {
|
||||||
parent_.reset();
|
parent_.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QuickReplyManager::is_shortcut_name_letter(uint32 code) {
|
||||||
|
auto category = get_unicode_simple_category(code);
|
||||||
|
if (code == '_' || code == 0x200c || code == 0xb7 || (0xd80 <= code && code <= 0xdff)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
switch (category) {
|
||||||
|
case UnicodeSimpleCategory::DecimalNumber:
|
||||||
|
case UnicodeSimpleCategory::Letter:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Status QuickReplyManager::check_shortcut_name(CSlice name) {
|
||||||
|
if (!check_utf8(name)) {
|
||||||
|
return Status::Error("Strings must be encoded in UTF-8");
|
||||||
|
}
|
||||||
|
int32 length = 0;
|
||||||
|
auto *ptr = name.ubegin();
|
||||||
|
while (ptr != name.uend()) {
|
||||||
|
uint32 code;
|
||||||
|
ptr = next_utf8_unsafe(ptr, &code);
|
||||||
|
if (!is_shortcut_name_letter(code)) {
|
||||||
|
return Status::Error("A letter is not allowed");
|
||||||
|
}
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
if (length == 0) {
|
||||||
|
return Status::Error("Name can't be empty");
|
||||||
|
}
|
||||||
|
if (length > 32) {
|
||||||
|
return Status::Error("Name is too long");
|
||||||
|
}
|
||||||
|
return Status::OK();
|
||||||
|
}
|
||||||
|
|
||||||
unique_ptr<QuickReplyManager::QuickReplyMessage> QuickReplyManager::create_message(
|
unique_ptr<QuickReplyManager::QuickReplyMessage> QuickReplyManager::create_message(
|
||||||
telegram_api::object_ptr<telegram_api::Message> message_ptr, const char *source) const {
|
telegram_api::object_ptr<telegram_api::Message> message_ptr, const char *source) const {
|
||||||
LOG(DEBUG) << "Receive from " << source << " " << to_string(message_ptr);
|
LOG(DEBUG) << "Receive from " << source << " " << to_string(message_ptr);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "td/utils/FlatHashMap.h"
|
#include "td/utils/FlatHashMap.h"
|
||||||
#include "td/utils/FlatHashSet.h"
|
#include "td/utils/FlatHashSet.h"
|
||||||
#include "td/utils/Promise.h"
|
#include "td/utils/Promise.h"
|
||||||
|
#include "td/utils/Status.h"
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
@ -34,6 +35,8 @@ class QuickReplyManager final : public Actor {
|
||||||
public:
|
public:
|
||||||
QuickReplyManager(Td *td, ActorShared<> parent);
|
QuickReplyManager(Td *td, ActorShared<> parent);
|
||||||
|
|
||||||
|
static Status check_shortcut_name(CSlice name);
|
||||||
|
|
||||||
void get_quick_reply_shortcuts(Promise<Unit> &&promise);
|
void get_quick_reply_shortcuts(Promise<Unit> &&promise);
|
||||||
|
|
||||||
void delete_quick_reply_shortcut(QuickReplyShortcutId shortcut_id, Promise<Unit> &&promise);
|
void delete_quick_reply_shortcut(QuickReplyShortcutId shortcut_id, Promise<Unit> &&promise);
|
||||||
|
@ -145,6 +148,8 @@ class QuickReplyManager final : public Actor {
|
||||||
|
|
||||||
void tear_down() final;
|
void tear_down() final;
|
||||||
|
|
||||||
|
static bool is_shortcut_name_letter(uint32 code);
|
||||||
|
|
||||||
void add_quick_reply_message_dependencies(Dependencies &dependencies, const QuickReplyMessage *m) const;
|
void add_quick_reply_message_dependencies(Dependencies &dependencies, const QuickReplyMessage *m) const;
|
||||||
|
|
||||||
unique_ptr<QuickReplyMessage> create_message(telegram_api::object_ptr<telegram_api::Message> message_ptr,
|
unique_ptr<QuickReplyMessage> create_message(telegram_api::object_ptr<telegram_api::Message> message_ptr,
|
||||||
|
|
|
@ -2780,6 +2780,7 @@ bool Td::is_synchronous_request(const td_api::Function *function) {
|
||||||
case td_api::parseMarkdown::ID:
|
case td_api::parseMarkdown::ID:
|
||||||
case td_api::getMarkdownText::ID:
|
case td_api::getMarkdownText::ID:
|
||||||
case td_api::searchStringsByPrefix::ID:
|
case td_api::searchStringsByPrefix::ID:
|
||||||
|
case td_api::checkQuickReplyShortcutName::ID:
|
||||||
case td_api::getCountryFlagEmoji::ID:
|
case td_api::getCountryFlagEmoji::ID:
|
||||||
case td_api::getFileMimeType::ID:
|
case td_api::getFileMimeType::ID:
|
||||||
case td_api::getFileExtension::ID:
|
case td_api::getFileExtension::ID:
|
||||||
|
@ -3022,6 +3023,7 @@ td_api::object_ptr<td_api::Object> Td::static_request(td_api::object_ptr<td_api:
|
||||||
case td_api::parseMarkdown::ID:
|
case td_api::parseMarkdown::ID:
|
||||||
case td_api::getMarkdownText::ID:
|
case td_api::getMarkdownText::ID:
|
||||||
case td_api::searchStringsByPrefix::ID:
|
case td_api::searchStringsByPrefix::ID:
|
||||||
|
case td_api::checkQuickReplyShortcutName::ID:
|
||||||
case td_api::getCountryFlagEmoji::ID:
|
case td_api::getCountryFlagEmoji::ID:
|
||||||
case td_api::getFileMimeType::ID:
|
case td_api::getFileMimeType::ID:
|
||||||
case td_api::getFileExtension::ID:
|
case td_api::getFileExtension::ID:
|
||||||
|
@ -9357,6 +9359,10 @@ void Td::on_request(uint64 id, const td_api::searchStringsByPrefix &request) {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Td::on_request(uint64 id, const td_api::checkQuickReplyShortcutName &request) {
|
||||||
|
UNREACHABLE();
|
||||||
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::getCountryFlagEmoji &request) {
|
void Td::on_request(uint64 id, const td_api::getCountryFlagEmoji &request) {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
@ -9565,6 +9571,15 @@ td_api::object_ptr<td_api::Object> Td::do_static_request(td_api::searchStringsBy
|
||||||
return td_api::make_object<td_api::foundPositions>(total_count, std::move(result));
|
return td_api::make_object<td_api::foundPositions>(total_count, std::move(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
td_api::object_ptr<td_api::Object> Td::do_static_request(const td_api::checkQuickReplyShortcutName &request) {
|
||||||
|
// don't check name UTF-8 correctness
|
||||||
|
auto status = QuickReplyManager::check_shortcut_name(request.name_);
|
||||||
|
if (status.is_ok()) {
|
||||||
|
return td_api::make_object<td_api::ok>();
|
||||||
|
}
|
||||||
|
return make_error(200, status.error().message());
|
||||||
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::Object> Td::do_static_request(const td_api::getCountryFlagEmoji &request) {
|
td_api::object_ptr<td_api::Object> Td::do_static_request(const td_api::getCountryFlagEmoji &request) {
|
||||||
// don't check country code UTF-8 correctness
|
// don't check country code UTF-8 correctness
|
||||||
return td_api::make_object<td_api::text>(CountryInfoManager::get_country_flag_emoji(request.country_code_));
|
return td_api::make_object<td_api::text>(CountryInfoManager::get_country_flag_emoji(request.country_code_));
|
||||||
|
|
|
@ -1802,6 +1802,8 @@ class Td final : public Actor {
|
||||||
|
|
||||||
void on_request(uint64 id, const td_api::searchStringsByPrefix &request);
|
void on_request(uint64 id, const td_api::searchStringsByPrefix &request);
|
||||||
|
|
||||||
|
void on_request(uint64 id, const td_api::checkQuickReplyShortcutName &request);
|
||||||
|
|
||||||
void on_request(uint64 id, const td_api::getCountryFlagEmoji &request);
|
void on_request(uint64 id, const td_api::getCountryFlagEmoji &request);
|
||||||
|
|
||||||
void on_request(uint64 id, const td_api::getFileMimeType &request);
|
void on_request(uint64 id, const td_api::getFileMimeType &request);
|
||||||
|
@ -1866,6 +1868,7 @@ class Td final : public Actor {
|
||||||
static td_api::object_ptr<td_api::Object> do_static_request(td_api::parseMarkdown &request);
|
static td_api::object_ptr<td_api::Object> do_static_request(td_api::parseMarkdown &request);
|
||||||
static td_api::object_ptr<td_api::Object> do_static_request(td_api::getMarkdownText &request);
|
static td_api::object_ptr<td_api::Object> do_static_request(td_api::getMarkdownText &request);
|
||||||
static td_api::object_ptr<td_api::Object> do_static_request(td_api::searchStringsByPrefix &request);
|
static td_api::object_ptr<td_api::Object> do_static_request(td_api::searchStringsByPrefix &request);
|
||||||
|
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::checkQuickReplyShortcutName &request);
|
||||||
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::getCountryFlagEmoji &request);
|
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::getCountryFlagEmoji &request);
|
||||||
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::getFileMimeType &request);
|
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::getFileMimeType &request);
|
||||||
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::getFileExtension &request);
|
static td_api::object_ptr<td_api::Object> do_static_request(const td_api::getFileExtension &request);
|
||||||
|
|
|
@ -4845,6 +4845,8 @@ class CliClient final : public Actor {
|
||||||
get_args(args, chat_id, message_id, date);
|
get_args(args, chat_id, message_id, date);
|
||||||
send_request(td_api::make_object<td_api::editMessageSchedulingState>(chat_id, message_id,
|
send_request(td_api::make_object<td_api::editMessageSchedulingState>(chat_id, message_id,
|
||||||
as_message_scheduling_state(date)));
|
as_message_scheduling_state(date)));
|
||||||
|
} else if (op == "cqrsn") {
|
||||||
|
execute(td_api::make_object<td_api::checkQuickReplyShortcutName>(args));
|
||||||
} else if (op == "lqrs") {
|
} else if (op == "lqrs") {
|
||||||
send_request(td_api::make_object<td_api::loadQuickReplyShortcuts>());
|
send_request(td_api::make_object<td_api::loadQuickReplyShortcuts>());
|
||||||
} else if (op == "dqrs") {
|
} else if (op == "dqrs") {
|
||||||
|
|
Loading…
Reference in New Issue