C#开发内置机器人如何实现用户输入用户名后返回对应查询结果
C# Telegram 内联查询机器人实现方案
你当前的BotOnInlineQuery方法本身就是处理用户@机器人+查询内容请求的入口,直接在这个方法内按如下步骤修改即可:
1. 获取用户输入的查询内容
方法触发时,用户输入的查询文本存储在e.InlineQuery.Query属性中,在方法开头先获取该值,再插入对应的查询逻辑即可,修改后的参考代码如下:
private async static Task BotOnInlineQuery(object sender, InlineQueryEventArgs e) { // 第一步:获取用户输入的查询内容,去除前后空格 string searchKeyword = e.InlineQuery.Query?.Trim() ?? string.Empty; List<InlineQueryResultBase> resultList = new List<InlineQueryResultBase>(); // 第二步:这里插入你的查询逻辑 // 可根据searchKeyword去你的本地数据库、业务接口查询对应结果 if (!string.IsNullOrEmpty(searchKeyword)) { // 示例逻辑:查询内容含"山"就返回对应风景资源,可自行扩展其他关键词的处理逻辑 if (searchKeyword.Contains("山")) { resultList.Add(new InlineQueryResultGif( id: Guid.NewGuid().ToString(), // 每个结果的唯一ID gifUrl: "https://sticker-collection.com/Peepo_Pepe", thumbUrl: "https://na-dache.pro/uploads/posts/2021-05/1620620302_8-p-domik-v-gorakh-foto-10.jpg") { // 可选:绑定查询结果的说明文本,实现查询内容和返回结果的关联展示 Caption = $"你查询的「{searchKeyword}」对应的山景资源" }); } } else { // 可选:用户未输入内容时返回默认热门结果 } // 第三步:返回最终查询结果给用户 await client.AnswerInlineQueryAsync( inlineQueryId: e.InlineQuery.Id, results: resultList, nextOffset: "a", isPersonal: true); }
2. 关键说明
- 查询内容和结果的绑定:只需要把查询得到的资源地址、描述等信息,填入对应的
InlineQueryResult子类的构造参数和属性即可,Telegram客户端会自动展示给发起查询的用户 - 原代码问题修正:
async void改成async Task避免异常无法捕获,原AnswerInlineQueryAsync调用缺少右闭合括号 - 如果查询逻辑涉及网络请求或数据库查询,建议加超时处理,避免Telegram端请求超时无响应
内容的提问来源于stack exchange,提问作者qabs
相关产品推荐
相关产品推荐

