简介

Telegram(非正式简称TG、电报)是跨平台的即时通信软件,其客户端是自由及开放源代码软件,但服务端是专有软件。用户可以相互交换加密与自毁消息,发送照片、视频等所有类型文件。官方提供手机版(Android、iOS、Windows Phone)、桌面版(Windows、macOS、Linux)和网页版[8]等多种平台客户端;同时官方开放应用程序接口(API),因此拥有许多第三方的客户端可供选择。2022年6月,Telegram推出了付费的Telegram Premium,标价4.99美元每月。订阅Telegram Premium后可以使用高级贴纸,频道中不会显示赞助广告,最多加入频道数量相较未订阅数量翻倍,更快的下载速度等额外功能。维基百科

Telegram 机器人

在2015年6月,Telegram开放了机器人API,更在2017年5月支持了付款功能。机器人是Telegram上以程序运作的账号,可以回复人类的指令、消息,视开发者设置而异。另一种功能称为内联机器人,支持快速发送相关的GIF动图、图片,其来自网络、YouTube视频、维基百科的文章,等等。维基百科

电报机器人的功能非常强大,它几乎可以实现你想做的任何事情。开发者社区提供了多种机器人开发类库/框架,包括但不限于Python,Java,Go,Rust等。详情

本教程使用 .NET7.0

机器人申请

开发电报机器人首先要通过 @BotFather 申请一个机器人,按 @BotFather 的提示操作即可。网上也有很多机器人申请教程,可以自行搜索。申请后会有一个类似:1234567:4TT8bAc8GHUspu3ERYn-KGcvsvGB9u_n4ddy的 Token 要保存好,拥有这个 Token 就意味着拥有操作这个机器人的权限。注意,申请机器人的时会要求输入机器人的usernameusername必须以bot结尾,然后根据这个username可以搜索到我们创建的机器人。

创建项目

使用 vs2022 创建一个 ASP.NET CORE Web API 项目,选择.NET 7.0 框架。添加 NuGet 包:Install-Package Telegram.Bot

创建一个实现了 IHostedService 接口的类 TgBotHost,代码如下:

点击查看代码
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums; namespace TgBotDemo; public class TgBotHost : IHostedService
{
public async Task StartAsync(CancellationToken cancellationToken)
{
var botClient = new TelegramBotClient("5430277375:AAGjk_oaoXCA755V018K******"); // 使用申请的 Token 创建机器人
var receiverOptions = new ReceiverOptions
{
AllowedUpdates = Array.Empty<UpdateType>() // receive all update types
};
botClient.StartReceiving(
updateHandler: HandleUpdateAsync,
pollingErrorHandler: HandlePollingErrorAsync,
receiverOptions: receiverOptions
);
} public Task StopAsync(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
/// <summary>
/// 消息处理方法
/// </summary>
/// <param name="botClient"></param>
/// <param name="update"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
// 消息的类型有多种,最常见的是文本型 UpdateType.Message
switch (update.Type)
{
case UpdateType.Unknown:
break;
case UpdateType.Message:
Console.WriteLine(update.Message.Text); // 将受到的文本消息输出到控制台
// 将收到的文本消息,发送至对话框
await botClient.SendTextMessageAsync(
chatId: update.Message.Chat.Id,
text: $"_您输入的文本是:{update.Message.Text}_",
parseMode: ParseMode.MarkdownV2);
break;
case UpdateType.InlineQuery:
break;
case UpdateType.ChosenInlineResult:
break;
case UpdateType.CallbackQuery:
break;
case UpdateType.EditedMessage:
break;
case UpdateType.ChannelPost:
break;
case UpdateType.EditedChannelPost:
break;
case UpdateType.ShippingQuery:
break;
case UpdateType.PreCheckoutQuery:
break;
case UpdateType.Poll:
break;
case UpdateType.PollAnswer:
break;
case UpdateType.MyChatMember:
break;
case UpdateType.ChatMember:
break;
case UpdateType.ChatJoinRequest:
break;
default:
break;
}
} /// <summary>
/// 异常处理方法
/// </summary>
/// <param name="botClient"></param>
/// <param name="exception"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task HandlePollingErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
var ErrorMessage = exception switch
{
ApiRequestException apiRequestException
=> $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
_ => exception.ToString()
};
Console.WriteLine(ErrorMessage);
return Task.CompletedTask;
}
}

然后将TgBotHost添加到服务当中,Program.cs 的代码如下:

点击查看代码

namespace TgBotDemo; public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHostedService<TgBotHost>(); var app = builder.Build();
app.Run();
}
}

打开launchsettings.json文件,将所有launchBrowser节点的值改为false,这样可以避免程序启动时运行浏览器。

接下来,运行程序。当前机器人的功能是,根据输入的文本内容,返回相应的文本。根据之前申请机器人时输入的username搜索到机器人,然后向机器人发送消息,结果如下图所示:

至此,我们的机器人demo开发完成。

基于 .NET7.0 开发Telegram 机器人(入门)的更多相关文章

  1. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  2. vue-swiper 基于Vue2.0开发 轻量、高性能轮播插件

    vue-swiper 基于 Vue2.0 开发,基本满足大部分功能 轻量.高性能轮播插件.目前支持 无缝衔接自动轮播.无限轮播.手势轮播 没有引入第三方库,原生 js 封装,打包之后只有 8.2KB ...

  3. 基于Cordova5.0开发自己定义插件(android)

    1.开发插件java部分 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhmMjE2MjE2/font/5a6L5L2T/fontsize/400/fi ...

  4. vue2.0 开发实践总结之入门篇

    vue2.0 据说也出了很久了,博主终于操了一次实刀. 整体项目采用  vue +  vue-router +  vuex (传说中的vue 全家桶 ),构建工具使用尤大大推出的vue-cli 后续文 ...

  5. Centos7.2下Nginx配置SSL支持https访问(站点是基于.Net Core2.0开发的WebApi)

    准备工作 1.基于nginx部署好的站点(本文站点是基于.Net Core2.0开发的WebApi,有兴趣的同学可以跳http://www.cnblogs.com/GreedyL/p/7422796. ...

  6. vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件

    vue-calendar-component 基于 vue 2.0 开发的轻量,高性能日历组件 占用内存小,性能好,样式好看,可扩展性强 原生 js 开发,没引入第三方库 Why Github 上很多 ...

  7. 基于ASP.NET 4.0开发的微商城系统OdnShop,开源发布

    基于ASP.NET 4.0开发的开源微商城系统,我们的目标是构建一个核心完善而又轻量级的微商城平台,目前基本的核心功能,包括微信登陆/支付,产品管理,购物车与订单管理等,轻量级是为了更加便于理解源码和 ...

  8. 【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等

    [推荐图书]+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等 3赞 发表于 2016/7/4 21:14:12 阅读(1921) 评论(3) 初次接触FPGA,到 ...

  9. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  10. 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx

    LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...

随机推荐

  1. 一次 Redis 事务使用不当引发的生产事故

    这是悟空的第 170 篇原创文章 官网:http://www.passjava.cn 你好,我是悟空. 本文主要内容如下: 一.前言 最近项目的生产环境遇到一个奇怪的问题: 现象:每天早上客服人员在后 ...

  2. 2.httprunner-yaml用例结构

    前言: httprunner3.x版本弱化了api层的概念 直接在testcase中写request请求 如果是单个请求,也可以直接写成一个testcase 每个testcase必须具有两个类属性:c ...

  3. ThreadPoolExecutor BlockingQueue讲解

    有四种常用阻塞队列策略: 1.直接拒绝:(Direct Handoffs) 一个好的工作队列应该是不缓存任务,而是直接交给线程处理,就如SynchronousQueue一样.一个任务将会入队失败,如果 ...

  4. 如何使用vscode快速配置C语言环境(简单实用)

    需要用到的工具: VSCode(Visual Studio Code) 一.首先打开官网链接,然后根据自己的电脑选择合适的安装程序进行下载. 二.在安装时默认点击下一步,最后记得勾选上添加path到系 ...

  5. 洛谷 P3201 梦幻布丁 题解

    (这篇题解可能没什么营养,主要是记录一下我用map乱搞启发式合并的神奇做法) 首先我们知道,我们肯定要用一堆集合维护每一种数当前的位置,并支持合并和数连续出现的段数两种操作 我发现这个东西并不好搞,但 ...

  6. CodeQL(1)

    前言 开始学习使用CodeQL,做一些笔记,可供参考的资料还是比较少的,一个是官方文档,但是Google翻译过来,总觉得怪怪的,另一个就是别人的一个资源整合,其中可供参考的也不是很多,大多也是官方文档 ...

  7. .NET跨平台框架选择之一 - Avalonia UI

    本文阅读目录 1. Avalonia UI简介 Avalonia UI文档教程:https://docs.avaloniaui.net/docs/getting-started 随着跨平台越来越流行, ...

  8. C++ using 编译指令与名称冲突

    using 编译指令:它由名称空间名和它前面的关键字 using namespace 组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符.在全局声明区域中使用 using 编译指令,将 ...

  9. 对于函数极限存在的充要条件“lim f(x)=A互推f(x)=A+a(x) lim a(x)=0”补充解释

    毫无疑问,这个定义适用于任何函数极限,诺f(x)有去间断点的时候,a(x)也为可去间断点函数. 例:

  10. Java网络编程:Socket 通信

    client----发送数据(输出流)------------(输入)-[管道流处理数据]-(输出)------接收数据(输入流)------server URL:协议+IP+端口+资源位置 客户端: ...