From b4c0d1b87631988281d1524c1708ea9b239ae1bd Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 7 Jan 2019 18:37:53 +0300 Subject: [PATCH] tg_cli: as_{basic_group,supergroup,secret_chat}_id. GitOrigin-RevId: 747434e8cc75ec25dcdd461a574d55af6d0cf7c4 --- td/telegram/DialogId.cpp | 10 ++-- td/telegram/DialogId.h | 2 +- td/telegram/cli.cpp | 109 +++++++++++++++++++++++++-------------- 3 files changed, 76 insertions(+), 45 deletions(-) diff --git a/td/telegram/DialogId.cpp b/td/telegram/DialogId.cpp index ca47bb113..0ccf068bc 100644 --- a/td/telegram/DialogId.cpp +++ b/td/telegram/DialogId.cpp @@ -61,16 +61,16 @@ ChatId DialogId::get_chat_id() const { return ChatId(static_cast(-id)); } -SecretChatId DialogId::get_secret_chat_id() const { - CHECK(get_type() == DialogType::SecretChat); - return SecretChatId(static_cast(id - ZERO_SECRET_ID)); -} - ChannelId DialogId::get_channel_id() const { CHECK(get_type() == DialogType::Channel); return ChannelId(static_cast(MAX_CHANNEL_ID - id)); } +SecretChatId DialogId::get_secret_chat_id() const { + CHECK(get_type() == DialogType::SecretChat); + return SecretChatId(static_cast(id - ZERO_SECRET_ID)); +} + DialogId::DialogId(UserId user_id) { if (user_id.is_valid()) { id = static_cast(user_id.get()); diff --git a/td/telegram/DialogId.h b/td/telegram/DialogId.h index f6d3ef43b..8fc1f5919 100644 --- a/td/telegram/DialogId.h +++ b/td/telegram/DialogId.h @@ -70,8 +70,8 @@ class DialogId { UserId get_user_id() const; ChatId get_chat_id() const; - SecretChatId get_secret_chat_id() const; ChannelId get_channel_id() const; + SecretChatId get_secret_chat_id() const; template void store(StorerT &storer) const { diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 81f5d25ae..a8f1f8194 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -485,6 +485,35 @@ class CliClient final : public Actor { return transform(full_split(user_ids, delimiter), [this](Slice str) { return as_user_id(str); }); } + int32 as_basic_group_id(Slice str) const { + str = trim(str); + auto result = to_integer(str); + if (result < 0) { + return -result; + } + return result; + } + + int32 as_supergroup_id(Slice str) const { + str = trim(str); + auto result = to_integer(str); + int64 shift = static_cast(-1000000000000ll); + if (result <= shift) { + return static_cast(shift - result); + } + return static_cast(result); + } + + int32 as_secret_chat_id(Slice str) const { + str = trim(str); + auto result = to_integer(str); + int64 shift = static_cast(-2000000000000ll); + if (result <= shift + std::numeric_limits::max()) { + return static_cast(result - shift); + } + return static_cast(result); + } + static int32 as_file_id(string str) { return to_integer(trim(std::move(str))); } @@ -1262,7 +1291,7 @@ class CliClient final : public Actor { string payload = query.get_arg("payload").str(); LOG(INFO) << "Callback URL:" << query.get_arg("callback_url"); send_request( - make_tl_object(to_integer(bot_id), scope, public_key, payload)); + make_tl_object(as_user_id(bot_id), scope, public_key, payload)); } else if (op == "gpaf") { string bot_id; string scope; @@ -1286,18 +1315,18 @@ class CliClient final : public Actor { std::tie(bot_id, args) = split(args); std::tie(scope, payload) = split(args); send_request( - make_tl_object(to_integer(bot_id), scope, public_key, payload)); + make_tl_object(as_user_id(bot_id), scope, public_key, payload)); } else if (op == "gpafae") { - string id; + string form_id; string password; - std::tie(id, password) = split(args); + std::tie(form_id, password) = split(args); send_request( - make_tl_object(to_integer(id), password)); + make_tl_object(to_integer(form_id), password)); } else if (op == "spaf") { - string id; + string form_id; string types; - std::tie(id, types) = split(args); - send_request(make_tl_object(to_integer(id), + std::tie(form_id, types) = split(args); + send_request(make_tl_object(to_integer(form_id), as_passport_element_types(types))); } else if (op == "gpcl") { send_request(make_tl_object(args)); @@ -1477,7 +1506,8 @@ class CliClient final : public Actor { if (args.empty()) { send_request(make_tl_object()); } else { - send_request(make_tl_object("", to_integer(args))); + auto limit = to_integer(args); + send_request(make_tl_object("", limit)); } } else if (op == "ImportContacts" || op == "cic") { vector contacts_str = full_split(args, ';'); @@ -1944,9 +1974,10 @@ class CliClient final : public Actor { } else if (op == "gtss") { send_request(make_tl_object()); } else if (op == "gatss") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_file_id(args))); } else if (op == "storage") { - send_request(make_tl_object(to_integer(args))); + auto chat_limit = to_integer(args); + send_request(make_tl_object(chat_limit)); } else if (op == "storage_fast") { send_request(make_tl_object()); } else if (op == "optimize_storage") { @@ -2083,15 +2114,15 @@ class CliClient final : public Actor { } else if (op == "guf") { send_request(make_tl_object(as_user_id(args))); } else if (op == "gbg") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_basic_group_id(args))); } else if (op == "gbgf") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_basic_group_id(args))); } else if (op == "gsg" || op == "gch") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_supergroup_id(args))); } else if (op == "gsgf" || op == "gchf") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_supergroup_id(args))); } else if (op == "gsc") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_secret_chat_id(args))); } else if (op == "scm") { string chat_id; string limit; @@ -2123,7 +2154,7 @@ class CliClient final : public Actor { limit = "10"; } send_request(make_tl_object( - to_integer(supergroup_id), make_tl_object(), + as_supergroup_id(supergroup_id), make_tl_object(), to_integer(offset), to_integer(limit))); } else if (op == "GetChatAdministrators") { string chat_id = args; @@ -2144,7 +2175,7 @@ class CliClient final : public Actor { limit = "10"; } send_request(make_tl_object( - to_integer(supergroup_id), make_tl_object(query), + as_supergroup_id(supergroup_id), make_tl_object(query), to_integer(offset), to_integer(limit))); } else if (op == "GetSupergroupBots") { string supergroup_id; @@ -2159,7 +2190,7 @@ class CliClient final : public Actor { if (limit.empty()) { limit = "10"; } - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), make_tl_object(), to_integer(offset), to_integer(limit))); } else if (op == "GetSupergroupMembers") { @@ -2175,7 +2206,7 @@ class CliClient final : public Actor { if (limit.empty()) { limit = "10"; } - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), make_tl_object(), to_integer(offset), to_integer(limit))); } else if (op == "SearchSupergroupMembers") { @@ -2194,7 +2225,7 @@ class CliClient final : public Actor { limit = "10"; } send_request(make_tl_object( - to_integer(supergroup_id), make_tl_object(query), + as_supergroup_id(supergroup_id), make_tl_object(query), to_integer(offset), to_integer(limit))); } else if (op == "GetSupergroupRestricted") { string supergroup_id; @@ -2212,7 +2243,7 @@ class CliClient final : public Actor { limit = "10"; } send_request(make_tl_object( - to_integer(supergroup_id), make_tl_object(query), + as_supergroup_id(supergroup_id), make_tl_object(query), to_integer(offset), to_integer(limit))); } else if (op == "gdialog" || op == "gd") { send_request(make_tl_object(as_chat_id(args))); @@ -2354,7 +2385,7 @@ class CliClient final : public Actor { send_request(make_tl_object(chat, as_chat_id(from_chat_id), as_message_ids(message_ids), false, false, op == "fmg")); } else if (op == "csc" || op == "CreateSecretChat") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_secret_chat_id(args))); } else if (op == "cnsc" || op == "CreateNewSecretChat") { send_request(make_tl_object(as_user_id(args))); } else if (op == "scstn") { @@ -2366,7 +2397,7 @@ class CliClient final : public Actor { send_request(make_tl_object(as_chat_id(chat_id), to_integer(ttl))); } else if (op == "closeSC" || op == "cancelSC") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_secret_chat_id(args))); } else if (op == "cc" || op == "CreateCall") { send_request(make_tl_object(as_user_id(args), make_tl_object(true, true, 65, 65))); @@ -3061,7 +3092,7 @@ class CliClient final : public Actor { } else if (op == "UpgradeBasicGroupChatToSupergroupChat") { send_request(make_tl_object(as_chat_id(args))); } else if (op == "DeleteSupergroup") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_supergroup_id(args))); } else if (op == "gcpc") { send_request(make_tl_object()); } else if (op == "cpc") { @@ -3075,13 +3106,13 @@ class CliClient final : public Actor { string force; std::tie(basic_group_id, force) = split(args); - send_request(make_tl_object(to_integer(basic_group_id), as_bool(force))); + send_request(make_tl_object(as_basic_group_id(basic_group_id), as_bool(force))); } else if (op == "csgc" || op == "cchc") { string supergroup_id; string force; std::tie(supergroup_id, force) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), as_bool(force))); + send_request(make_tl_object(as_supergroup_id(supergroup_id), as_bool(force))); } else if (op == "sct") { string chat_id; string title; @@ -3203,7 +3234,7 @@ class CliClient final : public Actor { string everyone_is_administrator; std::tie(group_id, everyone_is_administrator) = split(args); - send_request(make_tl_object(to_integer(group_id), + send_request(make_tl_object(as_basic_group_id(group_id), as_bool(everyone_is_administrator))); } else if (op == "ccun") { string chat_id; @@ -3216,57 +3247,57 @@ class CliClient final : public Actor { string username; std::tie(supergroup_id, username) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), username)); + send_request(make_tl_object(as_supergroup_id(supergroup_id), username)); } else if (op == "ssgss") { string supergroup_id; string sticker_set_id; std::tie(supergroup_id, sticker_set_id) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), to_integer(sticker_set_id))); } else if (op == "tsgi") { string supergroup_id; string anyone_can_invite; std::tie(supergroup_id, anyone_can_invite) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), - as_bool(anyone_can_invite))); + send_request( + make_tl_object(as_supergroup_id(supergroup_id), as_bool(anyone_can_invite))); } else if (op == "tsgp") { string supergroup_id; string is_all_history_available; std::tie(supergroup_id, is_all_history_available) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), as_bool(is_all_history_available))); } else if (op == "tsgsm") { string supergroup_id; string sign_messages; std::tie(supergroup_id, sign_messages) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), as_bool(sign_messages))); } else if (op == "csgd" || op == "cchd") { string supergroup_id; string description; std::tie(supergroup_id, description) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), description)); + send_request(make_tl_object(as_supergroup_id(supergroup_id), description)); } else if (op == "psgm" || op == "pchm") { string supergroup_id; string message_id; std::tie(supergroup_id, message_id) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), as_message_id(message_id), false)); } else if (op == "psgms" || op == "pchms") { string supergroup_id; string message_id; std::tie(supergroup_id, message_id) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), as_message_id(message_id), true)); } else if (op == "upsgm" || op == "upchm") { - send_request(make_tl_object(to_integer(args))); + send_request(make_tl_object(as_supergroup_id(args))); } else if (op == "grib") { send_request(make_tl_object()); } else if (op == "spc" || op == "su" || op == "sch") { @@ -3422,7 +3453,7 @@ class CliClient final : public Actor { std::tie(supergroup_id, args) = split(args); std::tie(user_id, message_ids) = split(args); - send_request(make_tl_object(to_integer(supergroup_id), as_user_id(user_id), + send_request(make_tl_object(as_supergroup_id(supergroup_id), as_user_id(user_id), as_message_ids(message_ids))); } else if (op == "gdiff") { send_request(make_tl_object());