首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TDLib:如何在消息中发送粗体文本?(С++)

TDLib:如何在消息中发送粗体文本?(С++)
EN

Stack Overflow用户
提问于 2020-05-03 19:27:13
回答 1查看 954关注 0票数 8

使用正式的TDLib C++示例,我试图发送一条带有格式化标记文本的消息。

这是我的密码:

代码语言:javascript
复制
auto send_message = td_api::make_object<td_api::sendMessage>();
send_message->chat_id_ = -1001424068198;
auto message_content = td_api::make_object<td_api::inputMessageText>();

std::string text = "Hello! **how are u?**";
message_content->text_ = td_api::make_object<td_api::formattedText>();     
message_content->text_->text_ = std::move(text);      
send_message->input_message_content_ = std::move(message_content);
send_query(std::move(send_message), {});

我希望看到“你好!你好u?”,但这条消息是在代码中编写的,没有应用标记格式。

我花了几个小时在谷歌上,试图弄清楚如何迫使TDLib解析它。

更新:解决了!

谢谢Azeem的帮助!

使用此示例,以下代码应发送已解析的消息(在VS 2019年中测试)

代码语言:javascript
复制
void sendMsg(INT64 chatID, INT64 ReplyTo, const char* textMsg) {
const std::string text = textMsg;
auto textParseMarkdown = td_api::make_object<td_api::textParseModeMarkdown>(2);
auto parseTextEntities = td_api::make_object<td_api::parseTextEntities>(text, std::move(textParseMarkdown));
td::Client::Request parseRequest{ 123, std::move(parseTextEntities) };
auto parseResponse = td::Client::execute(std::move(parseRequest));

if (parseResponse.object->get_id()  == td_api::formattedText::ID) {
    auto formattedText = td_api::make_object<td_api::formattedText>();
    formattedText = td_api::move_object_as<td_api::formattedText>(parseResponse.object);

    auto send_message = td_api::make_object<td_api::sendMessage>();
    send_message->chat_id_ = chatID;
    auto message_content = td_api::make_object<td_api::inputMessageText>();

    message_content->text_ = std::move(formattedText);
    send_message->input_message_content_ = std::move(message_content);
    send_message->reply_to_message_id_ = ReplyTo;
    send_query(std::move(send_message), {});
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-08 16:34:11

您可以这样使用td_api::textParseModeMarkdowntd_api::parseTextEntitiestd::Client::execute()

代码语言:javascript
复制
using namespace td;

const std::string text = "*bold* _italic_ `code`";

auto textParseMarkdown = td_api::make_object<td_api::textParseModeMarkdown>( 2 );
auto parseTextEntities = td_api::make_object<td_api::parseTextEntities>( text, std::move( textParseMarkdown ) );

td::Client::Request parseRequest { 123, std::move( parseTextEntities ) };
auto parseResponse = td::Client::execute( std::move( parseRequest ) );

auto formattedText = td_api::make_object<td_api::formattedText>();

if ( parseResponse.object->get_id() == td_api::formattedText::ID )
{
    formattedText = td_api::move_object_as<td_api::formattedText>( parseResponse.object );
}
else
{
    std::vector<td_api::object_ptr<td_api::textEntity>> entities;
    formattedText = td_api::make_object<td_api::formattedText>( text, std::move(entities) );
}

std::cout << td_api::to_string( formattedText ) << '\n';

为了调试目的,可以使用td_api::to_string()转储对象的内容。例如,像这样转储parseTextEntities

代码语言:javascript
复制
std::cout << td_api::to_string( parseTextEntities ) << '\n';

会给出如下内容:

代码语言:javascript
复制
parseTextEntities {
  text = "*bold* _italic_ `code`"
  parse_mode = textParseModeMarkdown {
    version = 2
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61580418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档